コンテンツにスキップ

ダメージモデル

状態: 設計中・数値未調整

関連: 戦闘システム / スキルコア / ストリームモデル / 属性と状態反応 / 実行モデル

このページは、攻撃が持つDamageから対象の体力を減らす最終ダメージを求める規則を定義する。弾道、衝突、状態の重複方法は個別仕様で扱う。

Damageはストリーム全体の合計値ではなく、生成された実体一つが一回の判定で与える値である。表示とログでは、計算前の値をDamage、対象へ適用した整数値を最終ダメージと呼ぶ。

分類 対象となる効果 Armor クリティカル
Hit Projectile、即時Area、周期Areaの各脈動 適用 可能
DamageOverTime 炎上など、付与済み状態が周期的に与えるダメージ 無視 不可
Reaction 熱衝撃、共鳴、放電などの属性反応 無視 不可

持続するAreaの各脈動はHitであり、DamageOverTimeではない。Fire、IceなどのElementは分類とは別に保持する。Fire属性のHitは、属性だけを理由にArmorを無視しない。

  • Countは同じ定義から生成する実体数であり、Damageを自動分配しない。
  • 独立分岐は別ストリームを生成し、Damageを自動分配しない。
  • 複数の実体が同じ対象へ命中した場合は、それぞれダメージを与える。
  • 一つのProjectileは、特記がなければ同じ対象へ生存中に一度だけHitする。
  • 一つのAreaは、発生時または一回の脈動につき同じ対象へ一度だけHitする。
  • 別のAreaが重なった場合は、それぞれ独立してHitする。

Damage 20、Count 3のProjectileがすべて同じ敵へ命中した場合、Armor適用前の合計は60となる。個数増加による総火力は、追加マナ、伝播強度、拡散、発動間隔で調整する。

攻撃側の値は次の順序で計算する。

  1. 基礎Damageへ固定値補正を加える。
  2. Damage +N%形式の加算補正を合計して掛ける。
  3. Damage ×N形式の個別倍率を一つずつ掛ける。
  4. 成立している条件付き倍率を掛ける。
  5. Hitがクリティカルした場合、クリティカル倍率を掛ける。
AttackDamage
= (BaseDamage + FlatDamage)
× (1 + Sum(IncreasedDamage))
× Product(IndividualMultiplier)
× Product(ConditionalMultiplier)
× CriticalMultiplierIfCritical

計算途中では小数を保持する。加算補正と個別倍率を同じ表記にせず、オーグメント、パッシブ、状態効果の説明から計算種別を判別できるようにする。

プレイヤーが発生させるHitは、特記がなければ次の基礎値を使う。

項目 基礎値
クリティカル率 5%
クリティカル倍率 150%
クリティカル率上限 100%
  • クリティカル率への+N%は倍率ではなくパーセントポイント加算として扱う。
  • クリティカル倍率への+N%は150%へ加算する。
  • Projectileは実体ごと、命中した対象ごとに判定する。
  • Areaは各脈動で対象ごとに判定する。
  • 独立分岐したHitも個別に判定する。
  • DamageOverTimeとReactionは、クリティカル率を継承していても判定しない。
  • 敵の攻撃はランダムクリティカルを行わない。高威力攻撃は攻撃予兆によって示す。

構築画面のスキル詳細には、通常ダメージ、クリティカル率、クリティカル倍率を表示する。クリティカル込みの平均値はバランス検証に使い、プレイヤー向けの基本項目には含めない。

対象側はArmorとダメージ軽減率を別々に持つ。

防御 効果
Armor Hit一回ごとに固定値を減らす
ダメージ軽減率 Armor判定後のダメージを割合で減らす
被ダメージ倍率 弱点、状態、攻撃条件によって最終段階で増減する

クリティカルしたHitはArmorを無視するが、ダメージ軽減率と被ダメージ倍率は無視しない。DamageOverTimeとReactionもArmorを無視し、残り二つの補正を受ける。

通常の効果だけでダメージ軽減率を100%以上にはできない。完全無敵はダメージ軽減率ではなく、ダメージ判定を成立させない状態として扱う。

Hitでは、クリティカルの有無によって適用するArmorを決める。

AppliedArmor =
IsCritical ? 0 : TargetArmor
FinalDamage = max(1, floor(
max(0, AttackDamage - AppliedArmor)
× (1 - DamageReductionRate)
× DamageTakenMultiplier
))

DamageOverTimeとReactionではAppliedArmor = 0とする。無敵、無効な対象、すでに死亡している対象には式を適用せず、ダメージを発生させない。

基礎Damage 20、Armor 5、ダメージ軽減率20%、被ダメージ倍率1.0の場合:

結果 計算 最終ダメージ
通常Hit (20 − 5) × 0.8 12
クリティカルHit 20 × 1.5 × 0.8 24
通常Hit 3発 12 × 3 36
1発だけクリティカルした3発 24 + 12 + 12 48

基礎Damage 20、固定値+5、加算補正+20%と+30%、個別倍率0.75、クリティカル倍率150%、Armor 5、被ダメージ倍率1.2の場合:

(20 + 5) × (1 + 0.2 + 0.3) × 0.75 = 28.125
28.125 × 1.5 = 42.1875
42.1875 × 1.2 = 50.625
最終ダメージ = 50

クリティカルしているため、この例ではArmor 5を適用しない。

プレイヤーもArmorとダメージ軽減率を使う。敵のHit、DamageOverTime、環境ダメージは、各攻撃に指定された分類で同じ防御順序を適用する。

  • 回避中または被弾後無敵中はダメージ判定を成立させない。
  • 敵との接触だけではHitを発生させない。
  • 最終ダメージが1以上なら被弾として扱い、被弾後無敵を開始する。
  • 敵のランダムクリティカルは使用しない。

各ダメージ判定は、結果から盤面上の原因まで追跡できる情報を持つ。

フィールド 内容
SourceCastId 手動発動と全派生の識別子
SourceStreamId ダメージへ到達した独立ストリーム
SourceEntityId Hitまたは状態を発生させた戦闘実体
DamageKind Hit、DamageOverTime、Reaction
Element ダメージが持つ属性
IsCritical クリティカルしたか
DamageBeforeDefense 対象側防御を適用する前の値
FinalDamage 対象の体力へ適用した整数値
  • Hitは命中したProjectileまたはAreaを発生元とする。
  • DamageOverTimeは状態を最後に付与または更新した攻撃の発生元を引き継ぐ。
  • Reactionは反応を発生させた新しい攻撃を主な発生元とし、消費した状態の発生元も補助情報として残す。
  • クリティカルは一つのダメージ結果であり、別の発生元にはしない。
  • 体力を0にした一つのダメージ判定だけがKillを発生させる。
  • Hit、DamageOverTime、Reactionのいずれによる撃破でもKillを発生できる。

Killを受け取るイベント経路は、主な発生元のCastIdとStreamIdを使って盤面評価を再開する。