StoryMode is a Visual Studio Code extension that turns VS Code into a clean, purpose-built writing studio for story scripts used in video-games. Write scenes in plain text with the Narrative DSL, collect them with a single .story manifest, preview the screenplay layout in-editor, and export a print-perfect PDF – all without ever leaving VS Code.
──────────────────────────────────────────────────────────────────────── FEATURES ────────────────────────────────────────────────────────────────────────
• Manifest-driven projects – one <title>.story file lists every
.narrative arc in playback order.
• Strict, readable headers
– ::story: & ::scene: declarations, plus rich @title, @location,
@time, @characters, etc.
• Precision syntax highlighting for keys and values, anchors, cues, dialogue headers, comments.
• Snippets & IntelliSense for scene skeletons, dialogue blocks, metadata tags and common cues.
• Hover tool-tips – every recognised @key shows an in-editor
description.
• Live Preview – render the whole script as a paginated screenplay in a side panel.
• Print Script – one-click PDF export, including cover page, table of contents, per-arc page breaks and an End of Document page.
• Download-once Chromium – headless Chrome (≈ 40 MB) is fetched once and cached for all future PDF jobs.
• Verbose Output panel – real-time logs for parsing, preview refresh, PDF progress and Chromium management.
──────────────────────────────────────────────────────────────────────── QUICK START ────────────────────────────────────────────────────────────────────────
1 Install StoryMode from the VS Code Marketplace.
2 Create a file intro.narrative and start a scene:
::scene: intro_arrival
@title: Arrival
@location: Forest Edge
@characters: Alex, Guide
[[ Alex ]]
"Is anyone out here?."
^^ Leaves rustle in the wind.
3 Create the project manifest echoes-of-light.story:
::story: echoes_of_light
@title: Echoes of Light
@authors: Morgan Yu
@start: intro.narrative
files:
- intro.narrative
- main.narrative
- outro.narrative
4 Press Ctrl ⇧ P / Cmd ⇧ P and run
• StoryMode: Preview Story – opens the formatted script.
• StoryMode: Print Story – exports a ready-to-send PDF.
──────────────────────────────────────────────────────────────────────── PROJECT LAYOUT ────────────────────────────────────────────────────────────────────────
echoes-of-light.story ← manifest / global metadata ├── intro.narrative ← arc: intro ├── main.narrative ← arc: main └── outro.narrative ← arc: outro
Each .narrative file may hold one or more scenes:
::scene: main_chase
@title: The Chase
@location: Old City Rooftops
@time: Night
[[ Hunter ]]
>>>sfx: [crossbow_bolt_01]
"End of the line!."
──────────────────────────────────────────────────────────────────────── NARRATIVE DSL – CHEAT SHEET ────────────────────────────────────────────────────────────────────────
::story: id – manifest header (one per project)
::scene: id – scene start
::end: {{ id }} – scene end (linear)
::end: {{ from }} -> {{ to }} – optional jump to a different arc file
@key: value – title, location, time, characters, tone, mood…
custom keys are preserved by the compiler.
[[ Character ]] – dialogue header
^^ action line – stage direction / narration
>>>sfx: [alarm_01] – cue (sfx | music | vfx | camera | event)
"Spoken line." – dialogue text
-> target_scene – hard jump at runtime
# comment – ignored in output
/// writer note /// – prints as footnote in PDF
Any declaration ID becomes an anchor: reference it elsewhere as {{ id }}.
──────────────────────────────────────────────────────────────────────── EXAMPLES ────────────────────────────────────────────────────────────────────────
Full working samples live in docs/examples/ – including a manifest, three arcs, cues, jumps and final PDF export.
──────────────────────────────────────────────────────────────────────── CONTRIBUTING & LICENSE ────────────────────────────────────────────────────────────────────────
Pull requests are welcome – read CONTRIBUTING.md.
Code licensed under the Yuxi Labs License (see LICENSE.md).

