node tools/soakfx.js --write writes tools/soakfx-tyranids.json: every one of the ledger's 1,106 form ids, with exposed, tunnels, healMult and healMultOwn (1, 0, 1, 1 where no rule applies), from the rules in tools/soakfx-rules.json (our numbers, each citing a Wahapedia 11th-edition page or the BSData catalogue at 374f505; no rules wording). A standalone module: nothing here changes the ledger, its page or the live site; a later card wires it in (the page divides Soak by exposed and multiplies it by healMult, each under a slider).
Method
- Found by: walking BSData's Tyranids.json and Library - Tyranids.json for abilities that regain wounds, return destroyed models, or remove a unit into strategic reserves; then Wahapedia's Tyranids faction page for detachment rules, enhancements and stratagems that do the same; then the core rules' healing (02.02.04), strategic reserves (20, 20.02) and Devastating Wounds (24.10). The ledger's own rule list agrees: its "Heals or returns models" and the reserve rules among "Arrival or reserve rule" are these.
- A turn is a battle round (one of the army's turns and one of the enemy's).
- Wounds to remove = Σ models × W over the form's members (BSData's W, checked against build/units.json by
--units).
1. Leave and come back
| Rule | Who | When it leaves | Spares an enemy turn? | Counted |
|---|---|---|---|---|
| Subterranean Hunter | The Red Terror | end of any Fight phase, its own included, when unengaged | yes | exposed 0.5 |
| Death From Below | Raveners (and Hyperadapted Raveners leading them) | end of the opponent's turn, unengaged | no: it has stood through the enemy's shooting and fighting | listed; tunnels |
| Retreat Below | any unit, or two BURROWERs (Subterranean Assault, 1 CP) | end of the opponent's Fight phase | no | listed, not counted (CP) |
| Scanner Gheist | Deathleaper, Lictor, Neurolictor (Ambush Predators, 1 CP) | end of the opponent's Fight phase | no | listed, not counted (CP) |
| Tunnel Network | a unit near a marker (Subterranean Assault, 1 CP) | moves between markers in its own turn | no | rules file only |
Only one Tyranid rule takes a unit away before the enemy's turn: the Red Terror's. Everything else leaves after the enemy has shot and fought, so it buys a fresh arrival (and, for a BURROWER in Subterranean Assault, a new tunnel marker) but no enemy turn off the table.
exposed (the share of enemy turns the form stands on the battlefield): 1 for every form but the Red Terror's ten, which take 0.5. The assumption: it ends its own Fight phase engaged, and so stays for the enemy's turn, only when its charge landed and the unit it charged survived; a failed charge or a wiped target lets it leave. That is about half the enemy's turns. exposedRange brackets it from the charge model (T-590): arriving from reserves every turn, so only the arrival turn's charge counts (the best way in: Deep Strike 0.28, Synaptic Nexus' +1 0.42, a tunnel 0.58), times 0.75 for the fights where it wipes its target (wipeShare 0.25), up to walking in and staying (the form's lands, 0.69 to 0.78): 0.21 to 0.69 in most detachments, 0.44 to 0.69 in Subterranean Assault, 0.21 to 0.78 in Vanguard Onslaught. 0.5 sits inside every bracket; the page's slider moves it.
tunnels (Subterranean Assault only; for a later Presence credit): markers by the end of round 3, assuming the BURROWER starts in reserves and first arrives in round 2: 1, plus the chance it goes back and arrives again in round 3 (the Red Terror 1 − exposed = 0.5; Raveners reArriveShare 0.5; Mawloc and Trygon none). Red Terror 1.5, Raveners 1.5 (alone or led by Hyperadapted Raveners), Mawloc 1, Trygon 1; six forms in all. BURROWER on the Mawloc and Trygon comes from their Wahapedia datasheets (the BSData commit lacks it; the detachment grants it as well).
2. Healing received
healMult = (wounds to remove + wounds healed a battle round) ÷ wounds to remove, best case: the healer is in range and picks this form, and the form has lost at least that much. Healing only matters against an enemy that needs more than one turn to remove the form, so this is an upper bound.
| Source | Reaches | Wounds a round | In Spawn already? |
|---|---|---|---|
| Unstoppable Monster | Old One Eye itself | 2 × E[D3] = 4 (start of each player's Command phase) | no |
| Swallow Whole | the Red Terror itself | maw kills a fight × E[D3+2] × lands = 0.484 × 4 × 0.69 to 0.78 = 1.34 to 1.50 | no |
| Spawn Termagants (Tervigon) | a TERMAGANTS form | E[D3+3] = 5 Termagants (capped at models − 1 alone) | yes (Tervigon's Spawn line) |
| Feed the Swarm (Assimilation Swarm, a HARVESTER) | any form | the better of one model healing E[min(D3+1, W − 1)] or one INFANTRY model back whole (three to an ENDLESS MULTITUDE unit) | yes (the HARVESTER's Spawn line) |
The maw: one attack at 2+, Strength 5; against infantry every wound is a critical one with Devastating Wounds, so D3+2 mortal wounds that slay one model. Against fresh stand-ins weighted by the typical army's infantry points: GEQ 0.556, MEQ 0.556, TEQ 0.417, 0.484 kills a fight, 1.94 wounds healed a fight.
healMultOwn keeps only a form's own heals. The Tervigon's Termagants and each HARVESTER's regeneration are already the healer's Spawn line (T-595), so a page that credits both the healer and the healed counts one act twice: wire one of healMult (credit the healed) or the Spawn line (credit the healer), not both.
Results
| Unit | exposed | tunnels (SA) | healMult outside Assimilation Swarm | inside it | healMultOwn |
|---|---|---|---|---|---|
| The Red Terror | 0.5 | 1.5 | 1.15 to 1.17 (Swallow Whole) | 1.48 | 1.15 to 1.17 |
| Old One Eye | 1 | 0 | 1.44 | 1.78 | 1.44 |
| Carnifexes led by Old One Eye | 1 | 0 | 1.16 (two) to 1.24 (one) | 1.28 to 1.41 | 1.16 to 1.24 |
| Termagants ×10 / ×20 (a Tervigon near) | 1 | 0 | 1.5 / 1.25 | 1.8 / 1.4 | 1 |
| Termagants led (Prime, Neurotyrant…) | 1 | 0 | 1.19 to 1.31 | 1.31 to 1.5 | 1 |
| Raveners (and Hyperadapted) | 1 | 1.5 | 1 | 1.2 | 1 |
| Mawloc, Trygon | 1 | 1 | 1 | 1.21 | 1 |
| Hive Guard ×3 / ×6 | 1 | 0 | 1 | 1.33 / 1.17 (one model back, 4 wounds) | 1 |
| Other infantry in Assimilation Swarm | 1 | 0 | 1 | 1.2 to 1.6 (one model back; three for ENDLESS MULTITUDE) | 1 |
| Monsters in Assimilation Swarm | 1 | 0 | 1 | 1.1 (30 W) to 1.3 (10 W): 3 wounds healed | 1 |
| Spore Mines | 1 | 0 | 1 | 1 (one 1-wound model) | 1 |
Counts: 10 forms with exposed below 1, 6 with tunnels, 201 with healMult above 1 (most of them Assimilation Swarm), 40 with healMultOwn above 1.
Assumptions (all in tools/soakfx-rules.json assumptions)
exposedFightLeaver0.5: the Red Terror stands in about half the enemy's turns (above).wipeShare0.25 andreArriveShare0.5: forexposedRangeandtunnelsonly.healerNear: best case, as the ledger's other lines: a HARVESTER (Assimilation Swarm) or a Tervigon (TERMAGANTS) is in range each round and picks this form; each heal source reaches a form once a round.damaged: every heal is counted in full (the form has lost that much); a heal on one model never passes its starting wounds and never revives (core rules 02.02.04).harvesterSelf: a HARVESTER may regenerate its own unit (no FAQ either way).- Steady state: no round-1 discount (a heal needs earlier damage).
- The maw goes into infantry (best case); Surprise Assault's re-roll of 1s and other dice buffs are left out of its kills.
Not counted
Spirit Leech (Zoanthropes: heals when an enemy fails Battle-shock, the ledger's Battle-shock kind); Rapid Regeneration and Ablative Carapace (Feel No Pain, dice, CP); Rapacious Hunger, Reclaim Biomass, Endless Swarm, Replenishing Swarms, Unending Waves (CP); Regenerating Monstrosity and Biophagic Flow (enhancements, not in the ledger's forms); Alien Cunning, Tremor Senses, Neuronode (redeploys before the battle: the charge model's ways in); Stalking Menace and Outflank (Infestation Swarm, not a ledger detachment); AIRCRAFT going back at the end of the enemy's turn; a unit that starts in reserves being untargetable in the enemy's first turn (a way in for every Deep Strike unit, the charge model's).
A difference noticed
docs/data/kindfx.json gives Unstoppable Monster once a battle round (per: cmd, its own Command phase); BSData and Wahapedia both say the start of each player's Command phase. This module uses twice; kindfx.json is untouched.