Subscenes & Navigation
A fragment can span several scenes. @ scene_id declares a subscene; it runs until
the next @, the next ===, or the end of the file. Jump to one with -> from a
choice body, or from the end of another scene:
> Follow the dog -> alley
@ alleyThe alley smells of rain.> Keep following ...> Turn back ...Seamless transitions
Section titled “Seamless transitions”Navigation never interrupts the reader: once the prose before a -> is revealed, the
target scene’s content follows in the same flow - no Continue button between scenes.
The only thing that ever asks for a Continue is a
... pause. Write scene breaks for reading
rhythm; use ... when you want an actual stop.
Handing over from the entry
Section titled “Handing over from the entry”The entry scene may end in a -> of its own, which is how a fragment whose first menu
is a hub gets written:
The sheet goes up on the corridor wall in the first week back.
-> pick
@ pickSo: what's it going to be?
>* The sports column -> sport>* The music column -> musicBecause navigation is seamless the player sees no join at all: setup prose, then the
menu, as one scene. What it buys you is that the menu is now a -> target, which the
entry can never be, so every choice in the fragment can send the player back to it.
A fragment still has to offer the player a choice somewhere. It just no longer has to
offer one in the entry: the build checks that some scene reachable from the entry has
choices, and fails with never offers the player a choice when none does.
Rules (all checked at build time)
Section titled “Rules (all checked at build time)”-
A nav target must match a subscene in the same fragment. The one exception is the special target
death, which ends the life immediately. -
->ends the current body’s execution - nothing after it runs. Content written below a->in the same body is a build warning, because it can never be reached; a choice written there simply never appears. A second->down there is an error rather than a warning, whatever sits between them: dead prose is visibly missing when you read the scene, while a jump that never fires just sends the player somewhere else and says nothing. A->inside an*ifarm only ends the body when that arm fires, so it strands nothing. -
A jump takes no condition of its own. To route on state, put the
->inside an*ifblock, which is where every other branch in the format lives:*if VIT <= 20-> death*else-> alley*endif -
A subscene that’s never navigated to is a build warning.
A hub is a subscene the player comes back to. It is not a special construct, just a subscene whose choice bodies navigate back to it.
@ market*set: visits += 1*if visits = 1 The market is louder than you expected.*else You drift back into the noise, visit number {visits}.*endif
> Ask about the miller's daughter She left in spring, they say. -> market
> Price the good knife *requires: WEA >= 40 More than you have. Barely. -> market
>* Head home You go, pockets no lighter.
*exhausted: leavingWhat the runtime does with that:
- Taken choices come back marked “Taken” instead of vanishing, so the player can
see what they already spent. Sticky (
>*) choices stay pickable forever. - The scene body runs again on every visit. Prose repeats unless you gate it, which
is what the
visitscounter is for: count, then branch on the count. See Counting with+=. - When only spent and locked doors are left, the scene follows its
*exhausted:target, or ends the fragment if it has none. Nobody is ever stranded, but that ending is abrupt.
Two footguns the build warns about
Section titled “Two footguns the build warns about”- Effects in a hub body re-fire every visit.
*effects: HAP+2at the top level of a revisitable subscene grants HAP on every loop. Gate it behind*if visits = 1, or move it into a choice. (*set:lines are exempt: a counter is supposed to run every visit.) - A sticky choice that grants stats is farmable.
>* Busk for coinswith*effects: WEA+1and a loop back is free money forever. Drop the*, or gate the reward with*if !busked…*set: busked…*endif.
*exhausted: - the way out when a scene runs dry
Section titled “*exhausted: - the way out when a scene runs dry”@ market> Ask about the fire She left in spring. -> market> Price the knife *requires: WEA >= 40 -> market*exhausted: leavingIt fires when the scene has nothing live left to offer: every choice taken, or every
remaining one locked. Spent-only is seamless, the way -> is; all-locked keeps the
Continue button, so the player sees the doors they could not open before moving on.
Without it, a dry hub just ends the fragment.
It is the scene’s property, not a choice’s, so it belongs at the top level of a
subscene. Put it anywhere there: after the choices reads best, and unlike a bare ->
in that spot it cannot be mistaken for the last choice’s navigation. Inside an *if
or *random block it is a build error, and one scene can declare only one. The target
is checked like any -> target and counts as a reference, so it will not be flagged
as an unreachable scene.
Scenes without choices
Section titled “Scenes without choices”A subscene with prose and no choices ends the fragment after its prose - or follows
a trailing -> if it has one. Use these for endings and connective tissue.