Combat Mechanics
シールドブロックとダメージ吸収
シールドブロック、ブロック回復、ダメージ吸収ソースの計算式と計算結果を解説します。
通常解説
シールドブロックは、シールドが使用可能で近接または投射物の攻撃が命中したときだけ判定されます。成功時はブロック量とブロック吸収率で各ダメージ成分を減らします。ダメージ吸収は防御処理の後段で、同じソース内では割合吸収が先、固定吸収が後に適用されます。
ディープ解説
以下は、シールドに表示されたブロック値と有効な防御補正を使う 1.3.0.6 の式です。ブロック回復は成功したブロックの後にだけ始まります。ダメージ吸収ソースは実行時の順番を保持するため、すべての割合値・固定値を一つの値にまとめません。
シールドブロックの式
ブロック率 = clamp(shieldChance + blockModifier, 0, 100)
ブロック量 = shieldBlock * (1 + blockAmountModifier / 100)
回復時間 = max(0, trunc(trunc(shieldRecoverySeconds * 1000) * (1 - recoveryReduction / 100))) ms
ブロック成功時の残ダメージ = damage - min(damage, blockAmount) * blockAbsorption / 100
ダメージ吸収の式
通常の SkillBuff ソースは割合値と固定値を持ちます。有限のシールドは、被弾のたびに残っている固定吸収プールも追跡します。
通常ソース: remaining = max(0, damage * (1 - percent / 100) - flat)
有限の追加シールド: afterPercent = damage * (1 - percent / 100); poolAbsorbed = min(remainingPool, afterPercent); remainingPool -= poolAbsorbed
有限の破壊時シールドは、プールを使い切る被弾にも設定された固定値を適用してから無効化されます。ダメージ種別の指定により、ソースの対象が制限される場合があります。
計算結果
| ケース | 条件 | 計算 | 結果 |
|---|---|---|---|
| ブロック率 | shieldChance=32%, blockModifier=8% |
clamp(32 + 8, 0, 100)
|
40% |
| ブロック量 | shieldBlock=120, blockAmountModifier=25% |
120 * (1 + 25 / 100)
|
150 |
| ブロック回復 | shieldRecovery=0.6 秒, recoveryReduction=25% |
trunc(600 * (1 - 25 / 100))
|
450 ms |
| ブロック成功時 | damage=200, blockAmount=150, blockAbsorption=80% |
200 - min(200, 150) * 0.80
|
残ダメージ 80 |
| 通常のダメージ吸収 | damage=200, percent=20%, flat=15 |
max(0, 200 * 0.80 - 15)
|
残ダメージ 145 |
| 有限の追加シールド | damage=200, percent=20%, remainingPool=100 |
afterPercent=160; min(100, 160)
|
残ダメージ 60、プール 0 |
解析ソース: buildCalc/mechanics/formulas.json(Game.dll 1.3.0.6、DBR 1.3.0.6 FoA)。ここでの例は式に条件を代入した計算結果であり、ゲーム内実測はまだ掲載していません。
要約
結論: 単発の大きな被弾にはブロック量とブロック吸収率が効きます。ブロック回復時間短縮が効くのは、シールドが再び使用可能になる前に次の被弾が来る場合で、すでに成功したブロックの軽減量は増えません。