Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Several stories in one project

Lives in: game.json → stories

Early — not final UX. Multi-story packs are implemented (catalog, save story_id, unlock / clear_flag, new_game:<id>). There is no polished shipped story-select / campaign UI — you wire a hub in screens.json yourself. Labels, hub layout, and comfort flows may change.

Optional catalog of story packs in one project (episodes or separate stories). Omit the key for a single pack at story/ (id main).

"stories": [
  {
    "id": "main",
    "title": "Episode 1",
    "path": "story",
    "start": "start",
    "mode": "episode",
    "unlock": { "always": true },
    "clear_flag": "ep1_cleared"
  },
  {
    "id": "ep2",
    "path": "stories/ep2",
    "mode": "episode",
    "unlock": { "flag": "ep1_cleared" }
  }
],
"session": {
  "default_story": "main"
}

Usually you need

IdeaHow
One storyOmit stories — same as today
Hub menu (DIY)screens.json screen whose button hook is "on_click": "new_game:ep2"
Lock episode 2"unlock": { "flag": "ep1_cleared" } + "clear_flag" on episode 1
Slot labelsoccupied_label: "Slot {n} — {story_title} — {node}"

All pack keys

KeyTypeDefaultEffect
idstringrequiredStable pack id (saved as story_id)
pathstring"story"Folder under the project root with script.txt and/or story.json
startstring"start"Entry node id for New Game; if that id is missing, the first moment is used (Scenes and jumps)
modestring"anthology"episode or anthology
titlestring""Display name (slot labels); fallback = id
title_keystring""Locale key for title when set
unlockobject{always:true}{ "always": true } or { "flag": "<name>" } (reads prefs.campaign)
clear_flagstring""On story end in episode mode, set this key true in prefs.campaign

Session

KeyTypeDefaultEffect
session.default_storystringfirst pack / mainPack for bare new_game and boot graph

Actions / show_if

SurfaceEffect
new_gameStart default_story
new_game:<id>Start that pack if unlocked
continue / load_slot:NActivate pack from the save’s story_id, then restore
story_unlocked:<id>True when unlock passes against prefs.campaign

Saves

All packs share one slot list and one autosave (same early multi-slot surface). Each save stores story_id. Load grid tokens: {story}, {story_title} (plus {n}, {node}).

In development · Save, Back and story end · Screens · game.json map