Bloodlust & Harmony

The damage matrix

Every attack in the game has an attack type and every unit has an armor type. When a hit lands, the game multiplies the damage by the cell where the two meet. That single table is the heart of countering: the same army that shreds one composition can bounce off another.

Read it like this: find the attacker's row, the defender's column, and the number is the damage multiplier. Green cells deal extra damage, red cells are resisted, and 1.00 is neutral. Elemental damage and immunities stack on top of this as a separate axis.

Attack ↓ / Armor →
Divine
Fortified
Heavy
Hero
Light
Medium
Unarmored
Chaos
1.001.001.001.001.001.001.00
Hero
0.350.501.001.001.001.001.00
Magic
0.500.352.000.501.250.751.00
Normal
0.200.701.001.001.001.501.00
Piercing
0.200.351.000.502.000.751.50
Siege
0.201.501.000.501.000.501.50
Spells
0.501.001.000.701.001.001.00

How a hit is calculated

Every hit runs the same pipeline, in this exact order. Knowing the order matters: a bonus that applies early gets multiplied by everything after it, and a flat bonus that applies late ignores armor entirely.

  1. Immunity gates. An invulnerable target takes zero from anything. A target immune to the hit's element (Fire, Ice, Poison, Lightning, Arcane) takes zero from that element. Spell-immune targets take zero from the Spells attack type. If any gate triggers, the hit ends here with an IMMUNE popup.
  2. Base damage. The attacker's Damage stat, or the ability's own damage value for spells.
  3. Conditional bonuses. "+X% vs mounted" and "+X% vs heavy armor" passives multiply the base damage now, before the matrix. That means they scale with a good matchup instead of being a flat add-on.
  4. The matrix. Damage is multiplied by the cell above: attacker's attack type vs defender's armor type.
  5. Partial resistances. "Spell Resistant" and "Magic Resistant" passives cut the matching attack type in half (x0.5) here. This is the "50% damage reduction against spells" effect: it applies after the matrix and stacks with normal mitigation below.
  6. Armor or magic resist. Magic and Spells attacks are reduced by the target's Magic Resist percentage. Every other attack type is reduced by Armor using the formulas below.
  7. Flat riders. Armor-bypass bonuses (Flame Arrow, Shadow Arrows, the Elemental Infusions, Thorns reflect) are added after mitigation, so they always land at full value. If the target is immune to a rider's element, only that rider is removed; the base hit still lands.
  8. Amplifiers. Lightning damage against a Shocked target is multiplied by 1.25. A critical hit (Sniper headshot) doubles the final number last, so armor never shrinks the crit bonus separately.
  9. Shield, then health. The final number drains the target's Shield first; whatever remains comes out of Health.

The armor formula

Armor gives diminishing returns. Each point of positive armor is worth 6% before diminishing kicks in:

damage taken = 1 / (1 + Armor x 0.06)

Negative armor (from armor-shred effects) amplifies damage instead, on a curve that approaches but never exceeds double damage:

damage taken = 2 - 0.94^|Armor|  (caps at 200%)

ArmorDamage you takeEffect
3036%64% reduced
2045%55% reduced
1063%37% reduced
577%23% reduced
0100%neutral
-5127%27% amplified
-10146%46% amplified
-20171%71% amplified

One distinction matters here: armor type (the matrix column) and the Armor stat (the number) are two different things. Magic and Spells attacks use the matrix like everything else, so Magic vs Heavy still gets that cell's multiplier in full. What they skip is the Armor stat: in the mitigation step they are reduced by the target's Magic Resist instead of armor points. Magic Resist is a fraction, so 0.2 means 20% less magic damage.

Elements: the second axis

Separate from attack types, damage can carry an element: Fire, Ice, Poison, Shadow, Acid, Lightning, or Arcane. A fireball is both "Spells" on the matrix and "Fire" on the element axis at the same time. Elements do not change the damage math by themselves; they drive three other things:

  • Immunities. Five elements can be blocked outright: a fire-immune unit takes zero Fire damage, full stop. Shadow and Acid have no immunity and always go through.
  • Statuses. Ice applies Chilled, Poison applies Poisoned, Lightning applies Shocked. Immune targets cannot receive the matching status either.
  • Interactions. Lightning damage hits Shocked targets 25% harder, and element-immune units counter same-element attackers completely.

Worked examples

50% damage reduction against spells. A caster hits a Spell Resistant unit with a 100 damage spell. The matrix cell for Spells vs that armor type is, say, 1.00, so the hit is still 100 after step 4. Spell Resistant halves it to 50. The target's 20% Magic Resist then takes it to 40. Armor is never consulted, because Spells damage is magical. Final hit: 40.

+50% damage to mounted units. A spearman with 40 damage and the anti-mounted passive hits a knight (Mounted, 10 armor). The bonus applies first: 40 x 1.5 = 60. The matrix multiplies next; with a 1.25 matchup that is 75. Then the knight's 10 armor reduces it to 63% of that: about 47. Because the bonus lands before the matrix, a green matchup multiplies the bonus too. The same passive on a bad matchup is worth much less.

How to use it

Scout what armor the enemy is massing, then build attackers whose row is green against it. Piercing punishes light armor but struggles into fortifications; siege cracks buildings and fortified lines; magic burns through heavy plate. When your waves suddenly stop trading well, the answer is usually on this table, not in your stat totals.