Viola's talent tree has 34 nodes over four pages. Maxing all of them takes 57 Immundus stones, 51 once the six free starting nodes are subtracted. This page lists every node with its prerequisite, stone cost and the real numbers behind it.
Viola is the gunslinger. Her Attack page has two branches, the bayonet (Light Combo, Spin Kick) and the musket (Powerful Shooting, Snipe), plus Rapid-Fire. Her Special page is about Backstab and Execution follow-ups and the coloured special bullets. Her Sanity page is the most offensive of the first three heroes: critical damage and Bleed (rules in Abnormal state#How talents reshape these effects). See Viola for the character and Talents for the shared rules.
Every level costs one stone of a fixed kind (Talents#Immundus stones). Nodes that start unlocked already hold level 1 for free, so the real bill is the second column.
Stone
All levels
After the free starting nodes
Chipped Immundus
9
3
Immundus
22
22
Immundus Crystal
20
20
Immundus Diamond
6
6
Total
57
51
By page (all levels): Attack 12, Special 20, Alchemy 13, Sanity 12.
"Requires" is the node that needs level 1 before this one can be bought (Talents#Prerequisites and learning); no requirement means open from the start of the page. "Data" gives the internal effect type (Talents#Effect types) and the numbers the game actually applies (permille values shown as percent). Effect descriptions are paraphrased.
Special at the right instant counters an attack. The move is always available; the node is only a path.
no effect (display node)
202
Break Out
201 Counter Attack
L1 Immundus; L2 Immundus Crystal
After a Backstab or Execution, crit rate rises by 15% / 20% of its base for 12 seconds.
StatusChange status 10038 is swapped for the id +1/+2 (see Hidden mechanics)
203
Lucky Shooter
202 Break Out
L1 Immundus Crystal
20% chance that a shot does not use a bullet.
NoBullet 20%
204
Bloody
201 Counter Attack
L1 Immundus
Hits on bleeding targets have their crit rate multiplied by 1.2.
StatusBloodCritRateAdd 20%
205
Special Bullet - Burst
204 Bloody
L1 Immundus; L2 Immundus Crystal
Blue special bullets deal 10% / 20% more damage.
SkillDamageAdd 10% / 20% (21 blue-bullet move rows, index + 2000: the Heavy shots, Snipe, Rapid-Fire and the Light Combo and Powerful Shooting shots, including their Weakening and Knockback versions)
207
Backstab (starts unlocked)
none
L1 Chipped Immundus
Interact behind an unaware enemy. Footsteps alert enemies; walking slowly keeps them quiet.
SkillOpen moves 107
208
Backstab: Enhanced
207 Backstab
L1 Immundus
Backstab damage +10%.
SkillDamageAdd 10% (moves: Backstab)
209
Condemn
208 Backstab: Enhanced
L1 Immundus; L2 Immundus Crystal
Bleed lasts 15 s, then 20 s (from 10 s): +50% / +100%.
StatusChange status 10034 is swapped for the id +1/+2 (see Hidden mechanics)
Starts with six nodes. Light Combo, Powerful Shooting, Rapid-Fire, Counter Attack, Backstab and Execution are all open from the start. Rapid-Fire and Counter Attack are display nodes with no effect: the moves exist regardless, and the nodes only serve as roots for other nodes.
Break Out only exists with the talent. After a Backstab or Execution the game looks for a status swap; without the node nothing is applied. Level 1 applies status 10038 (crit rate +15% of base, 12 s), level 2 applies 10039 (+20%, 12 s). The bonus is relative to base crit rate, not extra percentage points (inferred from the status formula).
Bloody multiplies crit rate by 1.2 against bleeding targets. With a 20% crit rate that is 24%, not 40%.
Condemn changes which Bleed Viola applies. Her moves that apply Bleed (status 10034, 10 s) apply 10035 (15 s) at level 1 and 10036 (20 s) at level 2.
Bullets Recycling has a base of 10%. Whenever Viola is the leading hero, every kill already has a 10% chance of dropping 1 special bullet; the talent turns it into 20% for 2 and 30% for 3.
Improved Magazine raises the special bullet cap from 12 to 14, 16 or 18.
Lucky Shooter rolls once per bullet spent: on a 20% success the shot is free.
Adapt to Abnormality: Critical Strike works on the built-in Abnormal-state bonus (+10% of base crit damage). The talent multiplies that bonus by 2 at level 1 and by 3 at level 2, so the real result is +20% and +30%.
Adapt to Abnormality: Stamina acts on a built-in penalty. While in the Abnormal state and carrying the "Wounded (Gunner)" status (id 10004, internal name), exhaustion recovery is slowed by 50%. The talent trims that penalty to 37.5% and then 25% (inferred reading of the property: the property lowers the recovery speed, so subtracting less is better). The text speaks of bleeding, but status 10004 is not Bleed (Bleed is 10001).
Brutality inflicts true Bleed (status 10001) with a 20% chance per critical hit, only in the Abnormal state (and so also when Lunatic). It has a single level; the code checks IsHeroSanNotNormal(10002) (animalbase_value.lua 2476).
reference/lua_src/gamedata/structdata/exportdata/es_herotalent.lua: every node (columns TalentPos, PreTalent, StoneLevel, Type, Condition, Value, ValueAdd, TextValue, TextValueAdd, DefaultOpen). English text: GameTextData.HeroTalent.
luascript/structdata/fs_talentdata.lua:5-45, 119-127 (level cap = number of stones listed, DefaultOpen forces level 1, level-up).
luascript/structdata/fs_herodata.lua:401-434 (GetHeroTalentValue: value = Value + ValueAdd x (level - 1), summed over all learned nodes of a type).
luascript/structdata/ms_herotalentcondition.lua:5-63 (how the Condition column is matched).
luascript/ui/controller/playerinfoctrl.lua:4280-4315 (stone check), 4405-4455 (prerequisite: previous node level above 0), 4562-4600 (editing only at an altar), 4850-4925 (confirm, stone consumption, achievements).
Viola rows: ES_HeroTalent ids with HeroId 10002. Re-read in the heroes_a pass: Condition of Special Bullet - Burst (21 entries, indexes 2002-2029), Snipe (2,0;3,0;29,0;30,0;31,0;32,0) and Brutality (StoneLevel 4, Value 200).
luascript/logic/player/hero10002.lua:213-221 (Break Out status swap), 228-240, 388-396 (magazine size), 413-423 (Lucky Shooter).
luascript/logic/player/animalbase.lua:7499-7512 (Condemn status swap).