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)。ここでの例は式に条件を代入した計算結果であり、ゲーム内実測はまだ掲載していません。

要約

結論: 単発の大きな被弾にはブロック量とブロック吸収率が効きます。ブロック回復時間短縮が効くのは、シールドが再び使用可能になる前に次の被弾が来る場合で、すでに成功したブロックの軽減量は増えません。