visual-novel
gamedev-skills/awesome-gamedev-agent-skills
Build branching visual novels with script engine, character display, choices, and player conveniences like save/load and skip.
What is visual-novel?
A playbook for visual novels covering branching scripts, character and background presentation, choice systems, and quality-of-life features (save-anywhere, backlog, skip, auto-advance). Use this when your game is primarily reading branching text with character art, such as visual novels, dating sims, or interactive fiction.
- Manage branching scripts with conditions and variables (via Ink/Yarn Spinner)
- Display characters with expressions/poses and backgrounds with transitions
- Present choices that gate content on story flags and record player decisions
- Implement save-anywhere with full script position, state, and seen-text data
- Provide backlog/history, skip (read text only), auto-advance, and text-speed controls
- Handle typewriter text reveal with instant-complete and advance mechanics
How to install visual-novel
npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill visual-novel- A branching script engine such as Ink or Yarn Spinner
- UI framework or nodes for text box, choice menu, and backlog display
- A save/load system for persisting script position and story state
- Character sprite and background art assets
How to use visual-novel
- 1.Set up your branching script in Ink or Yarn Spinner with lines, choices, jumps, and conditions
- 2.Create a text-box UI that displays speaker name and body text with typewriter reveal
- 3.Implement character sprites with expressions and positions; add background images with fade/dissolve transitions
- 4.Build a choice menu that filters options by story flags and records the player's selection
- 5.Add save-anywhere persistence that stores script position, all flags/variables, and seen-text data
- 6.Implement backlog/history, skip (read text only), auto-advance with tunable delay, and text-speed settings
- 7.Test the branch structure and flag logic before adding final art and audio
Use cases
- Build a visual novel or dating sim with multiple branching routes and endings
- Create an interactive fiction game where player choices affect story flags and later content
- Design a story-choice game with save slots, backlog, and skip features for replays
- Prototype a branching narrative structure in plain text before adding character art and backgrounds
- Implement flag-gated dialogue variations so past decisions visibly change later lines and endings
- Game developers building story-heavy games
- Narrative designers structuring branching plots and route systems
- Indie developers creating visual novels or dating sims
- Designers prototyping choice-driven interactive fiction
visual-novel FAQ
Use this skill when your game is *mostly reading branching text* with character art and backgrounds (visual novel, dating sim, interactive fiction). Use dialogue-systems alone if branching dialogue is one feature inside a larger game like an RPG.
Set flags when a choice is made, then check those flags in later lines, choices, or endings. Visibly change dialogue or story paths based on past decisions so players see the impact.
Skip fast-forwards through *already-read* text at high speed for replays. Auto-advance automatically moves to the next line after a delay, letting players read hands-free. Both are expected baseline features.
Use branch-and-merge structure with a few flagged variations rather than fully distinct story trees. Keep branches shallow and reconverge them, using flags to create reactivity without exponential writing/art work.
Save the exact script position (node/line index), all story flags and variables, and seen-text data (for skip logic). This lets a load resume the same line with the same state.
Full instructions (SKILL.md)
Source of truth, from gamedev-skills/awesome-gamedev-agent-skills.
name: visual-novel description: > Build a visual novel: a branching script, character and background display, a text box with choices, save/load, backlog, and skip/auto. Use for a VN, dating sim, or branching story game.
Visual Novel
A playbook for visual novels — the branching script, the presentation (text box, characters, backgrounds), choices, and the quality-of-life systems players expect (save anywhere, backlog, skip, auto). This is a compositional skill: it drives a dialogue engine and a UI layer. It does not re-teach the dialogue engine or UI nodes; it defines the script model and the player conveniences that make a VN pleasant to read.
When to use
- Use when the game is mostly reading branching text with character art and backgrounds: visual novel, dating sim, branching interactive fiction, story-choice game.
- Use when designing a choice/route structure, story flags, or VN conveniences (backlog, skip, auto-advance, save-anywhere).
When not to use: dialogue as one feature inside a larger game → rpg consuming
dialogue-systems. Card/board play → other genres. For the branching-script engine itself,
use dialogue-systems (Ink / Yarn Spinner).
Core loop
Read a line → advance → (at a branch) make a choice → the story branches on flags/choices → read on → reach an ending. The "game" is the shape of the branching and whether choices feel consequential; everything else is presentation and convenience.
Must-have systems
- Branching script — ordered lines + choices + jumps, with conditions and variables (Ink/Yarn).
- Text box — speaker name, body text, typewriter reveal, advance on click/key.
- Characters — sprites with expressions/poses, positions, show/hide transitions.
- Backgrounds + transitions — scene images, fades/dissolves.
- Choices — present options, gate some on flags, record the pick.
- Story state — flags/variables that branch the script and unlock content.
- Save/load (save-anywhere) — full script position + state; multiple slots; quick save.
- VN conveniences — backlog/history, skip (read text), auto-advance, text-speed setting.
- Audio — music per scene, SFX, optional voice clips.
Design knobs
| Knob | Effect | Notes |
|---|---|---|
| Text speed / instant | reading comfort | Always allow instant + a skip. |
| Auto-advance delay | hands-free reading | Tunable; pause on choices. |
| Skip scope | re-reading | Skip read text only by default. |
| Branch breadth/depth | replay value vs. cost | Branches multiply writing/art work. |
| Flag-gated content | reactivity | Lines/choices that check past decisions. |
| Route structure | story shape | Branch-and-merge vs. distinct routes (refs). |
| Choice visibility | fairness | Show locked choices vs. hide them. |
| Backlog length | convenience | Keep enough to re-read recent context. |
Patterns
1. Script as data the engine walks
# Pseudocode. Lines, choices, and jumps as data — usually authored in Ink/Yarn and stepped
# through by that runtime. The engine asks the script for "the next thing to show".
node = script.current()
if node.kind == "line":
show_text(node.speaker, node.text) # wait for advance input
elif node.kind == "choice":
options = [o for o in node.options if condition_met(o.condition, flags)] # gate by flags
show_choices(options) # wait for selection
elif node.kind == "set":
flags[node.var] = eval_expr(node.expr, flags)
script.advance(selected_option_or_none)
2. Typewriter reveal + advance (skippable)
# Pseudocode. Reveal characters over time; a click first completes the line, then advances.
def show_text(speaker, text):
name_label.text = speaker
revealed = 0
while revealed < len(text):
if advance_pressed(): # first press: reveal the whole line instantly
revealed = len(text); break
revealed += chars_per_second * dt
body_label.text = text[:int(revealed)]
push_to_backlog_when_complete(speaker, text)
wait_for_advance() # second press: go to the next line
3. Choice sets a flag that branches later content
# Pseudocode. Choices write flags; later conditions read them — that is "reactivity".
def on_choice(option):
if option.set: flags[option.set] = True # e.g. flags["helped_npc"] = True
script.jump(option.target) # follow the branch
# Elsewhere, a line/choice/ending checks the flag:
if flags.get("helped_npc"): play_route("good_ending") else: play_route("neutral_ending")
Pitfalls / failure modes
- Save that only stores a checkpoint → VNs need save-anywhere. Persist the exact script position and all flags/variables (and seen-text data) so a load resumes the same line.
- Presentation logic baked into the script → unmaintainable. Keep content (text, choices) in the script and how it looks (sprites, transitions) in the engine layer.
- No skip/auto/backlog → readers feel trapped, especially on replays. These are expected baseline features, not extras.
- Skipping unread text → players miss content. Skip should fast-forward read text only.
- Choices with no consequence → branches that reconverge instantly feel fake. Set flags that visibly change later lines, choices, or endings.
- Combinatorial branch explosion → unshippable. Prefer branch-and-merge with a few flagged variations over fully distinct trees (refs).
- Lost reading context → no backlog to re-read the last lines. Keep a history buffer.
- Hardcoded language → no localization path. Keep text in data keyed for translation.
Composition (build it from these skills)
- Script engine:
dialogue-systems(Ink / Yarn Spinner) — branching, conditions, variables, localization hooks. - Presentation:
game-ui-uxfor text-box/choice-menu layout, scaling, and safe areas;godot-ui-controlfor the concrete text box, choice menu, name plate, and backlog UI. - Persistence:
save-systemsfor save-anywhere slots, seen-text/skip data, and settings. - Audio:
audio-designfor per-scene music, SFX, and voice playback. - Visuals: the engine animation/
Tweenskill for sprite/background transitions;shader-programmingfor dissolves. - Process:
prototype-fastto test the branch structure in plain text before adding art.
References
- For the branching data model, route structures (branch-and-merge vs. routes), flags/variables,
save-anywhere + backlog/skip data, and the content/presentation split, read
references/script-and-flow.md.
Related skills
More from gamedev-skills/awesome-gamedev-agent-skills and the wider catalog.

ai-behavior-trees-utility-ai
Build production behavior-tree and utility-AI runtimes for NPC decision-making.

audio-design
Design game audio mixing, adaptive music, and beat-synced SFX using buses, ducking, and layering.

bevy-ecs
Structure Bevy games in Rust using Entity Component System: App, components, resources, systems, and scheduling.

camera-systems
Build smooth, bounded game cameras with deadzone, look-ahead, orbit, and collision—engine-neutral techniques for 2D and 3D.

gemini-watermark-remover
Remove visible Gemini watermarks from local images via CLI.

gpt-image-2
Full OpenAI-compatible GPT Image 2 coverage for text-to-image, edits, and streaming responses.