melissa kate
<< Doppelgänger

Frontend Display Options

How far the engine's frontend (skin) layer can go — what's renderable today, what would need small engine extensions, and what skins/experiences become possible.

The engine is headless: it produces structured data (current event, choices, dialogue speaker/mood, scene visuals, character profiles, notifications, discoveries). Skins decide how to present that data. Today's demo-react is text-only; the engine's data model already supports much richer experiences.

---

What the engine already exposes

Per-event (TimelineEvent.scene)

Per-content-variant

Per-character (CharacterVisuals)

Per-dialogue event (DialogueMetadata)

Already structured for skins

---

What demo-react actually renders today

Text. Choices. A speaker name in a div. None of scene.background, scene.atmosphere, scene.audio, character.visuals.*, or dialogue.expression is read anywhere in GameView.tsx.

The contract is already richer than any current demo proves. The gap is rendering, not modeling.

---

Layer 1 — Render what the engine already emits

Zero engine changes. Pure FE work. This closes the gap between data model and demo.

---

Layer 2 — Skin variety

Build multiple reference skins to prove the abstraction and create a strong demo video / marketing story.

Reference skins worth building

The marketing pitch this enables: "Author once, present as a phone game, a visual novel, a chatroom, or an explorable scene — all from the same story."

---

Layer 3 — Modest engine extensions, big payoff

Each is small in engine code but unlocks new presentation territory.

Multi-character staging (HIGH PRIORITY)

The single biggest cinematic upgrade. Currently dialogue.speaker is singular. Extend to support a cast on screen:

interface SceneStaging {
  /** Characters present on screen, in display order */
  cast?: Array<{
    characterId: string;
    position: 'far-left' | 'left' | 'center' | 'right' | 'far-right';
    expression?: string;
    /** Visual emphasis — speaker is highlighted, others dimmed */
    state?: 'active' | 'listening' | 'absent';
  }>;
}

This enables:

Authoring-side: Story Maker needs a "stage editor" — drag character portraits onto positions, set expressions, mark active speaker. This is genuinely fun authoring UX.

Per-character voice (TTS)

Each character has a voice ID (ElevenLabs / OpenAI). Skin plays generated audio for dialogue. Combined with mood-keyed expressions, characters feel embodied. Especially powerful for LLM-generated dialogue — the character's voice is consistent even when the words are dynamic.

Tension / intensity channel

Engine emits a hint (tension: 0..1 or named: 'calm' | 'rising' | 'climax') per event. Skins react however they want: camera shake, music layer mix, color punch, vignette intensity.

Layered music

Engine emits multiple audio hints (ambient, tension, theme). Skin mixes them — ambient always, tension fades in during high-stakes scenes, theme plays for character moments.

Generated portraits per mood

Stable Diffusion / image API integration so authors don't need 12 hand-drawn images per character. Pre-generate at build time, cache results. Optional — authors can still hand-author.

Sub-event animation cues

Add cues array on events: [{ at: 'enter', action: 'fade-in' }, { at: 'choice', action: 'pause-music' }]. Skins interpret cues their own way.

---

Layer 4 — Story Maker authoring affordances

This is where the paid product gets its value. The engine and skins are useless to non-coder buyers if authoring isn't accessible.

---

Multi-character staging — why it matters

Single-speaker dialogue is fine for chatbot-style games. But narrative games hit a different gear when characters interact with each other in front of the player. A few examples this unlocks:

This is what Disco Elysium, Citizen Sleeper, and classic VNs do well. Twine fundamentally can't do it. A scene with 3 characters whose moods update independently is genuinely novel for an indie narrative engine.

---

Strategic claim

If Layer 1 + Layer 2 (with 2-3 skins) ship, the product positioning shifts:

The skin layer is the viral hook — an author writes one story, sees it rendered three different ways with three different vibes. That's the demo video.

Layer 3 (multi-character staging especially) is what makes this feel like a real cinematic engine instead of just "Twine with skins."

---

Build order proposal

  1. Layer 1 in demo-react — close the gap between engine output and what's rendered. Use Doppelganger or "The Vanishing" as the test content. This is pure FE work and produces an immediate visible upgrade.
  2. Pick a second reference skin — VN-style is the highest impact for marketing.
  3. Multi-character staging extension — engine schema change + Story Maker stage editor + skin support in both VN and demo-react.
  4. Story Maker authoring affordances — asset library, per-event visuals editor, skin preview selector.
  5. Phone skin extraction — promote Doppelganger's phone UI into a reusable skin package.
  6. TTS / generated portraits / tension channel — pick the one that matches the games you want to demo.