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

Node fields

Fields on one dialogue node. Script and JSON describe the same object — Story nodes.

{
  "id": "park",
  "talking": "hana",
  "text": "Hello.",
  "commands": [{ "type": "bg", "value": "street" }],
  "next": "after"
}

Typical node

Common shape authors actually use (omit unused keys):

{
  "id": "park",
  "talking": "hana",
  "label": "Hana",
  "text": "Hello.{@c1} Ready?",
  "set": { "met_hana": true },
  "commands": [
    { "type": "bg", "value": "street", "transition": "fade", "duration": 0.5 },
    { "type": "char", "name": "hana", "position": "left" }
  ],
  "flow_commands": [
    [{ "type": "sfx", "value": "click" }]
  ],
  "exit_commands": [
    { "type": "char", "name": "hana", "show": false }
  ],
  "exit_delay": 0.3,
  "next": "after",
  "choices": {
    "items": [
      { "text": "Stay", "target": "stay" },
      { "text": "Go", "target": "leave" }
    ]
  }
}
ZoneKeys
Identity / speechid, talking, label, text
Enterset, commands
Mid-lineflow_commands (+ {@cN} in text)
Leaveexit_commands, exit_delay
Branchnext, next_if, choices, input
Body linkstext_metas
Timing / panel extrasauto, panel, panel_id, … (below)

Script side-by-side: Story nodes · script.txt syntax. Batches: Command flow.

Usually you need

KeyTypeDefaultEffect
idstringauto _NNode id (start = New Game entry; omit/_N → first moment is used)
textstring—Dialogue body
talkingstring or string[]—Who is speaking this moment (one id or several)
commandsarray—Run on enter — Command flow
nextstring or nullnext in file / nullLinear target
choicesobject—Menu — Choices
inputobject—Text field — input
setobject—Flags on enter

All fields

KeyTypeDefault / omitEffect
idstringauto _NNode id; start is the default New Game entry (Scenes and jumps)
textstring—Dialogue (BBCode + {@…} + {flag})
labelstring—Speaker plate override
talkingstring or array—Speaker id(s)
talking_anchorstring—Initial focus when multi-speaker
setobject—Flags on enter; "= expr" = expression
commandsarray—Enter commands
flow_commandsarray—Batches indexed by {@cN} (1-based)
exit_commandsarray—Run on leave
nextstring or nullautoLinear target; NEXT / END / START keywords
next_ifarray { expr, then }—First truthy, else next
choicesobject—Choices
inputobject—input
autonumber ≥ 0—Auto-advance seconds ([auto N])
exit_delaynumber ≥ 00Seconds after exit_commands before next node
text_metasobject—Map [url=key] → action — Flow tags
panelstringresolve chainPreset override
panel_idstringfrom talking → "main"Target panel instance
text_mode"replace" | "append" | "plates""replace"Content mode — Appending text
append_direction"down" | "up""down"Append / plates direction
append_gap_lines / append_gap_pxnumber ≥ 00Append gaps (append_gap_lines ignored in plates)
platestring—Plate name for text_mode plates this moment — Theme: panel → Plates
hide_panelboolfalseHide the routed dialogue panel for this node (wins over routing show)
hide_continue / hide_backboolfalseHide nav chrome
driver_typingbooltrue (unless silent)Typing driver / beep
panel_shaderobject or nullabsent = clearPer-node panel shader
panel_presence_modeenum—One-cycle presence
panel_non_talking_mode"hide" | "readonly_last_text"—One-cycle
panel_readonly_style_keystring—One-cycle readonly style
labelplateobject—Same keys as labelplate command
text_refstring—Strings catalog key
text_fromstring—Copy text from another node id

Panel routing for presets / presence: Panel routing. panel_shader absent clears (unlike sticky panel / bg shaders).