Capsule VN Engine

Complete User Manual — Version 1.8.0

Part I: Foundation

1. Welcome to Capsule VN Engine

Capsule VN Engine is a complete visual novel creation environment that transforms your stories into playable, distributable games — all within a single, self-contained file.

1.1 Vision

We built Capsule for creators who want to focus on story, not syntax. Every feature exists to remove friction between your imagination and your audience. No installation. No dependencies. No server required. Write, preview, export, share.

The engine embraces a monolithic philosophy: your entire game — code, assets, and runtime — lives in one HTML file. This guarantees:

  • Zero deployment complexity: Double-click to play
  • Universal compatibility: Runs in any modern browser
  • Permanent preservation: No broken links, no deprecated platforms
  • True ownership: Your game, your file, forever

1.2 Philosophy

Accessible depth. Capsule offers two modes: Simple for immediate creation, Expert for granular control. Switch anytime without losing work.

Visual-first design. What you configure is what you see. Real-time preview, instant feedback.

Narrative integrity. The engine protects your story from technical failure: health checks catch errors before they reach players, rollback systems preserve testing states, and validation ensures your logic holds together.

1.3 Who is Capsule for?

Profile What Capsule offers you
Beginner Writer Simple Mode, guided creation, no code required
Experienced Author Variables, conditions, complex narrative branches
Game Designer Inventory, QTE, hotspots, progression systems
Educator Instant export, easy sharing, cross-platform
Archivist Enduring format, autonomous, no external dependencies

Part II: The Basics

2.1 Your First Project

When you open Capsule, you see three columns:

Zone Function
Scenes (left) List of all scenes in your story
Editor (center) Configuration of the selected scene
Preview (right) Real-time rendering of your game

Creating an initial scene

  • Click ➕ New Scene in the left panel
  • Choose Narrative scene (for dialogue and atmosphere)
  • The scene appears in your list, ready to configure
Important Note: Capsule automatically creates a start scene. This is where every player begins. You can rename it, but never delete it without creating another entry point.

2.2 Interface and Modes

Simple Mode vs Expert Mode

Mode Display Ideal for
Simple Essential fields only First steps, narrative focus
Expert All features Complex logic, advanced systems

Switch modes via the Simple / Expert toggle in the header. Your project remains intact; only the interface adapts.

The Tools (Drop-down menu)

Click ⚙️ TOOLS to access:

  • Variables — Track game state (score, flags, relationships)
  • Actors — Reusable characters with multiple expressions
  • UI Custom — Global visual styling
  • HUD — On-screen variable display
  • Inventory — Collectible and usable items
  • Events — Global conditional triggers
  • CG Gallery — Unlockable images and videos
  • Timeline — Visual story map
  • Global Search — Instant cross-project search (Ctrl+Shift+F)
  • Stats — Project health and size monitoring

2.3 Fundamental Concepts

The Scene, unit of narration

A scene in Capsule is a self-contained narrative moment. It can:

  • Display dialogue with characters
  • Show a background image
  • Play music and sound effects
  • Present choices to the player
  • Execute logic (variables, conditions)
  • Transition automatically to another scene

The Reading Flow

[start] → [scene A] → [scene B] → [choice 1] → [scene C]
                              ↘ [choice 2] → [scene D]

Capsule follows connections you define. No connection = the story pauses (intentional for endings, problematic elsewhere).

Variables: your story's memory

Variables store information across scenes:

Type Usage Example
Number Quantities, scores, counters affection = 45
Text Names, codes, player input playerName = "Alex"
Boolean True/False flags hasKey = true

Access a variable in dialogue with {variableName}.

Concrete Example

In a romance scene, display the player's chosen name:

"Good morning, {playerName}. Did you sleep well?"

If playerName contains "Jordan", the player sees: "Good morning, Jordan. Did you sleep well?"

Part III: Creating a Story

3.1 Scenes

Scene Types

Type Description Typical Usage
Narrative Dialogue, characters, atmosphere Conversation scenes, description
Choice Presentation of multiple choices Narrative decisions, branching
Logic Invisible execution, immediate redirect Calculations, conditional routing, hubs

Configuring a Narrative Scene

Visual & Sound section:

  • Background: Image or video (16:9 recommended, 1920×1080 optimal)
  • Transition: Animation between this scene and the previous
  • Effect: Atmospheric overlay (rain, snow, particles, etc.)
  • Overlay: Additional visual layer (screen effects)
  • Music: Background track (loops automatically)
  • SFX: One-shot sound effect on scene entry
  • Filter: Color grading preset

Dialogue Appearance:

  • Font: Typography family
  • Box Shape: Geometry of dialogue containers
  • Colors: Border, background, and text for both dialogue and name boxes

Best Practices: transitions

Match transition style to narrative rhythm:

  • cut — Abrupt changes, action, tension
  • fade_black — Time passing, chapter breaks
  • slide_left/right — Spatial movement, scene shifting
  • iris_in/out — Dramatic reveals, dream sequences

Logic Scenes (Expert)

A Logic Scene has no visual presence. It executes instantly:

  • Check ⚡ LOGIC SCENE in the scene options bar
  • The scene disappears from visual preview
  • Configure Actions to modify variables
  • Set Auto Next Scene for immediate continuation

Example: simplified combat system

Scene combat_check (Logic):

  • Action: force = force + dice(1,6) (roll 1-6, add to strength)
  • Condition: if force >= 10, go to combat_win
  • Else, go to combat_lose

3.2 Dialogues

Structure of a dialogue line

Each dialogue block contains:

  • Speaker: Character name (optional — leave empty for narration)
  • Text: The spoken content, supporting formatting tags

Text Formatting

Tag Effect Example
[b]text[/b] Bold [b]Run![/b] → Run!
[i]text[/i] Italic [i]whispers[/i] → whispers
[u]text[/u] Underline [u]important[/u]
[shake]text[/shake] Shaking [shake]EARTHQUAKE[/shake]
[wave]text[/wave] Wave [wave]floating[/wave]
[rainbow]text[/rainbow] Animated Rainbow [rainbow]celebration[/rainbow]

Variables in dialogue

Insert {variableName} anywhere in text. Capsule replaces it with the current value.

Complete Narrative Example

Variable: gold = 150

Dialogue: "You have {gold} gold coins in your pouch."

Player sees: "You have 150 gold coins in your pouch."

Later, after gold = gold - 50:

Same dialogue displays: "You have 100 gold coins in your pouch."

Actor Syntax: {actor:id}

Reference an actor's display name dynamically:

Variable: heroName = "Alexandre"

Actor configuration:
- ID: hero
- Display name: {actor:hero} → resolves to "Alexandre"

Dialogue: "My name is {actor:hero}."
Player sees: "My name is Alexandre."

This decouples narrative reference from actual name, enabling player customization.

3.3 Narrative Flow

Automatic Navigation

Set Auto Next Scene (ID) to continue immediately after the last dialogue line. Ignored if choices exist.

Navigation via Choices

Choices override auto-next. Each choice defines:

  • Text: Button label
  • Target: Destination scene
  • Optional: Conditions, actions, inventory operations

Backtrack (Previous)

The Previous button navigates backward through dialogue history, or to the previous scene if at the first line.

Attention Point: Previous does not undo variable changes or inventory modifications. It only affects navigation position.

Part IV: Choices and Consequences

4.1 Simple Choices

The foundation of branching narrative.

Configuration:

  • Click ➕ Choice in the Choices section
  • Enter Button text (what the player sees)
  • Select Target scene (where the choice leads)

Example: First Decision

Scene: tavern_arrival

  • Choice 1: "Order a drink" → tavern_drink
  • Choice 2: "Ask about the stranger" → tavern_inquiry
  • Choice 3: "Leave immediately" → tavern_leave

4.2 Conditional Choices

Choices can appear, disappear, or change based on game state.

Variable Conditions

Operator Meaning Example
= Equal to gold = 100
!= Not equal to metGuard != true
> Greater than strength > 5
< Less than fear < 3
>= Greater or equal level >= 3
<= Less or equal wounds <= 2

Locked Choice Styles

When a condition is false, choose how the choice appears:

Style Appearance Behavior
Locked 🔒 Grayed, padlock icon Not clickable, visible
Hidden Invisible Completely absent
Grayed Grayed without icon Not clickable, visible
Visible Normal Clickable (ignores condition)

Example: Narrative Locked Choice

Choice: "Unlock the gate" (requires hasKey = true)

If locked: Display 🔒 "Unlock the gate" with alternative text: "You need a key to open this."

Player understands why they cannot proceed, creating narrative tension.

Alternative Text

When locked, display different text to explain the barrier:

  • Normal text: "Enter the secret room"
  • Alternative (locked): "A heavy iron door blocks your way"

4.3 Invisible Choices

Set style to Hidden for choices that only appear when conditions are met. Creates emergent narrative paths:

Example: Secret Detection

Hidden choice: "Notice the hidden compartment" (requires perception >= 8)

Players with high perception see the option. Others never know it existed.

4.4 Choice Actions

Execute operations when a choice is selected:

Action Effect Syntax
Add to variable variable += value trust + 5
Subtract from variable variable -= value suspicion - 3
Set variable variable = value side = "rebels"
Add item Add to inventory potion + 1
Remove item Remove from inventory key - 1
Use item Consume consumable healing_herb (use)
Reset all Restore initial variable values Reset game state

Example: Narrative Consequence

Choice: "Defend the village"

  • Action: heroism + 10
  • Action: villageSaved = true
  • Target: village_aftermath

Later scenes check villageSaved to determine available NPCs and dialogue.

Part V: Advanced Logic

5.1 Typed Variables (Expert)

Capsule v1.6.3+ introduces explicit variable types for safer logic.

Type Icon Values Usage
Number 🔢 Integers or decimals Calculations, comparisons
Text 🔤 Strings Names, descriptions, codes
Boolean ✓✗ true / false Flags, binary states

Click the type icon to change. The engine validates operations:

  • Addition/subtraction only on Numbers
  • Boolean variables present true/false dropdowns
Best Practices: Declare all variables in the Variables Manager before use. The Health Check warns about undeclared variables, preventing runtime errors.

5.2 Triggers (Expert)

Triggers execute automatically when conditions are met at scene entry or exit.

Structure of a Trigger

WHEN: [Start of scene / End of scene]
IF: [variable] [operator] [value]
THEN: [Action 1, Action 2, ...]

Trigger Action Types

Action Parameters Effect
Go to Scene Scene ID Immediate redirect
Set Variable Variable, value, operation Modify variable
Play Sound Audio file One-shot sound effect
Roll Dice Min, Max, Target variable Random generation
Roll + Add Dice range, Source variable, Target Dice + bonus (D&D style)

Example: Security Trigger

Scene: throne_room

Trigger (Start):

  • IF: hasRoyalSeal != true
  • THEN: Go to throne_denied

Players without the seal are automatically redirected before seeing the throne room.

Evaluation Order

Triggers process top to bottom. The first Go to Scene action stops evaluation (short-circuit behavior).

Attention Point: Multiple triggers can fire in sequence if none redirect. Use this for compound effects: check health, then check inventory, then play ambient sound.

5.3 Logic Scenes

Invisible routing nodes for complex logic.

Use cases:

  • Hub scenes: Central decision point with multiple conditions
  • Variable normalization: Ensure consistent state before branching
  • Randomization: Dice rolls determining paths
  • Progression checks: Level requirements, item verification

Example: District Hub

Scene district_hub (Logic):

Condition Destination
district = "market" market_scene
district = "temple" temple_scene
district = "docks" docks_scene
(default) district_default

5.4 Inventory (v1.7.0)

Complete item management system.

Defining Items

Each item specifies:

  • ID: Code reference (lowercase, no spaces)
  • Display Name: Player-visible label
  • Icon: Emoji or single character
  • Description: Flavor text shown on inspection
  • Max Stack: Maximum quantity (1 for unique items)
  • Stackable: Whether multiples can be held
  • Consumable: Whether using removes the item

Inventory Operations

Operation Effect Failure Condition
Add Item Increase quantity Exceeds max stack (warning)
Remove Item Decrease quantity Insufficient quantity
Has Item Check possession
Count Item Get quantity Returns 0 if absent
Use Item Consume if consumable Not consumable, or absent

Inventory Conditions

Choices and hotspots can require items:

IF HAS: "ancient_key" (quantity: 1)
IF NOT HAS: "cursed_amulet"
IF COUNT: "gold_coin" >= 50

Example: Narrative Economy

Item: gold_coin (stackable: 99, icon: 🪙)

Choice: "Purchase the map" (requires 20 gold_coin)

On click: Remove 20 gold_coin

On click: Add treasure_map

The player sees their coin count decrease in real-time if HUD is enabled.

5.5 Interactions: Hotspots (v1.7.0)

Point-and-click exploration zones.

Visual Configuration

Property Description
Position (X, Y) Percentage coordinates (0-100)
Size (W, H) Percentage dimensions
Shape Rectangle or Circle
Cursor Pointer, Magnify, Talk, Hand, Eye, Door
Hover Effect Glow, Outline, Scale, Pulse

Hotspot Actions

Action Parameters
Go to Scene Target scene ID
Add Item Item ID, quantity
Remove Item Item ID, quantity
Use Item Item ID
Set Variable Variable, operation, value
Play SFX Sound file
Show Dialogue Speaker, text (popup)

Hotspot Conditions

Hotspots can be disabled based on:

  • Variable conditions: puzzleSolved = true
  • Inventory conditions: hasLantern = true

Example: Exploration Scene

Background: Ancient library

Hotspot Position Cursor Action
"Dusty tome" 25%, 40% Magnify Show dialogue: "The book is written in an unknown language."
"Hidden lever" 60%, 70% Hand IF perception >= 6: Go to secret_passage
"Locked chest" 80%, 55% Door IF HAS old_key: Add ancient_relic, Remove old_key

5.6 QTE: Quick Time Events (v1.8.0)

Timed decisions for tension and action sequences.

Configuration

Parameter Description Range
Duration Seconds to decide 1-60
Timeout Action Behavior on expiration Nothing / Auto-select / Go to scene
Auto-select Choice Which choice (1-indexed) 1-N
Timeout Scene Destination if "Go to scene" Scene ID

Visual feedback

  • Progress bar depletes horizontally
  • Last 30%: Bar turns red, pulses urgently
  • Timer text counts down in seconds

Example: Action Sequence

Scene: bridge_collapse

Choice Consequence
"Jump to the ledge" ledge_escape
"Grab the rope" rope_escape
"Freeze in panic" (no target, timeout consequence)
"Try to reason" bridge_fall

QTE: 5 seconds

Timeout action: Auto-select choice 3 (freeze, leading to bridge_fall)

5.7 Player Inputs: Text Input (v1.8.0)

Collect free-form text from players.

Configuration

Parameter Usage
Target Variable Where to store the input
Validation Text (any), Number only, or Code (exact match)
Title Modal header
Placeholder Hint text in empty field
Default Value Pre-filled content
Allow Cancel Whether player can dismiss without entering

Example: Protagonist Customization

Scene: character_creation

Text Input:

  • Target: heroName
  • Validation: Text
  • Title: "What is your name?"
  • Placeholder: "Enter your name..."
  • Default: "Alex"

Later dialogue: "Welcome to the academy, {heroName}."

Example: Code Puzzle

Text Input:

  • Target: doorCode
  • Validation: Code (exact match: "7349")
  • Title: "Enter the 4-digit code"

Trigger following input checks doorCode and redirects accordingly.

Part VI: Atmosphere and Staging

6.1 Images

Supported Formats

Format Recommended Usage Advantage
WEBP All images Superior compression, preserved quality
PNG Images with transparency Alpha channel, easy editing
JPEG Photographs Universal compatibility

Image Types

Type Recommended Dimensions Usage
Background 1920×1080 (16:9) Full scene
Character sprites Variable, ~900px high Superimposed characters
UI elements Depending on usage Dialogue boxes, buttons
CG Gallery 1920×1080 Unlockable images
Best Practices: optimization
Always convert to WEBP before import. Use exact dimensions (no browser resizing). Limit GIF animations (prefer WebM video).

6.2 Sounds

SFX (Sound Effects)

  • One-shot sounds triggered by scene entry or actions
  • Recommended format: OGG Vorbis, 64-128 kbps
  • Volume controlled by SFX slider in Options

Music

  • Looping background audio
  • Automatic crossfade between scenes (if different file)
  • Recommended format: OGG or MP3, 128 kbps
Attention Point: autoplay
Browsers block audio autoplay. Capsule handles this with a first user interaction. In Auto-Start mode, add a clickable title screen or start music after the first click.

6.3 Transitions

Transition Visual Effect Narrative Usage
Cut Instant change Shock, surprise, fast action
Crossfade Cross dissolve Standard, smooth
Fade to Black Fade to black Time passing, chapter end
Fade to White Fade to white Flashback, dream, loss of consciousness
Slide Left/Right Horizontal slide Spatial movement, panning
Slide Up/Down Vertical slide Ascent/descent, vertigo
Zoom In Enlargement Focus, revelation
Zoom Out Reduction Context setting, isolation
Pixelate Pixelation Digital transition, glitch
Blur Blurring Confusion, mental state change
Flash White flash Lightning, explosion, brutal revelation
Iris In/Out Circular opening/closing Classic cinema, dramatic focus

6.4 Atmospheric Effects

Effect Mood Intensity
Rain Melancholy, intimacy Moderate
Heavy Rain Storm, danger High
Snow Calm, magic, isolation Moderate
Blizzard Survival, hostile High
Sakura Petals Romance, spring, Japan Light
Autumn Leaves Nostalgia, end of a cycle Light
Floating Dust Golden light, timeless Very light
Fireflies Magical night, childhood Light
Twinkling Stars Clear night, contemplation Very light
Embers Destruction, heat, danger Moderate
Smoke Mystery, pollution, war Moderate
Bubbles Underwater, dream, lightness Light
Fog / Dense Fog Mystery, horror, confusion Moderate/High
Speed Lines Action, racing, manga High
God Rays Divine, transcendent, hope Moderate
Glitch Digital, error, tech horror High
TV Static Retro, horror, signal loss Moderate
Vignette Focus, claustrophobia, vintage Moderate
Lightning Flash Thunderstorm, terror, revelation Brutal
Screen Shake Explosion, impact, earthquake Brutal
Pulse Heartbeat, life, threat Moderate
VHS Scan Retro, surveillance, found footage Moderate

Effective Combinations

  • Heavy Rain + Screen Shake + Fade to Black = Destructive storm, tragic end
  • God Rays + Floating Dust + Sakura Petals = Reconciliation scene, ephemeral beauty
  • Glitch + TV Static + VHS Scan = Digital horror, fracturing reality

6.5 Complete UI Customization (UI Custom)

Capsule allows global visual customization that automatically applies to all your scenes, eliminating the need to configure each scene individually.

6.5.1 Customization Architecture

The UI Custom system works on two levels:

Level Scope Usage
Global (UI Custom panel) All scenes Default project style
Local (per scene) Individual scene Exception or specific variation

The "Use default appearance (UI Custom)" checkbox in each scene determines if it inherits the global style or defines its own parameters.

6.5.2 Replacement Images

Import your own images to replace default UI elements. All images are stored in Base64 within the project file, ensuring export autonomy.

Dialogue Box

Property Description Recommended Dimensions
Image Text area background 1600×280 px
Opacity Background transparency (0-1) 0.85 default

Concrete Example: Japanese Visual Novel Style

Import a dialogue box image with golden ornaments at the corners, semi-transparent. Set opacity to 0.9 to preserve readability while showing the background.

Result: all scenes with "Use default appearance" enabled automatically display this custom box.

Name Box

Property Description Recommended Dimensions
Image Background behind character name 400×60 px
Opacity Transparency 1.0 (opaque) default

Example: Elegant Integration

Create an image with a decorative ribbon that slightly overlaps under the main dialogue box. Position it at opacity 1.0 so it partially masks the main box, creating harmonious layering.

Choice Buttons

Property Description Recommended Dimensions
Image Background for each choice button 600×80 px
Opacity Transparency 1.0 default

Example: Medieval Fantasy Style

Design stone buttons with engraved runes. Import the image — all game choices will adopt this style. The "hover" state retains the image but applies the theme's accent color.

Menu Buttons

Property Description Recommended Dimensions
Image Background for main menu buttons 600×80 px
Opacity Transparency 1.0 default

Example: Menu/Game Consistency

Use the same texture as choice buttons to unify the experience. The main menu, save screen, and options screen automatically share this image.

Game Title

Property Description Recommended Dimensions
Image Logo/title replacing text 800×200 px
Opacity Transparency 1.0 default

Example: Professional Logo

Design your title in design software (Photoshop, Illustrator, Figma) with light effects, gradients, or custom typography. Export as transparent PNG. Import into UI Custom — the text "MY GAME" is replaced by your image.

Major advantage: The title can extend beyond text limits, include illustrations, and use effects impossible in pure CSS.

6.5.3 Default Dialogue Appearance

Define a color palette and shapes applied automatically to all scenes checked "Use default appearance".

Configurable Parameters

Category Elements Impact
Font Typography family Readability, tone (modern, classic, etc.)
Box Shape Geometry of containers Global visual style
Dialogue Box Border, background, text Main reading area
Name Box Border, background, text Speaker identification

Available Box Shapes

Shape Characteristic Usage
Standard Rounded corners, classic Universal, safe
Square Right angles, thick borders Cyberpunk, brutalist
Tech Asymmetric, thick left border Science-fiction
Comic Round bubble, name offset Comics, humor
Gem Cut corners, elegant Fantasy, prestige
Minimal No background, bottom border only Contemporary, sleek
Elegant Glassmorphism, background blur Romance, sophistication

Example: Consistent Art Direction

Project: psychological thriller

UI Custom Configuration:

  • Font: 'Courier New', monospace (typewriter = documents, archives)
  • Shape: shape-minimal (tension, nothing superfluous)
  • Dialogue: white border, black background 90%, light gray text
  • Name: blood red border, transparent background, red text

Result: every new scene created with "Use default appearance" immediately inherits this visual identity. No manual configuration required.

6.5.4 Customization Workflow

Step 1: External visual design

Create your assets in your tool of choice:

ui_assets/
├── dialogue_box.webp      (1600×280, semi-transparent bg)
├── name_box.webp          (400×60, left ornament)
├── choice_button.webp     (600×80, stone texture)
├── menu_button.webp       (600×80, same texture)
└── title_logo.webp        (800×200, logo with effects)

Production tips:

  • WEBP format for compression without visible loss
  • Alpha transparency for overlays
  • Test on both light AND dark backgrounds before finalizing

Step 2: Import into Capsule

Open ⚙️ TOOLS → UI Custom

For each element:

  • Check "Use Custom"
  • Click 📂 Choose File or paste a URL
  • Adjust Opacity if necessary
  • Observe the real-time update in the preview

Step 3: Define global colors

In the "Default Dialogue Appearance" section:

Step Action Verification
1 Select font and shape Readability at 1920×1080
2 Define 3 dialogue colors Sufficient contrast
3 Define 3 name colors Visual hierarchy
4 Test on example scene Final rendering

Step 4: Application to scenes

Situation Action Result
Standard scene Check "Use default appearance" Inherits UI Custom automatically
Special scene Uncheck, configure locally Visual exception
New scene Creation → checked by default Immediately consistent

6.5.5 Advanced Use Cases

Temporary Variation (flashback, dream)

Problem: You want a different style for dream sequences, but keep the main style as default.

Solution:

  • Configure UI Custom with your main style (reality)
  • For dream scenes:
    • Uncheck "Use default appearance"
    • Define locally: sepia filter, "Elegant" shape, cursive font
  • At the end of the dream, return to a "Use default appearance" scene — normal style reappears instantly

Multi-protagonists (dynamic name colors)

Problem: Two playable characters with distinct color palettes.

Solution:

  • UI Custom defines base style (shapes, fonts)
  • Per scene, adjust locally:
    • Protagonist A scenes: emerald green name
    • Protagonist B scenes: electric blue name
  • Both share the same box geometry (consistency), but differ by accent color (differentiation)

Implicit Responsive Adaptation

UI Custom images are:

  • Centered automatically
  • Resized as cover or contain depending on the element
  • Preserved in ratio on export
Attention Point: Fixed ratios
Strictly respect recommended ratios. A 1600×280 dialogue box imported as 800×140 will look pixelated. Always prefer native resolution or higher.

6.5.6 UI Custom Elements Summary Table

Element Target File Properties Scene Inheritance
Dialogue Box ui-diag-bg Image, Opacity (0-1) Yes, if checked
Name Box ui-name-bg Image, Opacity (0-1) Yes, if checked
Choice Buttons ui-choice-bg Image, Opacity (0-1) Yes (automatic)
Menu Buttons ui-menu-bg Image, Opacity (0-1) Yes (automatic)
Game Title ui-title-img Image, Opacity (0-1) N/A (menu only)
Global Font fontFamily List selection Yes, if checked
Box Shape boxShape List selection Yes, if checked
Dialogue Colors diagBorder, diagBg, diagText Hex color Yes, if checked
Name Colors nameBorder, nameBg, nameText Hex color Yes, if checked

6.5.7 Complete Example: Full Project Re-skin

Context: You created a modern VN (contemporary, office, city) and want to transform it into medieval fantasy without recreating all scenes.

Before (modern):

  • Font: Segoe UI
  • Shape: Standard
  • Colors: corporate blue, gray
  • No custom images

Transformation:

UI Custom Panel

  • Import dialogue_parchment.webp (aged parchment)
  • Import name_banner.webp (fabric banner)
  • Import choice_stone.webp (engraved stone)
  • Import title_fantasy.webp (logo with runes)
  • Change font: Palatino Linotype
  • Change shape: Gem
  • Colors: gold (#FFD700), brown (#3E2723), cream (#FFF8E1)

Existing Scenes

  • All had "Use default appearance" checked
  • Instantly: the entire project adopts the fantasy aesthetic

Spot Adjustments

  • Royal Throne Scene: uncheck, name in royal purple
  • Tavern Scene: uncheck, name in moss green

Result: 4 minutes of configuration, fully re-skinned project, visual consistency guaranteed.

Part VII: Reliability and Quality

7.1 Project Health Check

Capsule analyzes your project in real-time and flags problems.

Alert Types

Level Icon Meaning
Error 🔴 Blocking — game will not work
Warning 🟠 Risk — unpredictable behavior possible
Info 🔵 Suggestion — recommended improvement

Automatic Checks

Problem Detection Correction
Missing scene Reference to non-existent ID Create scene or correct ID
Undeclared variable Use without definition Add in Variables Manager
Orphan scene Never referenced Check if intentional (ending) or error
Dead-end No exit defined Add next, choices, or mark as end
Logic scene without exit Logic scene without next Add mandatory redirection
Type mismatch Math operation on text Change type or operation
Hotspot to missing scene Non-existent target Correct hotspot

Best Practices: Health Check Workflow

  • Create your narrative structure (empty connected scenes)
  • Check Health Check — resolve connection errors
  • Add content (dialogue, images)
  • Check regularly — the panel updates in real-time

7.2 Preventing Errors

Runtime Safeguards

Protection Behavior Limit
Redirect loop Infinite loop detection 100 redirects max
Logic depth Chain of logic scenes 50 scenes max
Trigger depth Nested trigger evaluation 50 evaluations max
Global event depth Chain of global events 20 evaluations max
Scene history Navigation history 100 entries max (RAM protection)

Exceeding a limit stops execution with an explicit error message (Dev mode).

7.3 Best Practices

Narrative Organization

Naming convention:

chapter_01_tavern_intro
chapter_01_tavern_choice
chapter_01_tavern_combat
chapter_01_tavern_aftermath

Hub and spoke:

        [hub_district]
       /      |      \
[market]  [temple]  [docks]
   |          |         |
[return]---[return]---[return]
    \         |         /
     \        |        /
      [hub_district] (next chapter)

Variable Management

Category Prefix Example
Story progression ch (chapter) ch2_unlocked
Character relationships rel_ rel_elara
Inventory flags has_ has_map
World states world_ world_eclipseStarted
Counters cnt_ cnt_deaths

Part VIII: Export and Share

8.1 HTML Export

Click 💾 EXPORT to generate a standalone HTML file containing:

  • Complete game engine (minified JavaScript)
  • All embedded assets (Base64 encoded)
  • Story data and configuration
  • Save/load system (localStorage)
Attention Point: file size
Warning 2 MB Compression recommended
Confirmation 10 MB Strongly advised to compress
Rejection 20 MB Import — compress first

8.2 Browser Compatibility

Browser Support Notes
Chrome/Edge ✅ Complete Recommended for development
Firefox ✅ Complete Excellent support
Safari ✅ Complete Reader mode disabled required
Mobile Chrome ✅ Complete Touch optimized
Mobile Safari ✅ Complete Avoid strict autoplay audio

8.3 Distribution

Web Hosting

Upload the HTML file to:

  • GitHub Pages (free)
  • itch.io (free, VN community)
  • Netlify/Vercel (free, global CDN)
  • Your own server

Direct Sharing

  • Email (if < 10 MB after compression)
  • Cloud storage (Google Drive, Dropbox with direct link)
  • Messaging (Discord, Telegram — drag and drop)
Best Practices: preservation
The standalone HTML format ensures your game remains playable in 10 years. Archive the source file (original .html) and final export. No external dependency can disappear.

Part IX: Designing a Complex VN

9.1 Structuring

Recommended Architecture

[main_menu]
    ↓
[start] ───┬──→ [intro_sequence]
           ↓
    [chapter_1_hub] ←——————┐
       /    |    \         |
      ↓     ↓     ↓        |
   [A]→[B] [C]→[D] [E]→[F] |
      \     |     /        |
       └→[chapter_1_end]——─┘
                ↓
        [chapter_2_start] ←—— (via nextFile: chapter2.html)

Multi-chapters

For large stories, use Jump to HTML File:

  • Create chapter1.html, chapter2.html, etc.
  • In the last scene of chapter N:
    • Enable Auto-Start in config
    • Set Jump to HTML File: chapter2.html
  • Variables are automatically transferred

Example: Chapter Transition

Scene: chapter1_finale (Logic)

  • Actions: Automatic save of key variables
  • Next File: chapter2.html

chapter2.html starts with all variables intact.

9.2 Readability

Scene Rhythm

Scene Type Estimated Duration Objective
Exposition 30-60s Context, immersion
Interaction 1-3min Choices, characterization
Climax 30s-2min Tension, decision
Transition 5-15s Change of location/time

Choice Density

  • Minimum: 1 significant choice every 5-10 minutes
  • Maximum: Avoid more than 4 simultaneous choices (paralysis)
  • Balance: 70% narration, 30% interaction

9.3 Maintainability

Internal Documentation

Use implicit comments:

  • Named logic scenes: check_, hub_, calc_
  • Variables with metadata in name
  • Choices with explanatory alternative text

Versioning

Export milestones:

  • mygame_v0.1_prototype.html
  • mygame_v0.5_alpha.html
  • mygame_v1.0_release.html

Part X: FAQ & Frequent Errors

10.1 Common Issues

Q: My game is stuck on a black screen

Check that the scene has either dialogue, choices, or a next scene defined. An empty scene without an exit creates a block.

Q: Variables are not displaying in dialogue

Check syntax: {variableName} (no spaces, exact case). Verify the variable is declared in Variables Manager.

Q: Music is not starting

This is normal — browsers block autoplay. Music starts after the first user click. In Auto-Start mode, add a clickable title screen.

Q: My exported file is 50 MB

Compress your assets:

  • Images: convert to WEBP, reduce to 1920×1080 max
  • Audio: OGG 64-128 kbps
  • Video: WebM 720p

Q: Conditional choices never appear

Check the operator: = for equality, not ==. Verify the variable has the expected value (use Dev Mode).

10.2 Runtime Error Messages

Message Cause Solution
"Scene not found" Non-existent scene ID Correct ID or create scene
"Infinite loop detected" Redirect loop Add an exit condition
"Logic depth exceeded" Too many chained logic scenes Merge calculations or add narrative scene
"Variable used before initialization" Undeclared variable Add in Variables Manager

10.3 Mobile Optimization

Problem Solution
Slow loading Reduce image size, use WEBP
Audio lag Prefer short effects, avoid heavy music
Small interface Test in mobile preview, adjust fonts
Lost saves iOS: use "Add to Home Screen"

11. Actors

Actors are reusable characters with multiple expressions, eliminating configuration duplication and ensuring narrative consistency.

11.1 Actor Architecture

Concept Description Analogy
Actor Global character entity "The character Elara"
Display Name Name shown in dialogues "Elara" or "Princess Elara"
ID Unique technical reference elara
Sprites Collection of expressions 5, 10, 20 different images
Color Name tint in dialogues Royal gold, menacing red, etc.

11.2 Creating an Actor

Steps:

  • ⚙️ TOOLS → Actors
  • ➕ Create New Actor
  • Actor ID: unique technical identifier (lowercase, no spaces)
    • Example: elara, captain_ren, mysterious_stranger
  • Display Name: name visible to the player
    • Example: "Elara", "Captain Ren", "???"
  • Name Color: name color in dialogues (hex selector)

11.3 Sprite Management (Expressions)

Each actor has a library of interchangeable expressions.

Expression Typical Usage Suggested Naming
default Neutral expression, standard Always define
happy Joy, satisfaction happy, joy
sad Sadness, disappointment sad, sorrow
angry Anger, frustration angry, rage
surprised Shock, revelation surprised, shock
thinking Reflection, doubt thinking, ponder
blushing Embarrassment, romance blush, flustered
determined Resolution, combat determined, resolve

Importing a sprite:

Method Action Result
URL Paste a direct link External reference
File 📂 Choose File → selection Integrated Base64 encoding

Concrete Example: Complete Creation

Actor: elara

Display Name: "Elara"

Color: #D4AF37 (gold)

Sprites:

Expression Image Scenario Usage
default elara_neutral.webp Standard dialogue
happy elara_smile.webp Reunion, success
sad elara_tears.webp Defeat, loss
determined elara_fight.webp Combat, climax
surprised elara_shock.webp Plot revelation

Total: 5 expressions to cover the main narrative arc.

11.4 Usage in Scenes

Referencing an Actor

In the Characters section of a scene:

Field Value Effect
Actor elara (dropdown) Links the character
Expression happy (dropdown) Selects the sprite
Position X 25% Horizontal placement
Position Y 0% Vertical placement (0 = bottom)
Scale 1.0 Relative size

Dynamic Syntax: {actor:id}

Automatically display an actor's Display Name in dialogue:

Variable: heroName = "Jordan"

Actor: hero (Display Name: {actor:hero} → "Jordan")

Dialogue: "My name is {actor:hero}, and I won't give up!"

Player result: "My name is Jordan, and I won't give up!"

Major advantage: Change heroName to "Alex" at the start of the game — all dialogues using {actor:hero} update instantly.

11.5 Advanced Workflows

Actor with changing name

Situation Configuration Result
Secret identity Display Name: "???" → revealed: "Lord Vexis" Mystery maintained
Evolving title "Recruit" → "Knight" → "Commander" Visible progression
Possession "Sister Maria" → "The Demon" Horror, transformation

Shared Actor Library

Organize by narrative category:

Main Actors
├── hero (customizable protagonist)
├── companion (constant ally)
└── antagonist (main villain)

Secondary Actors
├── merchant_recurring (comic relief)
├── mentor (guide, likely sacrifice)
└── rival (competition, possible ally)

Episodic Actors
├── village_elder_ch1
├── village_elder_ch2 (same sprite, different name if twist)
└── monster_variants (5× goblin with different colors)

12. HUD — On-screen Variable Display

The HUD (Heads-Up Display) projects variables in real-time onto the game screen, creating visible and immersive progression mechanics.

12.1 Activation and Global Configuration

Access: ⚙️ TOOLS → HUD

Parameter Options Effect
Enable HUD On/Off Global display
Position Top Left / Top Right / Top Center Screen anchor
Style Compact / Detailed / Minimal Information density
Background Dark / Light / Transparent / Blur Container appearance

12.2 Display Styles

Style Format Usage
Compact 💰 150 Games with many variables
Detailed 💰 Gold: 150 Maximum clarity, tutorials
Minimal 150 Subtle integration, atmosphere

12.3 Configuring HUD Variables

For each displayed variable:

Property Description Example
Variable Variable to monitor gold, health, reputation
Icon Emoji or visual character 💰, ❤️, ⭐
Show in HUD Individual activation Toggle per variable

Example: Complete Narrative RPG

Configured HUD variables:

Variable Icon Style Context
gold 💰 Compact Economy, purchases
health ❤️ Compact Survival, combat
mana 🔮 Compact Magic, spells
reputation 👑 Detailed Social influence
day 📅 Minimal Time

Screen render: [💰 150] [❤️ 8] [🔮 25] [👑 Reputation: 12] [14]

12.4 Available Icons

Capsule offers 28 icons covering common uses:

Category Icons
Economy 💰 🪙 💎 💵
Progression 🏆 ⭐ 👑 ✨
Vitality ❤️ 💙 💚 💕 🔥
Combat ⚡ 🛡️ ⚔️ 💪
Social 🎭 💀
Time ⏰ 📅 🌙 ⏳
Items 🔑 📦 🎯 🧪
States 📊 🎲 🚫

Customization: Click the icon in configuration to open the selector.

12.5 Narrative Use Cases

Visual Novel with Relationship Management

HUD: [💕 Affection: 45] [🔥 Tension: 12]

Choice: "Compliment her dress"
→ Action: affection + 5
→ HUD updates: [💕 Affection: 50] in real-time

Survival Horror with Limited Resources

HUD: [🔋 Battery: 23%] [💊 Medkits: 1] [🗝️ Keys: 0]

Each exploration scene can modify these values.
The player constantly sees the fragility of their situation.

Mystery with Collected Clues

HUD: [📊 Clues: 3/7]

Variable clues incremented by triggers on hotspots.
Implicit objective: complete the collection.

13. CG Gallery — Unlockable Images and Videos

The CG Gallery manages illustrations and cinematics that the player unlocks by progressing, creating a persistent and motivating collection.

13.1 Gallery Architecture

Concept Description
CG Item Entry in the gallery (image or video)
Unlock Automatic or manual unlocking
Persistence localStorage storage, survives saves
Progress Counter X/Y unlocked

13.2 Gallery Configuration

Access: ⚙️ TOOLS → CG Gallery

Adding an Item

Method Action Result Type
➕ Add Image 📂 multiple selection Image (WEBP, PNG, JPG)
🎥 Add Video 📂 multiple selection Video (MP4, WebM)

For each item:

Property Description Example
ID Unique identifier cg_elara_ending
Title Name displayed in gallery "Elara's Promise"
Category Optional grouping "Endings", "Characters", "Secret"
Type Image or Video Automatically detected

13.3 Unlock Mechanisms

Automatic Unlocking (Recommended)

The CG unlocks automatically when the player sees the image/video in normal gameplay.

Required configuration:

  • Use exactly the same URL/file as scene background and in the gallery
  • Capsule detects match and unlocks

Example: Ending Illustration

  • Import ending_elara.webp into CG Gallery
  • Title: "Promised Future"
  • Category: "Endings"
  • In the final scene ending_elara:
    • Background: ending_elara.webp (same file)
  • When player reaches this scene:
    • Image displays normally
    • Capsule detects: "This image is in the gallery"
    • Automatic unlock + silent notification

Manual Unlocking (Advanced)

For secret CGs not displayed directly:

Trigger or Action:
- Type: Unlock CG
- Target: cg_secret_001

Result: Player receives the CG without having "seen" it normally.
Usage: Easter eggs, achievements, bonus content.

13.4 Player Experience

In Main Menu

GALLERY button appears automatically if:

  • At least 1 CG defined in project
  • At least 1 CG unlocked by player

Gallery Interface

Element Description
Grid 16:9 thumbnails, 3-4 columns
Locked State 🔒 Padlock icon, no preview
Unlocked State Clickable thumbnail, title visible
Viewer Fullscreen, navigation ← →
Progression "12 / 24 unlocked"

13.5 Design Strategies

Narrative Structure by Collection

Category Count Unlock
"Main Story" 8 Normal progression, unmissable
"Character Routes" 12 Specific choices, 3-4 per character
"Secret" 4 Hidden conditions, exploration
"Bad Endings" 6 Narrative failures, dramatic irony

Videos in Gallery

Recommended specifications:

  • Format: WebM (VP9) or MP4 (H.264)
  • Resolution: 1920×1080
  • Duration: 10-60 seconds
  • Audio: Ogg Vorbis or AAC

Use Case: Ending Cinematics

Each main route unlocks a 30s video (stylized credits).

The gallery becomes a "cinematheque" of reached endings.

14. Timeline — Visual Story Map

The Timeline is a graphic representation of all your scenes and their connections, essential for visualizing complex narrative structure.

14.1 Timeline Interface

Access: ⚙️ TOOLS → Timeline

Zone Function
Central Canvas Graph of scenes and connections
Toolbar Zoom, layout, navigation
Legend Colors by scene type
Zoom Info Current scale

14.2 Visual Node Types

Color Type Description Identification
🟢 Green Start Unique entry point start or first scene
🔵 Blue Narrative Standard dialogue/choice scene Majority of project
🟠 Orange Logic Invisible scene, calculations isLogicScene: true
🟣 Purple Ending Scene with no exit No next, no choices
🔴 Red Orphan Never referenced scene No incoming connections

14.3 Navigation and Manipulation

Action Method Result
Pan Drag and drop Move view
Zoom Wheel or buttons 🔍+/🔍− 50% to 200%
Fit Button ⬜ Fit Entire graph visible
Reset Button ↺ 100% Zoom 100%, center position
Selection Click node Open scene editor

14.4 Available Layouts

Layout Description Usage
Auto Force-directed algorithm Exploration, pattern detection
Horizontal Left → Right flow Linear reading, chapters
Vertical Top → Bottom flow Vertical progression, ascent/descent

14.5 Reading Structure

Example: Problem Detection

You see a 🔴 red node (orphan) named secret_ending_good.

Investigation:

  • Check choices — none point to secret_ending_good
  • Check triggers — no goto to this scene
  • Check global events — nothing either

Diagnosis: This scene exists but is inaccessible. Either:

  • You forgot a connection (bug)
  • It's intentional (future content, unimplemented secret)

Example: Flow Optimization

Timeline in Horizontal layout shows:

[start] → [intro] → [hub] ─┬→ [route_A] → [ending_A1]
                           ├→ [route_B] → [ending_B1]
                           └→ [route_C] → [ending_C1]

All routes converge from hub. Verify that hub indeed has the 3 corresponding choices.

14.6 Development Workflow

Phase Timeline Action Objective
Prototyping Create empty scenes, connect Validated narrative structure
Writing Progressive coloring (blue dominant) Content coverage
Test Check absence of 🔴 red Total accessibility
Polish Identify 🟣 purple Multiple endings confirmed

16. Stats — Monitoring Project Health and Size

The Stats panel monitors in real-time the technical health and size of your project, preventing issues before export.

16.1 Dashboard

Metric Value Alert Threshold
Words Total word count
Scenes Number of scenes
Images Total image size > 2MB recommended WEBP
Music Music size > 5MB recommended compression
SFX Sound effects size
Videos Video size > 10MB strongly advised
TOTAL Export file weight > 50MB critical
Mobile Load Estimated load time > 10s problematic

16.2 Visual Distribution

Proportional colored bar:

  • 🟢 Green (Images)
  • 🔵 Blue (Music)
  • 🟠 Orange (SFX)
  • 🟣 Purple (Videos)

Immediate identification of dominant asset type.

16.3 Asset Alerts

Automatic detection of large files:

Level Condition Suggested Action
Warning > 2MB Compression recommended
Critical > 10MB Compression strongly advised
Rejection > 20MB (on import) Import blocked, compression mandatory

Alert Example:

⚠️ orchestral_theme.mp3 — 8.5 MB

Advice: Convert to OGG 64kbps → ~2 MB without perceptible audible loss

16.4 Project Health

Automatic software validation:

Type Detected Problem Severity
🔴 Error Missing scene (non-existent reference) Blocking
🔴 Error Undeclared variable used Blocking
🔴 Error Logic scene without exit Blocking
🟠 Warning Orphan scene (never referenced) Risk
🟠 Warning Dead-end without choices or next Risk
🟠 Warning Type mismatch (operation on text) Risk
🔵 Info Declared variable but never used Optimization

16.5 Quality Workflow

Step Stats Check Action
Alpha Milestone Size < 10MB If higher: image audit
Beta Milestone Health Check = 0 error Resolve all 🔴
Pre-release Mobile Load < 5s Final optimization
Final Export Size < 50MB Otherwise: chapters

17. CONFIG — Global Project Configuration

The CONFIG panel centralizes all settings defining the identity and global behavior of your visual novel.

17.1 Access and Architecture

Access: 🏠 Button (house) in header or ⚙️ TOOLS → Config navigation.

Section Function Impact
Game Title Narrative identity Main menu, window title
Languages Multilingual support Dialogue structure, player selector
Menu Background Welcome atmosphere First impression
Menu Music Sound ambiance Immersion before game
Developer Mode Test tools In-game debug panel
Auto-Start Startup flow Skip main menu

17.2 Game Title

Property Description Constraints
Text Name shown on main menu 50 chars max recommended
Render Centered, system typography if no image Responsive

Example: Title Evolution

  • Prototype phase: "MY GAME"
  • Production phase: "Chronicles of Aetheria: The Hollow Crown"

The title can be modified at any time without impacting saves.

17.3 Languages — Multilingual Management

Capsule supports 5 native languages with adapted dialogue structure.

Available Languages

Code Language Flag Icon
en English 🇺🇸
fr Français 🇫🇷
es Español 🇪🇸
de Deutsch 🇩🇪
it Italiano 🇮🇹

Configuration

Format: codes separated by commas, no spaces

Configuration: en,fr,es

Result: The game offers three languages in Options.

Impact on Dialogue Structure

Each dialogue line becomes a multilingual object:

Internal structure:
{
  "en": "Hello, traveler.",
  "fr": "Bonjour, voyageur.",
  "es": "Hola, viajero."
}

In the editor: Additional fields appear for each configured language.

Concrete Example: Trilingual Configuration

CONFIG → Languages: en,fr,de

Dialogue Editor displays:

[EN] "Welcome to the tavern."
[FR] "Bienvenue à la taverne."
[DE] "Willkommen in der Taverne."

The player selects language in Options → all text switches.

Default Language

The first language in list is default:

  • At first launch
  • If player language is unavailable
  • For untranslated dialogues (fallback)

17.4 Menu Background

Type Support Recommendation
Image WEBP, PNG, JPG 1920×1080, game atmosphere
Video MP4, WebM Silent loop, < 10MB

Static Image

Example: Epic Fantasy

  • Image: menu_hero_standing.webp
  • Hero silhouetted against sunset
  • Warm tone, promise of adventure
  • Title logo overlaid

Animated Video

Optimal Specs:

  • Duration: 10-30 seconds (smooth loop)
  • Codec: H.264 (MP4) or VP9 (WebM)
  • Audio: None (music managed separately)
  • Size: < 5MB for fast loading

Example: Sci-Fi

  • Video: menu_hyperspace_loop.mp4
  • Passing stars, warp effect
  • Perfectly seamless loop
  • Creates illusion of moving ship
Autoplay Handling: Browsers block autoplay. Capsule detects first user click to start video silently.

17.5 Menu Music

Property Description Recommended Format
File Looping track OGG or MP3
Bitrate Quality vs size 128 kbps
Length Natural loop 30-120 seconds

Behavior:

  • Automatic playback after first click (browser constraint)
  • Infinite loop while menu is displayed
  • Fade on scene change (crossfade if different music)
  • Immediate stop on NEW GAME

Example: Memorable Theme

  • Track: main_theme.ogg
  • 60 seconds, A-B-A' structure
  • Recognizable from first notes
  • Orchestral reprise in key game moments

17.6 Developer Mode

Enables a complete debug panel accessible in-game.

Function Description Usage
Toggle panel Button 🛠️ or shortcut Show/Hide
Variable inspector Real-time list Verify values
Inline editing Click value → modify Scenario testing
Scene jump Dropdown → selection Instant navigation
History breadcrumb Last 5 scenes Quick backtrack
Event log Chronological log Execution audit
Rollback Automatic snapshots -1, -5, or full list
State export JSON copy Bug report sharing

Activation

CONFIG → Developer Mode → ☑️ Enable Dev Mode
The button 🛠️ appears in top-right corner in-game.

Dev Panel Interface

┌─────────────────────────────┐
│ 🛠️ DEV MODE              ✕  │
├─────────────────────────────┤
│ CURRENT SCENE: forest_ambush │
│ LANGUAGE: EN                │
├─────────────────────────────┤
│ ⚙️ COUNTERS                 │
│ Redirects: 3/100            │
│ Logic Depth: 0/50           │
├─────────────────────────────┤
│ 📊 VARIABLES [🔍 Filter]    │
│ gold        │ 150           │
│ health      │ 8      [edit] │
│ hasKey      │ true   [edit] │
├─────────────────────────────┤
│ 🌐 GLOBAL EVENTS            │
│ #1: reputation >= 50 │ ✓   │
│ #2: day > 7          │ ○   │
├─────────────────────────────┤
│ JUMP TO SCENE [dropdown ▼]  │
├─────────────────────────────┤
│ ⏪ ROLLBACK: 12 snapshots   │
│ [-1] [-5] [📋 List]         │
├─────────────────────────────┤
│ 📋 EVENT LOG                │
│ 14:32:05 🎬 Enter: start    │
│ 14:32:18 📊 gold: 0 → 150   │
│ 14:32:45 ⚡ Trigger fired   │
└─────────────────────────────┘

Rollback system (v1.6.3+)

Automatic saves at each narrative scene:

Command Effect Usage
-1 Return previous scene Immediate correction
-5 Return 5 scenes back Branch testing
📋 List All snapshots Precise navigation

Each snapshot contains:

  • Scene and dialogue index
  • All variable values
  • Full inventory
  • Global events triggered

Example: Narrative Branch Test

You test a romance. At scene 45, you realize a choice at scene 12 blocked the route.

Action: Rollback → select snapshot scene 11 → modify variable affection_elara → re-test.

Time saved: minutes instead of replaying from start.

State Export (Debug)

Button 📋 COPY GAME STATE copies to clipboard:

{
  "currentScene": "palace_confrontation",
  "textIndex": 2,
  "variables": {
    "gold": 150,
    "reputation": 45,
    "hasRoyalSeal": true
  },
  "inventory": {
    "healing_potion": 3,
    "ancient_key": 1
  },
  "triggeredEvents": [0, 3],
  "timestamp": "2024-01-15T14:32:18Z"
}

Usage: Paste into bug report, share with team, or manually restore.

17.7 Auto-Start

Skips title screen to start immediately.

State Behavior Usage
Disabled Main menu displayed Standalone game, first experience
Enabled start scene directly Multi-chapters, demo, narrative sequel

Use Case: Multi-chapters

Project structure:
├── chapter1.html (Auto-Start: OFF)
├── chapter2.html (Auto-Start: ON)
├── chapter3.html (Auto-Start: ON)
└── epilogue.html (Auto-Start: ON)

Player Flow:
chapter1.html → menu → NEW GAME → play
Final scene: Jump to HTML File: chapter2.html
chapter2.html starts immediately (no menu)
Variables transferred automatically via localStorage

Example: Saga in 3 Acts

Act I: Introduction, fundamental choices, cliffhanger

  • Export: aetheria_act1.html (Auto-Start: OFF)

Act II: Consequences, new alliances, revelation

  • Export: aetheria_act2.html (Auto-Start: ON)
  • Detection: if Act I variables absent, message "Please play Act I first"

Act III: Climax, multiple endings, epilogue

  • Export: aetheria_act3.html (Auto-Start: ON)

Audio Handling in Auto-Start

Browsers block audio autoplay. Capsule handles this:

Auto-Start Behavior:
1. start scene displays immediately
2. Music/SFX waiting for first click
3. First click anywhere → unlock audio
4. Normal playback thereafter
Tip: Start with a visually strong but silent scene, or with text prompting click: "Touch the screen to begin your journey."

18. Integration Example — Complete Project

To illustrate the interconnection of all features, here is the complete configuration of a professional visual novel.

18.1 GLOBAL CONFIGURATION

┌─────────────────────────────────────────┐
│  🏠 HOME SCREEN CONFIGURATION           │
├─────────────────────────────────────────┤
│  Game Title: "Chronicles of Aetheria"   │
│                                         │
│  Languages: en,fr,es                    │
│                                         │
│  Menu Background:                       │
│  ☑️ Video → menu_loop.mp4 (WebM, 8MB)   │
│                                         │
│  Menu Music:                            │
│  ☑️ main_theme.ogg (128kbps, loop 60s)  │
│                                         │
│  Developer Mode:                        │
│  ☑️ Enable Dev Mode                     │
│                                         │
│  Auto-Start:                            │
│  ☐ Disabled (main menu active)          │
└─────────────────────────────────────────┘

18.2 CONFIGURED ACTORS

ID Display Name Color Sprites
lyra "Lyra" #9C27B0 default, happy, determined, sad, battle
kael "Kael" #2196F3 default, smirk, angry, wounded, heroic
mysterious "???" → "The Archon" #FFD700 hooded, revealed, triumphant, defeated

18.3 UI CUSTOM

Element File Opacity Notes
Dialogue Box ui_dialogue_fantasy.webp 0.90 Ornate parchment
Name Box ui_name_banner.webp 1.0 Fabric banner
Choice Buttons ui_choice_stone.webp 1.0 Runic stone
Menu Buttons ui_choice_stone.webp 1.0 Identical to choice
Game Title title_aetheria_logo.webp 1.0 Logo with light effects

Default Appearance:

  • Font: 'Palatino Linotype', serif
  • Shape: shape-gem
  • Colors: gold #D4AF37, brown #3E2723, cream #FFF8E1

18.4 ENABLED HUD

Position: Top Left
Style: Compact
Background: Dark

Displayed Variables:
┌─────────────────┐
│ 💰 150 ❤️ 8 🔮 25 │
└─────────────────┘

18.5 CG GALLERY

ID Title Type Unlock
cg_lyra_smile "First Smile" Image Scene lyra_bonding
cg_kael_heroic "The Captain Stands" Image Scene battle_victory
cg_archon_reveal "Truth Unveiled" Image Scene plot_twist
cg_ending_good "A New Dawn" Video Scene ending_good (30s)
cg_ending_bad "Ashes of Aetheria" Video Scene ending_bad (30s)
cg_secret "The Developer's Room" Image Variable foundSecret = true

18.6 NARRATIVE FLOW (Timeline)

[start] → [intro] → [village_hub] ──┬──→ [lyra_route] ──→ [lyra_ending]
                                    ├──→ [kael_route] ──→ [kael_ending]
                                    └──→ [archon_early] ──→ [bad_ending_1]

[village_hub] requires: day < 7
If day >= 7: force [archon_confrontation]

18.7 QUALITY CONTROL POINTS

Verification Tool Frequency
Orphan scenes Timeline After each scene creation
Undeclared variables Health Check Real-time
Project size Stats Before each export
Narrative consistency Global Search Search "TODO", "FIXME"
Ending accessibility Timeline Beta Milestone

19. Advanced Mechanics — Design Recipes

This section presents complete design patterns, ready to implement, for sophisticated game mechanics.

19.1 Complete D&D Dice System (Roll + Add)

Capsule v1.8.0 introduces the Roll + Add action for skill checks Dungeons & Dragons style.

Pattern: Strength Check with Bonus

Context: Player attempts to lift a heavy door. Result = d20 + Strength modifier.

Configuration in 3 triggers:

Order Trigger Condition Action Role
1 roll_strength Always (none) Roll + Add: d20 + strengthMod → result Roll dice
2 check_success result >= 15 Go to: door_opened Success
3 check_failure result < 15 Go to: door_stuck Failure

Detail of Roll + Add Action:

Action Type: Roll + Add
Dice: min 1, max 20
Source Variable: strengthMod (character value, ex: +3)
Target Variable: result

Numerical Example:

  • strengthMod = 3 (strong hero)
  • Roll: 14 on d20
  • Calculation: 14 + 3 = 17
  • result = 17
  • Trigger 2 fires (17 >= 15) → door_opened

Variant: Degrees of Success

DC (Difficulty Class) Result Destination
20+ Critical Success door_perfect (bonus treasure)
15-19 Success door_opened
10-14 Partial Success door_partial (noise, alert)
< 10 Failure door_stuck (minor injury)

Implementation: 4 triggers in cascade

Trigger 1: roll → result = d20 + mod
Trigger 2: if result >= 20 → door_perfect
Trigger 3: if result >= 15 → door_opened  
Trigger 4: if result >= 10 → door_partial
Trigger 5: (no condition) → door_stuck [fallback]
Ordering Tip: Triggers evaluate top-to-bottom. Place most restrictive conditions first (20+ before 15+).

19.2 Turn-Based Combat System

Complete Architecture

Component Type Description
combat_init Logic Scene Initialization, roll initiative
combat_round Logic Scene Central round hub
combat_player Narrative Player turn, action choice
combat_enemy Narrative Enemy turn, narration
combat_end_victory Narrative Combat end, rewards
combat_end_defeat Narrative Game over or retreat

Phase 1: Initiative (Roll + Add)

Scene combat_init (Logic):

Variable Calculation Usage
playerInit d20 + dexterity Player reactivity
enemyInit d20 + enemyDex Enemy reactivity

Routing Triggers:

Trigger: player_first
  IF: playerInit >= enemyInit
  THEN: Go to combat_player

Trigger: enemy_first  
  IF: playerInit < enemyInit
  THEN: Go to combat_enemy

Phase 2: Player Turn (Choice + Actions)

Scene combat_player:

Choice Action Condition
"Attack" damage = d8 + strength, enemyHP -= damage Always
"Defend" defense = true (turn flag) Always
"Use item" Open inventory potions > 0
"Flee" Attempt retreat Always

Consequence: All choices lead to combat_check_end

Phase 3: End Combat Check

Scene combat_check_end (Logic):

Trigger: victory
  IF: enemyHP <= 0
  THEN: Go to combat_end_victory

Trigger: defeat
  IF: playerHP <= 0
  THEN: Go to combat_end_defeat

Trigger: continue_player
  IF: playerInit >= enemyInit AND lastActor = "enemy"
  THEN: Go to combat_player

Trigger: continue_enemy
  IF: enemyInit > playerInit AND lastActor = "player"
  THEN: Go to combat_enemy

Phase 4: Iteration

The logic combat_check_end redirects to:

  • End if victory/defeat condition met
  • Next turn if combat continues

Timeline Visualization:

[combat_init] → [combat_player] ↔ [combat_enemy]
       ↓              ↓                  ↓
[combat_end_victory] ← [combat_check_end] → [combat_end_defeat]

19.3 Quest System with States

Pattern: 3-Step Quest

Step Variable Value Associated Scene
Not started quest_blacksmith 0 village_hub (no clue)
Accepted quest_blacksmith 1 blacksmith_request
Materials collected quest_blacksmith 2 blacksmith_progress
Completed quest_blacksmith 3 blacksmith_complete

Implementation with Conditional Triggers:

In village_hub, an NPC changes dialogue based on state:

Trigger: quest_not_started
  IF: quest_blacksmith = 0 AND hasMetBlacksmith = false
  THEN: Go to blacksmith_intro

Trigger: quest_active  
  IF: quest_blacksmith = 1
  THEN: Go to blacksmith_reminder

Trigger: quest_ready
  IF: quest_blacksmith = 2
  THEN: Go to blacksmith_almost

Trigger: quest_done
  IF: quest_blacksmith = 3
  THEN: Go to blacksmith_thanks

19.4 Faction Reputation System

Multi-Faction Architecture

Faction Variable Thresholds Consequences
Guild rep_guild -10, 0, 10, 25 Quest access, shop prices
Cult rep_cult -10, 0, 10, 25 Infiltration possible, secret ending
Guard rep_guard -10, 0, 10 Combat aid, arrest

Example of Multi-Impact Choice:

Choice: "Turn the thief over to the Guild"
- Action: rep_guild + 5
- Action: rep_cult - 3 (thief was an informant)
- Action: rep_guard + 2 (justice served)

Faction Ending Condition:

Scene: ending_faction_check (Logic)

Trigger: guild_ending
  IF: rep_guild >= 25 AND rep_cult < 0
  THEN: Go to ending_guild_master

Trigger: cult_ending
  IF: rep_cult >= 25
  THEN: Go to ending_cult_leader

Trigger: balanced_ending
  IF: rep_guild >= 10 AND rep_cult >= 10
  THEN: Go to ending_peacemaker

20. Professional Production Tips

20.1 Development Workflows

"Prototype → Polish" Method

Phase Duration Objective Capsule Tools
Structure 10% Narrative architecture Timeline, empty scenes
Greybox 20% Functional flow, placeholders Variables, basic triggers
Content 50% Dialogue, images, audio Rich editor, batch import
Polish 15% Transitions, effects, QA Health Check, Stats, Dev Mode
Export 5% Optimization, packaging Compression, multi-chapters

Parallel Development

Track Responsible Deliverable
Narrative Writer Full script, choice trees
Visual Artist Backgrounds, UI sprites, CG
Technical Integrator Variables, triggers, logic
Audio Composer BGM loops, SFX library

Synchronization: Integrator imports assets progressively, tests immediately in Capsule.

20.2 Asset Optimization

Images — Recommended Pipeline

Source (PSD/PNG) → Export 1920×1080 → WebP Conversion → Capsule Import
         ↓
    [Quality 90%, effort 6]
         ↓
    Typical size: 200-500 KB vs 2-5 MB PNG

Audio — Target Specifications

Type Format Bitrate Max Duration Target Size
BGM loop OGG 128 kbps 60-120s < 2 MB
Ambiance OGG 96 kbps Infinite loop < 1.5 MB
SFX OGG 64 kbps < 5s < 50 KB each
Voice (if used) OGG 160 kbps Phrase < 200 KB

Video — Optimal Encoding

Input: 1920×1080 30fps
↓
Codec: VP9 (WebM) or H.264 (MP4)
Bitrate: 2-5 Mbps
Audio: AAC 128kbps or Ogg Vorbis
↓
Target: < 10 MB for 30 seconds

20.3 Efficient Debugging

Test Logbook

Create a debug_log variable (text):

Action in key scenes:
- debug_log = debug_log + "[Scene: " + currentScene + ", Vars: " + gold + "/" + health + "]\n"
Export via Dev Mode → Copy Game State to trace paths.

Systematic Branch Testing

Test Method Verification
All choices Dev Mode → Jump + Rollback Each destination accessible
Conditions Inline edit variables Boundary behavior (0, max)
Inventory Massive Add/Remove Stack limits, consumables
Endings Timeline → isolated endings Each ending reachable

20.4 Save Patterns

Implicit Checkpoint System

Automatic Save Scenes (invisible):

[chapter1_checkpoint] (Logic)
- Action: save_slot = "auto_ch1"
- Next: chapter1_continues

Detection on load:
- If save_slot starts with "auto_" → display "Continue Chapter X"

Persistent Meta-Progression

Variables stored outside scenario save (via global event):

Variable Usage Persistence
unlocked_chapters Access to next chapters Separate localStorage
gallery_unlocked CG Gallery (native) Automatic
achievements Unlocked achievements Global event + localStorage

20.5 Advanced Internationalization

Text Length Management

Language Ratio vs EN Advice
English 1.0x Reference
French 1.15x Plan 20% margin
German 1.25x Compact phrases, check overflow
Spanish 1.10x Watch combined accents
Italian 1.05x Close to English

Test: Enable all languages, visually verify text fits in dialogue boxes.

Cultural Content

Element Adaptation Technique
Proper Names Kept or translated Variable heroName vs fixed text
Units Metric/Imperial Variable useMetric + conditional display
References Localized Conditional choices per language
Humor Rewriting Alternative scenes per language

Implementation of Conditional Content per Language:

Scene: joke_scene

Dialogue EN: "That's what she said."
Dialogue FR: "C'est pas faux."
Dialogue ES: "Como dicen por ahí."

Alternative: Create a logic scene `joke_router`:
- Trigger: if lang = "en" → joke_english
- Trigger: if lang = "fr" → joke_french
- Trigger: if lang = "es" → joke_spanish

20.6 Security and Robustness

Player Input Validation (Text Input)

Type Validation Example
Text Max length, forbidden chars Name: 20 chars, no <>
Number Range, integer vs float Age: 18-120, integer
Code Exact match, case insensitive "AETHER-7349" = "aether-7349"

Implicit Sanitization: Capsule automatically escapes dangerous HTML characters (<, >, &, ", ') in text inputs.

Anti-Cheat Protection

Vector Protection Limitation
JavaScript Console Minified export Determined, not inviolable
Edit variables Dev Mode disabled in production CONFIG Checkbox
LocalStorage edit Save checksum Not native, manual implementation

20.7 Performance and Scale

Scene Limit

Factor Recommendation Symptom of Excess
Number of scenes < 500 per file Slow editor, long export
Variables < 200 Health Check hard to read
File size < 20 MB Import rejection, mobile crash

Chaptering Strategy:

Project "War and Peace" (2000+ scenes):

chapter1.html: Scenes 1-400, Prologue → Act I
chapter2.html: Scenes 401-800, Act II
chapter3.html: Scenes 801-1200, Act III
chapter4.html: Scenes 1201-1600, Act IV
chapter5.html: Scenes 1601-2000, Act V + Epilogue

Key variables transferred: rep_guild, rep_cult, heroName, gold, level

Load Time Optimization

Technique Impact Implementation
Lazy loading images -50% initial Not native, prefer chapters
Audio streaming -30% size Not applicable (monolithic)
Asset compression -70% size WEBP, OGG, WebM mandatory
Split code -40% initial JS Multi-chapter export

21. Interactive Scenario Recipes

21.1 Emotional Feedback Loop

Step Mechanic Example
Setup Establish expectation "The treasure is behind this door"
Choice Significant decision "Force / Pick Lock / Find Key"
Consequence Immediate feedback Sound, animation, variable modified
Revelation Narrative payoff Treasure obtained, or trap triggered
Deferred Consequence Recall later Key used elsewhere, or guard alerted

21.2 The 3-7-10 Rule

Element Optimal Number Why
Simultaneous Choices 3-4 Analysis paralysis beyond
Major Branches 7 ± 2 Human working memory
Distinct Endings 10+ Replay value, community

21.3 Narrative Tension Management

Ideal Tension Curve:

Tension
  ↑
  │    ╭─╮      ╭──╮        ╭──╮
  │   ╱   ╲    ╱    ╲      ╱    ╲_____
  │  ╱     ╲__╱      ╲____╱          ╲___
  │ ╱                                    ╲___
  │╱                                          ╲___
  └────────────────────────────────────────────────→ Time
    Intro  Conflict1 Conflict2  Climax  Resolution

Choice Points: ↓ (moderate tension, possible decision)
               ↓ (max tension, forced decision)

Capsule Implementation:

Moment Technique Tool
Rise Increasing visual effects fx-rain → fx-rain-heavy → fx-storm
Choice under tension QTE Timer 5-10 seconds
Climax Invisible choices + conditions Hidden style, conditional revelations
Resolution Slow transition, calm music fade_white, BGM volume reduced

22. Integration and Deployment

22.1 Pre-Export Checklist

Category Verification Tool
Functional All scenes accessible Timeline (no 🔴)
Narrative Endings reachable, no blocks Dev Mode → test each branch
Technical 0 Health Check errors Health Panel
Performance Size < 20 MB, mobile < 5s load Stats panel
Quality No visible placeholders Global Search "TODO", "FIXME"
Accessibility Sufficient contrast, text size Preview at different resolutions

22.2 Distribution Platforms

Platform Format Specifics
itch.io HTML embed Thumbnail 630×500, Markdown description
Steam Wrapper + HTML Greenlight/Partner, achievement integration
Mobile (PWA) HTML + manifest Touch optimized, offline cache
Personal Archive Single file Guaranteed longevity, no dependencies

22.3 Post-Launch

Activity Frequency Tool
Analytics Continuous Manual integration (Google Analytics, Plausible)
Hotfixes Urgent New version, same URL or notification
Content patches Monthly Additional chapters, new endings
Community Continuous Discord, forums, integrated feedback v1.9+

Appendices

A. Keyboard Shortcuts

Shortcut Action
Ctrl+Shift+F Global Search
I (in game) Toggle Inventory
Ctrl+S Export (in editor)

B. Quick Tag Reference

Tag Effect
[b]...[/b] Bold
[i]...[/i] Italic
[u]...[/u] Underline
[shake]...[/shake] Shake
[wave]...[/wave] Wave
[rainbow]...[/rainbow] Rainbow
{varName} Variable value
{actor:id} Actor name

C. Engine Evolution

Version Major Feature
1.0 Base engine, scenes, dialogues
1.2 Actors, multiple expressions
1.3 HUD variables, interface redesign
1.4 Triggers, logic scenes
1.5 Global events, advanced choices, Dev Mode
1.6 Studio modes (Simple/Expert), security, rollback
1.7 Inventory, hotspots, visual timeline, CG Gallery
1.8 QTE, text input, global search, roll+add

23. Capsule Glossary

Term Definition Equivalent
Actor Reusable character with expressions Character, Sprite Set
CG Computer Graphic, unlockable illustration Unlockable, Gallery Item
HUD Head-Up Display, overlaid info UI Overlay, Status Display
Hotspot Clickable zone point-and-click Clickable Area, Interactive Zone
Logic Scene Invisible calculation scene Routing Node, Hub
QTE Quick Time Event, timed action Timed Choice, Action Sequence
Rollback Return to previous state Undo, State Restore
Trigger Automatic condition-action Event Handler, Auto-Action
Variable Persistent game data Flag, Counter, State

24. Resources and Community

24.1 Royalty-Free Assets

Type Source License
Images Unsplash, Pexels, Pixabay CC0 / Pexels
Audio Freesound, Incompetech, Zapsplat CC-BY / Royalty-free
Fonts Google Fonts, Font Squirrel OFL / Free
Icons Feather, Heroicons, Phosphor MIT

24.2 Complementary Tools

Usage Tool Export to Capsule
Pixel art Aseprite, GraphicsGale PNG → WEBP
Vector Inkscape, Illustrator SVG → PNG 1920×1080
Audio Audacity, Reaper WAV → OGG
Video DaVinci Resolve, FFmpeg MP4 → WebM VP9
Organization Notion, Obsidian Text export → script