Every hit in Pascal's Wager does two things besides damage. It drains the target's Poise (called Toughness in the code), which decides whether this hit makes the target flinch. It also drains the target's Resilience (called Weakness in the code), which decides when the target collapses into the Weakened state (see Weakness and execution). This page covers Poise: when a hit interrupts an attack, how "super armour" works, and why some enemies shrug off your light attacks while others stumble on every swipe.
Overview#
- Each character has a Poise pool (its maximum is the Poise stat). Every hit subtracts the attack's Poise damage (
ToughnessSubin SkillData) from it. - A hit only causes a hit reaction (flinch, knockback, launch and so on) when at least one of these is true: the pool is empty after the hit, the attack ignores Poise, or the target's Resilience is empty. Otherwise the hit still deals full damage, but the target keeps acting. The only visible sign is a small physical "wobble" on the struck body part.
- Many attacks open a temporary armour pool (super armour) on top of the normal pool for part of their animation. Incoming Poise damage is taken from the normal pool first, then from the armour pool.
- Poise regenerates over time, but not while the character is in a hit reaction.
Players start with 0 Poise. Outside armour windows, any hit with non-zero Poise damage interrupts you. Your Poise only matters during the armour windows of your own moves, and on Casual difficulty (see Hidden mechanics).
How a hit is resolved#
- The attack's Poise damage is modified: it is scaled down with distance for moves that have a damage falloff, multiplied for weak-point hits, and increased by talents (see below).
- If the hit came from in front and was blocked (or caught by a guard hand), its Poise damage becomes 0. Blocking from behind does not protect you.
- The Poise damage is subtracted, first from the normal pool and then from the active armour pool.
- The game then decides on a reaction:
- If the target is dying, it always reacts (unless its current move has the
DeathNoHitflag). - If Poise is empty, the attack ignores Poise, or Resilience is empty, the target takes the attack's hit reaction. When Resilience is empty, that reaction becomes Weakened instead.
- Otherwise there is no interruption.
HitPower(0, 1 or 2) only sets how hard the cosmetic bone wobble pushes. - Even when a reaction is due, the game can refuse it (
IsToHit): while the target is on a staircase, is invulnerable or hasmoveNoDamageset, is airborne/falling, or is in a state that cannot be interrupted yet. Examples: a Weakened enemy before its follow-up point, a launched enemy before it lands, and a Weakened huge body, which only an Execution can affect after the follow-up point.
- If the target is dying, it always reacts (unless its current move has the
The type of reaction (light flinch, heavy flinch, launch, knock-down, pull and so on) is set per attack hitbox in the animation data, not in the Lua tables.
When Poise refills#
This is the most important hidden rule for combos. It is controlled by the attacker's ToughnessRecovery flag in SkillData:
| Flag on the attack that staggered you | What happens to the target's empty Poise | Moves with it |
|---|---|---|
ToughnessRecovery = 1 (default) | Refilled to full the instant the stagger starts. You must break the whole pool again for the next stagger. | 1,801 of 1,958 moves |
ToughnessRecovery = 0 | Stays empty for the whole stagger and refills when the hit reaction ends. Every follow-up hit during the stagger re-staggers. | 157 moves, e.g. the first hit of Terrence's fully charged Battle Arts and his first Counter Attack hit |
Outside hit reactions, Poise regenerates continuously by (Poise Regen / 1000) x max Poise per second. Poise Regen is a per-mille rate: 50 means 5 % of the pool per second.
When a character enters the Weakened state, its Poise is set to 0. When it stands back up, both Poise and Resilience are refilled to full.
Super armour (armour pools)#
A move's armour value is the Toughness column in SkillData. The game adds it as a separate pool only while the move's skillToughness animation curve is on. Each window is a fraction of the animation, read from the AnimalAnimator data, and the pool is removed when the window closes. Talents of type SkillToughnessAdd raise it.
Terrence's armour (move ids from SkillData, windows given as a fraction of the animation):
| Move (internal) | Armour | Window(s) | Hits it survives from a typical 51-Poise enemy hit |
|---|---|---|---|
| Light combo (SkillLLL) | 0 | none | 0 |
| Heavy combos, Rising Slash, dodge-heavy | 26 | e.g. talent heavy combo (SkillIndex 4) hit 1: whole move, hit 2: 15.6-36.6 %; the other heavy combo (index 5) hit 1: 15.6-36.6 %; Rising Slash release: 0-32.8 % | 0 (51 >= 26) |
| Battle Art, uncharged (SkillLH / SkillHL) | 64 | e.g. 0-47 % | 1 (13 left), broken by the 2nd |
| Battle Art, fully charged (SkillLHMax / SkillHLMax) | 94 | whole move | 1 (43 left), broken by the 2nd |
| Drinking a potion (Eat / EatFast) | 0, or 100 with the talent Health Potion: Patience (Norwood, Jerold and Elena have it; Terrence has no such talent) | window 0-83 % / 0-80 % of the animation | 0 (1 with the talent) |
Enemy attacks deal mostly 51 Poise damage (739 of the 939 enemy SkillData rows that have any Poise damage; other common values are 49, 64, 44, 32 and 10). A few hit harder: the Maddened Ascetic's hits do 94, the axe soldier's up to 104, and special moves of the Gold digger, Noble knight, Assassin, Guderian the Guardian and Treasure Thieves do 999. Armour does not reduce damage unless the move also has a DamageSub value.
Breaking an enemy's armour pays off. If you empty an enemy's Poise while it is inside an armour window, that hit:
- is a guaranteed critical hit (the crit roll is skipped), unless the attack has
CritIgnore; - removes an extra WeaknessPermilSub x max Resilience from its Resilience (see Weakness and execution#What drains Resilience). This is 30 % for 42 enemy models (20xxx) (HeroData
WeaknessPermilSub = 0.3), but 0 for Maddened Ascetic, Terror Obsession, The First Fallen: Handel and Treasure Thieves, for 11 non-fighting 20xxx models (sprites, moon fiend, old woman, little girl, stick man, Viola's parents, big eyeball, corpse and 20052) and for the heroes and 9xxxx objects. Those four bosses still take the guaranteed critical, just no bonus Resilience loss.
Enemy Poise values#
Poise and Resilience do not scale with enemy level (checked at levels 1 and 40: identical), so they should not change in New Game Plus either (inferred). The values below were computed with the game's own formula (FS_HeroData.GetPropertyAllByList) at every level used in StoryMonster, and they are identical at every level. Regen values are per-mille of the pool per second. Common enemies are listed by internal model id with a translated label.
| Model | Enemy (internal name, translated) | Poise | Poise Regen | Resilience | Resilience Regen |
|---|---|---|---|---|---|
| 20001 | Club Fiend (棒子怪) | 10 | 50 | 70 | 40 |
| 20002 | Archer Fiend (射箭怪) | 10 | 50 | 70 | 40 |
| 20005 | Poison Fiend (毒怪) | 30 | 50 | 100 | 40 |
| 20006 | Dog (狗) | 9 | 50 | 50 | 50 |
| 20011 | Tentacle Monster (触手怪) | 80 | 50 | 80 | 30 |
| 20012 | Butcher woman (女屠夫) | 30 | 70 | 100 | 30 |
| 20013 | Scissor crone (剪刀老太婆) | 10 | 20 | 120 | 30 |
| 20015 / 20016 | Mother / Shrew (产妇 / 泼妇) | 10 | 400 | 70 | 40 |
| 20018 | Lizard Fiend (蜥蜴怪) | 10 | 400 | 70 | 40 |
| 20019 | Crossbowman (弩手) | 10 | 50 | 70 | 40 |
| 20020 | Spearman (长矛兵) | 20 | 30 | 70 | 30 |
| 20021 | Axeman (斧头兵) | 35 | 30 | 70 | 30 |
| 20023 | Sword-and-shield soldier (盾剑兵) | 10 | 400 | 70 | 40 |
| 20024 / 20025 | Nobleman / Noblewoman (男贵族 / 女贵族) | 10 | 400 / 50 | 70 | 40 |
| 20032 / 20033 | Claw horse / Machete horse (锐爪马 / 砍刀马) | 50 | 20 | 60 | 30 |
| 20036 | Fire-lighter (点火人) | 20 | 30 | 40 | 30 |
| 20037 | Two-faced (双面人) | 50 | 20 | 60 | 20 |
| 20041 | Little giant (小巨人) | 25 | 40 | 200 | 30 |
| 20043 | Boar man (野猪侠) | 65 | 40 | 75 | 30 |
| 20050 | Noble knight (贵族骑士) | 60 | 30 | 100 | 30 |
| 20051 | Assassin (杀手) | 10 | 50 | 70 | 40 |
Bosses:
| Model | Boss | Poise | Poise Regen | Resilience | Resilience Regen |
|---|---|---|---|---|---|
| 20007 | Maddened Ascetic | 105 | 40 | 75 | 30 |
| 20014 | Holy Father | 150 | 50 | 90 | 30 |
| 20017 | Rosen Cavalier Patrick | 10 | 50 | 70 | 20 |
| 20022 | Jenny of Exilium | 105 | 50 | 75 | 30 |
| 20027 | Edith | 100 | 50 | 120 | 30 |
| 20028 | Frollo | 100 | 50 | 120 | 30 |
| 20034 | Fused Sprenger | 100 | 30 | 160 | 30 |
| 20039 | Elena | 10 | 20 | 90 | 20 |
| 20040 | Proxy Higgins | 100 | 30 | 100 | 30 |
| 20044 | Usurper | 47 | 20 | 100 | 30 |
| 20045 | Terror Obsession | 70 | 20 | 160 | 30 |
| 20053 | The First Fallen: Handel | 70 | 10 | 160 | 30 |
| 20054 | Guderian the Guardian | 70 | 10 | 160 | 30 |
| 20055 | Treasure Thieves | 70 | 10 | 160 | 20 |
Some individual placements get extra Poise through StoryMonsterProperty. 44 rows add +8 to +60 Poise, mostly "grade 2" elites in story 4. One row (ES_StoryMonsterProperty 438, story 6, grade 1) gets +9999 Poise and +9999 Resilience, which makes it impossible to stagger.
Worked examples#
Terrence vs. the Axeman (Poise 35, regen 3 %/s = 1.05/s). Terrence's light combo deals 12, 12 and 14 Poise damage. The first two hits leave 11, and the third (14) empties the pool, so the Axeman flinches on the 3rd light hit if the hits land within a few seconds. His heavy hits deal 20 each, so he staggers on the 2nd. A fully charged Rising Slash (50 Poise damage) staggers him in one hit. Because all of these moves have ToughnessRecovery = 1, his Poise is back at 35 the moment he flinches, so the count starts over.
Terrence vs. Holy Father (Poise 150, regen 7.5/s). He needs at least 8 heavy hits (20 each) to flinch, or at least 3 charged Rising Slashes (50 each), more if he regenerates in between. His weak point (see below) triples Poise damage, so a charged Rising Slash on the weak point does 150 and staggers him in one hit.
A Club Fiend vs. you. Its typical hit deals 51 Poise damage. You have 0 Poise, so it always interrupts you, unless you are inside a Battle Art armour window (64 or 94 armour) or playing on Casual (130 Poise: 130 - 51 - 51 = 28 left, so the third quick hit staggers you).
Hidden mechanics#
Weak points. A few bosses have body colliders flagged as weak points. Hits there multiply Poise damage by (1 +
WeakToughnessMultiplier), Resilience damage by (1 +WeakWeaknessMultiplier) and damage by (1 +WeakDamageMultiplier):Boss Poise damage Resilience damage Damage Holy Father x3 x3 x2 Proxy Higgins x3 x3 x2 Fused Sprenger x3 x2.1 x2.1 Edith x2 x2 x6 Treasure Thieves x1 x1 x1 (weak-hit effect only) The colliders themselves are part of the Unity models. Every other model has the default multiplier of 1 (x2), but no weak-point colliders as far as the data shows (inferred).
- Blocking stops Poise damage only from the front. A blocked or hand-guarded hit from in front deals 0 Poise damage (it still drains Resilience, see Weakness and execution). A hit from behind ignores the block entirely. See Guarding.
- Distance falloff. Moves with
DamageDisMin/DamageDisMaxscale Poise damage, Resilience damage, Rage and sanity damage by sqrt(1 - x^2), where x is the position between the two distances. Beyond the max distance, Poise and Resilience damage drop to 0. - Moves that ignore Poise. 82 moves have
ToughnessIgnore = 1and always cause their hit reaction: every hero's Counter Attack, Backstab, Execution and plunge attack, plus a few enemy moves. Environmental hazards (TrickData) deal 100 Poise damage (50 of 60 rows), and rolling boulders, spikes and the snowball deal 999 (7 rows); all 57 of these rows also deal 10 Resilience damage (see Traps and tricks). - Moves that set their own Poise. A handful of enemy moves reset the user's Poise to a fixed value when they start (
ToughnessSet). Holy Father's enchant and Proxy Higgins' healing set it to 45, Terror Obsession's hammer charge to 60, and two healing/transform moves to 30. - Player Poise on Casual. Casual difficulty adds +130 Poise to the player character (+230 on a cloud demo build). Terrence's Poise Regen is 0, while every other hero has 240 (24 % of the pool per second). On Casual, Terrence's 130 Poise therefore never regenerates and only refills when he is staggered (inferred from the stat data; talents or trophies could change it). The other Casual changes are on Difficulty#Casual in detail.
- Status effects. Jerold's Griminess (status 10031) is the internal name of an older max-Poise reduction status (LogicType 102 = PropertyMaxSub, Param1 = 13, 10 s). Nothing in the skill, trophy, talent or Lua data applies it (see Sendril marks#Related effects), so it has no effect in play; its Param5 of 100 would mean about -10 % of max Poise per stack, by analogy with the Resilience statuses 10111 (300 = -30 %) and 10121 (1000 = -100 %) (inferred). The statuses that Jerold's Sendril Blast talent applies (10103 and 10104, fuses of 1 s and 2 s) carry 13 Poise damage (
ToughnessSub) and 11 or 13 Resilience damage (WeaknessSub) when they detonate (once per stack is inferred). See Sendril marks and Status effects. - Talents.
SkillToughnessAddadds armour to specific moves (Terrence's Knight's Tenacity on his heavy combos (+15 armour on moves 4 and 5, the Heavy combo after Rising Slash and the one after Spin Attack; one level only), Rising Slash: Tenacity (+38, one level) and Norwood/Jerold/Elena's Health Potion: Patience +100).SkillToughnessSubAddadds Poise damage to specific moves (Rising Slash: Inhibition). Norwood gets a flat +10 Poise while he is in the Abnormal state (and therefore also when Lunatic;Hero10004_Define.SanToughnessAdd, applied inAnimalBase_ValuethroughIsHeroSanNotNormal). His talent Obstinate (talent typeSanPropertyChangeValue, value 5, condition 13 = Poise) adds its value to that bonus, so with the talent the bonus is +15 (the +5 is read fromAnimalBase_Value:AddSanPropertyDiffValue; that the talent's condition 13 selects the Poise property is inferred). See Talents. - Hero doppelgangers. Copies of a player hero that the story controller spawns as "sanity monsters" get -14 Poise (
SanMonsterHeroToughnessSub), so every hit staggers them. Their hero-sized Resilience is scaled down: 10000 x 5/1000 = 50, and the regen 100000 x 0.4/1000 = 40 per-mille per second. They also get half HP and double physical damage (SanMonsterHp 500, SanMonsterPhysicDamage 2000 per-mille; see Damage formula). See Lunatic state.
Sources#
HeroTalenthero 10001 TalentPos 111 (Knight's Tenacity: Condition4,0;5,0,StoneLevel3, value 15) and TalentPos 117 (Rising Slash: Tenacity,StoneLevel3, value 38): one level each.- Poise checks and hit resolution:
luascript/logic/player/animalbase.lua:8033-8129(Hit),:8432-8456(HitBone/HitPower),:8940-8995(ChangeHit refill and the Weakened zeroing),:7875-7905(OnHitExit refill),:3970-3990(armour pool on theskillToughnesscurve),:7205-7222(stand-up refill). - Poise maths:
luascript/logic/playervalue/animalbase_value.lua:763-790(IsToughnessEmpty, GetSkillToughness),:1602-1649(regen, SubToughness),:640-680(regen only outside hit reactions),:2148-2200(distance falloff),:2330-2400(weak-point multipliers, talents, block rule, armour-break crit and the extra Resilience loss),:170-226(Casual Poise, sanity-monster scaling),:436-440(Norwood's Abnormal-state Poise),:3143-3155;gamedata/playerdefine/hero10004_define.lua:52. - Constants:
gamedata/playerdefine/animalbase_define.lua:73, 222-241;gamedata/playerdefine/animalbase_value_define.lua:21-26. - Property ids:
luascript/structdata/ms_herodata.lua:18-61(Toughness 13, ToughnessRecovery 14, Weakness 17, WeaknessRecovery 18). Stat formula:luascript/structdata/fs_herodata.lua:556-608. - Data: ES_HeroData (WeaknessPermilSub, Weak*Multiplier for 20014, 20027, 20034, 20040 and 20055), ES_HeroPropertyData + ES_EnemyAttributeData (stat tables above), ES_SkillData (Terrence rows 1-43: Toughness, ToughnessSub, ToughnessRecovery, ToughnessIgnore; ToughnessSet rows of 20014, 20035, 20040, 20045 and 20049), ES_TrickData rows 1-60 (50 rows with 100 Poise damage; the 999 rows are rolling boulder 33, wall spikes 34-36, floor spikes 38-39 and snowball 58), ES_StoryMonsterProperty, ES_AnimalAnimator (
skillToughnesscurves, hero10001). - Computed with
build/wiki/scripts/poise/stats.py,skills.py,anim.py. Outputs are inbuild/wiki/data/poise/. - Re-checked in
build/wiki/pass/scripts/combat/c1.py-c3.py:ES_HeroData.WeaknessPermilSub(0.3 on 43 rows, 42 of them 20xxx; 0 on 15 20xxx rows and 17 hero/object rows),ES_TrickData(ToughnessSub 100 on 50 rows, 999 on 7, WeaknessSub 10 on those 57),ES_StatusData10031 (unused older row, LogicType 102), 10103/10104 (ToughnessSub 13, WeaknessSub 11/13, Time 1/2);logic/playervalue/animalbase_value.lua:435-440(IsHeroSanNotNormal(10004)).