OptionalcarryoverOptionalclearedhexes [clear_shroud] has uncovered, by side id, as "x,y"; the fog itself is a game layer
Optionalfiredids of one-shot events that already fired, so a restore keeps them spent
Optionalmapthe primary map, when the content declares one
ReadonlymapsOptionalobjectsscenario [object] placements, as data; what an object does on pickup is the game's
OptionalpendingOptionalrandomState of the hook-facing random stream (core.Generator), present once any hook has drawn
from HookWorld.random. Carried in world rather than as a separate save concern so a
restored runtime resumes exactly the same stream instead of reseeding it.
Optionalrolesunit ids [role] assigned to a named role, so a later event can say role=courier
OptionalscheduleReadonlysidesOptionalsideWhat each side's own [victory]/[defeat] conditions decided, keyed by the side id
[side] declared. Only sides whose conditions fired appear here; a side that wrote none
keeps no entry, the same "only what the content made" rule world.sides follows. The
scenario-wide status is the aggregate: a side that won or lost ends it too.
Optionalstoryscenario [story] entries, as data; rendering them is the story-screen work (item 264)
Optionaltimethe current schedule entry, by id
ReadonlyunitsReadonlyvariablesOptionalvillagesVillage ownership, keyed "x,y": what [capture_village] records. The framework owns the
fact of who holds a village; what holding one is worth stays the game's rule (income is
world.sides[id].villageGold applied by the game, not minted here).
what
[endlevel]decided this scenario hands to the next one, until it is applied