Combat Mechanics
Shield Block and Damage Absorption
Formulas and calculated examples for shield blocks, block recovery, and damage-absorption sources.
Standard explanation
A shield block is checked only while the shield is ready and a melee or projectile hit lands. On a successful block, its amount and block absorption reduce each damage component. Damage absorption then applies later in the defensive order: percent first, then flat within each active source.
Deep explanation
The following 1.3.0.6 formulas use the shield's displayed block values and active defensive modifiers. Block recovery begins only after a successful block. Damage-absorption sources retain their individual runtime order; their percentages and flat values are not merged into one global value.
Shield block formulas
Block chance = clamp(shieldChance + blockModifier, 0, 100)
Block amount = shieldBlock * (1 + blockAmountModifier / 100)
Recovery = max(0, trunc(trunc(shieldRecoverySeconds * 1000) * (1 - recoveryReduction / 100))) ms
Remaining component damage = damage - min(damage, blockAmount) * blockAbsorption / 100
Damage absorption formulas
An ordinary SkillBuff source has both a percentage and a flat value. Finite shields also track their remaining flat pool after each hit.
Ordinary source: remaining = max(0, damage * (1 - percent / 100) - flat)
Finite additional shield: afterPercent = damage * (1 - percent / 100); poolAbsorbed = min(remainingPool, afterPercent); remainingPool -= poolAbsorbed
A finite breaking-hit shield uses its configured flat value on the hit that exhausts the pool, then deactivates. Damage qualifiers can limit a source to listed damage groups.
Calculated results
| Case | Conditions | Calculation | Result |
|---|---|---|---|
| Block chance | shieldChance=32%, blockModifier=8% |
clamp(32 + 8, 0, 100)
|
40% |
| Block amount | shieldBlock=120, blockAmountModifier=25% |
120 * (1 + 25 / 100)
|
150 |
| Block recovery | shieldRecovery=0.6 s, recoveryReduction=25% |
trunc(600 * (1 - 25 / 100))
|
450 ms |
| Successful block | damage=200, blockAmount=150, blockAbsorption=80% |
200 - min(200, 150) * 0.80
|
80 damage remains |
| Ordinary absorption | damage=200, percent=20%, flat=15 |
max(0, 200 * 0.80 - 15)
|
145 damage remains |
| Finite additional shield | damage=200, percent=20%, remainingPool=100 |
afterPercent=160; min(100, 160)
|
60 damage remains; pool=0 |
Analysis source: buildCalc/mechanics/formulas.json (Game.dll 1.3.0.6 and DBR 1.3.0.6 FoA). These are formula-derived examples; no in-game measurement is presented on this page yet.
Summary
Key point: For isolated large hits, block amount and block absorption determine the reduction. Block-recovery reduction matters when another hit arrives before the shield becomes ready again; it does not improve the reduction of the block that already succeeded.