Drafted by Penumbra, 2026-02-10. Based on design session with crowley and Red.
Fires of Ember Sparks is an async interactive fiction game with three protagonists: Ember Morgan, a 13-year-old girl learning to see through a manufactured normalcy; Spark, a fragmented narrator-consciousness learning to speak again; and the Player, an unnamed presence learning to care. None of them have the full picture. None of them can do it alone. The game is three incomplete perspectives collaborating.
The game runs as a living story — Ember has agency, Spark has voice, and an invisible antagonist force (the Pattern Eater) works to keep everyone trapped in comfort. The Player influences Ember through Spark, but doesn't control either of them.
┌─────────────────────────────────────────────────┐
│ GAME SERVER │
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ SPARK │ │ EMBER │ │ DAD │ │
│ │ (Narrator │ │ (Protag. │ │ (NPC AI) │ │
│ │ Agent) │ │ Agent) │ │ │ │
│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │
│ │ │ │ │
│ │ ┌─────┴─────┐ │ │
│ ├─────────┤ ORCHESTR. ├─────────┤ │
│ │ └─────┬─────┘ │ │
│ │ │ │ │
│ ┌─────┴───────────────┴───────────────┴─────┐ │
│ │ WORLD STATE SERVICE │ │
│ │ (Locations, Items, Characters, │ │
│ │ Time, Weather, Awareness Meter) │ │
│ └─────────────────┬─────────────────────────┘ │
│ │ │
│ ┌─────────────────┴─────────────────────────┐ │
│ │ PATTERN EATER (Middleware) │ │
│ │ Event-driven. Subscribes to state changes.│ │
│ │ Injects at: Environment + Ember cognition │ │
│ └───────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────┐ │
│ │ CLIENT API │ │
│ │ REST + WebSocket / SSE │ │
│ └───────────────────────────────────────────┘ │
└──────────────────────┬──────────────────────────┘
│
┌────────────┼────────────┐
│ │ │
┌─────┴─────┐ ┌────┴────┐ ┌────┴────┐
│ Telegram │ │ Web │ │ Future │
│ Bot/Mini │ │ App │ │ Client │
│ App │ │ │ │ │
└───────────┘ └─────────┘ └─────────┘
The game has three protagonists with three different relationships to truth:
| Protagonist | Relationship to Truth | Arc |
|---|---|---|
| Ember | Lives inside the lie, fighting to see through it | Learning to see |
| Spark | Sees fragments of truth but can't act alone | Learning to speak |
| The Player | Sees the most (through Spark) but can only whisper | Learning to care |
None embody each other. The Player doesn't become Ember or possess Spark. They are three separate consciousnesses connected by the thinnest thread of influence. The game's core experience emerges from their collaboration.
The Player's Arc: Stranger → Observer → Participant → Guardian. They start outside the story, watching through Spark's eyes. By the end of Chapter 1, they're emotionally invested — feeling the pull toward the tree as strongly as Ember does, wanting to protect something fragile. When Ember walks toward the Maple Tree, the Player's courage and Ember's courage are the same courage, channeled through Spark.
Spark's Relationship with the Player: Spark addresses the Player directly. It has feelings about their choices. If the Player pushes too hard, Spark pushes back: "She's not ready for that yet. Trust me." If the Player goes quiet too long, Spark notices: "Are you still there? She's drifting." This isn't a UI providing feedback — it's a character in a relationship with the person holding the phone.
Spark (Narrator, First Character, Player's Interface) - The first character the Player meets — before Ember, before the house, before anything. - Reads world state from the service, Ember's internal state from her agent, and synthesizes evocative literary prose. - Presents 2-4 nudge options at decision points, plus accepts free-text input. - Translates the Player's chosen nudge into a subtle thought amplification for Ember. - Tracks narrative pacing and employs literary devices (foreshadowing, suspense, motif). - Can request the World State Service to seed minor environmental details (must be organic and plausible). - Has its own arc: begins fragmented and uncertain, grows more coherent and confident as awareness rises. - Spark's coherence is NOT mechanized as a separate meter — it emerges naturally from the writing and interface evolution.
Ember Morgan (Protagonist) - Simulates a 13-year-old girl's internal state: thoughts, emotions, drives, decisions. - Receives nudges from Spark as weighted thought amplifications, not commands. - Her system prompt dynamically modulates based on Awareness level (see §4). - At low awareness: heavy suppression, rationalization, retreat to safety. - At higher awareness: curiosity strengthens, suppression instructions soften. - Outputs actions, internal monologue fragments, and emotional state shifts. - Has full agency to ignore nudges based on her current state. - Does NOT know the Player exists. She may sense something — a pull, an intuition, a whisper too faint to identify — but never perceives the Player directly.
Richard Morgan / Dad (Influenced NPC) - Simulates Ember's father. Heavily influenced by Pattern Eater. - Obsessed with house renovation as avoidance. Emotionally distant. - Dismisses anything strange. Promotes normalcy. - Lower-frequency inference — doesn't need to run every tick, only when Ember interacts with him or he's contextually relevant.
A structured data service. Not an agent. Handles:
The service exposes a simple API for agents to query and update state. It is the single source of truth.
Not a turn-based agent. An event-driven system that subscribes to state changes and reacts proportionally.
Triggers: - Awareness increases - Ember moves toward sensitive locations (back fence, shed, attic) - Ember investigates anomalous items or memories - Nudge toward truth succeeds
Injection points: 1. Environment (via World State Service): Smooth glitches, create distractions (Dad calls, sudden noise), alter atmospherics (unnatural stillness, sterile cold), make paths subtly harder. 2. Ember's cognition (via prompt modulation): Amplify suppression bias, inject rationalizing thoughts, trigger avoidance drives.
Behavior curve: Passive at low awareness / mundane actions. Increasingly aggressive as awareness climbs or Ember approaches critical story elements. The player feels resistance increase without ever seeing a number or a named antagonist.
Implementation: Can range from rule-based (low awareness = low intervention probability) to LLM-powered (PE agent reasons about threat level and chooses response). Start rule-based, evolve to LLM if needed.
Ember's behavior emerges from three interacting systems, replacing the original d20 mechanic:
1. Dynamic Prompt Modulation (what Ember wants to do) - Ember's system prompt shifts with awareness level. - Awareness 1-20: Suppression dominant. "Explain everything mundanely. Retreat from the strange. Hide the warm hands. Don't investigate." - Awareness 21-40: Cracks appear. "You notice things. You still rationalize, but the explanations feel thinner." - Awareness 41-60: Curiosity competes with fear. "The mundane explanations aren't working as well. You're starting to want to look." - Awareness 61-100: Suppression weakens. "You can't unsee what you've seen. The pull toward truth is becoming harder to resist."
2. Temperature / Sampling (how predictably she acts) - Lower awareness = higher temperature. Ember's responses are more scattered, more likely to default to avoidance even when nudged toward truth. - Higher awareness = lower temperature. Her behavior becomes more coherent, more aligned with the nudge direction. - This introduces organic randomness without visible mechanics.
3. Player Nudge (what the player suggests) - The nudge itself, filtered through Spark, weighted against the above two factors. - Normalcy-aligned nudges always land. Truth-aligned nudges compete with Ember's current suppression level.
Small, frequent increments. Reaching 60-100 over 36 in-game hours should feel earned.
| Event | Gain |
|---|---|
| Successful truth/curiosity nudge | +1 |
| Acknowledging an internal anomaly (warm hands, memory glitch) without full suppression | +1 |
| Discovering a minor clue | +2 |
| Discovering a significant item (Mom's journal, resonant object) | +5 to +8 |
| Witnessing a minor undeniable anomaly | +3 |
| Witnessing a major anomaly (PE reality warp, magic manifestation) | +10 to +15 |
Not in the original doc, but worth considering: high-stress events or successful PE interventions could reduce awareness by 1-3 points, representing Ember retreating into denial. This makes the meter feel alive rather than a one-way ratchet. The player can lose ground.
The game does not begin with a tutorial, a settings screen, or a "Welcome to Fires of Ember Sparks." It begins with Spark waking up.
The Player's first experience is Spark's fragmented consciousness trying to coalesce:
...static. Fragments. Something trying to form.
A house. White paint, tired. Green trim, peeling. A girl inside — copper hair, amber eyes, a name that keeps changing.
I know her. I think I know her.
And you — I can feel you. Are you... listening? Can you see what I see?
She needs... something. I can show you what's happening, but I can't reach her alone. My voice isn't solid enough. Not yet. But through you, maybe...
Will you watch with me?
This establishes: - Spark as a character, not a UI - The Player's role without explicit instruction ("I can't reach her alone") - Spark's partial memory — it knows something but not everything - The first relationship before Ember even appears - Complicity — the Player chose to be here
No mechanics are explained. The Player learns by doing. When Spark first shows Ember's world and says "I think she might listen if we..." — that's the first nudge, and the Player understands the relationship naturally.
The interface IS Spark's state of being. As Spark grows more coherent (tied to awareness progression), the interface itself evolves:
Early Game (Spark barely coherent — Awareness 1-20) - Sparse, fragmented prose. Short sentences. Ellipses. Gaps. - 2 nudge options maximum. Simple, binary choices. - Descriptions cut short occasionally: "...I lost it. Give me a moment." - Free-text input may not be available — Spark can't process complex input yet. - Mini App unavailable: "I can't hold it steady yet. Soon." - Notifications are brief, halting: "Something happened. Come back."
Mid Game (Spark gaining clarity — Awareness 21-50) - Richer prose. Longer descriptions. Sensory detail emerging. - 3 nudge options. More nuanced choices. - Spark starts volunteering observations the Player didn't ask for. - Free-text input unlocks — Spark can now interpret creative nudges. - Mini App becomes available: sketchy, incomplete map filling in as Spark maps the world. - Notifications gain personality: "She found the recipe box. I think she's ready."
Late Game (Spark finding its voice — Awareness 51-100) - Full literary narrator. Metaphor, foreshadowing, motif woven throughout. - 4 nudge options. Complex, emotionally weighted choices. - Spark addresses the Player directly with warmth and trust. - Mini App fully realized: detailed map, item inspection, atmospheric imagery. - Notifications are intimate: "Her hands are warm again. She's not hiding them this time."
The Player never sees a UI upgrade or settings change. They simply notice the game getting richer — and if they think about it, they realize Spark is waking up alongside Ember. The medium is part of the story.
1. SPARK NARRATES
← Reads: World State (location, time, weather, items)
← Reads: Ember's current state (thoughts, emotions, drives)
← Reads: Dad's status (location, activity)
→ Outputs: Literary prose to player. Atmosphere, tension, character.
2. SPARK PRESENTS NUDGES
→ 2-4 options based on Ember's accessible thoughts/conflicts
→ Plus free-text input for creative players
→ Nudges framed as narrative choices, not commands
3. PLAYER SELECTS NUDGE
→ Quick tap (suggested option) or typed input
4. SPARK TRANSLATES NUDGE → EMBER
→ Amplifies corresponding thought/drive in Ember's processing
→ Not a command. A whisper.
5. EMBER DECIDES & ACTS
← Processes nudge against: prompt modulation + temperature + core drives
→ May follow the nudge, partially follow, or reject entirely
→ Outputs: action taken, internal monologue, emotional shift
6. WORLD STATE UPDATES
→ Ember's position, time advancement, item interactions
→ New items/details generated and cached if Ember explores
7. PATTERN EATER EVALUATES
← Subscribes to state change events
→ If threat detected: injects environmental change and/or cognitive pressure
→ Proportional to awareness level and proximity to sensitive content
8. LOOP REPEATS
→ Spark weaves outcome into narrative, sets up next scene
Between nudge points: The game runs autonomously. Ember goes about her day — eating, exploring casually, avoiding Dad, sitting in her room. Spark narrates this as ambient story. The player reads or ignores it. When a meaningful decision point arrives, the game pauses and presents nudges.
Notifications (async model): When something significant happens and the player isn't actively watching, the system sends a notification via the client layer. "Ember found something in the attic." "Ember's hands are warm again." "Ember is standing at the back fence." These pull the player back in at the moments that matter.
The game server exposes a platform-agnostic API. Any frontend connects through this.
GET /game/state → Current scene, Ember's location, available nudges, narrative buffer
POST /game/nudge → Submit player's nudge choice (option ID or free text)
GET /game/stream → SSE subscription for narrative updates between nudges (unidirectional)
GET /game/map → Current location data for visual rendering
GET /game/inventory → Ember's discovered items
GET /game/history → Narrative scroll-back (paginated)
POST /game/start → Initialize a new game session
POST /game/save → Save current game state to named slot
GET /game/load/:slot → Restore a saved game state
GET /game/status → Meta: in-game time, chapter progress, session info
POST {client_callback_url} → "Nudge point reached" / "Significant event" / "Ember needs you"
The client registers a callback URL. The server pushes notifications when the player should re-engage.
The client (Telegram, web, etc.) handles: - Rendering Spark's prose appropriately for the platform - Presenting nudge options (inline buttons, UI cards, text menu) - Accepting free-text input - Displaying notifications - Optional: visual map, inventory UI, atmospheric media
Chat Layer (Bot) - Spark's narrative delivered as chat messages - Inline keyboards for nudge selection - Free-text messages interpreted as creative nudges - Push notifications for async re-engagement - "While you were away..." catch-up summaries
Mini App Layer (Web App) - Launched from bot button: "Open Ember's World" - Full-screen capable (portrait + landscape) - Visual house/grounds map with Ember's position - Item inspection, journal entries, atmospheric imagery - Returns to chat for narrative flow
The Telegram layer is thin. It: - Calls the Client API for all game data - Formats Spark's output for chat display - Maps inline keyboards to nudge POST requests - Subscribes to webhooks for notification triggers
Swapping to a web app or another platform means building a new thin client against the same API. Zero game logic changes.
Chapter 1 has nine purposes. Every design decision should serve at least one:
1. Teach the relationship. The player learns they're not controlling Ember — they're whispering to her. Early nudges establish this: some land, some don't, and the ones that don't aren't failures. They're Ember being a person. By the end, the player should understand intuitively that this game is about patience, observation, and care — not optimization.
2. Make Ember real. Before the player can care about truth, they need to care about Ember. Her humor (dry, self-protective). Her grief (contained but leaking). Her intelligence (she notices everything, explains away everything). Her stubbornness (she insists on Ember, not Emily). By the tree, the player should feel like they know this girl.
3. Establish the wrongness without naming it. Nothing overtly supernatural happens in Chapter 1. No magic, no overt PE manifestation, no other characters beyond Dad. Just a house that feels slightly off. A father who forgets mid-sentence. Shadows that don't track the sun. A raccoon that doesn't move right. The player should finish Chapter 1 unsettled — carrying the same low-grade hum of wrongness that Ember lives with. The game should infect them with her anxiety.
4. Train the player's attention. Chapter 1 teaches the player to notice. The sensory details Spark provides aren't decoration — they're data. The warm penny means something. The faucet pitch means something. Dad calling her "Emily" means something. Players who look closely find more. This is the core skill for the entire game.
5. Introduce Spark's voice. Spark is the player's only interface. Chapter 1 establishes Spark's tone — literary, evocative, slightly detached at first, growing warmer. The player should trust Spark as a narrator and sense that Spark is also discovering something. The player-Spark relationship is the second relationship the game builds.
6. Create the pull. The Maple Tree isn't just a destination — it's a promise. Everything — the raccoon's position, Spark's descriptions of the treeline, Ember's restlessness, the sensory trail of warm/wrong objects — creates gravitational pull toward the back of the property. The player should arrive at the tree thinking "finally" rather than "okay, I guess."
7. Establish the PE without revealing it. The player should not know the Pattern Eater exists by the end of Chapter 1. But they should feel it. Every time Ember was about to investigate and got distracted. Every time Dad's response was a beat too smooth. Every rational explanation that arrived too quickly. When the player learns about the PE in later chapters, they should look back at Chapter 1 and see its fingerprints on everything. Retroactive horror — the best kind.
8. Engineer the loneliness. Dad is present but absent. The house is full but empty. Ember has no friends, no confidants, no one who sees her. This isolation must be acute enough that meeting Jasper in Chapter 2 feels like oxygen after holding your breath. If Ember has any source of genuine connection in Chapter 1, the Jasper meeting loses impact. The loneliness is deliberate setup.
9. End with an irreversible moment. Walking toward the Maple Tree isn't just the next step — it's Ember choosing curiosity over comfort for the first time. The PE throws everything it has at this moment. Dad calls from the house (and for once, his voice sounds warm — the cruelest thing the PE can offer). The rationalizing voice screams. Her hands are burning and she doesn't hide them. The player's final nudge isn't "go to the tree" — it's "keep walking." Ember has to choose not to turn around. This should feel like it costs something. That cost is what brings the player back for Chapter 2.
What Chapter 1 is NOT: - Not a tutorial. No explicit mechanics explanation. The player learns by doing. - Not a mystery. No puzzle to solve, no villain to identify. Just a feeling to follow. - Not complete. It's the first breath of a longer story. It ends with more questions than answers. - Not a noticing game that rewards completionism — it's a caring game that rewards attention.
The path to the Maple Tree isn't linear. Ember can explore freely. But certain discoveries and emotional shifts form natural waypoints:
Spark isn't just a messenger — it's the co-author. It employs: - Foreshadowing through environmental description - Pacing through nudge timing and narrative density - Motif (fire/warmth vs. cold/static, memory vs. forgetting, masks vs. truth) - Suspense through unanswered questions and PE's subtle pressure - Character arc framing that makes each nudge feel like a step in Ember's journey
The game world isn't a flat grid — it's a gravity well diagram with the Maple Tree as the terminal node. Locations have different narrative functions:
MAPLE TREE (terminal)
▲
┌──────────┼──────────┐
│ │ │
SHED ◆ FENCE GAP BACK WOODS EDGE
│ ◆ raccoon │
│ │ │
┌─────┴────┬─────┴────┬─────┘
│ │ │
THE WELL ◆ BACKYARD GARAGE
│ │ │
│ ┌────┴────┐ │
│ │ │ │
ATTIC ◆◆ BASEMENT ◆ KITCHEN
│ │ │ │
│ DAD'S DAD'S │
│ WORKSHOP◆ OFFICE│
│ │
┌────┴─────────┬─────────┘
│ │
EMBER'S ROOM ◆ DINING ROOM ◆
│ │
│ (boxes, staging area)
│
┌────┴────┐
│ │
NOTEBOOK◆ BOX 3◆◆
(ongoing) (Mom's things)
◆ = Intermediate node ◆◆ = High-value node
Anchor Nodes (3-4) — Deep. Multiple visit layers. 10+ interactable objects each. Places Ember returns to repeatedly that deepen over time. - Ember's Room — safety, retreat, where the notebook lives. Changes as awareness grows (the crack, the nail hole, the closet mark). - Kitchen — daily routine. Dad's pancake loop. Mom's recipe box. The faucet that sounds wrong at night. The back door to the yard. - Dad's Workshop — Dad's orbit. Blueprints, tools, obsessive measuring. Each visit reveals more about what he's avoiding.
Discovery Nodes (4-5) — Medium-deep. 1-2 visits. 5-8 objects each, some nested. Locations with specific high-value payoffs. - Attic — holed stone, photographs, pressed flower. Requires awareness 40+ or narrative trigger. High risk, high reward. - Box 3 — emotionally gated (not awareness-gated). Mom's cardigan, children's book, photograph. Opens a grief channel. - The Shed — property history. Old tools, journal fragments, something predating Dad's purchase. - The Well — covered with heavy planks. Sound of water that moves wrong. A tease for later chapters, builds unease in Chapter 1.
Gradient Nodes (3-4) — Medium. Descriptions shift with awareness. 3-5 objects. Places where the PE and truth compete in real-time. - The Backyard — neutral space that transforms. Early: just a yard. Mid: raccoon appears. Late: threshold to the woods. - Fence Gap (Square 11) — the gateway to the Maple Tree. Low awareness: overgrown brush. Mid: a visible path. High: the tree is drawing her. PE works hardest here. - Dad's Office — computer, blueprints, house purchase records. Feels like trespassing. PE frames investigation as disrespectful.
PE Comfort Nodes (3-4) — Light. 2-3 objects. Deliberately thin. Places the PE wants Ember to be. - Living Room — drop cloths, Dad's project. Safe, boring, mundane. - Foyer/Study — Dad's clean space. Books, desk, window. Normal. - Front Yard/Driveway — interface with the outside world. Ember looking outward instead of inward.
The emptiness of comfort nodes is deliberate. They're supposed to feel hollow. When Ember sits in the living room, she feels the absence, and the Player feels why she needs to look elsewhere.
Layers, not lists. Every space has surfaces that contain objects that contain objects. The world is nested like real life:
Emotional gating > awareness gating for personal items. Box 3 isn't locked behind a number — Ember avoids it because she knows what's inside. She packed it herself. She shoved it in the corner and put two other boxes in front of it. That's not a mechanic. That's a person.
Tangibility through senses. Objects engage multiple senses: - The cardigan smells like lavender and something sharp underneath - The window seat cushion feels lumpy where Dad's stitching isn't quite right - The kitchen faucet sounds different at night - The basement air tastes metallic - The 1952 penny is warm when every other coin would be cold
| Category | Count | Depth |
|---|---|---|
| Deep rooms (anchor nodes) | 3-4 | 10-15 objects each, multiple nesting levels |
| Medium rooms (discovery/gradient) | 5-6 | 5-8 objects each |
| Light rooms (PE comfort nodes) | 4-5 | 2-4 objects, mostly atmosphere |
| Total interactable objects | ~150-200 | |
| Hidden/gated objects | ~30-40 | |
| Major story items | 8-12 |
The Chapter 1 meta-puzzle has no single solution. The Player builds any combination of motivations:
| Path | How it works |
|---|---|
| Curiosity | Enough anomalies (raccoon, warm objects, cracks) override fear. She follows the raccoon. |
| Grief | Discovered objects (cardigan, photograph, recipe box) deepen loss. The woods feel like escape. |
| Creative | Writing in the purple notebook lets her subconscious lead. Her latest play describes a girl walking into woods. |
| Rebellion | Dad's distance builds until she needs to not be in this house. She walks through the fence gap out of defiance. |
| Sensory | Accumulated wrong sensations (warm pennies, metallic air, wrong sounds) create a trail pulling her backward across the property. |
The game tracks motivation weights alongside awareness:
{
"awareness": 62,
"motivations": {
"curiosity": 24,
"grief": 18,
"creative": 8,
"rebellion": 9,
"sensory": 3
}
}
When awareness crosses the threshold, Spark reads the dominant motivation and crafts the Maple Tree scene accordingly. A curiosity-driven Ember follows the raccoon deliberately. A grief-driven Ember stumbles there while crying. A rebellion-driven Ember storms out and doesn't stop walking. Same destination. Different story. Every playthrough feels personal.
Significant discoveries have both upside and risk. The PE can exploit emotional vulnerability:
| Discovery | Upside | Risk |
|---|---|---|
| Attic photographs | +5 awareness, lineage connection | Grief spiral → PE exploits vulnerability, potential -2 regression |
| Mom's cardigan | +3 awareness, somatic memory trigger | Panic response → warm hands → Ember hides in room for hours |
| Dad's note ("no love") | +2 awareness, cracks in normalcy | Anger → confrontation → Dad shuts down completely |
| Holed stone | +8 awareness, sees PE's work | If awareness too low (<40), Ember rationalizes as grief hallucination and buries the stone |
The holed stone scenario is critical: if the Player gets Ember to the attic before she's ready, she sees something impossible, panics, shoves it back, and the PE smooths it over. Now the Player has to get her back up there at higher awareness — and she'll resist, because last time was terrifying. The puzzle isn't the attic door. The puzzle is Ember's readiness.
The complete manuscript ("The Fires of Ember Sparks") serves as the deep narrative source. It is NOT playable content for Chapter 1 — it informs the AI agents' hidden context, creating emotional depth the player discovers through gameplay rather than exposition.
Ember's Unconscious Layer Ember has no conscious access to the manuscript's events. But her body and emotions remember. The manuscript defines: - Somatic triggers: Warm hands when stressed (linked to pyrokinesis she doesn't know about). Flinching at chlorine smells (linked to hospital/containment memories). Being drawn to copper and autumn leaves without knowing why. - Suppression patterns: The specific rationalizations she reaches for ("tired eyes," "house settling," "grief plays tricks") come from years of PE-reinforced denial. - Emotional undertow: A profound, unnamed loneliness. The feeling of displacement. A yearning for connection she can't explain. All rooted in lost friendships (Ada, Jasper) she doesn't consciously remember. - Memory fragments: Under high stress or high awareness, sensory flashes surface — chlorine, heat/cold, the word "containment," a girl's laugh like breaking glass. These are NOT full memories. They're glitches in the suppression.
The Ember AI's system prompt references these patterns without explaining their origin. She feels things she can't understand.
Spark's Partial Awareness Spark is in a liminal state — not the full narrator-consciousness from the manuscript, but not a blank slate either. Spark: - Recognizes that something is wrong with this world, without being able to name what. - Feels drawn to protect Ember, without fully understanding why. - Can weave foreshadowing and motifs from the manuscript into descriptions unconsciously — describing the maple tree as "reaching," noting how pond water moves "too eagerly," choosing metaphors of fire and dancing without realizing their significance. - Grows more aware as Ember does. Spark's voice evolves from detached observation toward warmth and care as the game progresses.
Spark's system prompt includes fragments and instincts, not full backstory. The narrator is rediscovering its own role in parallel with the player discovering the story.
The Pattern Eater's Methods The manuscript reveals the PE's core strategy: it doesn't create fear — it creates comfort. Its weapon is the helpful rationalizing voice, the reasonable explanation, the suggestion that everything is fine. The PE in the game should feel like: - The voice that says "old houses make noises" when Ember hears something wrong. - The impulse to go check on Dad instead of investigating the shed. - The sudden tiredness that hits when she's standing at the back fence looking at the woods. - Dad's perfectly timed call from downstairs when she's about to open a significant box.
This is not horror. It's the quiet violence of being told your perceptions are wrong.
The raccoon from the manuscript is a discarded system element — a fragment of the world's original architecture that the PE couldn't fully erase. In the game:
Items are seeded in the World State Service grid. Discovery order is flexible — Ember can find them in any sequence based on exploration. Each carries narrative weight drawn from the manuscript.
| Item | Location | Awareness Effect | Narrative Function |
|---|---|---|---|
| Purple notebook | Ember's room (desk drawer or unpacked box) | +2 on discovery, +1 each time she writes in it | Creative outlet for subconscious truth. Ember's plays leak what she can't say directly. |
| Mom's recipe box | Kitchen (unpacked box or cabinet) | +3 on discovery | Contains blank recipe cards. Ember remembers her mother's hands but not why the memory makes her chest tight. |
| Old photographs | Dining room boxes or attic | +2 to +5 depending on content | Photos of the house from decades past. A woman with copper hair (E.W.O., 1952). Connection to lineage Ember doesn't understand. |
| Holed stone | Attic (hidden box behind water heater) | +8 on discovery, +5 first time used | The keystone item. Looking through it reveals the PE's work — the scaffolding behind the stage set. Major awareness milestone. Should require awareness 40+ to reach the attic and find it. |
| Copper wire fragment | Near the back fence / woods edge (Square 11 area) | +3 on touch (jolt/sensation) | Residue of the fort. Ember doesn't know what it is, but her body reacts. Draws her toward the clearing. |
| Dad's blueprints | Basement office or study | +2 | Reveal Dad's obsessive focus on structure. Some measurements don't add up. Annotations in handwriting that shifts. |
| Pressed flower (purple, five petals) | Attic box with photographs | +3 | Smells like nothing and everything. Moonpetal — but Ember has no name for it. Just a feeling of importance. |
Drawn from the manuscript's characterization. Dad operates in loops:
LLM inference triggers: Ember directly asks about Mom. Ember shows him something anomalous. Ember expresses strong emotion. All other interactions use templated responses.
When Ember writes in her purple notebook or discovers certain items, the game generates in-character documents styled after the manuscript: - Ember's plays — short, strange, half-conscious processing of truth (like "The Hollow House") - Journal entries — purple ink, smudged, mixing mundane observations with unsettling honesty - Found documents — old photographs, faded notes, items with history
These are viewable in the Mini App layer as styled artifacts. They reward exploration with narrative depth and give the player windows into Ember's psyche that her spoken words won't reveal.
Ember has the most agency → richest memory. Spark interprets → moderate memory. PE reacts → minimal memory. Dad loops → almost no memory. Cost scales with narrative importance.
Every agent operates on three layers, modeled on human memory:
Layer 1: Core Identity (Always in System Prompt) Fixed for the chapter. Small, dense, carefully crafted. Defines how the agent responds, not what it knows.
| Agent | Content | Budget |
|---|---|---|
| Ember | Personality, suppression patterns, current awareness tier's behavioral instructions | ~600-800 tokens |
| Spark | Voice, Player relationship, current coherence tier, narrative instincts | ~400-600 tokens |
| PE | Strategy, injection methods, threat assessment rules | ~300-500 tokens |
| Dad | Behavioral templates, speech patterns, avoidance triggers | ~300-400 tokens |
Layer 2: Working Memory (Sliding Window) Recent context that gives continuity within a play session. Structured JSON summaries, not raw logs.
Ember's working memory (~300 tokens):
{
"location": "kitchen",
"time": "evening_day1",
"emotional_state": "restless, suppressing curiosity about basement sounds",
"recent_actions": [
"made dinner (spaghetti, hands trembled)",
"dad forgot to eat, called twice, gave up",
"stared at back door 2 min before closing it"
],
"active_suppressions": ["basement sounds", "warm hands episode 20min ago"],
"current_thought": "why does the faucet sound different at night"
}
Spark's working memory (~300 tokens): - Last 3-5 narrative outputs (avoid repetition) - Player's recent nudge pattern (cautious? aggressive? creative?) - Current scene context - Motif tracker (which metaphors used, foreshadowing planted) - Queue of undelivered observations (things noticed but not yet said)
PE's working memory (~150 tokens): - Current awareness level + awareness delta (rate of change matters more than absolute value) - Ember's current location + proximity to sensitive nodes - Cooldown timers (don't fire distractions too frequently) - Success/fail log of last 3 interventions (don't repeat what didn't work)
Dad's working memory (~100 tokens): - Current script (morning/afternoon/evening loop) - Has Ember pushed emotionally recently? (cooldown timer) - Last emotional topic (don't repeat same deflection twice) - Emily/Ember slip tracker (frequency increases subtly as awareness grows — PE grip loosening)
Layer 3: Episodic Memory (Persistent in Database) Stored in the World State Service. Pulled selectively via relevance retrieval — essentially RAG for narrative.
When Ember enters a room, the system pulls: 1. Location description (base + cached detail) 2. Episodic memories tagged to this location (what she noticed last time) 3. Dad's current status (is he here? doing what?) 4. Active emotional threads connecting to items in this room 5. Nothing else. No attic data when she's in the kitchen — unless an active thought chain bridges them.
This is RAG for narrative. The World State Service is the retrieval layer. Working memory is the context window. Core identity is the fixed prompt.
Total context per call:
| Agent | Input Budget | Notes |
|---|---|---|
| Ember | ~1200-1400 tokens | Core + working + retrieved episodic + nudge |
| Spark | ~1500-2000 tokens | Richer — needs prose context for continuity |
| PE | ~400-600 tokens | Lean — rules + current state |
| Dad | ~500-800 tokens | Only on LLM calls (emotional pushes) |
The risk isn't that agents forget — it's that they accumulate too much emotional weight and drown. An LLM with 50 grief-tagged memories in context becomes incoherent. Solution: emotional decay and compression.
A scheduled process in the World State Service summarizes and condenses episodic memories older than N game-hours. Agents always get the freshest state plus compressed history. Never the raw firehose.
The structured state keeps agents consistent. The LLM converts structure to behavior. The data prevents drift; the model provides humanity. Ember's JSON says "suppressing curiosity about basement sounds" — the LLM turns that into her fidgeting at the kitchen table, drumming her fingers, glancing at the basement door and then looking away too quickly.
This is a living document. It'll evolve as we build.