A critical hit multiplies an attack's damage by 1 + Crit damage / 1000. It happens either by chance (Crit rate) or automatically when you break an opponent's poise while they are in an armoured move. Only direct hits can crit. Damage-over-time, traps and falling never do. Where crits sit in the full calculation is shown on Damage formula.
The stats#
| Stat (property id) | UI name | Meaning |
|---|---|---|
| CritRate (4) | Crit Rate | Chance per hit, in ‰ |
| CritDamage (2) | Crit Damage | Extra damage on a crit, in ‰ (201 = +20.1%) |
| CritResist (3) | 迅击伤害 (untranslated) | Target-side multiplier on the crit bonus (see below) |
Starting values per hero (base attributes):
| Hero | Crit rate | Real chance | Crit damage | Crit multiplier |
|---|---|---|---|---|
| Terrence | 34‰ | 3.5% | 201‰ | ×1.20 |
| Viola | 64‰ | 6.5% | 307‰ | ×1.31 |
| Benita | 48‰ | 4.9% | 272‰ | ×1.27 |
| Norwood | 22‰ | 2.3% | 147‰ | ×1.15 |
| Jerold | 40‰ | 4.1% | 254‰ | ×1.25 |
| Elena | 41‰ | 4.2% | 258‰ | ×1.26 |
Crit rate comes mostly from Dexterity and crit damage from Dexterity and Strength (see Attributes and Character stats). Trophies can add both as random properties (see Random trophy properties).
How a crit is decided#
For every direct hit (not damage over time), in this order:
- If the move has CritIgnore, it can never crit. That includes the guaranteed crit below.
- Guaranteed crit: if the target's poise is at 0 and the target is inside an armoured window of its current move (the animator's "SkillToughness" flag), the hit is a crit. The same hit also deals extra weakness damage equal to 30% of the target's maximum weakness (on the 43 models whose
WeaknessPermilSubis 0.3: the 42 fighting enemy models and one object, 90010; see Weakness and execution#What drains Resilience). This hit's own poise damage is applied first, so the very hit that breaks an armoured attack is already a crit. See Poise and stagger#Super armour (armour pools). - Otherwise roll: crit chance = attacker's Crit rate. Talent bonuses for this move (
SkillCritRateAdd) and Viola's "Bloody" against Bleeding targets multiply it. - On a crit:
bonus = Crit damage, multiplied by talent bonuses for this move (SkillCritDamageAdd). If the target's CritResist is above 0,bonus = bonus × CritResist / 1000. Thendamage = damage × (1 + bonus/1000).
The crit multiplier is applied after the defence reduction and before the back-hit, guard and talent multipliers. Everything in the chain is multiplied together.
Moves that can never crit#
Terrence, Viola, Benita, Norwood and Elena have CritIgnore on their Backstab (107), Execution (108) and plunging attacks (111). Terrence, Norwood and Elena also have it on their Riposte after a parry (105), while Viola's and Jerold's ripostes can crit. Jerold (the DLC hero) is the exception: his backstab, execution, plunges and riposte can all crit, because none of those rows have the flag. Other examples:
| Hero | Other moves that cannot crit |
|---|---|
| Terrence | Fully charged war art (8/1) |
| Benita | Talent counterattacks, second hit (23-26) |
| Norwood | Ultimate heavy (26), guards and ultimate guard (27, 28), ultimate light 2 (16/1), talent heavy war art (32, 33), alternative execution (1108) |
| Jerold | Ending his transformation (44/1) |
These moves usually have high multipliers already (for example, Execution BaseRate 1600 and Riposte up to 2500 for Norwood).
Crit resistance#
Enemies with a CritResist value reduce your crit bonus:
| Enemy (model) | CritResist | Your crit bonus becomes |
|---|---|---|
| Terror Obsession (20045), The First Fallen: Handel (20053), Treasure Thieves (20055) | 600 | 60% |
| Guderian the Guardian (20054) | 700 | 70% |
| Noble Knight (20050, 贵族骑士), Assassin (20051, 杀手) | 800 | 80% |
| Venomous Impostor (20048, 剧毒伪装者), Gold prospector (20049, 淘金者) | 900 | 90% |
| Everyone else, and all heroes | 0 | 100% (no effect) |
Example: Viola's 307‰ crit against Handel becomes 307 × 0.6 = 184‰, so ×1.18 instead of ×1.31.
Crit-related effects#
| Effect | Source | What it does |
|---|---|---|
| Bloody | Viola talent 12203 (Viola talent tree) | Crit rate ×1.2 against Bleeding targets |
| Brutality | Viola talent 12410 | In an abnormal sanity state, crits have a 20% chance (one level only) to inflict Bleed |
| Viola's Lunatic state | Hero10002_Define.SanCritDamageAddRate = 100 | Crit damage +10% of its value while in an abnormal sanity state (raised by "Adapt to Abnormality: Critical Strike"; see Abnormal state#Effects by hero) |
| Oath, The First Seed | Trophies (CriticalEnergyAdd) | Each crit restores 15 / 35 Stamina (attacks only, not throwables) |
Hidden mechanics#
- The real chance is (rate + 1) / 1001. The game rolls a whole number from 0 to 1000 inclusive and crits when the roll is ≤ the rate. 0‰ never crits and 1000‰ or more always crits. A fractional rate (for example 76.8‰ after "Bloody") effectively rounds down: 76.8 gives 77/1001, the same as 76.
- Crits come in one-second streaks (inferred from the code). Before every roll, the random generator is re-seeded from the current clock time in whole seconds plus the attacker's id. Every crit roll one character makes within the same real-time second therefore gives the same result. If your first hit in a second crits, all your other hits in that second crit too, and if it misses, they all miss. Over many seconds the average rate is unchanged, but fast multi-hit moves crit all together or not at all. This includes a single swing that touches several weak points: each weak point is calculated separately, but all of them get the same roll. Brutality's bleed roll uses a second seed (attacker id + 1), so it is also fixed for the whole second, independently of the crit roll.
- Armour still reduces the poise-break crit. A guaranteed poise-break crit still goes through the target's move damage reduction (
DamageSub, which stays active until the armour window closes), so armoured bosses such as Treasure Thieves (−90% during some moves) take only a fraction of even that crit. See Damage formula#6. Damage-reduction moves. - "Bloody" is weaker than it reads. Its text says crit rate is increased by 20%, but the code multiplies your crit rate by 1.2 instead of adding 20 points: Viola's 64‰ becomes 76.8‰ (about 7.8%), not 26%. The per-move crit rate talent type works the same way.
- Jerold's finishers can crit. The DLC hero's backstab, execution and plunging attacks roll for crits like normal attacks, unlike every other hero (the table above lists the moves that cannot).
- Two crit talent types are never used. The code supports per-move "crit rate +" and "crit damage +" talents (
SkillCritRateAdd,SkillCritDamageAdd), but no talent in the shipped talent table uses them. - "Crit resistance" works backwards. The stat is a multiplier on the attacker's crit bonus. 0 means no protection and lower non-zero values protect more. No hero or trophy has it, and its menu label was never translated.
- Enemies almost never crit at random. About 2,680 of the 2,747 story enemy placements have a crit rate of 0‰ (2,607) or 1‰ (74; a 0.2% real chance), even though their crit damage is 212-250‰. The remaining ~66 placements use hero-like stats with rates of 22-84‰ (for example 64‰, the same as Viola's starting rate). The guaranteed poise-break crit (step 2 above) works for enemies too, so getting your own armoured move broken can still cost you a crit (inferred: the rule is the same for every character).
Sources#
reference/lua_src/luascript/logic/playervalue/animalbase_value.lua:2333-2495(poise-break crit, crit roll, crit damage, crit resist, Brutality, CriticalEnergyAdd),:410-444(Viola's lunatic crit damage)reference/lua_src/luascript/common/mathhelper.lua:193-238(addValuePermil, getRandomResult, getRandom re-seeding with os.time)reference/lua_src/gamedata/playerdefine/hero10002_define.lua:84-85;structdata/ms_statusdata.lua(status 10001 = Bleed);structdata/ms_herodata.lua:18-61;structdata/ms_itemdata.lua:77(CriticalEnergyAdd = 103)es_skilldata.lua: CritIgnore column, hero rows listed above (e.g. 10005/105-111 with CritIgnore 0, 10001/8/1, 10001/105/1-2, 10001/107/1, 10001/108/1, 10001/111/1-2, 10004/26/1-3, 10005/44/1)es_herotalent.lua: 12203 (Bloody, Value 200), 12409, 12410 (Brutality, Value 200; ValueAdd 100 is never reached becauseStoneLevel4 lists a single level); no rows of type 27 or 28es_herodata.lua: WeaknessPermilSub (0.3 on 43 models: 42 of the 20xxx enemy models plus 90010; 0 on 32), re-counted inbuild/wiki/pass/scripts/combat/c1.py;es_skilldata.luaCritIgnore for 105/107/108/111 of heroes 10001-10007 re-read in the same script- Adversarial review:
mathhelper.lua:210-238(roll israndom(0,1000) <= rate, re-seeded per call),animalbase_value.lua:2066-2107(one calculation per weak point),:2337,:2609-2611(DamageSub on the same hit),logic/player/animalbase.lua:3977-3988(DamageSub tied to the SkillToughness window) es_trophydata.lua: 60033 (Oath, 15), 60055/60255/60355 (The First Seed, 35)- Hero crit stats: re-derived from
es_heropropertydata.lua+es_heroattributedata.luaviastructdata/fs_herodata.lua:560-608(property = floor(sum(weight x attribute table value) / 1000)); enemy CritRate/CritResist: the same formula ones_enemyattributedata.luapluses_storymonsterproperty.luaadds (logic/playervalue/animalbase_value.lua:229-231); UI names from GameTextUI_PLAYERINFO_PROPERTY_TYPE