State-design hierarchy

Can current units, leaders, recruits, or objects answer the question? ├── yes → query current game state └── no ├── need one fact? → scalar variable ├── need ordered progress? → counter + completion flags ├── need unit XP/type/traits? → store the unit ├── need a permanent ability/attack? → unit object or recruit-list change └── need temporary search data? → working variable, clear immediately

Cross-scenario branch and party state

NameScopeRepresentationPurposeCleanup
wesfolk_leader_store01 → 02Stored unitPreserve Wesfolk leader XP/stateConsumed and cleared in 02
have_lady02 → 07BooleanWhether Lady Outlaw is currently in the partyCleared after Jessene reconstruction
lady_store02/05 → 07Stored unitPreserve absent companion type/XP/variationCleared in 07
escape_choice03 → route/05ScalarSelect 04a or 04bCleared in 05 prestart
last_done04 or 17 → next hub/arcStringIdentify most recently completed route/questCleared after convergence
jessica_store19 → 20/21 fallbackStored unitRemove canonical Jessene and restore laterCleared after unstore

Ka’lian hub state

NameScopeRepresentationPurposeCleanup
num_done15 → 16 loopCounterNumber of completed questsCleared at final Ka’lian visit
the_dragon15/17a → 16BooleanDragon quest completionCleared at final Ka’lian visit
a_beach15/17b → 16BooleanLizard Beach completionCleared at final Ka’lian visit
troll_hole15/17c → 16BooleanTroll Hole completionCleared at final Ka’lian visit
cursed_isle15/17d → 16BooleanCursed Isle completionCleared at final Ka’lian visit

Scenario-local objective and phase state

NameScopeRepresentationPurposeCleanup
Have_Ruby06BooleanJoin lich-death and chest conditionsCleared at victory
previous_ai_position08String state machineClearwater allied postureCleared at victory
First_Ship / Second_Ship / Third_Ship08BooleansBoarding windowsCleared on departure or victory
lich_free09BooleanDormant lich faction activatedCleared at scenario end
have_book09BooleanGate Haldric’s sewer exitCleared at scenario end
dragon_awake / dragon_dead17aBooleansBoss phase and completionCleared before hub return
got_enemies / got_treasure17aBooleansFull-clear and cave reward stateCleared before hub return
queen_awake17dBooleanSwitch Cursed Isle objectiveCleared at victory
chest_obtained19BooleanRandom chest recoveryCleared at victory

Dynamic director working state

NameScopeRepresentationPurposeCleanup
random04a / 17c / 17dScalarChoose randomized setup permutationCleared after setup/victory
triggered_scorpion_locs04aArray/containerPrevent repeat swamp ambushesCleared at victory
possible_serpent_locs / serpent_loc_i14Location array/indexChoose fair serpent spawnCleared after spawn
side_N_top_enemy_count19Per-side scalarApproximate peak army strengthCleared after trigger
side_N_undead_backup_triggered19Per-side booleanAllow one wave per frontCleared at victory
undead_spawns_so_far19CounterChoose global wave compositionCleared at victory
next_corpse_spawn_turn / next_skeleton_spawn_turn22Future-turn scalarRandomize recurring pressureCleared after firing
wc_loc / skele_loc / skele_from / skele_type22Working valuesPlace recurring undeadCleared after spawn

Presentation and extraction state

NameScopeRepresentationPurposeCleanup
stored_Jessene18Temporary stored copyCreate Jessene in Hiding duplicateCleared inside cutscene
aethyr_store21Temporary type storeAnimate Aethyr entranceCleared immediately
last_orc_leader22Stored unitPreserve surviving witness for escapeConsumed during victory
escape_boat22Coordinate containerSelect side-specific ship routeConsumed during victory
haldric_s23Stored unitAnimate current Haldric type into epilogueCleared after unstore

Objects and recruit lists are also state

State mechanismCampaign example
Permanent unit objectRuby of Fire and Storm Tridents
Object removalScenario 19 removes ruby_of_fire from Haldric
Persistent recruit-list changeWesfolk, Peasant, and merfolk recruitment unlocks
Current-unit query instead of flagScenario 10 checks whether either wizard leader remains
Unit overlayAethyr visibly carries the forged treaty

Cleanup review checklist

  • Every temporary random number, location array, and stored copy has a named cleanup site.
  • Cross-scenario storage is cleared only after a successful unstore or reconstruction.
  • Branch flags survive until all consumers have run.
  • State that can be derived from units is not duplicated in a boolean.
  • Objects and recruit access are tested after advancement and save/load.

The machine-readable atlas is bundled at assets/state-lifecycle.json.