ダメージモデル
状態: 設計中・数値未調整
関連: 戦闘システム / スキルコア / ストリームモデル / 属性と状態反応 / 実行モデル
このページは、攻撃が持つDamageから対象の体力を減らす最終ダメージを求める規則を定義する。弾道、衝突、状態の重複方法は個別仕様で扱う。
Damageはストリーム全体の合計値ではなく、生成された実体一つが一回の判定で与える値である。表示とログでは、計算前の値をDamage、対象へ適用した整数値を最終ダメージと呼ぶ。
ダメージの分類
Section titled “ダメージの分類”| 分類 | 対象となる効果 | Armor | クリティカル |
|---|---|---|---|
| Hit | Projectile、即時Area、周期Areaの各脈動 | 適用 | 可能 |
| DamageOverTime | 炎上など、付与済み状態が周期的に与えるダメージ | 無視 | 不可 |
| Reaction | 熱衝撃、共鳴、放電などの属性反応 | 無視 | 不可 |
持続するAreaの各脈動はHitであり、DamageOverTimeではない。Fire、IceなどのElementは分類とは別に保持する。Fire属性のHitは、属性だけを理由にArmorを無視しない。
実体数とDamage
Section titled “実体数とDamage”- Countは同じ定義から生成する実体数であり、Damageを自動分配しない。
- 独立分岐は別ストリームを生成し、Damageを自動分配しない。
- 複数の実体が同じ対象へ命中した場合は、それぞれダメージを与える。
- 一つのProjectileは、特記がなければ同じ対象へ生存中に一度だけHitする。
- 一つのAreaは、発生時または一回の脈動につき同じ対象へ一度だけHitする。
- 別のAreaが重なった場合は、それぞれ独立してHitする。
Damage 20、Count 3のProjectileがすべて同じ敵へ命中した場合、Armor適用前の合計は60となる。個数増加による総火力は、追加マナ、伝播強度、拡散、発動間隔で調整する。
攻撃側の補正
Section titled “攻撃側の補正”攻撃側の値は次の順序で計算する。
- 基礎Damageへ固定値補正を加える。
Damage +N%形式の加算補正を合計して掛ける。Damage ×N形式の個別倍率を一つずつ掛ける。- 成立している条件付き倍率を掛ける。
- Hitがクリティカルした場合、クリティカル倍率を掛ける。
AttackDamage = (BaseDamage + FlatDamage) × (1 + Sum(IncreasedDamage)) × Product(IndividualMultiplier) × Product(ConditionalMultiplier) × CriticalMultiplierIfCritical計算途中では小数を保持する。加算補正と個別倍率を同じ表記にせず、オーグメント、パッシブ、状態効果の説明から計算種別を判別できるようにする。
クリティカル
Section titled “クリティカル”プレイヤーが発生させるHitは、特記がなければ次の基礎値を使う。
| 項目 | 基礎値 |
|---|---|
| クリティカル率 | 5% |
| クリティカル倍率 | 150% |
| クリティカル率上限 | 100% |
- クリティカル率への
+N%は倍率ではなくパーセントポイント加算として扱う。 - クリティカル倍率への
+N%は150%へ加算する。 - Projectileは実体ごと、命中した対象ごとに判定する。
- Areaは各脈動で対象ごとに判定する。
- 独立分岐したHitも個別に判定する。
- DamageOverTimeとReactionは、クリティカル率を継承していても判定しない。
- 敵の攻撃はランダムクリティカルを行わない。高威力攻撃は攻撃予兆によって示す。
構築画面のスキル詳細には、通常ダメージ、クリティカル率、クリティカル倍率を表示する。クリティカル込みの平均値はバランス検証に使い、プレイヤー向けの基本項目には含めない。
対象側の防御
Section titled “対象側の防御”対象側は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.12528.125 × 1.5 = 42.187542.1875 × 1.2 = 50.625最終ダメージ = 50クリティカルしているため、この例ではArmor 5を適用しない。
プレイヤーへのダメージ
Section titled “プレイヤーへのダメージ”プレイヤーもArmorとダメージ軽減率を使う。敵のHit、DamageOverTime、環境ダメージは、各攻撃に指定された分類で同じ防御順序を適用する。
- 回避中または被弾後無敵中はダメージ判定を成立させない。
- 敵との接触だけではHitを発生させない。
- 最終ダメージが1以上なら被弾として扱い、被弾後無敵を開始する。
- 敵のランダムクリティカルは使用しない。
発生元と撃破帰属
Section titled “発生元と撃破帰属”各ダメージ判定は、結果から盤面上の原因まで追跡できる情報を持つ。
| フィールド | 内容 |
|---|---|
| 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を使って盤面評価を再開する。