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.

Chaosvs armor
Divine
1.00
Fortified
1.00
Heavy
1.00
Hero
1.00
Light
1.00
Medium
1.00
Unarmored
1.00
Herovs armor
Divine
0.50
Fortified
0.50
Heavy
1.00
Hero
1.00
Light
1.00
Medium
1.00
Unarmored
1.00
Magicvs armor
Divine
0.50
Fortified
0.35
Heavy
2.00
Hero
0.50
Light
1.25
Medium
0.75
Unarmored
1.00
Normalvs armor
Divine
0.20
Fortified
0.70
Heavy
1.00
Hero
1.00
Light
1.00
Medium
1.50
Unarmored
1.00
Piercingvs armor
Divine
0.20
Fortified
0.35
Heavy
0.90
Hero
0.50
Light
2.00
Medium
0.75
Unarmored
1.50
Siegevs armor
Divine
0.20
Fortified
1.50
Heavy
1.00
Hero
0.50
Light
1.00
Medium
0.50
Unarmored
1.50
Spellsvs armor
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.

  1. 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.
  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. 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.

Acid
Weak
+50%Animated Armor
Lesser
−25%
Standard
−50%Ooze King
Greater
−75%
Immune
ImmuneVitriolveinAcidic OozeGreater Acidic Ooze
Arcane
Weak
+50%Shadow MushroomShadowmancerShadow ArcherShadow OozeGreater Shadow Ooze
Lesser
−25%
Standard
−50%StarcallerOoze King
Greater
−75%Baby Arcane Dragon
Immune
ImmuneGreater Arcane OozeArcane Ooze
Electric
Weak
+50%
Lesser
−25%Storm Mushroom
Standard
−50%Ooze King
Greater
−75%
Immune
ImmuneStorm TotemElectric OozeGreater Electric Ooze
Fire
Weak
+50%Ice MushroomCryomancerIce ArcherVampireVampire LordLesser VampireForest GuardianForest SpiritIcey OozeGreater Icey Ooze
Lesser
−25%Flame MushroomFire Archer
Standard
−50%PyromancerOoze King
Greater
−75%Baby Fire Dragon
Immune
ImmuneFire OozeEmberveinPyreweaverFlame TotemGreater Fire Ooze
Ice
Weak
+50%Flame MushroomPyromancerFire ArcherFire OozeGreater Fire Ooze
Lesser
−25%Ice MushroomIce Archer
Standard
−50%CryomancerOoze KingFrost Bear
Greater
−75%Baby Ice Dragon
Immune
ImmuneRimeveinHoarweaverIce TotemIcey OozeGreater Icey Ooze
Poison
Weak
+50%
Lesser
−25%Poison MushroomWitchdoctorPoison Archer
Standard
−50%VenomancerGreen DragonOoze King
Greater
−75%Baby Venom Dragon
Immune
ImmunePoison OozeVenomweaverGreater Poison Ooze
Shadow
Weak
+50%ArbiterHigh PriestPriestPurifierArcane AssassinArcane BladeArcane WarriorArcane OozeGreater Arcane Ooze
Lesser
−25%ClericTemplarShadow MushroomShadow Archer
Standard
−50%ExemplarMoonlordNightspinnerSunkillerVeilspinnerShadowmancerOoze King
Greater
−75%Baby Shadow Dragon
Immune
ImmuneRift GolemShadow OozeGreater Shadow Ooze

Weaknesses are untiered: every one is the same +50%.

Full elemental damage guide →