Talents are the permanent upgrades of the heroes in Pascal's Wager. Every hero has a talent tree of four pages, each page a web of up to 18 nodes. Nodes unlock moves, strengthen them, enlarge potion supplies and change how the hero behaves in the Abnormal state. They are bought with Immundus stones at an altar and can never be taken back. The trees of the individual heroes are listed in the table below; this page explains the rules they all share.
Overview#
| Hero | Tree | Nodes | Attack | Special | Alchemy | Sanity | Empty slots | Levels in total | Start unlocked | Stones to max |
|---|---|---|---|---|---|---|---|---|---|---|
| Terrence | Terrence talent tree | 34 | 11 | 9 | 5 | 9 | 38 | 52 | 3 | 49 |
| Viola | Viola talent tree | 34 | 10 | 12 | 5 | 7 | 38 | 57 | 6 | 51 |
| Benita | Benita talent tree | 35 | 10 | 12 | 6 | 7 | 37 | 56 | 4 | 52 |
| Norwood | Norwood talent tree | 34 | 11 | 7 | 7 | 9 | 38 | 48 | 3 | 45 |
| Jerold | Jerold talent tree | 36 | 11 | 11 | 7 | 7 | 36 | 50 | 7 | 43 |
| Elena | Elena talent tree | 38 | 13 | 11 | 7 | 7 | 34 | 46 | 9 | 30 |
- Pages. A slot number is page x 100 + position. Page 1 is Attack, 2 is Special, 3 is Alchemy and 4 is Sanity, each with positions 1 to 18, so 72 slots per hero. The shipped trees fill 34 to 38 of them. The unused slots are drawn on the grid with their connecting lines but have no data row.
- Nodes and levels. A node has 1 to 3 levels (one node in the whole game, in the Elena tree, has 4). Of 211 nodes, 147 have a single level. Its level cap is the number of stones listed for it.
- Roots. A node with no prerequisite is open from the start of its page.
- Default nodes. Each hero's basic moves start at level 1 without paying (table below).
- Elena is the Arcade mode hero and her tree works differently, see Elena talent tree.
Immundus stones#
Each level is paid with one stone of a fixed kind. The kinds are items 50001 to 50005.
| Item id | Stone | Needed by |
|---|---|---|
| 50001 | Chipped Immundus | all heroes (mostly first levels and basic moves) |
| 50002 | Immundus | all heroes |
| 50003 | Immundus Crystal | all heroes except Jerold, whose tree never asks for it |
| 50004 | Immundus Diamond | all heroes (the last levels of the strongest nodes) |
| 50005 | Sea Tooth Bone | Jerold only |
The stones have no ordinary shop price (Price is -1 in the item table) and stack to 99. See Immundus for where they come from.
Stones needed to max every node, after the free default levels:
| Hero | Chipped Immundus | Immundus | Immundus Crystal | Immundus Diamond | Sea Tooth Bone | Total |
|---|---|---|---|---|---|---|
| Terrence | 6 | 15 | 21 | 7 | - | 49 |
| Viola | 3 | 22 | 20 | 6 | - | 51 |
| Benita | 5 | 17 | 24 | 6 | - | 52 |
| Norwood | 8 | 17 | 16 | 4 | - | 45 |
| Jerold | 4 | 15 | - | 5 | 19 | 43 |
| Elena | 7 | 10 | 8 | 5 | - | 30 |
Elena's count covers only the nodes that list stones; her seven Sanity nodes list none (see below). The four base heroes together need 197 stones.
Prerequisites and learning#
- Open an altar's menu (see Altars). The talent tab is read-only anywhere else: outside an altar the game shows a hint that an altar is needed.
- Pick a node. It can be bought if its prerequisite node (the "Requires" column in the tree tables) is at level 1 or higher; the prerequisite does not need to be maxed. Nodes with no prerequisite are always available.
- Each level to buy shows the stone it needs and a confirm box. You may add several levels before confirming if you hold the right stones. Confirming consumes the stones and applies the effect at once. When a node raises maximum Health or maximum Sanity, the game works out the matching Health or Sanity gain at purchase so the current value follows the maximum (inferred from the purchase code).
- There is no refund. The panel lets you un-pick levels before confirming, but the game has no code path to remove learned levels (the only one is in the debug menu).
Starting nodes#
| Hero | Nodes that start at level 1 |
|---|---|
| Terrence | Lunge Attack (101), Parry (201), Execution (213) |
| Viola | Light Combo (101), Powerful Shooting (107), Rapid-Fire (113), Counter Attack (201), Backstab (207), Execution (213) |
| Benita | Touch of Whip (101), Backstab (201), Execution (207), Reclaiming the Pure Blood (208) |
| Norwood | Iron Fist (101), Furious Griminess (102), Execution (207) |
| Jerold | Soul Sword (107), Serene (113), Backstab (201), Sendril Ordeal (204), Execution (207), Evasion: Ensuing (213), Utl Evasion: Sendril Ordeal (214) |
| Elena | Demiurge's Blade of Discipline (104), Sword Dance - Dual Moon (107), Rage of the Dance (113), Sword Dance - Lone Shadow (114), Flash (201), Execution (207), Parry (213), Counter (214), Demiurge's Curse (216) |
Effect types#
Every node has a numeric type that selects what it does. Values are stored as Value + ValueAdd x (level - 1), and when several learned nodes share a type their values are added together. "Permille" means thousandths: 100 is 10%. The value displayed in the node's text is a different column (TextValue) and does not always match what the game applies; see the hero articles for each mismatch. Heroes: T Terrence, V Viola, B Benita, N Norwood, J Jerold, E Elena. Types used by Terrence, Viola or Benita were traced in the code. Types used only by Norwood, Jerold or Elena are described from their node text and were not traced.
| Effect type | Nodes | Used by | Scale | What it does |
|---|---|---|---|---|
SkillOpen | 64 | T, V, B, N, J, E | flag | Unlocks the moves listed in the node's condition (move index, combo step; combo 0 means all steps). A move whose skill row has SkillTalent = N needs the summed SkillOpen value of N, so two nodes can be required (Benita's strengthened whip moves). |
display | 12 | V, J, E | none | No effect. The node only exists as a path to other nodes (Viola's Rapid-Fire and Counter Attack, for example). |
PropertyAdd | 10 | T, V, B, N, J, E | permille | Raises the named stat by value / 1000 of its base (for example Sanity +5% per level). |
SkillDamageAdd | 9 | T, V, B | permille | Multiplies the damage of the listed moves by (1 + value / 1000). |
SkillRageAdd | 7 | T, B, N, J, E | flat | Adds Rage (or the hero's own resource) per hit of the listed moves. |
EatSpeedUp | 6 | T, V, B, N, J, E | flag | Uses the fast drinking animation. |
ItemHpMaxAdd | 6 | T, V, B, N, J, E | flat | More Health Potions can be carried. |
ItemStatusTimeAdd | 6 | T, V, B, N, J, E | permille | Buffs created by items last (1 + value / 1000) times as long. |
ItemStatusValueAdd | 6 | T, V, B, N, J, E | permille | Raises the strength fields of damage, heal and buff statuses that come from items. |
ItemValueAdd | 6 | T, V, B, N, J, E | permille | Health Potions heal (1 + value / 1000) times as much, capped at a full heal. |
SanPropertyChangeRate | 6 | T, V, B, N | permille | Changes a built-in Abnormal-state stat change. Penalties are multiplied by (1 - value / 1000); bonuses by (1 + value / 1000); see Abnormal state#How talents reshape these effects. |
StatusChange | 6 | V, B, E | id shift | Swaps a status for a stronger version. The condition names the base status id; the node adds its value (1, 2, ...) to the id, with a few moves using value - 1. The stronger versions are separate rows in the status table. |
ItemProbAdd | 5 | T, V, B, N, J | column | Not a percentage: the value picks a spare drop-table column (ProbAdd1, ProbAdd2) whose number is added to the drop weight of every entry of the listed item types. |
ItemSanAdd | 5 | T, V, B, N, J | flat | Sanity restored each time a listed potion or elixir is used. |
SanAttackSub | 5 | T, V, B, N, J | permille | Cuts the Sanity drained by your own hits by value / 1000 (Devout; see Sanity talents and trophies). |
SkillToughnessAdd | 5 | T, N, J, E | flat | Adds armour (the Toughness pool, hyper-armour) points to the listed moves while they are performed. See Poise and stagger#Super armour (armour pools). |
ComboAttackSubEnergy | 4 | J, E | permille | Cuts the stamina cost of continuing a combo (Jerold, Elena). |
SkillDamageSubAdd | 4 | N, J, E | permille | Reduces damage taken while the listed move is being performed. |
SkillAddStatus | 3 | J, E | flag | Makes the listed moves apply an extra status (Jerold's Sendril marks, Elena's stamina return). |
SkillBeatBack | 3 | N, J, E | flag | Allows the listed moves to be cancelled or chained at the right moment (Norwood's interrupt, Jerold's evasion, Elena's parry). |
ParryUse | 2 | B, E | flag | Turns on the parry hit box during the hero's normal attacks (Benita). |
SkillCondition | 2 | E | flag | Allows a combo to continue after a particular move (Elena). |
SkillPowerAdd | 2 | B, N | flat | Adds Power / Griminess / elixir points per hit of the listed moves. |
AddChangeBuffer | 1 | J | flag | Jerold's Sendril Ordeal: raises the number of energy grids that can be stored. |
AddChangeBuffer2 | 1 | J | flag | Jerold's Sendril Ordeal: unlocks the move. |
BeatbackChangeBuffer | 1 | J | flag | Jerold: a dodge made at the last moment gives an energy grid. |
BlockAddPower | 1 | N | flat | Bonus gauge when a block lands at the right moment (Norwood). |
ColorBulletAdd | 1 | V | flat | Raises the bullet drop chance (10% per level) and amount of the special bullets dropped on kills (Viola). |
ColorBulletMaxAdd | 1 | V | flat | Raises the special bullet capacity (Viola). |
ExecuteRangeDamage | 1 | N | flag | Executions also damage nearby enemies (Norwood). |
HitAddPower | 1 | N | permille | Same, for the Power gauge (Norwood's Griminess). |
HitAddRage | 1 | T | permille | When the hero is hit, gains value / 1000 of the attacker's own Rage-on-hit number. |
ItemBlessChance | 1 | B | permille points | Added to Benita's blessing success roll (base 400 of 1000). Read from Benita's save even when she is not leading. |
NoBullet | 1 | V | permille | Chance that a shot does not use a bullet (Viola). |
SanCritStatusRate | 1 | V | permille | Chance that a critical hit applies a status in the Abnormal state (Viola's Bleed). |
SanDarkStatusRageAdd | 1 | J | permille | More Rage on hits against Sendril-marked enemies in the Abnormal state (Jerold). |
SanHpLowDamageAddRate | 1 | B | permille | Multiplies the Abnormal-state low-Health damage bonus (Benita). |
SanItemStatusChange | 1 | B | id shift | Benita: swaps the potion-resistance status for a weaker one. |
SanPropertyChangeValue | 1 | N | flat | Same idea for flat Abnormal-state changes (Norwood's poise). |
SanRageReserve | 1 | J | flag | Jerold: keeps Rage after blocking in a particular situation in the Abnormal state. |
SanRageSubInSkillToughness | 1 | J | permille | Less Rage lost when an attack is interrupted in the Abnormal state (Jerold). |
SanSkillWeaknessRate | 1 | N | permille | Chance that a fully charged move staggers an enemy in the Abnormal state (Norwood). |
SkillDefenceEnergySub | 1 | T | permille | Cuts the stamina lost when a block lands through the listed move by value / 1000. |
SkillRageSub | 1 | J | permille | Lowers the Rage cost of the listed moves by value / 1000 (Jerold). |
SkillSanPermit | 1 | T | flag | Allows a move that is normally locked while the hero is in the Abnormal state (Terrence's second dodge). |
SkillToughnessSubAdd | 1 | T | flat | Adds poise damage to the listed moves (they break enemy poise more easily). |
SkillWeaknessSubAdd | 1 | T | permille | Multiplies the resilience (stagger gauge) damage of the listed moves by (1 + value / 1000). |
SkillWeaknessSubBaseOnRageAdd | 1 | E | permille | Extra resilience damage that depends on how full the Rage gauge is (code checks above 33% and above 66%). Elena only. |
SpecialCombo | 1 | J | flag | Jerold: allows Sendril Ordeal to be inserted into combos. |
StatusBloodCritRateAdd | 1 | V | permille | Multiplies crit rate by (1 + value / 1000) against bleeding targets. |
Achievements#
| Achievement | Condition (game text) | What the code checks |
|---|---|---|
| Beginner | Inset an immundus | The first confirmed talent purchase. |
| Grandmaster | Inset 5 Immundus Diamonds | Counts Immundus Diamonds spent on talents (5 needed). Sea Tooth Bones do not count. |
| Super Human | Activate all the Talents at the highest level | Every node of Terrence, Viola, Benita and Norwood at its top level, Sanity page included. Jerold and Elena are excluded. Checked after each purchase and again at the end of a playthrough (the second check is inferred from its position in the end-of-run code). |
| The Foreign Swordsman | Activate every max talent of Jerold | Every Jerold node at its top level. |
| Demiurge Dancer | Activate all of Elena's talents in Dance of the Throne | Elena's Attack, Special and Alchemy pages at the top level, in Arcade mode. The Sanity page is skipped in the code. |
Hidden mechanics#
- The
Conditioncolumn decides what a node touches. For move effects it is a list ofmove,combopairs. For item effects it is a list of item ids or item types, for stat effects a stat id. A node that lists nothing applies to everything of its kind. - Text and data can disagree. Descriptions are built from
TextValue, effects fromValue. Examples found in the first three trees: Viola's Adapt to Abnormality: Critical Strike (text 40%, real 30%), Benita's Lingering Wind Whisper (text 66.6%, real 50%), and Sanity: Enhanced Elixir on every hero (text 10, real 5). - Lucky Madness does not use percent. It adds 5 or 10 to the weight of drop entries, and the code that rolls drops does not test the sanity state at all (
controllerstorymode.lua:5355-5380andfs_herodata.lua:401-431: no sanity condition). - Abnormal-state nodes are modifiers of built-in effects, not new effects: they shrink a penalty or multiply a bonus that each hero already has. Their code tests
IsHeroSanNotNormal, so they work in both the Abnormal and the Lunatic stage. See Abnormal state#How talents reshape these effects. - Benita's blessing talent is global. The blessing roll reads Benita's talents directly, so Elixir Research helps even when you play someone else (see Blessing#Success chance).
- Unused feature: groups. The code supports talent groups (
TalentParent, type 999) where children share a parent's level, but no row in the shipped table uses it. - Elena's Sanity nodes are not bought. Seven of them are granted by defeating the seven Obsessed Ones in Arcade mode (each monster row names a talent to add) and are restored in later runs through the achievements for those fights. Details in Elena talent tree.
- Strange messages. The "not enough stone" messages use the labels "Not Enough Immundus" for both the Immundus and the Crystal stone and the bare text "Immundus Crystal" for the Diamond stone; this is a text-table oddity.
- Debug switch. A developer flag (
DebugTalentOpenAll) forces every node to at least level 1; it is off in the shipped game.
Sources#
reference/lua_src/gamedata/structdata/exportdata/es_herotalent.lua(211 rows) andluascript/structdata/ms_herotalent.lua:5-81(type ids),83-96.luascript/structdata/fs_talentdata.lua:5-45, 79-127,fs_herodata.lua:253-300, 342-372, 401-434,fs_herolist.lua:114-134.luascript/ui/controller/playerinfoctrl.lua:90-96(stone kinds),4280-4331,4405-4460,4562-4600,4850-4930.luascript/controller/controllerstorymode.lua:8399-8412(save menu opens the editor),1536-1548(end-of-run check),1722-1735(Arcade talent grant);luascript/structdata/fs_userdata.lua:109-123.luascript/structdata/ms_achievement.lua:22-46; tableAchievementrows with ids 11002, 12007, 20004, 40008, 60002, 60005-60011.- Table
ItemDatarows 50001-50005; tableStoryMonster(columnTalentAdd, 7 rows). - Abnormal-state types re-checked in the heroes_a pass:
animalbase_value.lua2410 (Norwood), 2476 (Viola Brutality), 2746 (Jerold), 2625 (Benita) andanimalbase.lua6640, 8964 all callIsHeroSanNotNormal. - Per-type code:
logic/playervalue/animalbase_value.lua(many sections, listed in the hero articles),logic/player/animalbase.lua,logic/status/statusbase.lua. build/wiki/data/talents_a/talents.jsonwas generated from the table for these pages.