Besides health and Poise, every enemy has a Resilience gauge (Weakness in the code; the stats screen leaves its name untranslated as 虚弱上限). Almost every hit drains it. When it reaches 0, the enemy falls into the Weakened state, and for most of that animation you can perform an Execution: a heavy scripted finisher that ignores Poise. When the enemy gets back up, Resilience and Poise are both refilled.
The Resilience gauge#
- Maximum and regeneration. These are stats 17 and 18. Regen is a per-mille rate of the maximum per second: 40 means 4 % of the gauge per second. Regen stops while the enemy is Weakened, and also while the gauge is at 0.
- The bar under an enemy's health bar is this gauge. The function that draws it is named
ShowWeakness, and it sends the Resilience fraction to the head-info bar (the UI message happens to be calledSetToughness). - No level scaling. Resilience and its regen are the same at every enemy level and New Game Plus journey. The values come from the hidden attribute only (computed with the game's own formula, see Sources). Tables for every enemy are on Poise and stagger#Enemy Poise values.
Typical values: most common enemies have 70 Resilience (regen 30-40, i.e. full in 25-33 s). Tougher ones have 100-200 (Little giant 200). Bosses have 70-160 (Fused Sprenger, Terror Obsession, The First Fallen: Handel, Guderian the Guardian and Treasure Thieves have 160).
Player heroes have 10000 Resilience with 100000 regen (100x the gauge per second), so in practice you can never be Weakened.
What drains Resilience#
Each hit removes the attack's WeaknessSub value (SkillData; WeaponData for throwables). It is applied in this order:
- Distance falloff for moves with a damage range (same curve as Poise).
- Weak points. Hits on a boss's weak-point collider multiply it by (1 +
WeakWeaknessMultiplier): x3 on Holy Father and Proxy Higgins, x2.1 on Fused Sprenger, x2 on Edith. - Talents. All of these are per-mille increases.
SkillWeaknessSubAddis a flat bonus for specific moves (e.g. Lunge Attack: Weakening +25 %).SkillWeaknessSubBaseOnRageAddgives one bonus above 33 % Rage and a bigger one above 66 % Rage (code thresholds 0.33 and 0.66) (Elena's Demiurge's Might).SkillComboWeaknessSubAddonly applies from the 4th consecutive hit on the same target (hit counter > 3; the combo window constantSkillTouchHitComboTimeis 2 s, inferred to be the reset time). - Armour break bonus. If this hit empties the target's Poise while the target is inside a super-armour window, it also removes 30 % of the target's maximum Resilience (
WeaknessPermilSub = 0.3) and is a guaranteed critical. Which models have the 0.3 value (and which four bosses do not) is listed in Poise and stagger#Super armour (armour pools). - The target's damage reduction. A move that has
DamageSub(damage reduction during the move) reduces Resilience damage by the same per-mille.
Blocking does not stop it. A blocked hit deals 0 Poise damage but still drains Resilience. An enemy whose Resilience is empty cannot hold a block: its guard breaks (see Guarding#How a blocked hit is resolved).
Throwables#
| Throwable | Resilience vs normal enemies | vs bosses | Poise damage |
|---|---|---|---|
| Stun Crystal | 50 | 10 | 12 |
| Throwing Knife, Fire Jar, Wildfire, Huge Fang, Poison Awl, Blinding Smoke | 10 | 10 | 12 |
| Fireworks Barrel, Soul River Water, Ebbinghaus's Essence | 5 | 5 | 12 |
A Stun Crystal takes 50 of a common enemy's 70 Resilience in one throw. Against bosses it is no better than a knife, because bosses use the separate BossWeaknessSub column. See Throwables.
Status effects that affect Resilience#
| Status | Effect |
|---|---|
| Firecracker (10080) | drains 3 Resilience per second for 15 s (reduced by fire resistance) |
| Weakened (Black Sprite King, 10111) | hidden: Treasure Thieves fight at -30 % max Resilience |
| Slower Stagger Recovery 1-3 (Elena, 10115-10117) | -20 % Resilience regen per stack, up to 3-5 stacks |
| Full-stack Weakness (Elena, 10121) | hidden: -100 % max Resilience for 15 s |
Details are on Status effects.
The Weakened state#
On the hit that empties Resilience, the target's hit reaction is replaced by Weakened (StatusWeak), unless it is already Weakened or being executed. When the Weakened state starts, the target's Poise is set to 0. The animation has three events (fractions of its length come from AnimalAnimator):
- Start. For roughly the first 7-28 % of the animation (for the models in the table below) the enemy cannot be executed yet. Normal-sized enemies cannot be knocked into another reaction either.
- Follow-up point (
FollowAttack). From here on Execution is allowed. - Stand-up point. Resilience and Poise are refilled to full, and the enemy recovers.
| Model | Execution opens at | Enemy stands up at |
|---|---|---|
| Club fiend (20001) | 17.8 % | 89.8 % |
| Axeman (20021) | 21.8 % | 70.8 % |
| Maddened Ascetic (20007) | 15.6 % | 71.7 % |
| Holy Father (20014) | 10.2 % | 90.8 % |
| Rosen Cavalier Patrick (20017) | 23.9 % | 75.8 % |
| Usurper (20044) | 28.1 % | 57.7 % |
| Proxy Higgins (20040) | 7.4 % | 89.5 % |
| Elena (20039) | 11.1 % | 78.3 % |
Some enemies chain into longer looping Weakened animations (StatusWeakLoop1 -> StatusWeakLoop2). During the second loop, Execution is allowed at any time.
Large enemies (HugeBody) ignore every other hit reaction while Weakened. Before the follow-up point nothing interrupts them, and after it only an Execution does.
Execution#
Conditions#
All of these must be true. The game checks them every frame and shows the Execute prompt when they are.
| Condition | Value |
|---|---|
| You have the Execution move | the Execute move must be unlocked; the Execution talent starts unlocked for every hero (Terrence, Viola, Benita, Norwood, Jerold, Elena) |
| Not in the carriage chapter | Execution and Backstab are disabled in carriage stories |
| You are free to act | moving, or inside the exit window of a move (not while holding a charge move) |
| Target can be executed | HeroData HitExecute = 1, not invulnerable, not a parasite, not lock-disabled |
| Target state | Weakened and past the follow-up point, or in the second Weakened loop |
| Distance | under 1.2 m from your body or your execute point to the target's execute point (each model has its own BodyExecuteRadius) |
| Facing | you must face the target's front: the angle between your facing and the enemy's back direction is under 60 deg |
| Space | there must be room to snap both bodies into place (ground and collision check) |
If you are locked on, only the locked target is checked. Otherwise the closest valid target is chosen.
Cannot be executed (HitExecute = 0): Black Sprite (20003) and Little Black Sprite (20057), Wheel Monster (20004), Dog (20006), Moon Monster (20008), Old woman and Little girl (20008-20010), Stick man (20030), Sunflower (20031), Old monk (20038), Viola's father and mother (20042, 20046), Big Eyeball (20047), 20052, Corpse (20056), and all 9xxxx objects. Every boss in the main game can be executed.
Damage#
An Execution is a normal hit of the hero's Execute move (SkillData, SkillIndex 108). It goes through the usual Damage formula with attack = (your Attack stat x BaseRate / 1000) + flat Attack.
| Hero | BaseRate | Flat Attack | Crits? | Poise / Resilience damage |
|---|---|---|---|---|
| Terrence | 1600 (x1.6) | +105 | no | 20 / 20 |
| Viola | 1600 | +100 | no | 15 / 15 |
| Benita | 960 | +31 | no | 15 / 15 |
| Norwood | 1600 | +98 | no | 8 / 8 |
| Jerold | 1200 | +135 | yes | 15 / 15 |
| Elena | 1600 | +105 | no | 0 / 0 |
Every Execution has ToughnessIgnore and GuardBreak = 999. Terrence's Execution: Enhanced adds +7 / 14 / 21 % damage. Execution damage is also raised by any status of logic type ExecuteDamageAdd that sits on the target (the check is made on the enemy being hit, not on you). Only one status uses it: 10075 ("damage taken increased", 120 s, Param5 35000), which ES_ItemData row 359 (Eckhart's Cane Sword) references. The code applies the status value as a per-mille bonus on the hit (animalbase_value.lua:2610-2620), so 35000 would give about x36, as Edith assumes; whether the status value is exactly Param5 was not traced (inferred).
Example. Terrence with 100 Attack: 100 x 1.6 + 105 = 265 attack before race bonuses and defence.
Worked examples#
- Club fiend, Terrence. Resilience 70, regen 4 %/s (2.8/s). Light hits remove 10, 10, 12 per string. Seven light hits (74) Weaken it, if you do not give it more than a second or two to regenerate. With a Stun Crystal (50), two light hits (20) are enough.
- Breaking armour. An enemy with 100 Resilience that gets its armour broken by a 20-Resilience hit loses 20 + 30 = 50 at once, and that hit crits.
- Holy Father's weak point. A 20-Resilience hit on the weak point removes 60 of his 90.
Hidden mechanics#
- Parry into Execution. If a parry box (Benita, Elena) catches an enemy attack while that enemy's Resilience is at or below 35 (
ParryWeaknessMin), its Resilience is set to 0 and it reels into a weakened recoil, then into the Weakened state. See Parry and counter. - Counters into Weakened. If a successful Counter Attack hits an enemy whose Resilience is already 0, its recoil becomes the "hand weak" version, which leads into Weakened (see Parry and counter#What the counter does).
- Norwood's Berserker Instinct. While Norwood is in the Abnormal state, the talent gives a chance (talent value 300; read as 30 %, inferred) that a hit sets the target's Resilience straight to 0. It only works on non-boss targets, and only for certain move parts (by internal name: combo part 3 or 5 of SkillHP11/21/31/41, SkillDHP1 and SkillLHP1, and part 3 of SkillLP11/21/31 and SkillDLP1;
Hero10004.IsSanSkillWeakness). The talent text names the fully charged Iron Fist Strike and Coffin of Chained Soul; the move-to-part mapping was not traced. The roll skips the damage-reduction step. - Boss time-challenge fights (ES_StoryChallengeMonsterProperty, used when the story mode is
BossTimeChallenge, which is how the Obsession Challenge menu starts every fight, see Obsession Challenge#Stat bonuses by level) add Resilience by challenge level: level 2 +25, level 3 +50 and level 4 +75, nothing at levels 1, 5 and 6. Levels 3 and 4 also add +1 per-mille regen. Only some rows are non-zero. - Stamina keeps regenerating during an Execution. Attacks normally pause stamina regen, but potion drinking, Execute and Backstab are exempt from that rule (unless the post-action regen delay is still running). The executed enemy's Poise does not regenerate, because it is in a hit reaction.
Sources#
ui/controller/challengectrl.lua:605and:615(the challenge menu callsFS_SaveStory:BossTimeChallenge),structdata/fs_savestory.lua:1577-1590,logic/player/animalbase.lua:1522.- Weakened trigger and huge-body rules:
luascript/logic/player/animalbase.lua:8048-8105,:5755-5790,:8940-8995,:7205-7222(stand-up refill),:12270-12290(loop chain, Toward/BodyBreak into Weakened). - Execution:
luascript/logic/player/animalbase.lua:9611-9700(status, 1.2 m, 60 deg),:9753-9820(permit rules, follow-up point),:7938-7972(HitExecute snap),:311(HitExecute flag). - Resilience maths:
luascript/logic/playervalue/animalbase_value.lua:753-761,:1436-1448(UI bar),:1610-1616,:640-680(regen),:2148-2200(falloff),:2154-2160(item and boss column),:2330-2420(multipliers, talents, armour-break 30 %, DamageSub, Norwood),luascript/logic/player/hero10004.lua:287-299(IsSanSkillWeakness),:2500-2560(guard break when Resilience is empty),:2610-2620(ExecuteDamageAdd),:1726-1766(attack base). - Constants:
gamedata/playerdefine/animalbase_define.lua:68-73(SkillExecuteDistance 1.2, SkillExecuteAngle 60, SkillTouchHitComboTime 2, SkillTouchHitComboMin 3),:235(ParryWeaknessMin 35),:483-488(TriggerHit). - Data: ES_SkillData rows 43, 257, 341, 450, 567, 738 (Execute); ES_WeaponData rows 1-12; ES_HeroData (
HitExecute,WeaknessPermilSub,WeakWeaknessMultiplier,HugeBody); ES_AnimalAnimatorHit.hitStatusWeaktrigger curves; ES_StoryChallengeMonsterProperty;reports/status_effects.mdrows 10080, 10111, 10115-10117, 10121;reports/talent_trees.md(Terrence 213/216/218, Norwood 409, Elena 101). animalbase_value.lua:2610-2620(ExecuteDamageAdd:addValuePermilon the hit after DamageSub). Execute move columns re-read inbuild/wiki/pass/scripts/combat/c1.py(poise/Resilience damage per hero all match the table above).- Computed with
build/wiki/scripts/poise/stats.pyandskills.py. Outputs:build/wiki/data/poise/model_stats.json,skills.json.