Game NPC orchestration
Persistent, in-character NPCs across long play sessions. Multi-character scenes with ensemble relationships. Voice drift checks so the wizard doesn't slowly turn into a sarcastic AI.
The pain in LLM-driven NPCs is that they drift. A villain who starts the campaign cold and calculating ends the third session warm and helpful — not because the writer wanted that, but because the prompt fell out of the context window. Moonborn's runtime is built for the opposite outcome: characters who stay in character across long arcs.
When this fits
- RPG / interactive fiction prototypes where the player will spend hours with a small cast.
- Multi-character scenes — two NPCs in conflict, a guild meeting, a dialogue between rivals.
- Narrative consistency audits — checking a finished episode against the character bible.
- NPC cast bibles maintained as code — pair with Persona-as-code so writers diff characters in pull requests.
What Moonborn provides
- Voice fingerprint — fifty-scenario baseline embedded at generation; every reply scored against it.
- Drift detection with configurable thresholds — tighter for central villains, looser for crowd NPCs.
- Ensemble relationships — typed edges (rival, ex-lover, mentor) injected into multi-character scene prompts.
- Lineage — fork your "town drunk" archetype into 12 specific NPCs without re-typing their personalities.
- Long-term memory — players remember promises NPCs made three sessions ago.
What Moonborn does NOT provide
We are explicit about scope: Moonborn is the character layer, not the game engine. You still own:
- Scene state, turn order, branching narrative.
- The combat system, the economy, the world simulation.
- Save/load + replay infrastructure.
- The UI players touch.
Pair Moonborn with your game engine (Unity, Godot, Twine, custom).
Moonborn lives behind your dialogue trigger; whatever calls
chat.sendMessage is up to you.
Pattern: cast bible as code
- Sketch the cast in a markdown file: name, role, two-line pitch.
- Use Build your first persona to generate each one.
- Audit + tune; refine villains tighter than crowd characters.
- Declare relationships: Multi-character scenes tutorial.
- Connect Git sync (Persona-as-code) so the bible lives in your repo.
- In-engine, every NPC dialogue trigger maps to a session against the matching persona.
Drift thresholds for NPCs
Defaults to start:
- Major villain / antagonist:
0.20(strict; their voice is a plot device). - Companion characters:
0.25(consistent, but human variation acceptable). - Crowd / minor NPCs:
0.35(looser; we mostly want them to not break immersion).
Set these per-persona, not workspace-wide — the central villain deserves the budget; the innkeeper does not.
Quality gate per release
Before shipping a new chapter, run the provocation test suite against every named NPC. Failures point at characters who'd break under player-injected weirdness — the kind of failure mode that shows up on Reddit threads.
Tier
Pro and up.
Next
- Build the cast: Multi-character scenes tutorial.
- Keep the bible in Git: Persona-as-code use case.
- Voice drift deep-dive: Drift detection.