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.
- Divine
- 1.00
- Fortified
- 1.00
- Heavy
- 1.00
- Hero
- 1.00
- Light
- 1.00
- Medium
- 1.00
- Unarmored
- 1.00
- Divine
- 0.50
- Fortified
- 0.50
- Heavy
- 1.00
- Hero
- 1.00
- Light
- 1.00
- Medium
- 1.00
- Unarmored
- 1.00
- Divine
- 0.50
- Fortified
- 0.35
- Heavy
- 2.00
- Hero
- 0.50
- Light
- 1.25
- Medium
- 0.75
- Unarmored
- 1.00
- Divine
- 0.20
- Fortified
- 0.70
- Heavy
- 1.00
- Hero
- 1.00
- Light
- 1.00
- Medium
- 1.50
- Unarmored
- 1.00
- Divine
- 0.20
- Fortified
- 0.35
- Heavy
- 0.90
- Hero
- 0.50
- Light
- 2.00
- Medium
- 0.75
- Unarmored
- 1.50
- Divine
- 0.20
- Fortified
- 1.50
- Heavy
- 1.00
- Hero
- 0.50
- Light
- 1.00
- Medium
- 0.50
- Unarmored
- 1.50
- Divine
- 0.50
- Fortified
- 1.00
- Heavy
- 1.00
- Hero
- 0.70
- Light
- 1.00
- Medium
- 1.00
- Unarmored
- 1.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.
- Immunity gates. An invulnerable target takes zero from anything. A target immune to the hit's element — any of the seven — 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.
- Base damage. The attacker's Damage stat, or the ability's own damage value for spells.
- 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.
- The matrix. Damage is multiplied by the cell above: attacker's attack type vs defender's armor type.
- 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.
- 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.
- 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.
- 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.
- 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%)
| Armor | Damage you take | Effect |
|---|---|---|
| 30 | 36% | 64% reduced |
| 20 | 45% | 55% reduced |
| 10 | 63% | 37% reduced |
| 5 | 77% | 23% reduced |
| 0 | 100% | neutral |
| -5 | 127% | 27% amplified |
| -10 | 146% | 46% amplified |
| -20 | 171% | 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. Every element can be blocked outright: a fire-immune unit takes zero Fire damage, full stop. All seven have an immunity, Shadow and Acid included.
- 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.
The other axis: elements
Everything above is a soft counter — even the worst cell on the matrix still trades, just badly. Elements are the exception, and they resolve on a separate axis from attack and armour type. A weakness makes a matchup half again as punishing; an immunity ends it outright, taking the damage to zero no matter what the matrix says.
- Lesser
−25%- Greater
−75%
- Weak
+50%
Shadow MushroomInfantry · 180 HP · 20 DPS
Deals Shadow damage
ShadowmancerCaster · 350 HP · 20 DPS
Deals Shadow damage
Shadow ArcherRanged · 250 HP · 25 DPS
Shadow OozeInfantry · 75 HP · 8 DPS
Deals Shadow damage
Immune to Shadow
Greater Shadow OozeInfantry · 150 HP · 16 DPS
Deals Shadow damage
Immune to Shadow- Lesser
−25%
- Weak
+50%- Greater
−75%
- Weak
+50%
Ice MushroomInfantry · 650 HP · 15 DPS
Deals Ice damage
CryomancerCaster · 350 HP · 23.8 DPS
Deals Ice damage
Ice ArcherRanged · 250 HP · 20 DPS
VampireInfantry · 225 HP · 13.5 DPS
Vampire LordCavalry · 500 HP · 22 DPS
Lesser VampireInfantry · 90 HP · 8 DPS
Forest GuardianInfantry · 650 HP · 31.5 DPS
Forest SpiritInfantry · 225 HP · 24.5 DPS
Icey OozeInfantry · 75 HP · 8 DPS
Deals Ice damage
Immune to Ice
Greater Icey OozeInfantry · 150 HP · 16 DPS
Deals Ice damage
Immune to Ice- Lesser
−25%
Flame MushroomInfantry · 650 HP · 30 DPS
Deals Fire damage
Fire ArcherRanged · 250 HP · 20 DPS- Immune
Immune
Fire OozeInfantry · 75 HP · 12 DPS
Deals Fire damage
Immune to Fire
EmberveinInfantry · 520 HP · 19.5 DPS
Deals Fire damage
Immune to Fire
PyreweaverRanged · 440 HP · 21 DPS
Deals Fire damage
Immune to Fire
Flame TotemSpecial · 10 HP · 4 DPS
Deals Fire damage
Immune to Fire
Greater Fire OozeInfantry · 150 HP · 22 DPS
Deals Fire damage
Immune to Fire
- Weak
+50%
Flame MushroomInfantry · 650 HP · 30 DPS
Deals Fire damage
PyromancerCaster · 350 HP · 22 DPS
Deals Fire damage
Fire ArcherRanged · 250 HP · 20 DPS
Fire OozeInfantry · 75 HP · 12 DPS
Deals Fire damage
Immune to Fire
Greater Fire OozeInfantry · 150 HP · 22 DPS
Deals Fire damage
Immune to Fire- Standard
−50%
CryomancerCaster · 350 HP · 23.8 DPS
Deals Ice damage
Ooze KingInfantry · 325 HP · 28 DPS
Frost BearInfantry · 500 HP · 23 DPS- Immune
Immune
RimeveinInfantry · 520 HP · 19.5 DPS
Deals Ice damage
Immune to Ice
HoarweaverRanged · 440 HP · 19 DPS
Deals Ice damage
Immune to Ice
Ice TotemSpecial · 10 HP · 4 DPS
Deals Ice damage
Immune to Ice
Icey OozeInfantry · 75 HP · 8 DPS
Deals Ice damage
Immune to Ice
Greater Icey OozeInfantry · 150 HP · 16 DPS
Deals Ice damage
Immune to Ice
- Weak
+50%
ArbiterCaster · 250 HP · 16.8 DPS
High PriestCaster · 300 HP · 19.2 DPS
PriestCaster · 130 HP · 9.6 DPS
PurifierCaster · 150 HP · 9 DPS
Arcane AssassinSpecial · 150 HP · 200 DPS
Arcane BladeInfantry · 250 HP · 19.5 DPS
Arcane WarriorInfantry · 400 HP · 39 DPS
Arcane OozeInfantry · 75 HP · 8 DPS
Deals Arcane damage
Immune to Arcane
Greater Arcane OozeInfantry · 125 HP · 15 DPS
Deals Arcane damage
Immune to Arcane- Lesser
−25%
ClericInfantry · 600 HP · 15 DPS
TemplarCaster · 700 HP · 20 DPS
Shadow MushroomInfantry · 180 HP · 20 DPS
Deals Shadow damage
Shadow ArcherRanged · 250 HP · 25 DPS- Standard
−50%
ExemplarCaster · 800 HP · 35 DPS
MoonlordInfantry · 500 HP · 32 DPS
Deals Shadow damage
NightspinnerCaster · 340 HP · 15.3 DPS
Deals Shadow damage
SunkillerCaster · 380 HP · 18 DPS
Deals Shadow damage
VeilspinnerCaster · 260 HP · 12.6 DPS
Deals Shadow damage
ShadowmancerCaster · 350 HP · 20 DPS
Deals Shadow damage
Ooze KingInfantry · 325 HP · 28 DPS
Weaknesses are untiered: every one is the same +50%.