Damage
All arithmetic is in integers and floors at every step, so the browser, the match server and the tests get the same numbers.
base = (10 + 3·ATK) · 40 / (40 + 5·DEF') DEF' = DEF, minus Overdrive's cut
dmg = base · pct% · variance% · crit · overdrive
| Term | Value |
|---|---|
| power | 10 + 3 × ATK |
| mitigation | 40 / (40 + 5 × DEF) |
| variance | 90% to 110%, from the match RNG |
| crit chance | 5% + 2% × SPD |
| crit | × 1.5 |
| Overdrive | × 2 on the Striker's hits; its own DEF −30% |
Then, in order:
- Bulwark armour takes off 10% (Bulwark only).
- Defend keeps 50% of the hit (a Foresight defend keeps none).
- Aegis Wall reflects 50% of what is left back at the attacker.
- Shield absorbs what it can.
Every hit does at least 1 before these steps. After turn 12, damage (burn included) grows by 20% for each turn past it.
The engine source is the reference: packages/engine/src/battle.ts and rules.ts. These pages read their numbers from it.