Pascal's Wager Wiki

Character stats (called properties in the game files) are the 42 numbers that describe a fighter in combat: Attack, Defence, Health, Stamina, Poise, the crit values, resistances and more. Each playable hero, each enemy and each boss has the same list. This page explains what every one of them does, in which unit it is stored, and how the final number in battle is put together. The raw material is the hero's Attributes; the damage maths that consumes the numbers is on Damage formula.

How the number in battle is built#

For a hero the maximum of a stat is built in this order (AnimalBase_Value:InitPropertyBase, GetPropertyMax):

  1. Attributes. The base value comes from the hero's attribute scores and the fixed hidden attribute (see Attributes), rounded down.
  2. Casual difficulty (heroes only): Poise gets +130 and Stamina +20 percent (the TapTap cloud demo build of the game uses +230 and +50 percent instead; animalbase_value_define.lua 22-27). See Difficulty.
  3. Talents. A talent of type "PropertyAdd" adds a percentage of the value from step 1 and 2 (before Trophies). The Sanity talent on every hero except Elena is +5 percent of Sanity per rank (50 per mille, plus 50 per extra rank); Benita's Optimized Tubes raises Power by 10 percent (one level); Elena's Shadow Moon and Path of Suffering give +30 percent to Health, and her Finale and Path of Truth give +20 and +30 percent to Stamina (see Talents). The percentage is taken from the base, so it does not compound with Trophies.
  4. Trophies. The summed property bonuses of equipped Trophies are added flat (Attack, Crit damage, Crit rate, Health, Sanity, Defence, Stamina, Stamina regen, the four resistances and the three "Atk vs" stats can roll as a bonus; see Random trophy properties).
  5. Encounter overrides. For enemies, the Story, Maze, Challenge and Arcade tables add a flat per-encounter amount (StoryMonsterProperty and its relatives).
  6. Run-time changes. Status effects and the Abnormal state (and therefore also the Lunatic state) change some maxima while they last. Examples: Terrence loses 30 percent of his base Health and gains 10 percent Attack, Norwood loses 50 percent of each elemental resistance and gains 10 Poise, Jerold loses 50 percent Dark resistance (animalbase_value.lua 420-445; the full list is in Abnormal state#Effects by hero, and Lunatic state covers the second stage). The final maximum is rounded up and cannot go below 0 (GetPropertyMax).

A hero summoned as a helper or turned into a monster is scaled again: a Sanity doppelganger has half the original Health (500 per mille), twice the Attack (2000) and only 0.5 percent of the Resilience (5 per mille, with regen 0.4 per mille of the original); a summoned ally on your team has twice the Health and half the Attack (animalbase_define.lua 228-234; InitPropertyBase). Enemy-side called heroes use the doppelganger values.

Most stats are pools that are filled to the maximum when a fight begins (Stamina, Poise, Power, Resilience), but Rage and both shield pools are not: they start empty, or keep the value carried over, and their stat is only the maximum (InitProperty).

Units#

Stat typeUnitExample
Attack, Defence, Health, Stamina, shieldsPlain pointsTerrence: Attack 59, Health 849
Crit rate, Crit damage, Atk vs Human / Beast / SendrilPer mille (1/1000)Crit rate 34 = 3.4 percent; Crit damage 201 = +20.1 percent
Regeneration and decay stats (Stamina regen, Poise regen, Rage decay, Power regen and decay, Resilience regen, Stamina regen while guarding)Per mille of the maximum per secondStamina regen 400 = 40 percent of max stamina every second
Stamina exhaustion valueSpecial: delay in seconds = (100 minus value) / 1092 means 0.8 s
Rage, Sanity, PowerPoints, maximum 100
Human / Beast / Sendril flags0 or 1

Trophies and talents show Crit rate, Crit damage and the Atk vs stats as a percentage by dividing by 10 (MS_TrophyProperty.GetTrophyPropertyTypeAndValue).

Glossary#

The "Label" column is the English text on the in-game Stats page (UI_PLAYERINFO_PROPERTY_TYPE). Where the text table still holds only the original Chinese, the translation is given in brackets. Several labels do not match what the code does with the stat; this is flagged in the description.

IDCode nameLabelUnitWhat it does
1PhysicDamageAttackpointsPhysical attack power. Multiplied by the move's BaseRate, then divided by the target's Defence in the damage ratio (see Damage formula).
2CritDamageCrit Damageper milleBonus added to damage on a crit: damage x (1 + value/1000). See Critical hits.
3CritResist(Chinese: "swift-strike damage")per milleDefender-side multiplier on the attacker's crit bonus; 0 means no effect. 0 for every hero, set only on a few enemies. The label belongs to an older design.
4CritRateCrit Rateper milleChance that a direct hit crits (about (value+1)/1001).
5HpHealthpointsMaximum Health. Damage first goes through the shields (stats 33 and 34).
6EnergyRecoveryBlock(Chinese: "drop reward")per mille of max per secondStamina regeneration while blocking. Value 100 for every hero, i.e. 10 percent of max Stamina per second against 40 percent when not blocking. The label is wrong.
7MpManapointsNot used in combat. Only the First Messenger has a value; shown in the save-slot screen.
8SanSanitypointsMaximum Sanity (100). See Sanity.
9RageDecrementBuff Durationper mille of max Rage per secondHow fast Rage drains while a rage form is active. Used only by Norwood and Jerold. The label is wrong.
10PhysicResistDefencepointsDivisor for physical hits in the damage ratio.
11EnergyStaminapointsMaximum Stamina. See Stamina.
12PowerExp BonuspointsMaximum of the Power resource spent by Benita's, Norwood's, Jerold's and Elena's special moves. For Benita it is the Elixir charge gauge (maximum 100, spent 15 or 30 per Elixir), not a count of carried Elixirs; Optimized Tubes raises the gauge by 10% (100 to 110), and its text about the "maximum number of Elixirs" is loose wording. The label is wrong.
13ToughnessPoisepointsPoise pool; empty means the next hit staggers. 0 from attributes for every hero; the stat only rises on Casual mode (+130) and through run-time effects. No trophy property is Poise (trophy effect 110 only boosts the Eat skills' Poise). See Poise and stagger.
14ToughnessRecoveryPoise Regenper mille of max per secondPoise regeneration outside hit reactions. 240 for all heroes except Terrence (0).
15EnergyRecoveryStamina Regenper mille of max per secondStamina regeneration when not blocking: 400 (40 percent per second) for every hero.
16RageRagepointsMaximum Rage (100). Starts empty. See Rage.
17Weakness(Chinese: "Weakness cap")pointsResilience pool (called Weakness in the code): emptying it makes a target weakened. See Weakness and execution.
18WeaknessRecovery(Chinese: "Weakness recovery")per mille of max per secondResilience regeneration.
19FireDamageElement DamagepointsAttack stat for Fire moves. 0 for every playable hero.
20PoisonDamagePosion Damage (sic)pointsAttack stat for Poison moves. 0 for heroes.
21ArcaneDamageArcane DamagepointsAttack stat for Arcane moves. 0 for heroes.
22DarkDamageShadow DamagepointsAttack stat for Dark moves. 0 for heroes.
23FireResistElement RespointsDivisor for Fire hits.
24PoisonResistPoison RespointsDivisor for Poison hits.
25ArcaneResistArcane RespointsDivisor for Arcane hits.
26DarkResistShadow RespointsDivisor for Dark hits. Stats 23 to 26 are always equal for heroes. See Damage types and resistances.
27EnergyRecoveryTime(Chinese: "exhaustion time")specialControls the lock after Stamina hits 0: delay = (100 minus value) / 10 seconds. 100 means no delay; Jerold and Elena have 92 (0.8 s).
28DamageHPRecovery(Chinese: "HP on attack")-Never used.
29CritEnergyRecovery(Chinese: "Stamina on crit")-Never used.
30CritMpRecovery(Chinese: "Mana on crit")-Never used.
31PierceDamage(Chinese: "Pierce damage")pointsAttack stat for Pierce moves. 0 for heroes.
32PierceResist(Chinese: "Pierce resistance")pointsDivisor for Pierce hits. Its total weight is 500% against 80% to 100% for Defence, so at the start it is about 4 to 7 times the hero's Defence (Attributes).
33TrophyShield(Chinese: "Trophy shield")pointsCapacity of the shield that Trophy effects fill; spent after the Skill shield. See Shields and protection.
34SkillShield(Chinese: "Skill shield")pointsCapacity of the shield that skills fill; spent first. Always equal to stat 33 for heroes.
35HumanAddAtk vs Humanoidper milleBonus damage against targets with the Human flag. Only from Trophies.
36BeastAddAtk vs Beastsper milleSame, against the Beast flag. Only from Trophies.
37SendrilAddAtk vs Sendrilper milleSame, against the Sendril flag. Only from Trophies. See The Dark Mist and Sendrils.
38HumanHumanflagOn enemies: counts as a Humanoid target for stat 35.
39BeastBeastflagOn enemies: counts as a Beast target for stat 36.
40SendrilSendrilflagOn enemies: counts as a Sendril target for stat 37.
41PowerRecovery(no label)per mille of max per secondPower regeneration. Only Jerold's code uses it.
42PowerDecrement(no label)per mille of max per secondPower decay. Only Elena's code uses it.

Starting values#

Each hero's value before any Trophy, Talent or difficulty bonus (the values you see on a fresh level 1 hero). Stats that are 0 for all six playable heroes are left out.

IDStatTerrenceViolaBenitaNorwoodJeroldElena
1PhysicDamage5956805862104
2CritDamage201307272147254258
4CritRate346448224041
5Hp8497248499848261392
6EnergyRecoveryBlock100100100100100100
8San100100100100100100
9RageDecrement100100100506060
10PhysicResist633943595286
11Energy303398308351281375
12Power100100100100100100
14ToughnessRecovery0240240240240240
15EnergyRecovery400400400400400400
16Rage100100100100100100
17Weakness100001000010000100001000010000
18WeaknessRecovery100000100000100000100000100000100000
23FireResist505458325563
24PoisonResist505458325563
25ArcaneResist505458325563
26DarkResist505458325563
27EnergyRecoveryTime1001001001009292
32PierceResist260252297247285412
33TrophyShield8517248989418981634
34SkillShield8517248989418981634
41PowerRecovery000066
42PowerDecrement505050505050

Notes on this table:

  • Elena and Jerold have identical weights, so every difference between them comes from Elena's higher starting attributes: Health 1392 against 826, Attack 104 against 62, Shield capacity 1634 against 898, Pierce resistance 412 against 285.
  • Poise is 0 for all heroes. The First Messenger (not playable) is also at 0.
  • Shield capacity is the maximum of the shield. It begins at 0 and is filled by Trophy or skill effects, see Shields and protection.

Where each stat is used#

Damage dealt#

  • Attack-type stats (Attack, Fire/Poison/Arcane/Dark attack, Pierce attack): the move's damage type picks which one is used (GetAttackBase). The value is multiplied by the move's BaseRate (and the item's, for thrown items). Heroes only have Physical Attack; the other attack stats are 0 for every playable hero, so only enemies, bosses and the First Messenger deal Fire, Poison, Arcane, Dark or Pierce damage this way. See Damage types and resistances.
  • Atk vs Humanoid / Beasts / Sendril and the target's Human / Beast / Sendril flags: attack is multiplied by 1 + (sum over the target's flags of the matching bonus) / 1000 (GetAttackBaseRatio). A target with two flags gets both bonuses.
  • Crit rate and Crit damage: see Critical hits. On a crit the damage is multiplied by 1 + Crit damage / 1000, or 1 + Crit damage x Crit resistance / 1,000,000 against a target that has Crit resistance.

Damage taken#

  • Defence and the four elemental resistances, Pierce resistance: the target's stat that matches the move's defence type is the divisor in the attack-to-defence ratio. The ratio turns into a damage factor with a floor of 0.3 and no reduction at all when the stat is 0 (Damage formula#3. Defence factor). Traps and hazards use a separate rule (Damage formula#Traps and hazards).
  • Health: when damage reaches a hero, the Skill shield is spent first, then the Trophy shield, then Health (animalbase_value.lua 1005-1030).

Resources#

  • Stamina, Stamina regen, Stamina regen while guarding, Stamina exhaustion value: Stamina regenerates by (Stamina regen / 1000) x max Stamina per second, or (guard value / 1000) x max while blocking (RecoveryEnergy). The lock after hitting 0 is explained in Stamina#Regeneration and Guarding.
  • Rage and Rage decay: Rage (maximum 100) is the combat-art resource. Rage decay is only used by Norwood and Jerold, whose rage form drains (decay / 1000) x 100 per second while active (10 per second at 100, Norwood only 5, Jerold 6); the form ends at 0 Rage. See Rage.
  • Power, Power regen, Power decay: Power (maximum 100) is spent by certain moves (RequiredPower: Benita 1 and 30, Norwood 20 and 40, Jerold 30, Elena 15). Power decays only for Elena (50 per mille of her 100 maximum is 5 per second while above 0, and the decay pauses while she is using two particular skills), and Power regen is applied only by Jerold (0.6 per second) (hero10007_value.lua 19, hero10005.lua 359).
  • Sanity: see Sanity and Lunatic state.

Poise and Resilience#

  • Poise (code name Toughness) and Poise regen: the pool a hit must empty to cause a flinch; it regenerates by (Poise regen / 1000) x max Poise per second whenever the character is not in a hit reaction. See Poise and stagger.
  • Resilience (code name Weakness, with Resilience regen): the pool that empties to put a target into the weakened state, see Weakness and execution. Heroes have 10000 Resilience that refills at 100,000 per mille per second, so a hero is effectively never weakened (see Hidden mechanics). The First Messenger has 100 and regen 100.

Hidden mechanics#

  • Stats screen labels that lie. The English label list in the game has "Buff Duration" for stat 9, but the code uses stat 9 as the Rage decay rate; "Exp Bonus" for stat 12, which the code uses as the Power cap; and a label in Chinese for stat 3 that means roughly "swift-strike damage" while the code uses it as Crit resistance. Stat 6 is labelled "drop reward" but is the guard-time Stamina regen. These labels are leftovers from an earlier design. Trust the code names in this table.
  • Four dead stats. Mana (7), HP on hit (28), Stamina on crit (29) and Mana on crit (30) are never read by combat code. Mana appears only in the save-slot display and debug tools. Only The First Messenger, who cannot be played, has a Mana value (720).
  • Debug leftovers. The debug tool refers to "DropBonus" and "Resist" properties that do not exist in the stat list, which would evaluate to nothing if called.
  • Crit resistance is enemy-only. All heroes have Crit resistance 0, which the code treats as "no effect". Only 8 of the 67 enemy and boss models have a non-zero value (600 to 900 at level 1 and 30, computed from their attribute weights), which then shrinks your crit bonus; see Critical hits.
  • Heroes' Resilience is effectively infinite. 10000 maximum plus a regen of 100x maximum per second means a hero's Resilience refills almost as fast as it is drained. Hero stats exist for symmetry with enemies, not because heroes are weakened (inferred).
  • Terrence has no Poise regen. His fixed Poise regen is 0 while all other heroes have 240. He has no base Poise either, so this only matters when Casual mode or a run-time effect gives him some (Attributes, Poise and stagger).
  • Elena and Jerold regain stamina later. Their exhaustion value is 92, others 100, so they sit out 0.8 seconds after hitting 0 Stamina (Stamina#Regeneration).
  • Elena's Power regen is unused. She has a Power regen of 6 per mille but only Jerold's code applies Power regen (inferred from the call sites).
  • The three type flags work like keys. An enemy with the Human flag (38) takes the Atk vs Humanoid bonus, and so on. A Trophy effect (ChangeSendrilProperty) reclassifies targets that carry one of the two "SanAddRage" statuses (inferred to be the rage state caused by Sanity loss). A target that is both Human and Beast keeps its Human flag and loses the Beast flag; a target with only one of them loses it. In both cases it gains the Sendril flag, so the Atk vs Sendril bonus applies as well (GetAttackBaseRatio, animalbase_value.lua 1768-1801).

Sources#

  • HeroTalent hero 10003 TalentPos 210 (Optimized Tubes: Condition 12 = Power, Value 100 permille, StoneLevel 3, one level); SkillData hero 10003 Elixir rows (RequiredPower 1 and 30, spend 15 / 30).
  • reference/lua_src/luascript/structdata/ms_herodata.lua: 17-62 (property ids and names), fs_herodata.lua 556-617.
  • luascript/logic/playervalue/animalbase_value.lua: 140-262 (InitPropertyBase: difficulty, talents, Trophies, encounter overrides), 239-250 (InitProperty), 315-330 (GetPropertyMax), 420-445 (lunatic changes), 655-680 (when stats regenerate), 1005-1030 (shield order), 1555-1625 (regeneration and decay formulas), 1738-1836 (attack and defence lookups), 1922-1950 (trap damage), 2195-2330 (damage maths), 2420-2470 (crit).
  • luascript/ui/controller/playerinfoctrl.lua: 3908-3946 (stat lists).
  • Pass check: starting values re-derived for all seven heroes from HeroPropertyData and HeroAttributeData (match, Mana 720 for the First Messenger); animalbase_value.lua:172-262 (build order: Casual +130 Poise and +20% Stamina for hosts, talent percent, flat trophy sum, per-placement bonus), :318-327 (ceil, floor at 0), :420-445 and gamedata/playerdefine/hero10001_define.lua:27-28, hero10004_define.lua:52-53, hero10005_define.lua:167, hero10002_define.lua:82-85 (Abnormal-state rates); gamedata/playerdefine/animalbase_define.lua:228-234 (SanMonsterHp 500, SanMonsterPhysicDamage 2000, SanMonsterWeakness 5, SanMonsterWeaknessRecovery 0.4, CallHeroHp 2000, CallHeroPhysicDamage 500). The defence-factor table and trap rule now live in Damage formula.
  • luascript/common/mathhelper.lua: 193-224 (addValuePermil, getRandomResult, the source of the (value+1)/1001 crit chance).
  • Verification: independent recomputation in build/wiki/scripts/verify_attributes/w1.py to w11.py (starting values, hidden-attribute stats, enemy crit resistance, talent and trophy tables).
  • luascript/logic/playervalue/hero10004_value.lua, hero10005_value.lua (rage decay), hero10007_value.lua (power decay), luascript/logic/player/hero10005.lua 359 (power regen), gamedata/playerdefine/hero10001_define.lua 27-28 and hero10004_define.lua 52-53 (lunatic changes).
  • gamedata/playerdefine/animalbase_define.lua 228-234, animalbase_value_define.lua 23-24 (Casual values).
  • luascript/structdata/ms_trophyproperty.lua 31-51 (percent display).
  • Tables: HeroPropertyData (HeroId 10001 to 10007), HeroAttributeData, TrophyProperty (PropertyType values 1, 2, 4, 5, 8, 10, 11, 15, 23 to 26, 35 to 37), HeroTalent (Type 93 rows), SkillData (RequiredPower), GameTextData UI_PLAYERINFO_PROPERTY_TYPE.