Damage Flow

Seven flowcharts that trace every item, attribute, skill and buff to the exact point where it enters the damage formula.

On this page

Each box below is one operation and each arrow is the order it happens in. Follow a line from an item or attribute and you can see exactly where it lands: additive or multiplicative, before or after a cap, on the stored stat or on the swing. The prose and the raw formulas live on Combat & Damage Calculation; this page is the map.

Two clocks matter. The stat panel (diagram 1) is rebuilt only when gear, skills, attributes or buffs change. Everything after it happens per swing, with fresh dice and fresh rage.

Input or sourceOperationStored valueBranch or rollDamage landsReadout

1. Building the damage stat

flowchart TB
classDef input fill:#16222b,stroke:#88bcd8,color:#cfe6f2;
classDef op fill:#251d33,stroke:#a487c4,color:#e7dcf5;
classDef val fill:#2a2213,stroke:#e5ab59,color:#f0d3a6;
classDef dec fill:#2a2113,stroke:#c9873a,color:#f0d3a6;
wdice["Weapon base min / max"]:::input
wed["Enhanced Damage on that weapon,<br/>plus smith temper and witch enchant"]:::input
flat["Flat Damage from the weapon<br/>and from every non-hand slot"]:::input
wint["Weapon base interval"]:::input
oed["Enhanced Damage from<br/>rings, amulet, armour"]:::input
str["Strength"]:::input
shq["Shield dice, the shield's own ED and Flat,<br/>its temper and enchant, Blessed Shield"]:::input
arch["Class weapon-class passive"]:::input
wcry["War Cry buff"]:::input
wdice --> o1["× 1 + the weapon's own ED<br/>temper and enchant fold in here too"]:::op
wed --> o1
o1 --> o2["+ round of Flat × weapon interval ÷ 1.0 s<br/>speed-normalised"]:::op
flat --> o2
wint --> o2
o2 --> o3["× 1 + ED from the non-hand slots"]:::op
oed --> o3
o3 --> o4["× 1 + 0.0025 per point of Strength"]:::op
str --> o4
o4 --> d1{"A shield strike?"}:::dec
d1 -- "no" --> keep["keep the weapon damage"]:::op
d1 -- "yes" --> swap["REPLACE it with the shield's damage:<br/>same chain, normalised by the SHIELD interval,<br/>Blessed Shield added after that normalisation"]:::op
shq --> swap
keep --> o5["× class passive: 1.2, 1.0 or 0.8"]:::op
swap --> o5
arch --> o5
o5 --> o6["× 1 + War Cry damage bonus"]:::op
wcry --> o6
o6 --> fin["player.minDamage / maxDamage<br/>the stored stat"]:::val

The stat panel number, built once and reused by every swing until something changes.

  • Enhanced Damage is scoped by the slot it sits on. On a weapon it scales that weapon’s dice only, before Flat and before Strength. On a shield it scales only the Shield Strike dice. From a ring, amulet or armour piece it is a character-level multiplier that lands after the Flat add, so there it does scale your flat damage too.
  • Flat Damage is speed-normalised by the interval of the source you actually swing, then added inside the Strength multiplier. Strength is a flat percentage per point, never a per-hit add.
  • Shield strikes (Shield Strike, Aegis, Smite, Judgement) replace the damage, they do not add to it. The equipped weapon contributes no physical damage at all on those builds, and the shield’s interval, not the weapon’s, drives the normalisation.
  • An unrevealed unique contributes its base item stats in full but none of its affixes until the Trader reveals it.
  • Passives are part of this panel. Ambidexterity’s dual-wield damage and Shield Wall’s shield defence and block enter here, Attunement’s elemental percentage enters diagram 4, and Frenzy’s Rage gain enters diagram 7. A passive whose hand requirement is unmet contributes nothing.
  • There is no critical-hit chance anywhere in the game. The min to max roll is the only variance on a physical hit. Everything else that varies is a separate proc with its own roll.

2. Does the swing land?

flowchart TB
classDef input fill:#16222b,stroke:#88bcd8,color:#cfe6f2;
classDef op fill:#251d33,stroke:#a487c4,color:#e7dcf5;
classDef val fill:#2a2213,stroke:#e5ab59,color:#f0d3a6;
classDef dec fill:#2a2113,stroke:#c9873a,color:#f0d3a6;
classDef enemy fill:#2b1614,stroke:#c96a5a,color:#e8b3a8;
classDef tab fill:#16241a,stroke:#7bbf6a,color:#bfe0ab;
bar["Base AR and flat Attack Rating affixes"]:::input
attr["DEX × 4, STR × 3, level × 4"]:::input
mset["Material-set AR bonus"]:::input
hmark["Precision and Footwork, flat AR"]:::input
gpct["AR percent from gear, training, drinks"]:::input
roar["Dance of Blades buff"]:::input
edr["Enemy Defense Rating"]:::input
sund["Sunder Armor and target-DR affixes"]:::input
shat["Shatter shred and Breach stacks"]:::input
fhit["Flat hit chance: gear up to 30, total up to 50"]:::input
lvl["Level difference"]:::input
bar --> a1["add the flat parts together"]:::op
attr --> a1
a1 --> a2["× 1 + material-set bonus"]:::op
mset --> a2
a2 --> a3["+ Precision and Footwork"]:::op
hmark --> a3
a3 --> a4["× 1 + gear AR + buff AR<br/>one pooled multiplier"]:::op
gpct --> a4
roar --> a4
a4 --> arf["player.attackRating"]:::val
edr --> b1["× 1 − target-DR reduction"]:::op
sund --> b1
b1 --> b2["× 1 − DR shred, capped at 95 percent"]:::op
shat --> b2
b2 --> drf["effective enemy DR"]:::val
arf --> hc["chance = tanh of ln AR ÷ DR × 1.1<br/>70 percent when AR = DR, mapped into 5 … 95"]:::op
drf --> hc
hc --> hc2["+ flat hit chance, + 1 per level you are above the enemy (up to 10),<br/>clamp 5 … 95; enemy above you: lose 1 percent of the chance per level (up to 10 percent)"]:::op
fhit --> hc2
lvl --> hc2
hc2 --> roll{"roll against the chance"}:::dec
roll -- "miss" --> miss["nothing: no damage, no rage, no procs"]:::enemy
roll -- "hit" --> hit["roll the damage, diagram 3"]:::tab

Attack Rating and Defense Rating decide only whether a swing connects.

  • Neither rating ever changes how hard a hit lands. The mitigation code takes both ratings and deliberately ignores them.
  • The curve reads the ratio, not the gap, so the same ratio gives the same chance at level 5 and at level 95. It is not symmetric in outcome, though: above parity there is only 25 points of room to gain and below it 65 points to lose, so falling behind on Attack Rating hurts far more than getting ahead helps. The floor and ceiling of 5 and 95 percent always hold.
  • Stacking Defense-Rating reduction on an enemy raises your hit rate, not your damage. Sunder Armor, Shatter and Breach all pour into the same capped pool.
  • The level rule is not symmetric. Against a higher enemy you lose a share of your hit chance, 1 percent of it per level and at most 10 percent: 40 percent becomes 36 at ten levels, not 30. Out-levelling an enemy adds 1 point per level, up to 10. Enemy attacks keep the plain point shift both ways, so an enemy ten levels above you gains 10 points against you. The caps keep deep Endless Delve a fixed handicap instead of a runaway one.

3. The physical hit

flowchart TB
classDef input fill:#16222b,stroke:#88bcd8,color:#cfe6f2;
classDef op fill:#251d33,stroke:#a487c4,color:#e7dcf5;
classDef val fill:#2a2213,stroke:#e5ab59,color:#f0d3a6;
classDef enemy fill:#2b1614,stroke:#c96a5a,color:#e8b3a8;
classDef tab fill:#16241a,stroke:#7bbf6a,color:#bfe0ab;
fin["player.minDamage / maxDamage"]:::val
mskill["Main-skill multiplier<br/>base + rank steps × per rank"]:::input
pass["Wrath + Apex Predator + Rampage,<br/>floored at zero"]:::input
rip["Riposte, primed by an earlier block"]:::input
fin --> s1["roll a whole number between min and max"]:::op
s1 --> s2["× the skill's damage multiplier"]:::op
mskill --> s2
s2 --> s3["× the outgoing passive multiplier"]:::op
pass --> s3
s3 --> s4["× 1.5 while Riposte is primed"]:::op
rip --> s4
s4 --> s5["round, minimum 1"]:::op
s5 --> s6["enemy side: no block, no resistance,<br/>AR and DR do nothing here"]:::op
s6 --> ene["enemy.hp − the full amount"]:::enemy
ene --> post["if the enemy is still standing,<br/>the on-hit riders fire"]:::op
post --> lch["life leech heals you for a share<br/>of the damage that actually landed:<br/>all of it against commons, three quarters against rares,<br/>half against specials, a third against bosses"]:::op
post --> cbl["Crushing Blow: its own roll, its own damage"]:::enemy
post --> bld["Rend: a bleed worth a share of the hit"]:::enemy
post --> elm["the elemental rider, diagram 4"]:::enemy
fin --> t1["× skill multiplier × outgoing passives<br/>× 1 + Rend's bleed share"]:::op
t1 --> tab["Hero-tab damage, plus raw elemental"]:::tab

The per-swing half. Everything here is recomputed on every single attack.

  • The skill multiplier and the passive multiplier are the last physical multipliers, and they hit the rolled number. That means they scale your flat damage and your dice alike, and it is why a big Flat Damage roll is worth more than the raw number suggests.
  • The passive multiplier is read fresh per hit because its inputs move mid-fight: current rage for Wrath, the kill stack for Rampage. Apex Predator is the one fixed input — it reads the enemy’s rarity (rare, special or boss), which never changes mid-fight.
  • Enemies never block, and physical damage to them ignores resistance entirely. No armour, no mitigation, no reduction: the rounded number is subtracted from their HP as it stands.
  • Crushing Blow is a separate hit with its own rules. Its chance is speed-normalised by your swing interval and capped at 75 percent, and where the cap clips a slow weapon the clipped share moves into the magnitude instead, up to double. The damage is a share of the enemy’s current HP: 12 percent on a common, 9 on a rare, 6 on a special, 4 on a dungeon boss. The skill multiplier, Wrath and resistance never touch it.
  • On a multi-hit skill such as Zeal, only the first hit of the swing rolls the on-hit procs, so three hits do not mean triple proc rates.
  • Life leech gives back less against tougher enemies: the full share against a common, ¾ of it against a rare, ½ against a special and ⅓ against a boss (dungeon bosses, echoed ones included, and hunt marks, the Brood Matriarch included). Siphon’s elemental leech follows the same shares.

4. Elemental damage and damage over time

flowchart TB
classDef input fill:#16222b,stroke:#88bcd8,color:#cfe6f2;
classDef op fill:#251d33,stroke:#a487c4,color:#e7dcf5;
classDef val fill:#2a2213,stroke:#e5ab59,color:#f0d3a6;
classDef dec fill:#2a2113,stroke:#c9873a,color:#f0d3a6;
classDef enemy fill:#2b1614,stroke:#c96a5a,color:#e8b3a8;
classDef tab fill:#16241a,stroke:#7bbf6a,color:#bfe0ab;
efa["Flat fire, cold, lightning and poison affixes"]:::input
sint["Interval of the source you swing<br/>the weapon, or the shield's interval<br/>divided by the skill's speed multiplier"]:::input
epct["Elemental Damage percent affixes"]:::input
eres["Enemy resistance, its own cap is 95 percent"]:::input
edeb["Weakening Touch and<br/>minus-enemy-resistance affixes"]:::input
efa --> e1["× interval ÷ 1.0 s, speed-normalised per hit"]:::op
sint --> e1
e1 --> e2["× 1 + the matching element percent"]:::op
epct --> e2
e2 --> est["player.fireDamage, coldDamage,<br/>lightningDamage, poisonDamage"]:::val
est --> h1["fire, cold and lightning:<br/>each × 1 − its effective resistance"]:::op
eres --> h1
edeb --> h1
h1 --> h2["add them up, round once, minimum 1"]:::op
h2 --> ene["one extra elemental hit on the same swing"]:::enemy
est --> pd["poison: the stat IS the six-second total.<br/>Resistance is applied once, as the DoT lands"]:::op
pd --> dot["ticks twice a second for 6 s, stacking per hit"]:::enemy
est --> prc{"status rolls, first hit of a swing only"}:::dec
prc --> cap["chance = 10 percent + skill bonuses,<br/>capped at 20 percent before normalisation,<br/>and at 50 percent after it and any multiplier"]:::op
cap --> ign["ignite: no speed scaling,<br/>burns a quarter of the fire stat over 6 s"]:::enemy
cap --> ccr["freeze and stun: × interval ÷ 1.0 s,<br/>2 s each, freeze also slows the enemy by 30 percent"]:::enemy
est --> tab["Hero tab adds fire + cold + lightning<br/>+ poison × 6, all before resistance"]:::tab

Elemental damage is a separate hit riding along each landed physical swing, and it obeys the opposite rules to physical.

  • It bypasses the skill multiplier and the outgoing passives entirely. Wrath does nothing for it. A high-multiplier main skill does nothing for it either.
  • It is the only player damage that enemy resistance reduces. Resistance debuffs are subtracted first and the result is floored at zero, so you can strip a resistance but never invert it.
  • Because the flat affixes are normalised per hit, a slow weapon gets a bigger elemental chunk at a lower rate. Equal damage per second, different rhythm. Ignite needs no chance scaling for the same reason, but freeze and stun are fixed durations, so their chance is scaled instead.
  • Poison never rolls: it lands on every hit, and each hit stacks another 6 second DoT.
  • The roll is capped twice: at 20 percent before the speed normalisation and at 50 percent after it, so skill nodes that raise the chance and buffs that multiply it cannot turn a slow staff into permanent crowd control.

5. The swing interval

flowchart TB
classDef input fill:#16222b,stroke:#88bcd8,color:#cfe6f2;
classDef op fill:#251d33,stroke:#a487c4,color:#e7dcf5;
classDef val fill:#2a2213,stroke:#e5ab59,color:#f0d3a6;
classDef dec fill:#2a2113,stroke:#c9873a,color:#f0d3a6;
classDef tab fill:#16241a,stroke:#7bbf6a,color:#bfe0ab;
wint["Weapon base interval<br/>1.0 s knife up to 3.5 s hammer or maul"]:::input
ias["Attack Speed affixes"]:::input
dex["Dexterity, 0.05 percent each"]:::input
mmul["Main-skill speed multiplier<br/>Flurry 1.2, Berserk 1.1; Crush, Cleave,<br/>Soothing Palm, Mountain Blow 0.8"]:::input
shs["Shield Strike, Aegis 1.0, Smite 1.5, Judgement 0.8"]:::input
flur["Flurry stacks"]:::input
ccn["Freeze and stun"]:::input
wint --> i1["÷ 1 + gear IAS and DEX combined,<br/>that sum is capped at 85 percent first"]:::op
ias --> i1
dex --> i1
i1 --> i2["clamp 0.38 … 3.6 s, stored at 0.45 … 3.5 s"]:::op
i2 --> d1{"A shield strike?"}:::dec
d1 -- "no" --> i3["÷ the main skill's speed multiplier"]:::op
mmul --> i3
d1 -- "yes" --> i3s["start again from the SHIELD interval,<br/>÷ the skill's speed multiplier,<br/>× the same gear and DEX factor"]:::op
shs --> i3s
i3 --> i4["÷ 1 + Flurry stacks"]:::op
i3s --> i4
flur --> i4
i4 --> fin["attack interval, clamped to 0.45 … 6.0 s"]:::val
fin --> tick["a timer counts down and fires at zero<br/>stun halts it, chill slows it"]:::op
ccn --> tick
tick --> dps["throughput = damage ÷ interval"]:::tab
fin --> dw["dual wield: the off hand runs this same lane<br/>from its OWN weapon interval,<br/>on a second timer, each swing at 0.65 damage / 0.50 effect"]:::op
dw --> dps

Gear speed and Dexterity are summed and capped first, as one number. Only then do the multiplicative layers divide the interval, one after another. Every layer divides the same way, so +45 percent attack speed from gear means 1.45 times the swings per second, just like a +45 percent buff.

  • The interval is a continuous value, not a frame-quantised one. There are no breakpoints to round up to. The only discontinuities are the two clamp edges at 0.45 s and 6.0 s.
  • Attack speed is deliberately left out of every per-swing normalisation (flat damage, elemental, crushing blow, rage), so speed always buys real throughput instead of being cancelled out.
  • A Shield Strike build ignores the weapon’s interval completely but keeps the same gear and Dexterity speed factor, so attack speed still matters on a shield.
  • Dual wielding runs two of these timers, one per weapon. Everything character-wide — gear IAS, Dexterity, the main skill’s speed multiplier, Flurry stacks, freeze — applies to both; only the weapon base interval differs. Each hand’s swing then lands at 0.65 damage and 0.50 per-hit effect, so the pair’s damage throughput is 130% of one weapon (not 200%) while its proc rate is exactly 100%.

6. Taking a hit

flowchart TB
classDef input fill:#16222b,stroke:#88bcd8,color:#cfe6f2;
classDef op fill:#251d33,stroke:#a487c4,color:#e7dcf5;
classDef val fill:#2a2213,stroke:#e5ab59,color:#f0d3a6;
classDef dec fill:#2a2113,stroke:#c9873a,color:#f0d3a6;
classDef enemy fill:#2b1614,stroke:#c96a5a,color:#e8b3a8;
classDef tab fill:#16241a,stroke:#7bbf6a,color:#bfe0ab;
raw["The enemy rolls its own min to max damage"]:::input
raw --> m1{"blocked?<br/>chance capped at 75 percent"}:::dec
m1 -- "yes" --> m2["× 0.4, a block eats 60 percent of the hit"]:::op
m1 -- "no" --> m3["the hit stands"]:::op
drr["Your Defense Rating"]:::input
con["Constitution"]:::input
rpd["Reduced Physical Damage affix"]:::input
iron["Iron Resilience, and Last Stand below 25 percent HP"]:::input
drr --> buck["percentage bucket:<br/>DR curve, 25 percent × DR ÷ DR + 2000, never past 25<br/>+ 0.06 percent per point of CON<br/>+ Iron Resilience + Reduced Physical + Last Stand<br/>the total is capped at 50 percent"]:::val
con --> buck
rpd --> buck
iron --> buck
m2 --> m4["× 1 − the bucket"]:::op
m3 --> m4
buck --> m4
dflat["Damage Reduced by flat affix"]:::input
m4 --> m5["− flat reduction: 0.0025 × CON × level, plus the affix.<br/>It can never take more than half of what is left"]:::op
con --> m5
dflat --> m5
m5 --> php["player.hp − the amount, minimum 1"]:::enemy
raw --> el["elemental rider, where the region's enemies carry one:<br/>a share of the RAW pre-block hit × 1 − your resistance,<br/>which runs from +75 down to −75 percent.<br/>Block and armour never touch it"]:::op
el --> php
php --> rea["your reactions: thorns, the Retribution counter,<br/>Rage On Block, Heal and Reflect on Block,<br/>armour and shield training"]:::tab

Mitigation runs in a strict order, and the order is what makes the numbers work out.

  • Block first, then the capped percentage bucket, then flat reduction. Block multiplies before the cap applies, so it is never swallowed by it, and flat reduction is always last, which is what makes Constitution strong against many small hits and weak against one huge one.
  • The percentage bucket is one shared 50 percent cap. Defense Rating alone can fill at most 25 of those points and Constitution adds 0.06 per point, so at level 95 the two reach about a third, deliberately leaving headroom for Reduced Physical Damage, Iron Resilience, Vigilance and Last Stand.
  • Resistances only meet elemental damage, and only the hero has them in both directions. They cap at +75 percent and floor at −75 percent, and a negative resistance amplifies the hit. Only Region Resonance pushes one below zero.
  • The enemy’s elemental rider is taken from the raw, pre-block, pre-armour number, so a shield and heavy armour do nothing against it. Resistance is the only answer.
  • Thorns pay out more on a blocked hit: flat thorns are multiplied by 1.5, and the reflected share is taken from the raw pre-block number and then multiplied by 1.5 as well.

7. Class resources and Wrath

flowchart TB
classDef input fill:#16222b,stroke:#88bcd8,color:#cfe6f2;
classDef op fill:#251d33,stroke:#a487c4,color:#e7dcf5;
classDef val fill:#2a2213,stroke:#e5ab59,color:#f0d3a6;
classDef tab fill:#16241a,stroke:#7bbf6a,color:#bfe0ab;
hit["A swing that lands"]:::input
sint["Swing time of the source you swing:<br/>the weapon's or the shield's interval<br/>divided by the skill's speed multiplier"]:::input
roh["Rage or Valor On Hit affix of the item you swing:<br/>the weapon, or the shield on a shield strike"]:::input
rob["Rage On Block, Valor on Block or Dodge"]:::input
idle["Out of combat, or waiting for a respawn"]:::input
rrd["Reduced Rage Decay, up to 95 percent"]:::input
cost["An active skill starts casting"]:::input
wrk["Wrath rank"]:::input
hit --> g1["+ 10 plus the On Hit affix, ÷ hit count,<br/>× swing time ÷ 1.0 s, × Frenzy"]:::op
sint --> g1
roh --> g1
g1 --> rg["Rage or Valor, 0 to 100 plus Maximum"]:::val
rob --> g2["+ a flat amount whenever you block<br/>(Valor: or dodge)"]:::op
g2 --> rg
idle --> g3["− 5 per second × 1 − reduced decay, down to 0;<br/>Valor settles at 33: + 5 per second below it"]:::op
rrd --> g3
g3 --> rg
cost --> g4["− 20, or 40 for a capstone buff,<br/>taken the moment the cast begins"]:::op
g4 --> rg
rg --> w1["Wrath = 1.5 percent at rank 1 up to 35 percent at rank 20,<br/>× current Rage ÷ 100, physical only"]:::op
wrk --> w1
w1 --> out["feeds the outgoing multiplier in diagram 3<br/>and the Hero tab readout"]:::tab

The diagram shows Rage (Berserker, Duelist) and Valor (Sentinel); Wrath is what turns Rage into damage. The Monk’s Enlightenment works like mana instead — it regenerates on its own and never fills from hits — see Class Resources.

  • A swing pays 10 per second of its swing time, the same for every main skill and weapon: a slow hammer gains more per hit at a lower rate and weapon choice stays neutral. Attack speed is excluded from that normalisation, so gear speed and Flurry genuinely raise Rage per second.
  • Only a landed hit pays. A miss gains nothing.
  • While the Sentinel’s Taunt holds on the enemy, hits pay no Valor; blocked and dodged attacks pay Taunt’s Valor instead.
  • The weapon-only Rage On Hit affix adds its flat value to the swing’s rage per hit and rides the same interval normalisation. On a multi-hit skill such as Zeal it is split evenly across the hits, so a fully landed swing grants it once — the affix is swing-neutral, not per hit. A shield strike swings no weapon, so the weapon’s affix never adds there, and neither does an active-skill cast; a shield strike adds the shield’s own Valor On Hit instead. A shield skill left without a usable shield falls back to a real weapon swing, and that swing does earn the weapon’s affix.
  • Rage does not decay during a fight. It drains only out of combat and while you wait for the next spawn, which is why a long uninterrupted fight is the best place for Wrath.
  • Valor rests at a third of the bar instead of at 0: between fights it fades down to 33 (of 100) and comes back up to 33 from below by 5 per second. In a fight it never comes back on its own.
  • The rage for an active skill is committed when the cast starts, not when it resolves, so decay cannot steal it mid cast. Priority is strict: a skill whose rule is met but that you cannot afford yet makes the cheaper actives behind it wait. Buffs also cast while you wait for the next spawn, so that rage is spent instead of decayed.
  • Frenzy (Berserker, Bloodrager) raises every Rage gain by up to 30% and cuts the out-of-combat decay by up to 50%, on top of everything above.

Why position in the formula matters

  • Enhanced Damage is slot-scoped. A weapon’s scales that weapon’s dice only, before Flat and before Strength. A shield’s scales only its Shield Strike dice. The same affix on a ring, amulet or armour piece is character-wide and lands after the Flat add, so from those slots it also scales your flat damage. It never touches elemental affixes.
  • Flat Damage from any slot follows whatever you swing. It is normalised by that source’s interval and added inside the Strength multiplier, and then the skill multiplier and the passive multiplier scale it again at swing time. Blessed Shield is the one exception: its bonus is already a per-hit value, so it is added after the normalisation and a slow shield does not inflate it.
  • The skill multiplier, Wrath, Apex Predator and Rampage are the last physical multipliers. They multiply the rolled number, not the stat panel.
  • Elemental damage skips all of them and is the only player damage enemy resistance reduces. Physical damage to enemies ignores resistance, Attack Rating and Defense Rating, and enemies never block.
  • Attack Rating and Defense Rating are hit chance only. Shredding an enemy’s Defense Rating raises how often you connect, never how hard.
  • Crushing Blow ignores every damage multiplier you own. It is a percentage of the enemy’s current HP, so it shines on a high-HP target and does nothing to finish a low one.
  • Incoming order is block, then the capped bucket, then flat. A block is worth 60 percent of the hit and is applied before the 50 percent cap, so it stacks cleanly on top of armour rather than competing with it.
  • A negative resistance is a real threat. Region Resonance can push one below zero, and there the multiplier goes above 1 and the enemy’s elemental rider hits for up to 1.75 times its value.
  • The Hero-tab damage number is optimistic. It adds elemental at full value with no resistance, assumes every swing lands, and leaves out crushing blow, the ignite burn and skill procs. It does include Rend’s bleed, the poison DoT’s full six-second total, and, while a fight is running, the conditional passives.

If a number here ever contradicts what the game does, the game wins. Both this page and the formulas page are read from the engine source.

See also: Combat & Damage Calculation · Attributes · Elements & Status Effects · Rage & Wrath · Main Skills