content(wiki): purge v0.1 Sova/Van Maanen residue (#865)
Spring-cleaning accumulated v0.1 vertical-slice residue across the wiki. Scope per Jeroen's pre-decisions on 2026-04-21: - Delete outright: wiki/star-systems/GJ-35/sova/ subtree (5 files + 2 dirs) — v0.1 Station Sova / Transit District content. - Strip example blocks in authoring guides and _templates/ that cited dropped v0.1 NPCs (Kael Davan, Sera Venn, Nils Davan, Devra, Torek, Renn, Pell, Tav, Lera Sessik, Sabel). Replaced with short "v0.1 examples removed — D-122" notes pointing authors to the active NPC roster. - Rewrite canonical-lore references file-by-file: faction pages, technology pages, contraband pages, concepts pages, corp pages that cited v0.1 names/places. Preserve institutional/structural content, drop specific-name citations. - Commission name drift: replace "Concord Commission" and "Assembly Commission" with "the Lattice Commission" (D-193) throughout. - Van Maanen's Star cultural references: the canonical in-game name is Vuurkloof. "Van Maanen's Star" is retained only as an astronomical designation (glossary + GJ-35 Calibration Note). All cultural/system references converted to Vuurkloof across culture-authoring-guide, cultural-generation-guide, founder-gates, and star-system adjacent-system descriptions. - Strip `v0.1` from faction/triangle frontmatter tags (8 files). - wiki/triangles/hub-power.md and wiki/factions/the-ring.md: rewritten using role-name exemplars (Ring Coordinator / Shift Supervisor / THE FRIEND) instead of named v0.1 NPCs. Triangle pattern preserved as a structural reference. Also applies drive-by Commission drift fixes and minor cross-ref updates to canonical corps (gate-corporation, mastroianni-vehicle-group, stalownia-kowalski, prometheus-labs, ferreira-monteiro, vins-de-grand-vide, and 13 others). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -101,7 +101,7 @@ If you're unsure whether a line is Factual: if it contains a number, a named qua
|
||||
Base text must not contain culture-specific vocabulary. The culture injectors add that layer at voicing time. Base text is the semantic skeleton.
|
||||
|
||||
**What to avoid:**
|
||||
- Van Maanen's Star oath vocabulary: `"void take it"`, `"blood and void"` — these go in voice_examples, not base text
|
||||
- Culture-specific oath vocabulary: e.g. `"void take it"`, `"blood and void"` — these go in voice_examples, not base text
|
||||
- Culture-specific greetings or farewells
|
||||
- Slang that implies a particular register
|
||||
|
||||
@@ -129,9 +129,7 @@ Before committing, run through:
|
||||
|
||||
---
|
||||
|
||||
## Examples from the Van Maanen's Star zones (reference)
|
||||
|
||||
These lines passed elevation review (Sprint 26):
|
||||
## Examples of elevated base text (Sprint 26 elevation review)
|
||||
|
||||
**Strong — moment-specific, role-grounded:**
|
||||
- `"kneels at the base of a struggling plant and parts the soil with two fingers"`
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
This guide provides the framework for generating culturally consistent content in The Settled Reach. Every named district, NPC, and piece of authored dialogue reflects a specific cultural context. This guide codifies how to derive that context from first principles so that any content author — writing a dockworker or a station administrator, a bar greeting or a confrontation line — can produce work that feels like it belongs.
|
||||
|
||||
The Sova Transit District in Van Maanen's Star is the first concrete instance of this framework. All examples in this guide are drawn from Sova. Subsequent settings use the same framework applied to different parameters.
|
||||
The worked examples in this guide use a mid-Reach freight district as the reference context. Subsequent settings use the same framework applied to different parameters.
|
||||
|
||||
---
|
||||
|
||||
@@ -31,7 +31,7 @@ This determines the age of institutions, the density of infrastructure, and the
|
||||
| **Frontier** | Sparse, improvised | Light. Syndic representatives, occasional Commission audit | Independent-to-resistant. Authority is a distant abstraction. | Improvised. Tight-knit. Self-reliant. |
|
||||
| **Deep Frontier** | Minimal | Nominal or none | Sovereign. Authority is whatever the community enforces. | Harsh. Communal. Rules of necessity. |
|
||||
|
||||
**Sova Transit District:** Mid-Reach. Commission presence is intermittent — enough to maintain order, not enough to catch everything. The district's residents are pragmatic about authority: they comply when observed, continue as normal when not.
|
||||
**Mid-Reach freight district:** Mid-Reach. Commission presence is intermittent — enough to maintain order, not enough to catch everything. The district's residents are pragmatic about authority: they comply when observed, continue as normal when not.
|
||||
|
||||
---
|
||||
|
||||
@@ -49,7 +49,7 @@ Economic base determines daily rhythms, vocabulary, and the social pressures tha
|
||||
| **Service** | Tourist/commercial traffic. | Tips, regulars, reputation management. | Income dependent on traffic volume. Reputation fragile. | Blackmail. Theft. Information sale. |
|
||||
| **Research** | Project deadlines. Funding cycles. | Research progress, institutional politics, publication credit. | Competitive, status-driven, secrecy around results. | Data theft. Fabrication. Factions. |
|
||||
|
||||
**Sova Transit District:** Freight primary. The span gate transit schedule structures everything. NPC routines, the ring's operational calendar, and social patterns (when the bar fills, when corridors are quiet) all derive from freight rhythm.
|
||||
**Mid-Reach freight district:** Freight primary. The span gate transit schedule structures everything. NPC routines, the ring's operational calendar, and social patterns (when the bar fills, when corridors are quiet) all derive from freight rhythm.
|
||||
|
||||
---
|
||||
|
||||
@@ -66,7 +66,7 @@ Settlement age determines architectural character, generational memory, and whet
|
||||
| **Mature** | Mixed construction eras clearly visible. Original structure heavily modified. Strong local character in older sections. | Distinct local identity. People think of themselves as "from here." | Distant. The origin is history, not memory. | Local pride. Skepticism of core-system assumptions. |
|
||||
| **Old** | Accretive. Original construction may be invisible under layers. Idiosyncratic. | Deeply rooted identity. History is ambient. | Institutional. Stories are embedded in place-names and customs. | The origin system is foreign. "We are our own thing." |
|
||||
|
||||
**Sova Transit District:** Established-to-Mature. The district is ~40 years old on a station settled ~180 years ago. The district itself shows layered construction — prefab base, retrofitted sections, personalized details. Local identity is present but not deep. Workers think of themselves as Sova people, not Van Maanen's Star people; but they don't have the rootedness of a settlement in its third or fourth generation.
|
||||
**Mid-Reach freight district:** Established-to-Mature. The district is ~40 years old on a station settled ~180 years ago. The district itself shows layered construction — prefab base, retrofitted sections, personalized details. Local identity is present but not deep. Workers think of themselves as Sova people, not Vuurkloof people; but they don't have the rootedness of a settlement in its third or fourth generation.
|
||||
|
||||
---
|
||||
|
||||
@@ -80,7 +80,7 @@ This determines:
|
||||
- **Relationship to technology** — whether lattice use is stigmatized, normalized, or a source of pride
|
||||
- **Attitudes toward the Commission** — reverence, compliance, resentment, or active evasion
|
||||
|
||||
**Van Maanen's Star Cultural Profile (established, working-class mid-Reach):**
|
||||
**Vuurkloof Cultural Profile (established, working-class mid-Reach):**
|
||||
|
||||
- **Names:** Compact, consonant-heavy, first-name-primary in social contexts. Family names exist but are used formally (official documents, institutional contexts, introductions to strangers). Nicknames common among colleagues. Off-system names (longer vowels, different consonant clusters) stand out subtly but aren't cause for suspicion — just quietly noted.
|
||||
|
||||
@@ -112,7 +112,7 @@ Every location has a set of institutions that structure daily life. Understandin
|
||||
| **Station Administration** | Local governance | Immediate authority. Maintenance schedules, district regulations, housing allocation. |
|
||||
| **Medical Services** | Re-embodiment and healthcare | Presence varies by wealth. Clinics in working districts, full services in affluent ones. |
|
||||
|
||||
**Sova Transit District institutional profile:**
|
||||
**Mid-Reach freight district institutional profile:**
|
||||
- Syndic logistics consortium: the main employer, highly visible in daily operations
|
||||
- Station Administration: present through maintenance schedules, posted notices, the occasional administrator in the corridors
|
||||
- Lattice Commission: intermittent. A kiosk in the logistics hub lobby, field investigators who visit quarterly (usually)
|
||||
@@ -125,16 +125,16 @@ Every location has a set of institutions that structure daily life. Understandin
|
||||
|
||||
### 2.1 Naming Conventions
|
||||
|
||||
Naming conventions follow from Dimension 4 (Cultural Reference Point). The table below captures Van Maanen's Star standard, which serves as the v0.1 model.
|
||||
Naming conventions follow from Dimension 4 (Cultural Reference Point). The table below captures Vuurkloof standard as the canonical worked example.
|
||||
|
||||
**Van Maanen's Star naming rules:**
|
||||
- **First names:** 1-2 syllables, consonant-forward, no double vowels in typical form. Examples: Kael, Voss, Drin, Lera, Torek, Maret, Naia, Sera, Nils, Kosse, Pael, Tev, Ren, Resha, Harek, Sess, Devra.
|
||||
- **Family names:** 1-2 syllables, similar phoneme pattern. Examples: Davan, Lintar, Sessik, Korr.
|
||||
- **Social usage:** First name in most contexts. "Supervisor Voss" for institutional address. Full name only in formal or hostile contexts.
|
||||
- **Nicknaming:** Common among colleagues. A name like "Renn" might be short for something nobody uses.
|
||||
- **Off-system names:** Slightly softer vowels, longer syllable count, different consonant clusters. Example: Olin, Sabel. These stand out quietly — the detective's lattice may flag them as non-Van Maanen's Star-origin before the detective consciously registers why.
|
||||
**Vuurkloof naming rules:**
|
||||
- **First names:** 1-2 syllables, consonant-forward, no double vowels in typical form. Pattern examples: Brek, Solt, Drav, Vesk, Tren, Morva. *Author naming examples against the active district roster — don't re-use existing NPC names.*
|
||||
- **Family names:** 1-2 syllables, similar phoneme pattern. Pattern examples: Valen, Kost, Terst, Morek.
|
||||
- **Social usage:** First name in most contexts. "Supervisor {Surname}" for institutional address. Full name only in formal or hostile contexts.
|
||||
- **Nicknaming:** Common among colleagues. A short form might be all anyone uses.
|
||||
- **Off-system names:** Slightly softer vowels, longer syllable count, different consonant clusters. Examples: Olin, Renhai. These stand out quietly — the player character's lattice may flag them as non-local-origin before consciously registering why.
|
||||
|
||||
**IP check:** Van Maanen's Star names are constructed to feel plausibly human-future without mapping to any existing franchise. They are NOT Hamilton Commonwealth names (conspicuously contemporary English, which is Hamilton's signature device). They are NOT Banks Culture names (often whimsical or elaborate). They are NOT Firefly or Star Wars (no Earth-ethnic-name echoes). They suggest cultural drift across 180 years of mid-Reach settlement.
|
||||
**IP check:** Vuurkloof names are constructed to feel plausibly human-future without mapping to any existing franchise. They are NOT Hamilton Commonwealth names (conspicuously contemporary English, which is Hamilton's signature device). They are NOT Banks Culture names (often whimsical or elaborate). They are NOT Firefly or Star Wars (no Earth-ethnic-name echoes). They suggest cultural drift across 180 years of mid-Reach settlement.
|
||||
|
||||
---
|
||||
|
||||
@@ -142,16 +142,16 @@ Naming conventions follow from Dimension 4 (Cultural Reference Point). The table
|
||||
|
||||
Economic base (Dimension 2) determines the vocabulary of daily life. Workers in a freight hub speak differently from workers in a mining operation or a research station. This vocabulary should permeate every NPC's dialogue — not as jargon dumps, but as the ambient language of their daily reality.
|
||||
|
||||
**Sova Transit District — Freight Economic Vocabulary:**
|
||||
**Mid-Reach freight district — Economic Vocabulary:**
|
||||
|
||||
See companion document: **Sova Texture Appendix (#302)** for the full slang glossary.
|
||||
See companion document: **Freight District Texture Appendix** for the full slang glossary.
|
||||
|
||||
Core vocabulary patterns for freight:
|
||||
- Work = "shift" (not "rotation," not "duty," not "tour")
|
||||
- The gate = "the gate" casually, "the span gate terminal" institutionally — never "the span gate" in casual speech
|
||||
- Cargo containers = "containers" or "cans" (informal) — never "pods"
|
||||
- Cargo manifests = "manifests" (precise), "paperwork" (dismissive), "the file" (when being evasive)
|
||||
- Credits = "marks" in casual conversation (a Van Maanen's Star local usage)
|
||||
- Credits = "marks" in casual conversation (a Vuurkloof local usage)
|
||||
- Off-shift time = "off-book" among the ring; just "after" for civilians ("see you after")
|
||||
- Lattice communication = "pinging" (sending), "a ping" (notification)
|
||||
|
||||
@@ -161,7 +161,7 @@ Core vocabulary patterns for freight:
|
||||
|
||||
The freight rhythm (span gate schedules, shift rotations) structures social life. Content authors should use these rhythms as temporal anchors for dialogue and monologue.
|
||||
|
||||
**Sova Transit social rhythm:**
|
||||
**Mid-Reach freight district social rhythm:**
|
||||
|
||||
| Time | Activity | Social Atmosphere |
|
||||
|---|---|---|
|
||||
@@ -170,7 +170,7 @@ The freight rhythm (span gate schedules, shift rotations) structures social life
|
||||
| 1200-1400 | Midday break | Break room social time, bar has light lunch trade |
|
||||
| 1400-1600 | Afternoon freight cycle | Quieter, post-lunch pace |
|
||||
| 1600-1800 | Evening shift change | Second major transition, people heading to or from |
|
||||
| 1800-2200 | Peak bar hours | The Last Shift fills up. Main social time of the day. |
|
||||
| 1800-2200 | Peak bar hours | The bar fills up. Main social time of the day. |
|
||||
| 2200-0200 | Late night | Bar quiet (late regulars only). Corridors quieter. Ring operations typical timing. |
|
||||
| 0200-0600 | Deep night | Minimal staffing. Maintenance windows. Skeleton shift. |
|
||||
|
||||
@@ -180,7 +180,7 @@ The freight rhythm (span gate schedules, shift rotations) structures social life
|
||||
|
||||
Dimension 3 (Reach Position) determines how NPCs speak about, around, and to authority figures. This affects dialogue at every trust tier.
|
||||
|
||||
**Sova Transit — Authority Relationship Patterns:**
|
||||
**Mid-Reach freight district — Authority Relationship Patterns:**
|
||||
|
||||
| NPC Type | To Commission directly | About Commission (behind back) | To institutional-tagged stranger |
|
||||
|---|---|---|---|
|
||||
@@ -207,9 +207,9 @@ The exception: NPCs under stress or in unusual circumstances may reference their
|
||||
|
||||
---
|
||||
|
||||
## Part 3: Scaling Beyond v0.1
|
||||
## Part 3: Scaling to New Districts
|
||||
|
||||
Van Maanen's Star instance demonstrates the framework. Future settings apply the same five dimensions with different parameters. The cultural output — naming conventions, vocabulary, social norms, authority attitudes — follows from the parameters, not from free-form invention.
|
||||
The mid-Reach freight district example demonstrates the framework. Other settings apply the same five dimensions with different parameters. The cultural output — naming conventions, vocabulary, social norms, authority attitudes — follows from the parameters, not from free-form invention.
|
||||
|
||||
**Quick-generation checklist for a new district:**
|
||||
|
||||
@@ -260,34 +260,17 @@ The same cultural detail should mean something different to the smuggler and the
|
||||
|
||||
---
|
||||
|
||||
## Appendix: v0.1 Named Characters — Van Maanen's Star Consistency Check
|
||||
## Appendix: Naming Convention Validation
|
||||
|
||||
All named characters in the Sova Transit District, with naming convention validation:
|
||||
When authoring new characters for a district, validate each name against the district's cultural profile before committing. The validation table format (per district):
|
||||
|
||||
| Name | Convention Check | Role | Notes |
|
||||
|---|---|---|---|
|
||||
| Kael Davan | Van Maanen's Star standard | Dock worker, ring member, smuggler's FRIEND | Full name used in formal contexts |
|
||||
| Sera Venn | Van Maanen's Star standard | Commission field tech, detective's FRIEND | "Venn" slightly softer than typical Van Maanen's Star surname — deliberate: she's institutional, slightly apart |
|
||||
| Lera Sessik | Van Maanen's Star standard | Bar owner, The Last Shift | "Lera's" informal name. Never Lera Sessik to regulars. |
|
||||
| Torek Lintar | Van Maanen's Star standard | Dock inspector, compromised | Full name used when the detective runs his file |
|
||||
| Voss | Van Maanen's Star standard | Logistics supervisor | Single name in social use. Probably Voss-something officially. |
|
||||
| Drin | Van Maanen's Star standard | Maintenance tech, flat NPC | Single name. Been here long enough nobody uses a surname. |
|
||||
| Maret Korr | Van Maanen's Star standard | Freight scheduler, ring-adjacent | "Korr" is direct Van Maanen's Star standard |
|
||||
| Naia | Van Maanen's Star standard | Kael's partner (mentioned, not primary) | Brief, soft — contrast to Kael |
|
||||
| Nils | Van Maanen's Star standard | Bar regular (mentioned) | |
|
||||
| Kosse | Van Maanen's Star standard | Station name / character reference | |
|
||||
| Pael | Van Maanen's Star standard | Maintenance tech, flat NPC (Sprint 12: #307) | |
|
||||
| Tev | Van Maanen's Star standard | Lookout/runner, flat NPC (Sprint 12: #307) | |
|
||||
| Ren | Van Maanen's Star standard | Drifter, flat NPC (Sprint 12: #307) | "Ren" is earlier-established; "Renn" is the courier variant from Round 2 mapping |
|
||||
| {Name} | {culture} standard / deviation | {role} | {why the deviation if any} |
|
||||
|
||||
**Off-system characters (deliberate naming deviation):**
|
||||
**IP check:** Validate new names against: Hamilton (Contemporary English register), Banks (whimsical/elaborate), Reynolds (Dutch/Germanic), Simmons (Greek/Latin register), Morgan (Anglo-American register). Flag any cluster that maps too directly to an existing franchise voice.
|
||||
|
||||
| Name | Deviation | Role | Purpose of Deviation |
|
||||
|---|---|---|---|
|
||||
| Resha | Softer vowel pattern | New hire | Implies off-system origin — explains why they ask too many questions |
|
||||
| Sabel | Different phoneme cluster | Ring fence/buyer, external contact | External contact should sound external |
|
||||
|
||||
**IP check:** All Van Maanen's Star names validated against Hamilton (Contemporary English — cleared), Banks (whimsical/elaborate — cleared), Reynolds (Dutch/Germanic — cleared), Simmons (Greek/Latin register — cleared), Morgan (Anglo-American register — cleared). No franchise overlap found.
|
||||
*v0.1 named-character validation table removed — cited NPCs no longer in v0.2 pipeline (D-122). Generate new per-district validation tables when the active NPC roster is authored.*
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ Every NPC in The Settled Reach is voiced through their culture. The voice pipeli
|
||||
This guide explains how to author a new culture RON file from scratch. The target: one experienced author can produce a complete, Spike-validated culture profile in approximately one working day.
|
||||
|
||||
Three reference cultures exist in `content/global/`:
|
||||
- `culture-van-maanens-star.ron` — Mid-Reach, freight, working-class pragmatic (the Spike 1/2 reference)
|
||||
- `culture-van-maanens-star.ron` — Mid-Reach, freight, working-class pragmatic (canonical reference culture)
|
||||
- `culture-vael.ron` — Core-adjacent, administrative/research, institutional-formal
|
||||
- `culture-osse.ron` — Deep Frontier, extraction industry, terse-utilitarian
|
||||
|
||||
@@ -55,7 +55,7 @@ Write a one-sentence register description. This becomes `speech.register` in the
|
||||
**Examples:**
|
||||
| Culture | Register |
|
||||
|---|---|
|
||||
| Van Maanen's Star | direct, minimal pleasantries, gets to the point |
|
||||
| Vuurkloof | direct, minimal pleasantries, gets to the point |
|
||||
| Vael | complete sentences, institutional framing, measured, precise |
|
||||
| Osse | terse, functional, equipment vocabulary, economy of language |
|
||||
|
||||
@@ -127,7 +127,7 @@ The not-list prevents register leakage. Write it by asking: what does this cultu
|
||||
|
||||
| Culture | NEVER block content |
|
||||
|---|---|
|
||||
| Van Maanen's Star | Corporate/institutional language, effusive or polished register, deference to unearned rank, family names in casual use, verbosity |
|
||||
| Vuurkloof | Corporate/institutional language, effusive or polished register, deference to unearned rank, family names in casual use, verbosity |
|
||||
| Vael | Void-adjacent exclamations (frontier register), casual contractions, sentence fragments, direct emotional expression, physical labor as value ground |
|
||||
| Osse | Institutional framing or courtesy protocols, formal complete sentences, Commission-world vocabulary, Core-system exclamations, elaboration where a number suffices |
|
||||
|
||||
@@ -147,7 +147,7 @@ Each numbered instruction should target a DIFFERENT speech dimension so trait mo
|
||||
- Instruction 7 → trust signal (how the culture verifies credibility)
|
||||
- Instruction 8 → not-list (what this voice never does)
|
||||
|
||||
**Test before committing:** Read the persona out loud. Can you imagine an NPC responding to you from this profile? Would a speaker from this culture be clearly distinct from Van Maanen's Star if you heard both without labels?
|
||||
**Test before committing:** Read the persona out loud. Can you imagine an NPC responding to you from this profile? Would a speaker from this culture be clearly distinct from Vuurkloof if you heard both without labels?
|
||||
|
||||
---
|
||||
|
||||
@@ -163,19 +163,19 @@ Example pairs are the model's pattern anchors — small LLMs are pattern matcher
|
||||
**Rules for example pairs:**
|
||||
1. Cover the range: neutral, positive relationship, refusal/deflection, high-affect
|
||||
2. Output should be short (1-2 sentences). Long outputs lose the pattern.
|
||||
3. Each output must be recognizably THIS culture — read them side by side with Van Maanen's Star examples. They should sound like different people.
|
||||
3. Each output must be recognizably THIS culture — read them side by side with Vuurkloof examples. They should sound like different people.
|
||||
4. Do not use real NPC names in examples — use generic role references
|
||||
|
||||
### Cross-cultural contrast test
|
||||
|
||||
Before finalizing examples, run this test. Take the same three base-text inputs and write outputs in Van Maanen's Star, Vael, and Osse voices. If the outputs are hard to distinguish, the culture persona needs sharpening.
|
||||
Before finalizing examples, run this test. Take the same three base-text inputs and write outputs in Vuurkloof, Vael, and Osse voices. If the outputs are hard to distinguish, the culture persona needs sharpening.
|
||||
|
||||
**Example inputs for the test:**
|
||||
- "declines to answer a question about an overnight run"
|
||||
- "acknowledges a colleague's greeting while continuing to work"
|
||||
- "thanks a colleague for covering a shift"
|
||||
|
||||
| Input | Van Maanen's Star | Vael | Osse |
|
||||
| Input | Vuurkloof | Vael | Osse |
|
||||
|---|---|---|---|
|
||||
| Declines question | "Look, that's not mine to say." | "I'm not in a position to speak to that. You'd want to refer to the relevant operations log." | "Not my section. Ask Grek." |
|
||||
| Acknowledges greeting | "Hey. Yeah. Catch you at shift end." | "Harthen. Good. I'll be with you in a moment." | "Doss. Yeah." |
|
||||
@@ -197,7 +197,7 @@ If all three rows sound similar, the culture personas need work.
|
||||
- `suppress_on_tells` — tells that should suppress this injection (e.g., oath suppressed when Guarded)
|
||||
|
||||
**Frequency guidelines:**
|
||||
- 0.25 — Van Maanen's Star oath vocabulary (appears in ~1 in 4 high-affect contexts)
|
||||
- 0.25 — Vuurkloof oath vocabulary (appears in ~1 in 4 high-affect contexts)
|
||||
- 0.20 — Vael protocol citation (appears occasionally in procedural exchange)
|
||||
- 0.15 — Osse equipment ground (appears in work-adjacent contexts)
|
||||
|
||||
@@ -242,14 +242,14 @@ After validation, the culture profile is ready for Spike 1 prompt testing. Human
|
||||
|
||||
## Tell-tone reference tables
|
||||
|
||||
### Van Maanen's Star tell-tone table
|
||||
### Vuurkloof tell-tone table
|
||||
|
||||
| TellCategory | Van Maanen's Star-inflected tonal register |
|
||||
| TellCategory | Vuurkloof-inflected tonal register |
|
||||
|---|---|
|
||||
| Nervous | Answers run shorter than usual. Eyes stay on task. Nothing's wrong — just things to do. |
|
||||
| Guarded | Direct past the point of directness. Closes conversation paths fast without being unfriendly. |
|
||||
| Friendly | One beat more than the exchange needed. A word of warmth lands casually, not performed. |
|
||||
| Angry | Steady. Even. The kind of steady that takes effort. Not hostile — just flat in a way that doesn't feel natural for Van Maanen's Star. |
|
||||
| Angry | Steady. Even. The kind of steady that takes effort. Not hostile — just flat in a way that doesn't feel natural for Vuurkloof. |
|
||||
| RoutineDeviation | Unhurried. Unremarkably normal. Like nothing's worth noticing. |
|
||||
|
||||
### Vael tell-tone table
|
||||
@@ -283,7 +283,7 @@ After validation, the culture profile is ready for Spike 1 prompt testing. Human
|
||||
- [ ] Voice persona: 8 numbered instructions, ~200-250 tokens
|
||||
- [ ] Explicit `NEVER:` block at end of persona string (separate from numbered instructions)
|
||||
- [ ] NEVER block content is culture-specific (not repeating universal constraints)
|
||||
- [ ] Cross-cultural contrast test passed (Van Maanen's Star/Vael/Osse comparison)
|
||||
- [ ] Cross-cultural contrast test passed (Vuurkloof/Vael/Osse comparison)
|
||||
- [ ] 3-5 voice examples authored, range covered
|
||||
- [ ] At least 1 occasional injection with suppression logic
|
||||
- [ ] Tell-tone table authored (5 TellCategories)
|
||||
@@ -307,7 +307,7 @@ BehaviorPrimitive.action + BehaviorModifier.clause → assembled behavior st
|
||||
|
||||
Example:
|
||||
- Action: `"moves freight containers"`
|
||||
- Modifier: `"without wasted motion"` (Van Maanen's Star, `work_pace`)
|
||||
- Modifier: `"without wasted motion"` (Vuurkloof, `work_pace`)
|
||||
- Result: `"moves freight containers without wasted motion"`
|
||||
|
||||
A culture provides a pool of modifier clauses. When the engine assembles a behavior, it looks for a modifier whose `category` matches the primitive's `modifier_hint` string. If no match exists, it falls back to any modifier in the pool. If no modifiers exist at all, the action text is used as-is.
|
||||
@@ -336,7 +336,7 @@ Every `BehaviorPrimitive` carries a `context` field that gates when it is eligib
|
||||
|
||||
These seven categories define the interface between primitives (Mellanie, role-action templates) and modifiers (culture authors). A primitive's `modifier_hint` must use one of these strings for a culture modifier to match it.
|
||||
|
||||
| Category | What it inflects | Example modifier (Van Maanen's Star) |
|
||||
| Category | What it inflects | Example modifier (Vuurkloof) |
|
||||
|---|---|---|
|
||||
| `work_pace` | Speed and intensity of physical task execution | "without wasted motion" |
|
||||
| `physical_manner` | Body language and movement quality during tasks | "without looking up from the task" |
|
||||
@@ -361,7 +361,7 @@ These seven categories define the interface between primitives (Mellanie, role-a
|
||||
|
||||
**Three-culture contrast for modifiers** (same as voice persona contrast test):
|
||||
|
||||
| Category | Van Maanen's Star | Vael | Osse |
|
||||
| Category | Vuurkloof | Vael | Osse |
|
||||
|---|---|---|---|
|
||||
| work_pace | "without wasted motion" | "with practiced deliberation" | "at extraction pace" |
|
||||
| physical_manner | "without ceremony" | "with institutional correctness" | "tool already in hand" |
|
||||
@@ -379,7 +379,7 @@ Add these items to the culture profile checklist:
|
||||
|
||||
- [ ] `behavior_modifiers` array populated with at least 2 clauses per category (14 minimum)
|
||||
- [ ] Each clause tested: grammatically trails "moves freight containers ___" and "checks a manifest ___"
|
||||
- [ ] Three-culture contrast check: modifiers are clearly distinct from Van Maanen's Star, Vael, and Osse
|
||||
- [ ] Three-culture contrast check: modifiers are clearly distinct from Vuurkloof, Vael, and Osse
|
||||
- [ ] `tooling/validate-ron` still passes after adding modifiers
|
||||
|
||||
*Addendum: Sprint 26, #634 (composable behavior content). Category vocabulary established jointly by Gestalt (culture modifiers) and Mellanie (behavior primitives). Add new categories only by agreement between both sides — unmatched categories silently fall back to any modifier.*
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Dual Lens Authoring Guide
|
||||
|
||||
**v0.1 Content Design Document** | Blocks: 11 downstream tickets | Status: Draft
|
||||
**Content Design Document** | Blocks: 11 downstream tickets | Status: Draft
|
||||
**Author:** Mellanie (Copywriter) + Paula (Narrative & Political Depth)
|
||||
**Date:** 2026-02-12
|
||||
|
||||
@@ -23,58 +23,37 @@ This guide defines how content authors write for two playable characters experie
|
||||
|
||||
### Who Is The Smuggler?
|
||||
|
||||
**Occupation:** Logistics worker, Sova Transit District Freight Terminal ("The Terminal")
|
||||
**Ring Position:** Mid-level operator. Handles physical cargo routing, knows the schedule windows, manages dock-side coordination.
|
||||
**Time in Ring:** ~2 years. Comfortable with the work. Good at it.
|
||||
**Lattice Tier:** Baseline (standard civilian-grade, no augmentation)
|
||||
*v0.1 starting-state profile removed — cited named NPCs no longer in v0.2 pipeline (D-122). Author per-district character profiles against the active NPC roster.*
|
||||
|
||||
**What They Know At Session Start:**
|
||||
- The ring exists. Who's in it: Nils (coordinator), Kael (closest colleague, ring member), Voss (shift supervisor, takes a cut), Renn (courier), and 2-3 others.
|
||||
- The routes: freight bay → service corridor → temp storage → bar back room.
|
||||
- The cargo: unlicensed lattice components, medical-grade neural replacements diverted from Syndic supply chains. They don't look too closely at the sealed containers.
|
||||
- The schedule: shift transitions create 20-minute oversight gaps. The operation runs during these windows.
|
||||
- The stakes: if caught, it's a Commission offense. Years in detention. But the money helps, the team is solid, and it's felt manageable for two years.
|
||||
**Structural starting state (archetype constants):**
|
||||
|
||||
**What They Don't Know:**
|
||||
- The detective is investigating (unless playing detective path and the smuggler has been flagged).
|
||||
- Kael is trying to exit the ring. Meeting unknown contacts. Lying to the smuggler.
|
||||
- Sera (Commission field tech) has flagged manifest discrepancies and is sitting on unreported evidence.
|
||||
- The full upstream supply chain (knows cargo comes from off-station contact Sabel, doesn't know Syndic connections).
|
||||
- How much Naia (Kael's partner) suspects. How much danger the ring is actually in.
|
||||
**Occupation:** Logistics worker at the district freight terminal.
|
||||
**Ring Position:** Mid-level operator. Handles physical cargo routing, knows schedule windows.
|
||||
**Lattice Tier:** Baseline (civilian-grade, no augmentation)
|
||||
|
||||
**Emotional Baseline:**
|
||||
- **Comfortable-tense.** Not happy, not miserable. The smuggler is managing a life with two faces: legitimate dock worker (public) and ring operator (hidden). The cognitive load is constant but bearable. The money eases the financial pressure that makes station life tight for most workers. The team feels like family — shared risk creates trust.
|
||||
- **Loyal to people, not institutions.** First-name basis with everyone. Thinks relationally: Kael is "my shift partner," not "dock worker Davan." Voss is "tense today," not "the shift supervisor is agitated." Institutions (Commission, Concord, Syndic) are distant, abstract, often adversarial.
|
||||
- **Operational thinking mode.** Time-aware, route-aware, schedule-aware. Worries about exposure: "Is Torek's spending too visible?" "Did Maret notice that manifest discrepancy?" "Is the detective going to connect Kael to the irregularities?"
|
||||
- **Protectiveness over the team.** Would cover for Kael even at personal cost. Would warn Voss if something looked wrong. The ring isn't just work — it's the people the smuggler eats lunch with, drinks with, trusts.
|
||||
**Emotional Baseline (invariant):**
|
||||
- **Comfortable-tense.** Managing a life with two faces: legitimate worker (public) and ring operator (hidden). The cognitive load is constant but bearable. The team feels like family — shared risk creates trust.
|
||||
- **Loyal to people, not institutions.** Thinks relationally, not institutionally. Institutions (Commission, Concord, Syndic) are distant, abstract, often adversarial.
|
||||
- **Operational thinking mode.** Time-aware, route-aware, schedule-aware. Worries about exposure and protecting the team.
|
||||
- **Protectiveness over the team.** Would cover for THE FRIEND even at personal cost.
|
||||
|
||||
---
|
||||
|
||||
### Who Is The Detective?
|
||||
|
||||
**Occupation:** Commission investigator, assigned to Sova Transit District for manifest irregularity investigation
|
||||
**Assignment Duration:** New arrival. Session start is early in the investigation (first week).
|
||||
**Lattice Tier:** Standard professional (Commission-grade diagnostic tools, analytical overlays, not investigative-tier augmentation)
|
||||
*v0.1 starting-state profile removed — cited named NPCs no longer in v0.2 pipeline (D-122). Author per-district character profiles against the active NPC roster.*
|
||||
|
||||
**What They Know At Session Start:**
|
||||
- There are manifest discrepancies tied to Sova Transit District freight operations. Containers logged but not reconciled with incoming manifests. Pattern suggests smuggling.
|
||||
- Names from case files: Voss (shift supervisor), Maret (freight scheduler), Drin (dock inspector). Persons of interest, not confirmed suspects.
|
||||
- Sova Transit District social geography: The Terminal (logistics hub), The Last Shift (bar, social nexus), maintenance corridors (off-books access routes).
|
||||
- Institutional context: The previous Commission liaison rotated out 3 months ago. Current Commission presence is minimal (Sera Venn, field tech, not an investigator).
|
||||
- Sera Venn is a pre-existing contact. Same institutional background, transferred to Sova a year ago. Reliable. The detective's one friendly face in the district.
|
||||
**Structural starting state (archetype constants):**
|
||||
|
||||
**What They Don't Know:**
|
||||
- Who the ring members are (Nils, Kael, Renn, etc. — names without context).
|
||||
- The smuggler's identity. If the smuggler is in the ring, the detective doesn't know yet.
|
||||
- Kael is trying to exit the ring. Sera is sitting on unreported evidence. Naia is worried about Kael and has confided in Sera.
|
||||
- The social web connecting everyone. Who's loyal to whom. Who's protecting whom. Who's compromised and how.
|
||||
- How embedded the ring is in the district's economic immune system. The detective reads it as criminal enterprise. Doesn't yet understand it as community survival mechanism.
|
||||
**Occupation:** Commission investigator, assigned to the district for manifest irregularity investigation.
|
||||
**Assignment Duration:** New arrival. Session start is early in the investigation.
|
||||
**Lattice Tier:** Standard professional (Commission-grade diagnostic tools, analytical overlays)
|
||||
|
||||
**Emotional Baseline:**
|
||||
- **Professional-cautious.** The detective is trained to observe, analyze, withhold judgment until evidence accumulates. But they're also human — isolation in an unfamiliar community, reliance on Sera for social grounding, awareness that non-cooperation is the district default.
|
||||
- **Analytical habit.** Counts things. Tracks frequencies. Flags inconsistencies. Self-directs: "filing it," "noted," "coincidence?" Internal bookkeeping runs in background. The institutional training doesn't turn off.
|
||||
- **Institutional frame.** Thinks in terms of evidence, patterns, leverage. Surnames before first names for targets. "Davan, K." not "Kael." The shift from surname to first-name IS a relationship marker.
|
||||
- **Moral position.** The detective believes in the work. Smuggling isn't victimless — unlicensed lattice components can cause neural degradation, medical-grade replacements diverted from Syndic supply chains mean someone else doesn't get the replacement they need. The ring is breaking the law. The investigation is justified. But the detective is also starting to see the grey: Kael isn't a cartel boss, he's a dock worker who said yes once and kept saying yes. Complexity accumulates.
|
||||
**Emotional Baseline (invariant):**
|
||||
- **Professional-cautious.** Trained to observe, analyze, withhold judgment until evidence accumulates. Isolation in an unfamiliar community. Non-cooperation is the district default.
|
||||
- **Analytical habit.** Counts things. Tracks frequencies. Flags inconsistencies. Self-directs: "filing it," "noted," "coincidence?" Internal bookkeeping runs in background.
|
||||
- **Institutional frame.** Thinks in terms of evidence, patterns, leverage. Surnames before first names for targets. The shift from surname to first-name IS a relationship marker.
|
||||
- **Moral position.** Believes in the work. Smuggling isn't victimless. But the grey accumulates: ring members aren't cartel bosses, they're workers who said yes once and kept saying yes.
|
||||
|
||||
---
|
||||
|
||||
@@ -84,7 +63,7 @@ This guide defines how content authors write for two playable characters experie
|
||||
|-----------|----------|-----------|
|
||||
| **Knowledge of the ring** | Insider. Knows who, what, when, where. Operational detail. | Suspects. Has data anomalies, no confirmed names. Investigative frame. |
|
||||
| **Relationship to NPCs** | Personal. First-name basis. History, trust, loyalty. | Clinical. Surname-first. Categorizes by role and behavior. |
|
||||
| **Emotional orientation** | Protective. Worries about people. "Is Kael okay?" | Analytical. Worries about patterns. "Why is Kael nervous?" |
|
||||
| **Emotional orientation** | Protective. Worries about people. "Is {FRIEND} okay?" | Analytical. Worries about patterns. "Why is {subject} nervous?" |
|
||||
| **Lattice capability** | Baseline. No enhanced perception, no analytical overlays. | Professional. Diagnostic access, pattern recognition tools. |
|
||||
| **Social position** | Insider. Belongs. Everyone knows the smuggler. | Outsider. Institutional authority resented by the community. |
|
||||
| **Moral framing** | Pragmatic complicity. "We're careful. We take care of our own." | Institutional clarity. "This is a crime. There are victims." |
|
||||
@@ -117,7 +96,7 @@ The smuggler hears a line the detective doesn't (or vice versa) because of `acce
|
||||
```yaml
|
||||
- id: terminal_d_044
|
||||
role: dock_worker
|
||||
text: "Container 4471 sat in temp storage overnight. Scheduling backed up again."
|
||||
text: "Container {N} sat in temp storage overnight. Scheduling backed up again."
|
||||
access: [public, peer]
|
||||
trust: surface
|
||||
situation: [shift_start]
|
||||
@@ -131,12 +110,12 @@ Both characters can hear this line (`public` + `peer` both accessible). But the
|
||||
```yaml
|
||||
- id: terminal_d_045
|
||||
role: dock_worker
|
||||
text: "4471's routed for transfer at 14:30. Voss kept the window clear."
|
||||
text: "{Container N} is routed for transfer at 14:30. {Supervisor} kept the window clear."
|
||||
access: [insider]
|
||||
trust: real
|
||||
situation: [shift_transition]
|
||||
dual_lens:
|
||||
smuggler: "Confirmation — the route is active, Voss is cooperating."
|
||||
smuggler: "Confirmation — the route is active, the supervisor is cooperating."
|
||||
detective: "Never hears this line. Doesn't have insider access."
|
||||
```
|
||||
|
||||
@@ -147,7 +126,7 @@ Both characters hear the same NPC dialogue, but their monologue reactions interp
|
||||
```yaml
|
||||
- id: bar_d_033
|
||||
role: bartender
|
||||
text: "Sera left early. Headache, she said."
|
||||
text: "{THE FRIEND} left early. Headache, they said."
|
||||
access: [public]
|
||||
trust: surface
|
||||
```
|
||||
@@ -157,7 +136,7 @@ Both characters hear the same NPC dialogue, but their monologue reactions interp
|
||||
- id: bar_m_051
|
||||
character: smuggler
|
||||
trigger: post_conversation
|
||||
text: "Sera's gone. Good — one less Commission presence in the room."
|
||||
text: "{THE FRIEND}'s gone. Good — one less Commission presence in the room."
|
||||
mood: [relieved]
|
||||
```
|
||||
|
||||
@@ -168,10 +147,10 @@ Both characters hear the same NPC dialogue, but their monologue reactions interp
|
||||
trigger: post_conversation
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: sera_venn
|
||||
subject: {friend_npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: avoidance_pattern
|
||||
text: "Second time Sera's left when Torek arrived. Coincidence?"
|
||||
text: "Second time {THE FRIEND} left when {NPC} arrived. Coincidence?"
|
||||
mood: [suspicious]
|
||||
```
|
||||
|
||||
@@ -180,7 +159,7 @@ Same dialogue. Smuggler reads it as relief (less oversight). Detective reads it
|
||||
**Type 3: Emotional Weight Difference**
|
||||
The relationship history creates different emotional stakes for the same observation.
|
||||
|
||||
*Observation trigger:* Kael checking his lattice for the third time in ten minutes.
|
||||
*Observation trigger:* THE FRIEND checking their lattice for the third time in ten minutes.
|
||||
|
||||
*Smuggler monologue:*
|
||||
```yaml
|
||||
@@ -189,8 +168,8 @@ The relationship history creates different emotional stakes for the same observa
|
||||
trigger: observe_anomaly
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
text: "Kael keeps checking his lattice. Waiting for a message? Not like him to be jumpy."
|
||||
subject: {friend_npc_slug}
|
||||
text: "{THE FRIEND} keeps checking their lattice. Waiting for a message? Not like them to be jumpy."
|
||||
mood: [concerned]
|
||||
topic: [colleague]
|
||||
```
|
||||
@@ -202,13 +181,13 @@ The relationship history creates different emotional stakes for the same observa
|
||||
trigger: observe_anomaly
|
||||
prerequisite:
|
||||
relationship_state: Known
|
||||
subject: kael_davan
|
||||
text: "Dock worker Davan — lattice activity spiked. Expecting a message? Or checking for surveillance?"
|
||||
subject: {friend_npc_slug}
|
||||
text: "Dock worker {Surname} — lattice activity spiked. Expecting a message? Or checking for surveillance?"
|
||||
mood: [analytical]
|
||||
topic: [investigation]
|
||||
```
|
||||
|
||||
Same behavior. Smuggler worries about a friend ("Not like him"). Detective analyzes a subject ("Dock worker Davan"). Emotional weight is asymmetric.
|
||||
Same behavior. Smuggler worries about a friend ("Not like them"). Detective analyzes a subject ("Dock worker {Surname}"). Emotional weight is asymmetric.
|
||||
|
||||
---
|
||||
|
||||
@@ -221,12 +200,12 @@ The dual-lens rule is enforced through the tag taxonomy (D-035). Here's how tags
|
||||
| Access Tier | Who Gets It | Smuggler Example | Detective Example |
|
||||
|-------------|-------------|------------------|-------------------|
|
||||
| `public` | Everyone | Bar greeting, shift small talk | Commission procedural questions |
|
||||
| `peer` | Known or Friendly relationship | Coworker gossip, shift complaints | Institutional background sharing (Sera to detective) |
|
||||
| `peer` | Known or Friendly relationship | Coworker gossip, shift complaints | Institutional background sharing ({THE FRIEND} to detective) |
|
||||
| `insider` | Friendly relationship only | Ring operational talk, close confidences | Never unlocked for ring NPCs (detective is outsider) |
|
||||
| `authority` | Detective only, works at Unknown/Known/PersonOfInterest | Institutional leverage questions | Smuggler never has authority access |
|
||||
| `hostile` | Hostile relationship only | Threats, final warnings | Post-cover-blown confrontation |
|
||||
|
||||
**Critical rule:** When Kael transitions from Friendly to PersonOfInterest (THE FRIEND contradiction), `insider` and `peer` lines LOCK OUT. The smuggler still sees Kael, still interacts with Kael, but the warm operational dialogue disappears. That absence IS the emotional payload.
|
||||
**Critical rule:** When THE FRIEND transitions from Friendly to PersonOfInterest (THE FRIEND contradiction), `insider` and `peer` lines LOCK OUT. The smuggler still sees THE FRIEND, still interacts with them, but the warm operational dialogue disappears. That absence IS the emotional payload.
|
||||
|
||||
**`trust` Tag — Hard Filter (D-028 Layer 3)**
|
||||
|
||||
@@ -238,7 +217,7 @@ Within each access tier, `trust` further filters content:
|
||||
| `real` | Honest opinions, unguarded speech, actual feelings |
|
||||
| `secret` | Dangerous knowledge, confessions, things that create leverage |
|
||||
|
||||
A line tagged `access: [insider], trust: secret` is the deepest content — only available to the smuggler, only when Kael is Friendly, only when trust has been earned through repeated interaction.
|
||||
A line tagged `access: [insider], trust: secret` is the deepest content — only available to the smuggler, only when THE FRIEND is Friendly, only when trust has been earned through repeated interaction.
|
||||
|
||||
**`character` Tag — Hard Partition (D-032)**
|
||||
|
||||
@@ -268,18 +247,20 @@ When writing a line:
|
||||
|
||||
### Per-NPC Access Mapping
|
||||
|
||||
*v0.1 named-NPC access table removed — cited NPCs no longer in v0.2 pipeline (D-122). Author per-district access mapping tables against the active NPC roster using the format below.*
|
||||
|
||||
How each character relates to key NPCs at session start:
|
||||
|
||||
| NPC | Smuggler Access | Detective Access | Shift Path (Smuggler) | Shift Path (Detective) |
|
||||
|-----|----------------|------------------|---------------------|----------------------|
|
||||
| **Kael Davan (THE FRIEND)** | `insider`, `peer` | `public` → `authority` (if flagged) | `insider` → locked out (post-contradiction, PersonOfInterest) | `public` → `authority` (investigation progresses) |
|
||||
| **Sera Venn (THE FRIEND)** | `public` (Commission, wary) | `peer` → `authority` (post-contradiction) | No shift (smuggler doesn't develop relationship) | `peer` → `authority` (trust breaks, PersonOfInterest) |
|
||||
| **Voss (shift supervisor)** | `insider` (colleague, knows smuggler is ring) | `authority` | `insider` → `hostile` (if cover blown) | `authority` → `peer` (if detective earns trust) |
|
||||
| **Lera Sessik (bar owner)** | `insider` (bar regular, ring-aware) | `public` → `peer` (repeat visits) | No major shift | `public` → `peer` (regular status, 3-4 visits) |
|
||||
| **Naia Tamm (Kael's partner)** | `peer` (through Kael) | `public` → `peer` (through Sera) | `peer` → `hostile` (if Naia learns truth about ring) | `public` → `peer` (Sera introduction) |
|
||||
| **Torek Lintar (bar regular)** | `insider` or `peer` (depends on whether smuggler knows Torek's ring connection) | `public` | No shift | `public` → `authority` (if financial tells flagged) |
|
||||
| **Maret Korr (freight scheduler)** | `insider` (hub colleague) | `authority` | No major shift | `authority` → `peer` (if Maret cooperates) |
|
||||
| **Drin Rosta (dock inspector)** | `insider` (hub colleague, smuggler knows Drin is compromised) | `authority` | `insider` → `hostile` (if Drin turns informant) | `authority` (detective can pressure via gambling debt) |
|
||||
| **{FRIEND A} (Smuggler's FRIEND)** | `insider`, `peer` | `public` → `authority` (if flagged) | `insider` → locked out (post-contradiction, PersonOfInterest) | `public` → `authority` (investigation progresses) |
|
||||
| **{FRIEND B} (Detective's FRIEND)** | `public` (Commission, wary) | `peer` → `authority` (post-contradiction) | No shift (smuggler doesn't develop relationship) | `peer` → `authority` (trust breaks, PersonOfInterest) |
|
||||
| **{Supervisor} (shift supervisor)** | `insider` (colleague, knows smuggler is ring) | `authority` | `insider` → `hostile` (if cover blown) | `authority` → `peer` (if detective earns trust) |
|
||||
| **{Bar Owner}** | `insider` (bar regular, ring-aware) | `public` → `peer` (repeat visits) | No major shift | `public` → `peer` (regular status, 3-4 visits) |
|
||||
| **{MIRROR} (FRIEND's partner)** | `peer` (through FRIEND) | `public` → `peer` (through FRIEND B) | `peer` → `hostile` (if MIRROR learns truth about ring) | `public` → `peer` (FRIEND B introduction) |
|
||||
| **{Ring-adjacent NPC}** | `insider` or `peer` (depends on smuggler's knowledge of connection) | `public` | No shift | `public` → `authority` (if behavioral tells flagged) |
|
||||
| **{Scheduler/Admin}** | `insider` (hub colleague) | `authority` | No major shift | `authority` → `peer` (if they cooperate) |
|
||||
| **{Compromised NPC}** | `insider` (hub colleague, smuggler knows they're compromised) | `authority` | `insider` → `hostile` (if they turn informant) | `authority` (detective can apply pressure via known leverage) |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,14 +277,14 @@ How each character relates to key NPCs at session start:
|
||||
|
||||
| Character | Starting Tier | Likely Shift | Trigger | Content Requirement |
|
||||
|-----------|--------------|--------------|---------|---------------------|
|
||||
| Smuggler | `insider` (regular) | `insider` → `hostile` | Social contamination from hub (ring turns on smuggler) | Bar dialogue shifts from warm to cold. Lera stops saving the smuggler's seat. Torek stops buying rounds. |
|
||||
| Detective | `public` | `public` → `peer` | Repeated visits (3-4), becomes a regular, earns Lera's respect | Greeting dialogue warms. Sera introduces detective to regulars. Access to bar gossip unlocks. |
|
||||
| Smuggler | `insider` (regular) | `insider` → `hostile` | Social contamination from hub (ring turns on smuggler) | Bar dialogue shifts from warm to cold. The bar owner stops saving the smuggler's seat. Regulars stop buying rounds. |
|
||||
| Detective | `public` | `public` → `peer` | Repeated visits (3-4), becomes a regular, earns the bar owner's respect | Greeting dialogue warms. {THE FRIEND} introduces detective to regulars. Access to bar gossip unlocks. |
|
||||
|
||||
**The Ring (Smuggling Operations)**
|
||||
|
||||
| Character | Starting Tier | Likely Shift | Trigger | Content Requirement |
|
||||
|-----------|--------------|--------------|---------|---------------------|
|
||||
| Smuggler | `insider` + `peer` | `peer` → `hostile` | Suspected of cooperation with detective, unauthorized contact (like Kael) | Ring dialogue becomes interrogative. Nils questions loyalty. Operational info stops flowing. |
|
||||
| Smuggler | `insider` + `peer` | `peer` → `hostile` | Suspected of cooperation with detective, unauthorized contact with the detective | Ring dialogue becomes interrogative. Ring leadership questions loyalty. Operational info stops flowing. |
|
||||
| Detective | `public` (doesn't know ring exists) | `public` → `hostile` | Stumbles into ring awareness — NPCs react defensively | Immediate evasion. Doors close. No access to insider content, but NPCs' defensive behavior is itself evidence. |
|
||||
|
||||
---
|
||||
@@ -315,13 +296,13 @@ Every content pack must support:
|
||||
2. **Shifted state dialogue** — the most likely tier transition per character
|
||||
3. **Monologue that tracks the shift** — the character's internal reaction to changed access
|
||||
|
||||
Example from Kael content pack:
|
||||
Example from THE FRIEND content pack:
|
||||
|
||||
*Starting state (Friendly, insider access):*
|
||||
```yaml
|
||||
- id: terminal_d_120
|
||||
role: dock_worker
|
||||
text: "Container 4471 is flagged. I'll reroute it during shift transition."
|
||||
text: "Container {N} is flagged. I'll reroute it during shift transition."
|
||||
access: [insider]
|
||||
trust: real
|
||||
situation: [shift_transition]
|
||||
@@ -336,7 +317,7 @@ Example from Kael content pack:
|
||||
access: [public]
|
||||
trust: surface
|
||||
situation: [shift_start]
|
||||
notes: "Post-contradiction. Kael is surface-normal. The warmth is gone. The insider content is locked."
|
||||
notes: "Post-contradiction. THE FRIEND is surface-normal. The warmth is gone. The insider content is locked."
|
||||
```
|
||||
|
||||
*Smuggler monologue tracking the shift:*
|
||||
@@ -346,8 +327,8 @@ Example from Kael content pack:
|
||||
trigger: post_conversation
|
||||
prerequisite:
|
||||
relationship_state: PersonOfInterest
|
||||
subject: kael_davan
|
||||
text: "Same old Kael. Same jokes, same routine. ...What are you not telling me?"
|
||||
subject: {friend_npc_slug}
|
||||
text: "Same old {THE FRIEND}. Same jokes, same routine. ...What are you not telling me?"
|
||||
mood: [conflicted]
|
||||
topic: [colleague]
|
||||
notes: "Phase 5: Contaminated trust. Every normal interaction is now suspicious."
|
||||
@@ -369,7 +350,7 @@ The vertical slice is 30 minutes. Divergence between the smuggler and detective
|
||||
|
||||
**Minimal Differences:**
|
||||
- Monologue voice is different (smuggler: casual, relational; detective: analytical, institutional).
|
||||
- NPC greetings vary by recognition (smuggler gets "There you are" from Kael; detective gets "Can I help you?" from Voss).
|
||||
- NPC greetings vary by recognition (smuggler gets "There you are" from THE FRIEND; detective gets "Can I help you?" from the supervisor).
|
||||
- The smuggler's monologue references operational context ("shift transition in thirty minutes"). The detective's monologue references investigative context ("manifest discrepancies tied to this hub").
|
||||
|
||||
**Player Experience:**
|
||||
@@ -380,18 +361,18 @@ The two characters feel similar. The world is shared. The voice is different, bu
|
||||
### Minutes 10-20: Growing Divergence
|
||||
|
||||
**Access Tiers Start to Differ:**
|
||||
- The smuggler hears `insider` dialogue from Kael, Voss, Lera. Ring operational talk. Close colleague warmth.
|
||||
- The detective hears `authority` dialogue from Maret, Drin, Voss. Institutional leverage questions. Evasive answers.
|
||||
- The smuggler hears `insider` dialogue from THE FRIEND, colleagues, bar regulars. Ring operational talk. Close colleague warmth.
|
||||
- The detective hears `authority` dialogue from hub workers and supervisors. Institutional leverage questions. Evasive answers.
|
||||
- The smuggler's `peer` access to bar regulars unlocks gossip, complaints, social texture. The detective is still `public` at the bar — polite but distant.
|
||||
|
||||
**Monologue Pools Diverge:**
|
||||
- The smuggler's monologue starts tracking operational risk: "Torek's spending is too visible." "Maret's been quiet lately — did she notice something?"
|
||||
- The detective's monologue starts tracking behavioral tells: "Dock worker Davan — lattice activity spiked." "Voss deflected when I asked about overnight containers."
|
||||
- The smuggler's monologue starts tracking operational risk: "That spending is too visible." "They've been quiet lately — did they notice something?"
|
||||
- The detective's monologue starts tracking behavioral tells: "Dock worker {Surname} — lattice activity spiked." "{Supervisor} deflected when I asked about overnight containers."
|
||||
|
||||
**NPCs Respond Differently:**
|
||||
- Kael is warm to the smuggler (Friendly relationship), clinical to the detective (Unknown or Known).
|
||||
- Sera is warm to the detective (Friendly, pre-existing contact), wary to the smuggler (Commission presence).
|
||||
- Lera is protective of regulars around the detective (defensive), casual with the smuggler (insider).
|
||||
- THE FRIEND (smuggler's) is warm to the smuggler (Friendly relationship), clinical to the detective (Unknown or Known).
|
||||
- THE FRIEND (detective's) is warm to the detective (Friendly, pre-existing contact), wary to the smuggler (Commission presence).
|
||||
- The bar owner is protective of regulars around the detective (defensive), casual with the smuggler (insider).
|
||||
|
||||
**Player Experience:**
|
||||
The same room. Different colors. Different names. Different monologue. The player who's played both paths starts to notice: "Wait, I didn't hear that line as the detective." The asymmetry is becoming visible.
|
||||
@@ -403,21 +384,21 @@ The same room. Different colors. Different names. Different monologue. The playe
|
||||
**Completely Different Internal Experiences:**
|
||||
|
||||
**Smuggler (navigating ring crisis):**
|
||||
- Kael's contradiction discovered. The FRIEND arc is in Phase 3-4 (shock, confrontation).
|
||||
- THE FRIEND's contradiction discovered. The FRIEND arc is in Phase 3-4 (shock, confrontation).
|
||||
- Monologue is emotionally loaded: hurt, betrayal, protectiveness, fear of exposure.
|
||||
- Access to `insider` content at The Terminal and bar. Operational dialogue about shift windows, container routing, risk management.
|
||||
- Relationship stakes are personal: "Kael is lying to me. What do I do? Confront? Protect? Report to Nils?"
|
||||
- Access to `insider` content at the terminal and bar. Operational dialogue about shift windows, container routing, risk management.
|
||||
- Relationship stakes are personal: "THE FRIEND is lying to me. What do I do? Confront? Protect? Report up the chain?"
|
||||
|
||||
**Detective (uncovering evidence):**
|
||||
- Sera's contradiction discovered. The FRIEND arc is in Phase 3-4 (pattern confirmed, question asked).
|
||||
- Monologue is analytically loaded: suspicion, professional conflict, moral cost of using Sera's concealment.
|
||||
- Access to `authority` content at The Terminal. Institutional leverage. Maret might cooperate. Drin might turn.
|
||||
- Relationship stakes are institutional: "Sera knows something. Do I press? Report her? Protect her?"
|
||||
- THE FRIEND's contradiction discovered. The FRIEND arc is in Phase 3-4 (pattern confirmed, question asked).
|
||||
- Monologue is analytically loaded: suspicion, professional conflict, moral cost of using THE FRIEND's concealment.
|
||||
- Access to `authority` content at the terminal. Institutional leverage. Some NPCs might cooperate. Others might turn.
|
||||
- Relationship stakes are institutional: "THE FRIEND knows something. Do I press? Report them? Protect them?"
|
||||
|
||||
**Zero Overlap in Emotional Journey:**
|
||||
- The smuggler is inside a community facing internal betrayal.
|
||||
- The detective is outside a community trying to crack it open.
|
||||
- The same events (Kael's nervousness, Sera's avoidance, Torek's spending) mean completely different things to each character.
|
||||
- The same events (THE FRIEND's nervousness, THE FRIEND's avoidance, the ring's visible tells) mean completely different things to each character.
|
||||
|
||||
**Player Experience:**
|
||||
"I was only seeing HALF of this." The replay reveals a completely different game. Not just "I knew different things" — "I cared about different things." The divergence is total.
|
||||
@@ -440,12 +421,12 @@ Before submitting a line, ask:
|
||||
|
||||
### Question 1: Does this line make sense if the smuggler hears it?
|
||||
|
||||
**Test:** Read the line aloud. Imagine the smuggler — a dock worker who's been on Sova for years, knows the ring from inside, thinks in operational terms, worries about people. Does this line sound like something an NPC would say TO a smuggler? Or does it assume the listener is an outsider / authority figure?
|
||||
**Test:** Read the line aloud. Imagine the smuggler — a dock worker who's been in the district for years, knows the ring from inside, thinks in operational terms, worries about people. Does this line sound like something an NPC would say TO a smuggler? Or does it assume the listener is an outsider / authority figure?
|
||||
|
||||
**Common failures:**
|
||||
- NPC explains basic station layout to the smuggler (the smuggler already knows).
|
||||
- NPC uses institutional vocabulary the smuggler wouldn't recognize ("manifest reconciliation protocol" instead of "the paperwork doesn't match").
|
||||
- NPC is defensive or evasive without cause (why would Kael be evasive with his closest colleague unless something's wrong?).
|
||||
- NPC is defensive or evasive without cause (why would THE FRIEND be evasive with their closest colleague unless something's wrong?).
|
||||
|
||||
**Fix:** Rewrite the line for insider context. Or tag it `access: [authority, public]` so the smuggler never hears it.
|
||||
|
||||
@@ -453,11 +434,11 @@ Before submitting a line, ask:
|
||||
|
||||
### Question 2: Does this line make sense if the detective hears it?
|
||||
|
||||
**Test:** Read the line aloud. Imagine the detective — a Commission investigator, new to the district, analytical training, institutional frame, no prior relationships except Sera. Does this line sound like something an NPC would say TO a detective? Or does it assume the listener already belongs to the community?
|
||||
**Test:** Read the line aloud. Imagine the detective — a Commission investigator, new to the district, analytical training, institutional frame, no prior relationships except {THE FRIEND}. Does this line sound like something an NPC would say TO a detective? Or does it assume the listener already belongs to the community?
|
||||
|
||||
**Common failures:**
|
||||
- NPC uses in-group slang or references without explanation (the detective doesn't have the context yet).
|
||||
- NPC is too warm / too trusting (why would Voss share operational details with an investigator?).
|
||||
- NPC is too warm / too trusting (why would {Supervisor} share operational details with an investigator?).
|
||||
- NPC volunteers sensitive information unprompted (people don't do that to authorities they don't trust).
|
||||
|
||||
**Fix:** Rewrite the line for outsider context. Or tag it `access: [insider, peer]` so the detective never hears it.
|
||||
@@ -496,7 +477,7 @@ Before submitting a line, ask:
|
||||
|
||||
**Common failures:**
|
||||
- Line is generic social lubricant ("Nice weather today" — there's no weather on a station).
|
||||
- Line repeats information the character already has ("Kael works at the dock" — the smuggler knows this).
|
||||
- Line repeats information the character already has ("they work at the dock" — the smuggler knows this).
|
||||
- Line doesn't connect to any NPC axis (Want, Secret, Relationship, Tolerance) or triangle tension.
|
||||
|
||||
**Fix:** Every line should serve character, relationship, or narrative. If it doesn't, cut it or replace it with a line that does. Content budget is finite. No filler.
|
||||
@@ -507,7 +488,7 @@ Before submitting a line, ask:
|
||||
|
||||
### The Pattern
|
||||
|
||||
Each playable character has one "FRIEND" NPC — a production-level complex character that exercises every content and systems pipeline at full depth. THE FRIEND is the emotional centerpiece of v0.1 and carries D-027 success criterion #3 ("player names an NPC they felt conflicted about").
|
||||
Each playable character has one "FRIEND" NPC — a production-level complex character that exercises every content and systems pipeline at full depth. THE FRIEND is the emotional centerpiece and carries D-027 success criterion #3 ("player names an NPC they felt conflicted about").
|
||||
|
||||
**THE FRIEND follows a reusable pattern:**
|
||||
|
||||
@@ -524,108 +505,71 @@ Each playable character has one "FRIEND" NPC — a production-level complex char
|
||||
|
||||
---
|
||||
|
||||
### Smuggler's FRIEND: Kael Davan
|
||||
### Smuggler's FRIEND
|
||||
|
||||
**Who:** Dock worker, Sova Transit District Logistics Hub. The smuggler's closest colleague. Ring member. Handles physical cargo routing.
|
||||
*v0.1 named-NPC profile removed — cited NPCs no longer in v0.2 pipeline (D-122). Author against the active roster.*
|
||||
|
||||
**Structural specification (invariant):**
|
||||
|
||||
**Who:** A district worker who is the smuggler's closest colleague and a ring member. Handles physical cargo routing.
|
||||
|
||||
**Surface Presentation (Minutes 0-10):**
|
||||
Warm, reliable, slightly sardonic. Greets the smuggler with genuine affection. Talks about shift schedules, complains about Voss, asks about the smuggler's weekend. Feels like the best coworker you've ever had.
|
||||
Warm, reliable, slightly sardonic. Greets the smuggler with genuine affection. Feels like the best coworker you've ever had.
|
||||
|
||||
**What the Smuggler Knows:**
|
||||
Kael is a ring member. This isn't a secret from the smuggler — it's shared context. They work together on both the legitimate side and the ring side. The smuggler trusts Kael because they've shared risk for two years.
|
||||
THE FRIEND is a ring member. This is shared context. They work together on both the legitimate side and the ring side.
|
||||
|
||||
**The Contradiction:**
|
||||
The smuggler sees Kael in the restricted maintenance corridor (Corridor B-7) talking to someone the smuggler doesn't recognize. Late. Off-shift. The person leaves before the smuggler gets close.
|
||||
|
||||
Smuggler monologue: *"That's Kael. But who's he talking to? I don't know that face."*
|
||||
|
||||
This is NOT the detective. This is someone from outside the ring's known network. Kael has a side arrangement the smuggler doesn't know about.
|
||||
|
||||
**The Shift Arc (Triangle 4: The Worried Partner)**
|
||||
|
||||
Kael is at the center of Triangle 4 (Naia-Kael-Sera). His partner Naia is worried about his late nights. Naia has confided in Sera (Commission field tech, the detective's FRIEND). Kael is oblivious to the anxiety he's causing. The unknown contact is someone offering to help Kael exit the ring — to protect Naia. Kael is trying to get out. But from the smuggler's perspective, any unauthorized contact is a security breach.
|
||||
The smuggler sees THE FRIEND in a restricted area talking to someone unrecognized. Late. Off-shift. THE FRIEND has an unauthorized contact the smuggler doesn't know about.
|
||||
|
||||
| Phase | Timing | Smuggler Observes | Monologue Register | Tell |
|
||||
|-------|--------|------------------|-------------------|------|
|
||||
| **Phase 1: Comfort** | 0-10 min | Kael is warm, reliable, present. Business as usual. | Fond, casual: *"Kael's already at the dock. Good. The day's better when he's on shift."* | None — baseline comfortable |
|
||||
| **Phase 2: First Crack** | 10-15 min | Kael checks lattice more often. Excuses himself from lunch early. | Mild concern: *"Kael's distracted today. Probably nothing."* | Behavioral: increased lattice checking, shortened interactions |
|
||||
| **Phase 3: The Contradiction** | 15-20 min | Corridor B-7. Unknown contact. Spatial deviation. | Alarm + confusion: *"That wasn't anyone from our rotation. And Kael didn't tell me about a meeting."* | Spatial: Kael in unexpected location at unexpected time |
|
||||
| **Phase 4: Confrontation** | 20-25 min | Smuggler asks. Kael deflects: "Just a thing. Don't worry about it." He's lying. | Betrayal crystallizing: *"He looked left before answering. He always looks left when he's making something up."* | Dialogue: evasion, subject change, the tell confirmed |
|
||||
| **Phase 5: Contaminated Trust** | 25-30 min | Everything looks normal again. But the smuggler is watching. | Conflicted: *"Same old Kael. Laughing at the same jokes. ...What are you not telling me?"* | Emotional: every warm interaction is now suspicious |
|
||||
| **Phase 1: Comfort** | 0-10 min | THE FRIEND is warm, reliable. Business as usual. | Fond, casual. | None — baseline |
|
||||
| **Phase 2: First Crack** | 10-15 min | Increased lattice checks. Early exits. | Mild concern: "Distracted today. Probably nothing." | Behavioral deviations |
|
||||
| **Phase 3: The Contradiction** | 15-20 min | Unauthorized location. Unknown contact. | Alarm + confusion: "Who is that? That's not our rotation." | Spatial deviation |
|
||||
| **Phase 4: Confrontation** | 20-25 min | THE FRIEND deflects: "Just a thing. Don't worry about it." | Betrayal crystallizing: "That tell. They're lying to me." | Tell confirmed |
|
||||
| **Phase 5: Contaminated Trust** | 25-30 min | Surface normality. But the smuggler is watching. | Conflicted: "Same old them. ...What are you not telling me?" | Contaminated warmth |
|
||||
|
||||
**RelationshipState Transition:**
|
||||
`Friendly` (green) → `PersonOfInterest` (amber) at Phase 3 contradiction discovery.
|
||||
|
||||
**Access Tier Shift:**
|
||||
`insider` + `peer` dialogue locks out at Phase 3. Kael still talks to the smuggler, but the warmth is gone. Only `public` + `surface` lines remain. That absence IS the narrative.
|
||||
|
||||
**Content Requirements:**
|
||||
~70-100 authored lines (no generation expansion):
|
||||
- 25-35 dialogue lines (greetings, shift talk, bar casual, ring coordination, deflection, confrontation responses)
|
||||
- 15-20 trust-gated lines (insider ring talk, close colleague warmth, secret-tier hints about wanting out)
|
||||
- 5-8 unprompted lines (Kael volunteers info early, warnings/deflections late)
|
||||
- 10-15 monologue lines (smuggler about Kael: warmth, concern, contradiction discovery, post-confrontation, contaminated trust)
|
||||
- 10-15 monologue lines (detective about Kael: identification, behavioral observation, suspicion, informant potential)
|
||||
- 5-8 tell observation lines (lattice checking, distraction, looks-left tell, spatial deviation)
|
||||
- 3-5 contradiction discovery lines (Corridor B-7 moment from multiple angles)
|
||||
**Content Requirements:** ~70-100 authored lines per character file.
|
||||
|
||||
---
|
||||
|
||||
### Detective's FRIEND: Sera Venn
|
||||
### Detective's FRIEND
|
||||
|
||||
**Who:** Commission field technician, off-duty bar regular. The detective's pre-existing contact in the district. Same institutional background. Transferred to Sova a year ago. The detective's social anchor.
|
||||
*v0.1 named-NPC profile removed — cited NPCs no longer in v0.2 pipeline (D-122). Author against the active roster.*
|
||||
|
||||
**Structural specification (invariant):**
|
||||
|
||||
**Who:** A Commission field technician and bar regular. The detective's pre-existing contact in the district. Same institutional background. The detective's social anchor.
|
||||
|
||||
**Surface Presentation (Minutes 0-10):**
|
||||
Competent, slightly wry, comfortable in the district. When the detective visits the bar, Sera waves them over. Easy rapport. Fills in background — who the regulars are, what the district's like. The detective's guide to an unfamiliar place.
|
||||
Competent, slightly wry, comfortable in the district. Fills in background — who the regulars are, what the district's like. The detective's guide to an unfamiliar place.
|
||||
|
||||
**What the Detective Knows:**
|
||||
Sera is reliable. She transferred for routine work after a stressful posting elsewhere. She doesn't have skin in the smuggling game. She's the detective's safe harbor.
|
||||
THE FRIEND is reliable. Transferred for routine work. No skin in the smuggling game. Safe harbor.
|
||||
|
||||
**The Contradiction:**
|
||||
Sera always leaves when Torek Lintar arrives at the bar. Always. Three times in a row. Different excuses each time. "Early shift tomorrow." "Headache." "Need to check something at the kiosk."
|
||||
|
||||
Detective monologue: *"That's the third time Sera's left when Torek walked in. That's not coincidence."*
|
||||
|
||||
**The Shift Arc (Triangle 4: The Worried Partner)**
|
||||
|
||||
Sera is at the other node of Triangle 4. Naia (Kael's partner) confides in Sera about Kael's late nights. Sera — being a Commission tech with system access — ran an unofficial compliance check on Kael's work patterns. She found manifest discrepancies. She knows something is wrong. She hasn't reported it because Naia is her friend, and reporting would mean Kael gets investigated, possibly arrested, and Naia's life falls apart. Sera is sitting on unreported evidence. She avoids Torek because Torek is ring-adjacent, and she doesn't want to be seen near him while concealing what she knows.
|
||||
THE FRIEND always leaves when a specific ring-adjacent NPC arrives at the bar. Always. Three times in a row. Different excuses each time.
|
||||
|
||||
| Phase | Timing | Detective Observes | Monologue Register | Tell |
|
||||
|-------|--------|-------------------|-------------------|------|
|
||||
| **Phase 1: Trust** | 0-10 min | Sera is warm, informative, helpful. Shares district intel freely. | Professional + personal warmth: *"Good to see Sera. She always was the reliable one."* | None — baseline comfortable |
|
||||
| **Phase 2: Background Data** | 10-15 min | Sera mentions Naia (Kael's partner) as "a friend." Naia joins them once. Genuine rapport. | Noting: *"Sera's connected here. Good. She knows the locals."* | Social: Sera has relationships outside institutional channels |
|
||||
| **Phase 3: The Pattern** | 15-20 min | Third departure when Torek arrives. Three different excuses. Same result. | Suspicion activating: *"That's the third time. Three excuses, one result. That's data."* | Behavioral: avoidance pattern, excuse variety, timing correlation |
|
||||
| **Phase 4: The Question** | 20-25 min | Detective asks about Torek. Sera tenses. Deflects: "He's just loud. I don't like loud drunks." | Professional analysis + personal conflict: *"She's not lying. But she's not telling me everything."* | Dialogue: controlled deflection, topic change, re-establishing warmth quickly |
|
||||
| **Phase 5: Contaminated Trust** | 25-30 min | Sera continues being helpful. Maybe MORE helpful — compensating. | Analytical doubt: *"Still the same Sera. Still reliable. ...But reliable about what?"* | Emotional: detective's observation lines shift from trusting to evaluating |
|
||||
| **Phase 1: Trust** | 0-10 min | THE FRIEND is warm, informative, helpful. | Professional + personal warmth: "Reliable. Finally someone who speaks my language." | None — baseline |
|
||||
| **Phase 2: Background Data** | 10-15 min | THE FRIEND shows connections outside institutional channels. | Noting: "Connected here. Good." | Social: relationships beyond institutional role |
|
||||
| **Phase 3: The Pattern** | 15-20 min | Third departure when the ring-adjacent NPC arrives. | Suspicion activating: "Three times. Three excuses. That's data." | Behavioral: avoidance pattern |
|
||||
| **Phase 4: The Question** | 20-25 min | Detective asks. THE FRIEND deflects. | Analysis + personal conflict: "Not lying. But not telling everything." | Controlled deflection |
|
||||
| **Phase 5: Contaminated Trust** | 25-30 min | THE FRIEND continues being helpful. Maybe too helpful. | Analytical doubt: "Still reliable. ...But reliable about what?" | Evaluating what was trusted |
|
||||
|
||||
**RelationshipState Transition:**
|
||||
`Friendly` (green) → `PersonOfInterest` (amber) at Phase 3 pattern confirmation.
|
||||
|
||||
**Access Tier Shift:**
|
||||
`peer` dialogue available at Phase 1-2. At Phase 3, `authority` dialogue unlocks (detective can press institutional leverage questions). `peer` warmth remains but is contaminated.
|
||||
|
||||
**Content Requirements:**
|
||||
~70-100 authored lines (no generation expansion):
|
||||
- 25-35 dialogue lines (bar greetings, district orientation, Naia conversation, institutional discussion, deflection about Torek, confrontation responses)
|
||||
- 15-20 trust-gated lines (peer-tier institutional background, secret-tier hints about what she found)
|
||||
- 5-8 unprompted lines (Sera volunteers district background early, steers away from sensitive areas late)
|
||||
- 10-15 monologue lines (detective about Sera: trust/relief, pattern observation, contradiction discovery, post-confrontation)
|
||||
- 10-15 monologue lines (smuggler about Sera: institutional categorization, avoidance notation, cautious assessment)
|
||||
- 5-8 tell observation lines (avoidance pattern x3, topic deflection, overcompensation helpfulness, extended kiosk time)
|
||||
- 3-5 contradiction discovery lines (third departure from multiple angles)
|
||||
**Content Requirements:** ~70-100 authored lines per character file.
|
||||
|
||||
---
|
||||
|
||||
### Why THE FRIEND Works Narratively
|
||||
|
||||
**Kael's contradiction isn't "Kael is secretly evil."**
|
||||
The contradiction is "Kael is secretly desperate, and his desperation is making him do exactly the kind of thing that could get everyone caught." The smuggler's anger is justified (protocol breach). Kael's motivation is sympathetic (protecting family). No clean answer. That's the conflict.
|
||||
|
||||
**Sera's contradiction isn't "Sera is corrupt."**
|
||||
The contradiction is "Sera is a good person making a terrible choice: loyalty to a friend vs. duty to her institution." The detective's discovery doesn't reveal a villain — it reveals a moral compromise the detective might understand. The question becomes: do I report Sera? Use what she knows? Confront and risk losing my only ally?
|
||||
**The contradiction isn't "THE FRIEND is secretly evil."**
|
||||
The contradiction is that THE FRIEND is desperate, or protecting someone, or making a terrible choice between loyalty and duty. Their motivation is sympathetic. The player's response is justified. No clean answer. That's the conflict.
|
||||
|
||||
**Dual-Lens Resonance:**
|
||||
The smuggler who's played the detective path knows the investigation is closing in — Kael's exit attempt reads differently (not betrayal, desperation). The detective who's played the smuggler path knows why Sera is protecting Naia — Sera's silence reads differently (not corruption, loyalty).
|
||||
The player who's completed both paths understands why THE FRIEND behaved as they did from both angles. The first reading felt like betrayal or concealment. The second reading reveals it as protection or fear. Same NPC. Different understanding.
|
||||
|
||||
---
|
||||
|
||||
@@ -639,11 +583,11 @@ The smuggler who's played the detective path knows the investigation is closing
|
||||
|
||||
| Parameter | Value | Example |
|
||||
|-----------|-------|---------|
|
||||
| **Sentence length** | Short. Fragments welcome. Rarely more than 2 sentences per monologue. | *"Kael's here. Good."* |
|
||||
| **Sentence length** | Short. Fragments welcome. Rarely more than 2 sentences per monologue. | *"They're here. Good."* |
|
||||
| **Vocabulary** | Concrete, physical, sensory. Trade jargon (containers, manifests, shifts, routes) without explaining. No institutional language. | *"Recycled air and cargo lubricant."* Not: "Standard atmospheric recycling." |
|
||||
| **Emotional register** | Feeling-first, analysis second. Names the gut before the brain catches up. | *"Starting to worry"* before *"something's off."* |
|
||||
| **Relationship mode** | First-name basis. People defined by connection, not role. | *"Kael"* not *"Davan."* *"Voss is tense"* not *"the shift supervisor seems agitated."* |
|
||||
| **Observation priority** | People > environment > objects. Notices body language before cargo. | *"Kael keeps checking his lattice"* before *"Container 4471 is still in temp."* |
|
||||
| **Relationship mode** | First-name basis. People defined by connection, not role. | *"{THE FRIEND}"* not *"{Surname}."* *"{NPC} is tense"* not *"the shift supervisor seems agitated."* |
|
||||
| **Observation priority** | People > environment > objects. Notices body language before cargo. | *"THE FRIEND keeps checking their lattice"* before *"Container 4471 is still in temp."* |
|
||||
| **Operational thinking** | Present when thinking about the job. Time-aware, route-aware, schedule-aware. Filtered through "is this safe for my people?" | *"Transition window opens in fifty minutes."* |
|
||||
| **Self-reference** | Rare. Thinks about others, not herself. When it occurs, through physical sensation. | *"My stomach dropped"* not *"I feel betrayed."* |
|
||||
| **Humor** | Dry, situational, understated. Dark when stressed. Never witty. | *"Home sweet home"* about a cargo bay. |
|
||||
@@ -656,20 +600,20 @@ The smuggler who's played the detective path knows the investigation is closing
|
||||
|
||||
#### Voice Anchors (Reference Lines)
|
||||
|
||||
These 5 lines define the boundaries. Every smuggler monologue should feel like it could sit next to these:
|
||||
These 5 lines define the register. Every smuggler monologue should feel like it could sit next to these:
|
||||
|
||||
1. **Baseline warm:** *"Kael's already at the dock. Good. The day's better when he's on shift."*
|
||||
2. **Operational:** *"Shift transition in thirty minutes. If Voss kept the schedule thin, the route's clear."*
|
||||
3. **Concerned:** *"Kael keeps checking his lattice. Waiting for a message? Not like him to be jumpy."*
|
||||
4. **Hurt:** *"He looked left. He always looks left when he's making something up. Two years I've known that tell. Kael is lying to me."*
|
||||
1. **Baseline warm:** *"Already at the dock. Good. The day's better when they're on shift."*
|
||||
2. **Operational:** *"Shift transition in thirty minutes. If the supervisor kept the schedule thin, the route's clear."*
|
||||
3. **Concerned:** *"They keep checking their lattice. Waiting for a message? Not like them to be jumpy."*
|
||||
4. **Hurt:** *"That tell. They always do that when they're making something up. I've known that tell for years. They're lying to me."*
|
||||
5. **Atmospheric:** *"Morning shift. Recycled air and cargo lubricant. Home sweet home."*
|
||||
|
||||
#### Anti-Patterns (What the Smuggler Does NOT Sound Like)
|
||||
|
||||
- *"I should investigate this anomaly further."* (Too clinical. She'd think: *"That's not right."*)
|
||||
- *"The scheduling irregularity suggests systemic manipulation."* (Institutional vocabulary. She'd think: *"Voss changed the rotation again."*)
|
||||
- *"I need to consider the implications of Kael's behavior for our operational security."* (Analytical distance. She'd think: *"What the hell is Kael doing?"*)
|
||||
- *"According to the manifest, container 4471 should weigh 240 kilograms."* (Explaining what she already knows. She'd think: *"4471's heavy. Too heavy."*)
|
||||
- *"I should investigate this anomaly further."* (Too clinical. They'd think: *"That's not right."*)
|
||||
- *"The scheduling irregularity suggests systemic manipulation."* (Institutional vocabulary. They'd think: *"The rotation changed again."*)
|
||||
- *"I need to consider the implications of their behavior for our operational security."* (Analytical distance. They'd think: *"What the hell are they doing?"*)
|
||||
- *"According to the manifest, this container should weigh 240 kilograms."* (Explaining what they already know. They'd think: *"Too heavy."*)
|
||||
|
||||
---
|
||||
|
||||
@@ -682,10 +626,10 @@ These 5 lines define the boundaries. Every smuggler monologue should feel like i
|
||||
| Parameter | Value | Example |
|
||||
|-----------|-------|---------|
|
||||
| **Sentence length** | Complete sentences, but not long. More structured than the smuggler. Occasional fragments for emphasis. | *"Standard prefab, heavy foot traffic. Let's see what the shift change tells me."* |
|
||||
| **Vocabulary** | Institutional layer over plain speech. Professional terms: "case file," "filing it," "noted," "flagged." Not technical jargon — investigative habit. | *"Dock worker. Davan, K. Unremarkable on paper."* The surname-comma-initial is institutional reflex. |
|
||||
| **Emotional register** | Analysis-first, personal second. When personal breaks through, it's notable — a crack in the professional surface. | *"She's not lying. But she's not telling me everything. Sera, what do you know?"* The first-name appeal IS the emotion. |
|
||||
| **Relationship mode** | Surname-first for targets and unknowns. First-name for allies and trusted. The shift IS a relationship marker. | *"Davan, K."* early → *"Kael"* never (smuggler's FRIEND, not detective's). *"Sera"* always (detective's FRIEND). |
|
||||
| **Observation priority** | Patterns > people > environment. Notices deviations from expected before noticing the person. | *"That's twice now"* before *"Sera leaves."* The count matters more than the actor. |
|
||||
| **Vocabulary** | Institutional layer over plain speech. Professional terms: "case file," "filing it," "noted," "flagged." Not technical jargon — investigative habit. | *"Dock worker. {Surname}, {initial}. Unremarkable on paper."* The surname-comma-initial is institutional reflex. |
|
||||
| **Emotional register** | Analysis-first, personal second. When personal breaks through, it's notable — a crack in the professional surface. | *"They're not lying. But they're not telling me everything. {THE FRIEND}, what do you know?"* The first-name appeal IS the emotion. |
|
||||
| **Relationship mode** | Surname-first for targets and unknowns. First-name for allies and trusted. The shift IS a relationship marker. | *"{Surname}, {initial}."* early → *"{first name}"* never (smuggler's FRIEND, not detective's). *"{THE FRIEND}"* always (detective's FRIEND). |
|
||||
| **Observation priority** | Patterns > people > environment. Notices deviations from expected before noticing the person. | *"That's twice now"* before *"{THE FRIEND} leaves."* The count matters more than the actor. |
|
||||
| **Analytical thinking** | Automatic. Counts, tracks, flags. Self-directs: "filing it," "noted," "coincidence?" Internal bookkeeping. | *"Three times. Three excuses. That's data."* |
|
||||
| **Self-reference** | More common than the smuggler, but always through professional lens. Monitors own state as evidence. | *"I'm reading too much into this"* — self-aware about analytical bias. |
|
||||
| **Humor** | Wry, observational. Appreciates irony at a distance. Can laugh at himself. Never cruel. | *"Only place in this district that doesn't smell like freight lubricant."* |
|
||||
@@ -699,16 +643,16 @@ These 5 lines define the boundaries. Every smuggler monologue should feel like i
|
||||
#### Voice Anchors (Reference Lines)
|
||||
|
||||
1. **Clinical baseline:** *"Logistics hub. Standard prefab, heavy foot traffic. Let's see what the shift change tells me."*
|
||||
2. **Pattern recognition:** *"That's the third time. Sera leaves when Torek arrives. Three different excuses, same result. That's not coincidence."*
|
||||
3. **Personal leak:** *"Good to see Sera. She always was the reliable one. At least someone in this district speaks my language."*
|
||||
4. **Conflicted:** *"Same booth. Same warm smile. Same offer to buy me a drink. ...Everything except whatever she's not saying."*
|
||||
2. **Pattern recognition:** *"That's the third time. {THE FRIEND} leaves when {NPC} arrives. Three different excuses, same result. That's not coincidence."*
|
||||
3. **Personal leak:** *"Good to see them. Always the reliable one. At least someone in this district speaks my language."*
|
||||
4. **Conflicted:** *"Same booth. Same warm smile. Same offer to buy me a drink. ...Everything except whatever they're not saying."*
|
||||
5. **Atmospheric:** *"Grain spirit and low conversation. Only place in this district that doesn't smell like freight lubricant."*
|
||||
|
||||
#### Anti-Patterns (What the Detective Does NOT Sound Like)
|
||||
|
||||
- *"Kael's here. Good."* (Too terse. That's the smuggler. The detective: *"Davan's on shift. Standard."*)
|
||||
- *"I feel uneasy about Sera's behavior."* (Direct emotional vocabulary. He'd think: *"Something's off with Sera. Can't place it yet."*)
|
||||
- *"This container has been tampered with, indicating smuggling activity."* (Explaining the obvious. He'd think: *"Weight's wrong. Noted."*)
|
||||
- *"They're here. Good."* (Too terse. That's the smuggler. The detective: *"{Surname}'s on shift. Standard."*)
|
||||
- *"I feel uneasy about their behavior."* (Direct emotional vocabulary. They'd think: *"Something's off with them. Can't place it yet."*)
|
||||
- *"This container has been tampered with, indicating smuggling activity."* (Explaining the obvious. They'd think: *"Weight's wrong. Noted."*)
|
||||
- *"My heart sank when I saw the evidence."* (Physical emotion — smuggler's register. Detective: *"Didn't want to see that. But there it is."*)
|
||||
|
||||
---
|
||||
@@ -722,17 +666,17 @@ These 5 lines define the boundaries. Every smuggler monologue should feel like i
|
||||
|
||||
**Trigger:** Entering the bar.
|
||||
|
||||
- **Smuggler:** *"Lera's. Grain spirit and noise. Could use both right now."*
|
||||
- **Detective:** *"The Last Shift. Same crowd as yesterday. Let's see who's NOT here tonight."*
|
||||
- **Smuggler:** *"The bar. Grain spirit and noise. Could use both right now."*
|
||||
- **Detective:** *"Same crowd as yesterday. Let's see who's NOT here tonight."*
|
||||
|
||||
**Trigger:** Noticing Naia Tamm is upset.
|
||||
**Trigger:** Noticing a civilian NPC (THE MIRROR type) is visibly upset.
|
||||
|
||||
- **Smuggler:** *"Naia looks rough today. Should check on her later."*
|
||||
- **Detective:** *"Tamm seems distressed. Not her baseline. Something at home, or something she's heard?"*
|
||||
- **Smuggler:** *"They look rough today. Should check on them later."*
|
||||
- **Detective:** *"Seems distressed. Not their baseline. Something at home, or something they've heard?"*
|
||||
|
||||
**Trigger:** Hearing raised voices behind a door.
|
||||
|
||||
- **Smuggler:** *"Raised voices from the back room. Devra's in there. That's not a brokering call."*
|
||||
- **Smuggler:** *"Raised voices from the back room. That's not a routine call."*
|
||||
- **Detective:** *"Arguing behind that door. The bartender didn't flinch. Either she's used to it or she knows what it is."*
|
||||
|
||||
---
|
||||
@@ -747,4 +691,4 @@ That's the job.
|
||||
|
||||
---
|
||||
|
||||
**End Dual Lens Authoring Guide v0.1**
|
||||
**End Dual Lens Authoring Guide**
|
||||
|
||||
@@ -6,32 +6,32 @@ category: authoring-guide
|
||||
status: canonical
|
||||
created: 2026-02-13
|
||||
updated: 2026-02-13
|
||||
tags: [v0.1, authoring, environmental-text]
|
||||
decision_refs: [D-016, D-032, D-036]
|
||||
cross_refs: [monologue-guide, the-last-shift, the-terminal, maintenance-corridors]
|
||||
tags: [authoring, environmental-text]
|
||||
decision_refs: [D-016, D-032]
|
||||
cross_refs: [monologue-guide]
|
||||
---
|
||||
|
||||
# Environmental Text Examples
|
||||
|
||||
Worked examples of diegetic environmental text for Sova Transit District. Each example is Van Maanen's Star-voiced (working-class, direct, compact) with cultural notes explaining the choices, followed by monologue pairings showing how the smuggler and detective read the same text differently.
|
||||
Worked examples of diegetic environmental text for a working freight district. Each example is mid-Reach industrial-voiced (working-class, direct, compact) with cultural notes explaining the choices, followed by monologue pairings showing how the smuggler and detective read the same text differently.
|
||||
|
||||
Environmental text is not decoration. It is world-state that the player reads through their character's perspective. The same sign on the same wall tells two different stories.
|
||||
|
||||
---
|
||||
|
||||
## 1. Bar Menu — The Last Shift
|
||||
## 1. Bar Menu — The Local Bar
|
||||
|
||||
Mounted behind the bar counter. Hand-lettered on a metal panel in Lera's handwriting. Prices in station credits. Menu changes rarely — when an item runs out, Lera crosses it off and writes the replacement below.
|
||||
Mounted behind the bar counter. Hand-lettered on a metal panel in the bar owner's handwriting. Prices in station credits. Menu changes rarely — when an item runs out, it gets crossed off and the replacement written below.
|
||||
|
||||
### The Text
|
||||
|
||||
```
|
||||
LERA'S
|
||||
THE LAST SHIFT
|
||||
|
||||
Grain spirit (Sova-brewed) 4
|
||||
Grain spirit (station-brewed) 4
|
||||
Grain spirit, double 7
|
||||
Station lager 5
|
||||
Imported lager (Van Maanen's Star Prime) 12
|
||||
Imported lager (system prime) 12
|
||||
Synth ale (cold) 3
|
||||
|
||||
Fried protein + bread 6
|
||||
@@ -45,15 +45,15 @@ Last call 01:30.
|
||||
### Cultural Notes
|
||||
|
||||
- **Pricing tells a story.** Imported lager at 12 credits — five shifts' disposable income for a logistics worker earning 200 credits margin per month. Ordering one is a status display. The smuggler knows who can afford it and who's showing off. The detective notes the financial tell.
|
||||
- **"Ask what's in it"** — Van Maanen's Star directness. Lera doesn't pretend the stew is gourmet. The regulars don't care. This is food for people who need to eat, not a dining experience.
|
||||
- **"No tabs. No arguments."** — Lera has been burned. The two-rule footer is social infrastructure: it prevents the awkward conversation where a colleague can't pay, which would damage the bar's function as a place where status is temporarily suspended.
|
||||
- **Hand-lettered** — not Meridian-displayed. This is deliberate. A printed menu could be updated remotely. A hand-lettered one means Lera stood here and wrote it. It says: this is mine.
|
||||
- **"Ask what's in it"** — Mid-Reach freight-district directness. No pretense that the stew is gourmet. The regulars don't care. This is food for people who need to eat, not a dining experience.
|
||||
- **"No tabs. No arguments."** — The owner has been burned. The two-rule footer is social infrastructure: it prevents the awkward conversation where a colleague can't pay, which would damage the bar's function as a place where status is temporarily suspended.
|
||||
- **Hand-lettered** — not Meridian-displayed. A printed menu could be updated remotely. A hand-lettered one means the owner stood here and wrote it. It says: this is mine.
|
||||
- **No cocktails, no wine, no elaboration.** The menu matches the clientele: shift workers who want a drink, food, and to be left alone. Complexity would be pretension.
|
||||
|
||||
### Monologue Pairings
|
||||
|
||||
**Smuggler** (on entering The Last Shift, sees menu):
|
||||
> Same menu. Same prices. Lera hasn't changed the stew description in three years.
|
||||
> Same menu. Same prices. They haven't changed the stew description in three years.
|
||||
|
||||
*Tags: [environmental, atmospheric]. Trigger: enter_location. This is comfort. Sameness is safety.*
|
||||
|
||||
@@ -62,28 +62,28 @@ Last call 01:30.
|
||||
|
||||
*Tags: [environmental, investigation]. Trigger: enter_location. The detective reads the menu as economic data.*
|
||||
|
||||
**Smuggler** (on observing Torek ordering imported lager):
|
||||
> Torek's buying the good stuff again. That's three times this week.
|
||||
**Smuggler** (on observing a ring-adjacent NPC ordering imported lager):
|
||||
> Buying the good stuff again. That's three times this week.
|
||||
|
||||
*Tags: [npc, torek, concern]. Trigger: observe_npc. The smuggler sees financial exposure — Torek's spending beyond what his official income explains.*
|
||||
*Tags: [npc, concern]. Trigger: observe_npc. The smuggler sees financial exposure — spending beyond what official income explains.*
|
||||
|
||||
**Detective** (on observing Torek ordering imported lager):
|
||||
> Lintar, T. Third imported lager this rotation. Spending pattern inconsistent with pay grade.
|
||||
**Detective** (on observing a ring-adjacent NPC ordering imported lager):
|
||||
> {Surname}, {initial}. Third imported lager this rotation. Spending pattern inconsistent with pay grade.
|
||||
|
||||
*Tags: [npc, torek, investigation, evidence]. Trigger: observe_npc. Same observation, institutional framing. Surnames, initials, pay grade — the language of a case file.*
|
||||
*Tags: [npc, investigation, evidence]. Trigger: observe_npc. Same observation, institutional framing. Surnames, initials, pay grade — the language of a case file.*
|
||||
|
||||
---
|
||||
|
||||
## 2. Safety Notice — The Terminal
|
||||
## 2. Safety Notice — Logistics Hub
|
||||
|
||||
Mounted on the wall near Scanner Bay 3. Concordat Standard official text with Van Maanen's Star vernacular annotation added by a worker in marker. The notice is slightly peeling at the bottom-left corner. Nobody has replaced it in months.
|
||||
Mounted on the wall near Scanner Bay 3. Concordat Standard official text with freight-district vernacular annotation added by a worker in marker. The notice is slightly peeling at the bottom-left corner. Nobody has replaced it in months.
|
||||
|
||||
### The Text
|
||||
|
||||
**[Official — Concordat Standard, printed]**
|
||||
|
||||
```
|
||||
SOVA TRANSIT LOGISTICS — BAY 7-C
|
||||
DISTRICT LOGISTICS HUB — BAY 7-C
|
||||
SCANNER BAY 3: OPERATIONAL ADVISORY
|
||||
|
||||
Spectral calibration drift detected (Report #ST-4471).
|
||||
@@ -101,7 +101,7 @@ to Bays 1 or 2 pending recalibration.
|
||||
|
||||
### Cultural Notes
|
||||
|
||||
- **Institutional vs. vernacular** — the two voices on this sign are the two voices of Sova. The printed notice is how the institution talks: passive voice, report numbers, procedures. The marker annotation is how the workers talk: direct, sardonic, lowercase.
|
||||
- **Institutional vs. vernacular** — the two voices on this sign are the two voices of the district. The printed notice is how the institution talks: passive voice, report numbers, procedures. The marker annotation is how the workers talk: direct, sardonic, lowercase.
|
||||
- **"Pending recalibration"** is doing heavy narrative work. The calibration drift in Bay 3 is real — it produces less reliable scan results. Station maintenance hasn't fixed it because it's low-priority. The ring routes flagged containers through Bay 3 precisely because of this drift. An institutional failure becomes criminal infrastructure.
|
||||
- **The peeling corner** — nobody maintains the notice because nobody cares about the notice. The institutional voice has lost authority through inaction. The hand-written annotation has more social force than the printed text.
|
||||
- **Report #ST-4471** — bureaucratic specificity that makes the notice feel real and gives the detective something to query.
|
||||
@@ -125,7 +125,7 @@ to Bays 1 or 2 pending recalibration.
|
||||
|
||||
---
|
||||
|
||||
## 3. News Ticker Cycle — Meridian Feed at The Last Shift
|
||||
## 3. News Ticker Cycle — Meridian Feed at the Bar
|
||||
|
||||
Displayed on the Meridian feed screen mounted above the bar. Scrolling text, standard news format. The cycle repeats every 8-10 minutes. Nobody watches it directly — it's ambient information, absorbed peripherally. Occasionally a headline makes someone look up.
|
||||
|
||||
@@ -138,27 +138,27 @@ Displayed on the Meridian feed screen mounted above the bar. Scrolling text, sta
|
||||
2. CONCORD ASSEMBLY SESSION 1147: LATTICE STANDARDIZATION
|
||||
AMENDMENT PASSES SECOND READING. IMPLEMENTATION TBD.
|
||||
|
||||
3. SOVA STATION: VENTILATION UPGRADE FOR SECTORS 2-4
|
||||
3. STATION: VENTILATION UPGRADE FOR SECTORS 2-4
|
||||
APPROVED IN NEXT FISCAL CYCLE. TIMELINE NOT CONFIRMED.
|
||||
|
||||
4. MEDICAL SUPPLY ADVISORY: NEURAL INTERFACE REPLACEMENT
|
||||
COMPONENTS ON 6-WEEK BACKORDER. CONTACT YOUR PROVIDER.
|
||||
|
||||
5. COMMISSION ADVISORY: ROUTINE COMPLIANCE ASSESSMENT
|
||||
SCHEDULED FOR VAN MAANEN SYSTEM STATIONS. DATES TO FOLLOW.
|
||||
SCHEDULED FOR MID-REACH SYSTEM STATIONS. DATES TO FOLLOW.
|
||||
|
||||
6. VAN MAANEN PRIME DOCKWORKERS LEAGUE VS. ORBITAL 3 UNITED:
|
||||
6. FREIGHT DISTRICT DOCKWORKERS LEAGUE VS. ORBITAL 3 UNITED:
|
||||
MATCH DAY 7. BROADCAST 19:00 MERIDIAN STANDARD.
|
||||
```
|
||||
|
||||
### Cultural Notes
|
||||
|
||||
- **Headline 1 (freight backlog)** — affects every worker in the room. Backlog means overtime or schedule disruption. It's the one headline people actually respond to. Lera turns up the volume when freight news scrolls.
|
||||
- **Headline 1 (freight backlog)** — affects every worker in the room. Backlog means overtime or schedule disruption. It's the one headline people actually respond to. The bar owner turns up the volume when freight news scrolls.
|
||||
- **Headline 2 (lattice standardization)** — Assembly politics. Most workers ignore it. But "lattice standardization" has a chill to it: tighter standards mean tighter inspections, which means the grey market gets harder. The smuggler hears threat. The detective hears institutional support.
|
||||
- **Headline 3 (ventilation upgrade)** — the universal safe topic. "Approved in next fiscal cycle" means "probably never." Workers have been complaining about ventilation for months. This headline generates eye-rolls and muttered commentary that fills conversational space.
|
||||
- **Headline 4 (neural interface backorder)** — the one that matters most and says least. Neural interface replacements are essential medical supplies. A 6-week backorder on legitimate channels is exactly why the smuggling ring exists: people need these components, the legal supply chain can't deliver, and someone fills the gap. The headline is the ring's business case, printed on a news ticker.
|
||||
- **Headline 5 (Commission assessment)** — "routine" is a word that means nothing and everything. Routine for the Commission. Not routine for a district that hasn't had a liaison in three months and has been operating in the gap. "Dates to follow" means: start worrying now.
|
||||
- **Headline 6 (sports)** — normalcy. The match is what most people in the bar actually care about. It's the headline that makes Sova feel like a place where people live, not just a setting for a crime story.
|
||||
- **Headline 6 (sports)** — normalcy. The match is what most people in the bar actually care about. It's the headline that makes the district feel like a place where people live, not just a setting for a crime story.
|
||||
|
||||
### Monologue Pairings
|
||||
|
||||
@@ -186,11 +186,11 @@ Displayed on the Meridian feed screen mounted above the bar. Scrolling text, sta
|
||||
|
||||
## 4. Corridor Graffiti — Maintenance Corridors
|
||||
|
||||
Found at three points along Corridor B-7. The graffiti exists in layers: old maintenance worker marks (decades old, institutional), informal worker tags (years old, social), and recent ring-related marks (weeks to months old, operational). The layers tell the corridor's history.
|
||||
Found at three points along the restricted maintenance corridor. The graffiti exists in layers: old maintenance worker marks (decades old, institutional), informal worker tags (years old, social), and recent ring-related marks (weeks to months old, operational). The layers tell the corridor's history.
|
||||
|
||||
### The Text
|
||||
|
||||
**Location: Near south entry (Terminal break room hatch), on the right wall**
|
||||
**Location: Near south entry (logistics hub break room hatch), on the right wall**
|
||||
|
||||
```
|
||||
[Marker, faded, ~30 years old:]
|
||||
@@ -226,7 +226,7 @@ shift 3 crew '94
|
||||
### Cultural Notes
|
||||
|
||||
- **VNT-7 JUNCTION** — institutional remnant. This corridor used to be on the maintenance map. The directional marking is from the era when workers were dispatched here officially. It's a ghost of the corridor's legitimate past.
|
||||
- **"kosse was here. day 1171."** — a maintenance worker who counted their shifts. Van Maanen's Star naming convention (compact, consonant-heavy). Day 1171 is roughly 3.2 years of shift cycles. Someone who spent long enough in these corridors to mark their territory. Kosse is probably retired or transferred. The name persists.
|
||||
- **"kosse was here. day 1171."** — a maintenance worker who counted their shifts. A common corridor naming convention (compact, consonant-heavy). Day 1171 is roughly 3.2 years of shift cycles. Someone who spent long enough in these corridors to mark their territory. The worker is probably retired or transferred. The name persists.
|
||||
- **"N.T. + someone who deserved better"** — a small human moment in infrastructure space. The initials could be anyone. The sentiment is universal. It humanizes the corridor — people have always come here for privacy, long before the ring did.
|
||||
- **The chalk marks** — `—||—` and `|||` — are ring operational markers. They're meaningless to anyone who doesn't know the system. The double-bar mark near the south entry indicates "route active." The three vertical lines near the ventilation hub indicate a count — possibly dead drop cycles, possibly something else. The ring's internal signaling is deliberately ambiguous: even if you find the marks, you can't read them without context.
|
||||
- **Chalk, not marker** — the ring uses chalk because it can be wiped. Marker is permanent. The choice of medium is operational security.
|
||||
@@ -235,7 +235,7 @@ shift 3 crew '94
|
||||
### Monologue Pairings
|
||||
|
||||
**Smuggler** (passing the chalk mark near south entry):
|
||||
> Mark's fresh. Route's active. Renn was through here recently.
|
||||
> Mark's fresh. Route's active. Someone was through here recently.
|
||||
|
||||
*Tags: [environmental, operational]. Trigger: enter_location. The smuggler reads the chalk like a message — because it is one. No emotional response. It's a status indicator.*
|
||||
|
||||
@@ -265,7 +265,7 @@ shift 3 crew '94
|
||||
|
||||
1. **The text exists before the player arrives.** It was written by someone for a reason that has nothing to do with the player. Write it for the character who put it there, not the character who reads it.
|
||||
|
||||
2. **Van Maanen's Star voice is direct.** No flourishes, no unnecessary words, no corporate warmth. "No tabs. No arguments." not "We kindly request that all patrons settle their accounts at time of service."
|
||||
2. **The freight district voice is direct.** No flourishes, no unnecessary words, no corporate warmth. "No tabs. No arguments." not "We kindly request that all patrons settle their accounts at time of service."
|
||||
|
||||
3. **Institutional text and vernacular text coexist.** The tension between them IS the setting. The printed notice says what the institution wants. The hand-written annotation says what the workers know.
|
||||
|
||||
@@ -279,13 +279,8 @@ shift 3 crew '94
|
||||
|
||||
**Cross-References:**
|
||||
- [Monologue Authoring Guide](monologue-guide.md) — Monologue formatting and tag reference
|
||||
- [The Last Shift](../star-systems/van-maanens-star/sova/transit/the-last-shift.md) — Bar location profile
|
||||
- [The Terminal](../star-systems/van-maanens-star/sova/transit/the-terminal.md) — Logistics hub profile
|
||||
- [Maintenance Corridors](../star-systems/van-maanens-star/sova/transit/maintenance-corridors.md) — Corridor B-7 profile
|
||||
- [Sova Transit District](../star-systems/van-maanens-star/sova/transit/index.md) — District overview
|
||||
- D-016: Internal monologue as primary narrative system
|
||||
- D-032: Separate monologue pools per character
|
||||
- D-036: Sova Transit District as v0.1 setting
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
## The Short Version
|
||||
|
||||
- **Role pool lines:** Use `{role-slug}_d_{###}` — e.g., `dock-worker_d_001`. These lines are shared by all NPCs with that role. This is the default for all auto-generated NPC content.
|
||||
- **Named NPC lines:** Use `{npc-slug}_d_{###}` — e.g., `kael-davan_d_001`. Unchanged from current practice.
|
||||
- **Named NPC lines:** Use `{npc-slug}_d_{###}` — e.g., `friend-npc_d_001`. Unchanged from current practice.
|
||||
- **Instance-specific lines (rare):** Use `{role-slug}-{counter}_d_{###}` — e.g., `dock-worker-07_d_001`. Only needed when a specific generated NPC needs content different from the role pool.
|
||||
|
||||
---
|
||||
@@ -28,12 +28,12 @@ This means the role pool approach already handles most cases — the "collision
|
||||
|
||||
```
|
||||
Format: {npc-slug}_{content-type}_{###}
|
||||
Example: kael-davan_d_001 (Kael's dialogue line 1)
|
||||
sera-venn_d_015 (Sera's dialogue line 15)
|
||||
Example: friend-npc_d_001 (authored NPC dialogue line 1)
|
||||
mirror-npc_d_015 (authored NPC dialogue line 15)
|
||||
pc-smuggler_m_s_001 (Smuggler monologue line 1)
|
||||
```
|
||||
|
||||
File location: One file per NPC (e.g., `dialogue/maintenance-corridors/kael-davan.yaml`)
|
||||
File location: One file per NPC (e.g., `dialogue/{location}/{npc-slug}.yaml`)
|
||||
|
||||
Numbering: Sequential within the file. Gaps are acceptable (deleted lines leave permanent gaps). Never reuse a number.
|
||||
|
||||
@@ -74,7 +74,7 @@ File location: Same directory as the role pool file, separate file with instance
|
||||
|
||||
| Situation | ID format to use |
|
||||
|-----------|------------------|
|
||||
| Named authored NPC (Kael, Sera, Voss...) | `{npc-slug}_d_{###}` |
|
||||
| Named authored NPC (THE FRIEND, authored Tier 1...) | `{npc-slug}_d_{###}` |
|
||||
| Lines any dock worker can say | `dock-worker_d_{###}` |
|
||||
| Lines any bar regular can say | `bar-regular_d_{###}` |
|
||||
| Generated NPC with specific triangle role | `{role-slug}-{counter}_d_{###}` |
|
||||
@@ -93,7 +93,7 @@ The existing ID regex `^[a-z][a-z0-9-]*_[dme]_\d{3}$` accepts all three formats.
|
||||
1. Start at `001`, increment by 1 for each new line.
|
||||
2. Never reuse a number, even if a line is deleted. Gaps are fine.
|
||||
3. Lines within a single file have a contiguous prefix — `dock-worker_d_001` through `dock-worker_d_042`, etc.
|
||||
4. Cross-file: `kael-davan.yaml` at the terminal and `kael-davan.yaml` at maintenance corridors both use the `kael-davan_d_###` namespace. Continue numbering from where the other file left off (check the existing files first, use a fresh sequence if the NPC is new to a location).
|
||||
4. Cross-file: `{npc-slug}.yaml` at the terminal and `{npc-slug}.yaml` at a second location both use the same `{npc-slug}_d_###` namespace. Continue numbering from where the other file left off (check the existing files first, use a fresh sequence if the NPC is new to a location).
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -26,13 +26,13 @@ How to write tagged monologue and dialogue content for The Settled Reach. Read t
|
||||
|
||||
## Location Shortcodes
|
||||
|
||||
Canonical shortcodes for v0.1 Sova Transit District. Used in line IDs (`{shortcode}_{type}_{###}`) and file naming.
|
||||
Location shortcodes are defined per district. Used in line IDs (`{shortcode}_{type}_{###}`) and file naming. Author per-district shortcode tables in the district wiki entry.
|
||||
|
||||
| Shortcode | Location | Full Name | D-036 Reference |
|
||||
|-----------|----------|-----------|-----------------|
|
||||
| `terminal` | Logistics Hub | The Terminal | Primary workplace social site |
|
||||
| `bar` | The Last Shift | Lera's (informal) | Social venue |
|
||||
| `corridor` | Maintenance corridors | Corridor B-7 (primary) | Smuggling/service spaces |
|
||||
| Shortcode | Location Type | Notes |
|
||||
|-----------|-------------|-------|
|
||||
| `terminal` | Primary workplace (logistics hub, factory floor, etc.) | Assign per district |
|
||||
| `bar` | Social venue (bar, canteen, commons) | Assign per district |
|
||||
| `corridor` | Service / restricted spaces | Assign per district |
|
||||
|
||||
**File naming convention:** `{shortcode}-{character}.yaml` (e.g., `terminal-smuggler.yaml`, `bar-detective.yaml`)
|
||||
|
||||
@@ -99,14 +99,14 @@ Every line carries structural tags, selection tags, and (for monologue) characte
|
||||
| `role` | enum | Template-defined role, not NPC name (NPC assignment is runtime) |
|
||||
| `access` | list\<enum\> | Hard filter: `public`, `insider`, `authority`, `peer`, `hostile` |
|
||||
| `trust` | enum | Hard filter: `surface`, `real`, `secret` |
|
||||
| `situation` | list\<enum\> | Context filter (13 situations for v0.1) |
|
||||
| `situation` | list\<enum\> | Context filter (13 situations) |
|
||||
|
||||
### Selection Tags (recommended, defaults apply if empty)
|
||||
|
||||
| Tag | Type | Purpose |
|
||||
|-----|------|---------|
|
||||
| `topic` | list\<enum\> | Weighted selection (9 topics for v0.1) |
|
||||
| `mood` | list\<enum\> | Weighted selection (8 moods for v0.1) |
|
||||
| `topic` | list\<enum\> | Weighted selection (9 topics) |
|
||||
| `mood` | list\<enum\> | Weighted selection (8 moods) |
|
||||
| `tags` | list\<string\> | Freeform escape hatch for author intent |
|
||||
|
||||
### Monologue-Specific Tags (added to structural + selection)
|
||||
@@ -126,15 +126,15 @@ Every line carries structural tags, selection tags, and (for monologue) characte
|
||||
|
||||
### Enum Values
|
||||
|
||||
**`situation`** (13 for v0.1):
|
||||
**`situation`** (13):
|
||||
`arrival`, `shift_start`, `shift_end`, `shift_transition`, `bar_evening`, `night_shift`, `investigation`, `confrontation`, `social`, `alone`, `emergency`, `routine`, `observation`
|
||||
|
||||
**`topic`** (9 for v0.1):
|
||||
**`topic`** (9):
|
||||
`colleague`, `routine`, `cargo`, `money`, `trust`, `danger`, `institution`, `personal`, `investigation`
|
||||
|
||||
Note: no `crime` or `smuggling` topic. NPCs think of it as `cargo` or `money`. The detective uses `investigation`.
|
||||
|
||||
**`mood`** (8 for v0.1):
|
||||
**`mood`** (8):
|
||||
`fond`, `comfortable`, `worried`, `suspicious`, `analytical`, `conflicted`, `concerned`, `relieved`
|
||||
|
||||
---
|
||||
@@ -179,18 +179,18 @@ Fires when a known entity enters the player's line of sight.
|
||||
|
||||
```yaml
|
||||
- id: terminal_m_020
|
||||
text: "Kael's here. Good — I was starting to worry."
|
||||
text: "{THE FRIEND}'s here. Good — I was starting to worry."
|
||||
character: smuggler
|
||||
trigger: observe_npc
|
||||
mood: [fond]
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
```
|
||||
|
||||
```yaml
|
||||
- id: terminal_m_021
|
||||
text: "Dock worker from the case file. Davan, K. Unremarkable on paper."
|
||||
text: "Dock worker from the case file. {Surname}, {initial}. Unremarkable on paper."
|
||||
character: detective
|
||||
trigger: observe_npc
|
||||
mood: [analytical]
|
||||
@@ -209,7 +209,7 @@ Fires on audio events — ambient, diegetic, or anomalous.
|
||||
|
||||
```yaml
|
||||
- id: bar_m_030
|
||||
text: "Raised voices from the back room. Devra's in there. That's not a brokering call."
|
||||
text: "Raised voices from the back room. That's not a routine call."
|
||||
character: smuggler
|
||||
trigger: hear_sound
|
||||
mood: [concerned]
|
||||
@@ -237,24 +237,24 @@ Fires when the player observes something that contradicts expected state — a c
|
||||
|
||||
```yaml
|
||||
- id: terminal_m_040
|
||||
text: "Kael's checking his lattice again. Third time in ten minutes. That's not normal."
|
||||
text: "{THE FRIEND}'s checking their lattice again. Third time in ten minutes. That's not normal."
|
||||
character: smuggler
|
||||
trigger: observe_anomaly
|
||||
mood: [worried]
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
```
|
||||
|
||||
```yaml
|
||||
- id: terminal_m_041
|
||||
text: "Dock worker Davan — lattice activity spiked. Expecting a message? Or checking for surveillance?"
|
||||
text: "Dock worker {Surname} — lattice activity spiked. Expecting a message? Or checking for surveillance?"
|
||||
character: detective
|
||||
trigger: observe_anomaly
|
||||
mood: [analytical]
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: lattice_checking
|
||||
```
|
||||
@@ -269,24 +269,24 @@ Fires after a dialogue exchange ends. Internal reaction to what just happened.
|
||||
|
||||
```yaml
|
||||
- id: bar_m_050
|
||||
text: "Sera's good to have around. Knows the district, knows the people. Reliable."
|
||||
text: "{THE FRIEND}'s good to have around. Knows the district, knows the people. Reliable."
|
||||
character: detective
|
||||
trigger: post_conversation
|
||||
mood: [fond]
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: sera_venn
|
||||
subject: {friend_npc_slug}
|
||||
```
|
||||
|
||||
```yaml
|
||||
- id: bar_m_051
|
||||
text: "She's not lying. But she's not telling me everything. Sera, what do you know?"
|
||||
text: "Not lying. But not telling me everything. {THE FRIEND}, what do you know?"
|
||||
character: detective
|
||||
trigger: post_conversation
|
||||
mood: [conflicted]
|
||||
prerequisite:
|
||||
relationship_state: PersonOfInterest
|
||||
subject: sera_venn
|
||||
subject: {friend_npc_slug}
|
||||
```
|
||||
|
||||
This is where character voice shines — the detective analyzes, the smuggler worries about people.
|
||||
@@ -310,7 +310,7 @@ Fires when the player finds physical evidence — a document, object, or data po
|
||||
|
||||
```yaml
|
||||
- id: terminal_m_061
|
||||
text: "4471's still in temp. Kael routed it there during transition. Standard. Nothing to worry about."
|
||||
text: "4471's still in temp. Routed there during transition. Standard. Nothing to worry about."
|
||||
character: smuggler
|
||||
trigger: discover_evidence
|
||||
mood: [relieved]
|
||||
@@ -329,7 +329,7 @@ Fires when the player observes two NPCs interacting.
|
||||
|
||||
```yaml
|
||||
- id: bar_m_070
|
||||
text: "Sera's headed out. Smart — Torek gets loud after three drinks. Nobody wants to deal with that."
|
||||
text: "{THE FRIEND}'s headed out. Smart — {NPC} gets loud after three drinks. Nobody wants to deal with that."
|
||||
character: smuggler
|
||||
trigger: witness_interaction
|
||||
mood: [comfortable]
|
||||
@@ -338,13 +338,13 @@ Fires when the player observes two NPCs interacting.
|
||||
|
||||
```yaml
|
||||
- id: bar_m_071
|
||||
text: "That's twice now. Sera leaves when Torek arrives. Coincidence? Filing it."
|
||||
text: "That's twice now. {THE FRIEND} leaves when {NPC} arrives. Coincidence? Filing it."
|
||||
character: detective
|
||||
trigger: witness_interaction
|
||||
mood: [analytical]
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: sera_venn
|
||||
subject: {friend_npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: avoidance_pattern
|
||||
```
|
||||
@@ -364,7 +364,7 @@ Fires after inactivity — the player is standing still, watching, waiting. The
|
||||
trigger: time_idle
|
||||
mood: [relieved]
|
||||
prerequisite:
|
||||
fact: location.corridor_b7_restricted
|
||||
fact: location.restricted_corridor
|
||||
confidence: KnowsDetails
|
||||
```
|
||||
|
||||
@@ -375,7 +375,7 @@ Fires after inactivity — the player is standing still, watching, waiting. The
|
||||
trigger: time_idle
|
||||
mood: [suspicious]
|
||||
prerequisite:
|
||||
fact: location.corridor_b7_restricted
|
||||
fact: location.restricted_corridor
|
||||
confidence: Suspects
|
||||
```
|
||||
|
||||
@@ -389,24 +389,24 @@ Fires when the player returns to a location they've visited before. Distinct fro
|
||||
|
||||
```yaml
|
||||
- id: bar_m_090
|
||||
text: "Back at Lera's. Same seats, same faces. Sera's in the corner booth. Good."
|
||||
text: "Back at the bar. Same seats, same faces. {THE FRIEND}'s in the corner booth. Good."
|
||||
character: detective
|
||||
trigger: return_visit
|
||||
mood: [comfortable]
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: sera_venn
|
||||
subject: {friend_npc_slug}
|
||||
```
|
||||
|
||||
```yaml
|
||||
- id: bar_m_091
|
||||
text: "Back again. Same booth. ...Let's see if Sera leaves when Torek shows up."
|
||||
text: "Back again. Same booth. ...Let's see if {THE FRIEND} leaves when {NPC} shows up."
|
||||
character: detective
|
||||
trigger: return_visit
|
||||
mood: [suspicious]
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: sera_venn
|
||||
subject: {friend_npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: avoidance_pattern
|
||||
```
|
||||
@@ -437,14 +437,14 @@ prerequisite:
|
||||
|
||||
Fires only if the active character knows the named fact at the specified confidence **or higher**. Confidence levels ordered: `Suspects` < `KnowsOf` < `KnowsDetails` < `Direct`.
|
||||
|
||||
Use exact FactId strings from the [Fact Catalog](../knowledge/fact-catalog.md) — `"contraband.ring_exists"` not `"Ring Exists"`. The 24 v0.1 FactIds are the only valid values.
|
||||
Use exact FactId strings from the [Fact Catalog](../knowledge/fact-catalog.md) — `"contraband.ring_exists"` not `"Ring Exists"`. The 24 canonical FactIds are the only valid values.
|
||||
|
||||
### Gating on RelationshipState
|
||||
|
||||
```yaml
|
||||
prerequisite:
|
||||
relationship_state: PersonOfInterest
|
||||
subject: kael_davan
|
||||
subject: {npc_slug}
|
||||
```
|
||||
|
||||
Fires only if the active character's relationship with the named entity is the specified state. States: `Unknown`, `Known`, `Friendly`, `PersonOfInterest`, `Hostile`.
|
||||
@@ -455,7 +455,7 @@ Fires only if the active character's relationship with the named entity is the s
|
||||
```yaml
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: kael_davan
|
||||
subject: {npc_slug}
|
||||
key: contradiction_flagged
|
||||
value: meeting_unknown_contact
|
||||
```
|
||||
@@ -466,7 +466,7 @@ Fires if the active character's `EntityKnowledge` for the target has the exact k
|
||||
```yaml
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: kael_davan
|
||||
subject: {npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: lattice_checking
|
||||
```
|
||||
@@ -483,9 +483,9 @@ prerequisite:
|
||||
- fact: contraband.ring_exists
|
||||
confidence: KnowsDetails
|
||||
- relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
- known_attributes:
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: lattice_checking
|
||||
```
|
||||
@@ -539,12 +539,12 @@ The `access` tag on dialogue lines determines who can hear what. Access is deriv
|
||||
|
||||
### What this means for THE FRIEND
|
||||
|
||||
When Kael transitions from Friendly to PersonOfInterest:
|
||||
When THE FRIEND (smuggler's) transitions from Friendly to PersonOfInterest:
|
||||
- `insider` lines disappear. Ring talk stops. Trust-gated confidences lock.
|
||||
- `peer` lines disappear. Casual warmth dries up. Kael becomes guarded.
|
||||
- `public` lines remain. Kael still greets the smuggler — but the warmth is gone.
|
||||
- `peer` lines disappear. Casual warmth dries up. THE FRIEND becomes guarded.
|
||||
- `public` lines remain. THE FRIEND still greets the smuggler — but the warmth is gone.
|
||||
|
||||
When Sera transitions from Friendly to PersonOfInterest:
|
||||
When THE FRIEND (detective's) transitions from Friendly to PersonOfInterest:
|
||||
- `insider` lines disappear. Institutional background sharing stops.
|
||||
- `peer` lines disappear. Bar conversation becomes stilted.
|
||||
- `authority` lines unlock for the detective. Pressing questions become available.
|
||||
@@ -565,18 +565,18 @@ Trust is orthogonal to access. A `peer` + `surface` line is casual coworker talk
|
||||
|
||||
### Per-NPC access mapping
|
||||
|
||||
How each character relates to key NPCs:
|
||||
*v0.1 named-NPC access table removed — cited NPCs no longer in v0.2 pipeline (D-122). Author per-district access mapping tables against the active NPC roster. Pattern for the standard cast:*
|
||||
|
||||
| NPC | Smuggler Access | Detective Access |
|
||||
|-----|----------------|------------------|
|
||||
| Kael (THE FRIEND) | `insider`, `peer` | `public` → `authority` (after flagging) |
|
||||
| Sera (THE FRIEND) | `public` (Commission, wary) | `peer` → `authority` (post-contradiction) |
|
||||
| Voss | `insider` (colleague) | `authority` |
|
||||
| Lera | `insider` (bar regular) | `public` → `peer` (repeat visits) |
|
||||
| Naia | `peer` (through Kael) | `public` → `peer` (through Sera) |
|
||||
| Torek | `insider` or `peer` | `public` |
|
||||
| Maret | `insider` (hub colleague) | `authority` |
|
||||
| Drin | `insider` (hub colleague) | `authority` |
|
||||
| NPC Role | Smuggler Access | Detective Access |
|
||||
|----------|----------------|------------------|
|
||||
| THE FRIEND (smuggler's) | `insider`, `peer` | `public` → `authority` (after flagging) |
|
||||
| THE FRIEND (detective's) | `public` (Commission, wary) | `peer` → `authority` (post-contradiction) |
|
||||
| Supervisor | `insider` (colleague) | `authority` |
|
||||
| Bar owner | `insider` (bar regular) | `public` → `peer` (repeat visits) |
|
||||
| MIRROR NPC | `peer` (through FRIEND) | `public` → `peer` (through FRIEND B) |
|
||||
| Ring-adjacent NPC | `insider` or `peer` | `public` |
|
||||
| Hub scheduler | `insider` (hub colleague) | `authority` |
|
||||
| Compromised inspector | `insider` (hub colleague) | `authority` |
|
||||
|
||||
---
|
||||
|
||||
@@ -594,27 +594,27 @@ A tell observation monologue line should:
|
||||
|
||||
```yaml
|
||||
- id: terminal_m_100
|
||||
text: "Kael keeps checking his lattice. Waiting for something."
|
||||
text: "{THE FRIEND} keeps checking their lattice. Waiting for something."
|
||||
character: smuggler
|
||||
trigger: observe_anomaly
|
||||
mood: [concerned]
|
||||
topic: [colleague]
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
notes: "First tell. Updates behavior_flags: lattice_checking. Smuggler notices but doesn't flag yet."
|
||||
```
|
||||
|
||||
```yaml
|
||||
- id: terminal_m_101
|
||||
text: "Dock worker Davan — lattice activity spiked. Three pings in two minutes. Expecting a message? Or checking for surveillance?"
|
||||
text: "Dock worker {Surname} — lattice activity spiked. Three pings in two minutes. Expecting a message? Or checking for surveillance?"
|
||||
character: detective
|
||||
trigger: observe_anomaly
|
||||
mood: [analytical]
|
||||
topic: [investigation]
|
||||
prerequisite:
|
||||
relationship_state: Known
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
notes: "Same tell, different read. Updates behavior_flags: lattice_checking."
|
||||
```
|
||||
|
||||
@@ -626,7 +626,7 @@ Tells accumulate. Write them as a sequence, each gated on increasing knowledge:
|
||||
```yaml
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
# No behavior_flags gate — this IS the first observation
|
||||
```
|
||||
|
||||
@@ -634,7 +634,7 @@ prerequisite:
|
||||
```yaml
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: lattice_checking
|
||||
# Requires tell 1 to have fired and set the attribute
|
||||
@@ -645,11 +645,11 @@ prerequisite:
|
||||
prerequisite:
|
||||
all:
|
||||
- known_attributes:
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: lattice_checking
|
||||
- known_attributes:
|
||||
subject: kael_davan
|
||||
subject: {friend_npc_slug}
|
||||
key: behavior_flags
|
||||
value_contains: evasive
|
||||
```
|
||||
@@ -668,23 +668,25 @@ Each tell should feel like a natural observation, not a checklist. The player do
|
||||
|
||||
### THE FRIEND tell arcs
|
||||
|
||||
**Kael (smuggler observes):**
|
||||
*Tell arcs are authored per district against the active NPC roster — v0.1 named examples removed (D-122). The pattern structure:*
|
||||
|
||||
**THE FRIEND A (smuggler observes):**
|
||||
|
||||
| Phase | Tell | Behavior flag | Line tone |
|
||||
|-------|------|---------------|-----------|
|
||||
| First crack | Increased lattice checking | `lattice_checking` | Concern: "Kael's distracted today." |
|
||||
| Pattern | Shortened conversations, evasive | `distracted,evasive` | Worry: "Kael's been quiet lately." |
|
||||
| First crack | Increased lattice checking | `lattice_checking` | Concern: "Distracted today." |
|
||||
| Pattern | Shortened conversations, evasive | `distracted,evasive` | Worry: "Been quiet lately." |
|
||||
| Contradiction | Unauthorized spatial presence | `contradiction_flagged: meeting_unknown_contact` | Alarm: "That wasn't anyone from our rotation." |
|
||||
| Confirmation | Looks left when answering | `tell_observed: looks_left_when_lying` | Hurt: "He always looks left when he's making something up." |
|
||||
| Confirmation | Personal tell fires under pressure | `tell_observed: {specific_tell}` | Hurt: "That tell. I know that tell. They're lying to me." |
|
||||
|
||||
**Sera (detective observes):**
|
||||
**THE FRIEND B (detective observes):**
|
||||
|
||||
| Phase | Tell | Behavior flag | Line tone |
|
||||
|-------|------|---------------|-----------|
|
||||
| First departure | Leaves when Torek arrives (once) | `avoidance_pattern` (begins) | Barely noticed: "Sera headed out. Long day." |
|
||||
| Second departure | Different excuse, same trigger | `avoidance_pattern` (accumulating) | Noted: "Sera left again. She's been tired lately." |
|
||||
| First departure | Leaves when ring-adjacent NPC arrives (once) | `avoidance_pattern` (begins) | Barely noticed: "Headed out. Long day." |
|
||||
| Second departure | Different excuse, same trigger | `avoidance_pattern` (accumulating) | Noted: "Left again. Tired lately." |
|
||||
| Third departure | Pattern confirmed | `contradiction_flagged: avoidance_inconsistency` | Analytical: "Three times. Three excuses. That's data." |
|
||||
| Deflection | Controlled redirect when asked | `tell_observed: controlled_deflection` | Conflicted: "She's not lying. But she's not telling me everything." |
|
||||
| Deflection | Controlled redirect when asked | `tell_observed: controlled_deflection` | Conflicted: "Not lying. But not telling me everything." |
|
||||
|
||||
---
|
||||
|
||||
@@ -722,17 +724,17 @@ Monologue pools are separate (D-032). But dialogue is shared — the NPC says th
|
||||
### Dual-lens patterns
|
||||
|
||||
**Innocuous surface / operational subtext:**
|
||||
> "Voss adjusted the night shift again. Two workers short."
|
||||
> "{Supervisor} adjusted the night shift again. Two workers short."
|
||||
- Smuggler: coverage gap for tonight's run
|
||||
- Detective: scheduling irregularity worth tracking
|
||||
|
||||
**Social warmth / threat assessment:**
|
||||
> "Sera left early. Headache, she said."
|
||||
- Detective: pattern forming — third time when Torek's here
|
||||
> "{THE FRIEND} left early. Headache, they said."
|
||||
- Detective: pattern forming — third time when {NPC} is here
|
||||
- Smuggler: Commission person leaving, less oversight
|
||||
|
||||
**Emotional resonance / clinical data:**
|
||||
> "Kael's been quiet lately. Not like him."
|
||||
> "{THE FRIEND}'s been quiet lately. Not like them."
|
||||
- Smuggler: concern for a friend
|
||||
- Detective: behavioral change in a subject
|
||||
|
||||
@@ -752,555 +754,32 @@ Monologue pools are separate (D-032). But dialogue is shared — the NPC says th
|
||||
|
||||
## Concrete Examples: Full Tagged Pools
|
||||
|
||||
Three pools, one per v0.1 social site. Each shows file structure, progression through THE FRIEND arc, and full tag usage.
|
||||
*v0.1 named-NPC pool examples removed — cited NPCs no longer in v0.2 pipeline (D-122). Author per-district pools against the active NPC roster using the tag schema and trigger types documented above.*
|
||||
|
||||
### The Terminal (Logistics Hub) — Smuggler Monologue
|
||||
**Structure reference (three pools per district):**
|
||||
|
||||
```yaml
|
||||
# File: content/terminal/monologue-smuggler.yaml
|
||||
# Location: The Terminal (Logistics Hub)
|
||||
# Character: Smuggler
|
||||
|
||||
lines:
|
||||
|
||||
# --- ARRIVAL ---
|
||||
|
||||
- id: terminal_m_001
|
||||
character: smuggler
|
||||
trigger: enter_location
|
||||
prerequisite: null
|
||||
text: "Morning shift. Recycled air and cargo lubricant. Home sweet home."
|
||||
mood: [comfortable]
|
||||
topic: [routine]
|
||||
situation: [arrival, shift_start]
|
||||
access: [insider]
|
||||
trust: surface
|
||||
tags: [baseline]
|
||||
|
||||
- id: terminal_m_002
|
||||
character: smuggler
|
||||
trigger: enter_location
|
||||
prerequisite:
|
||||
fact: contraband.ring_exists
|
||||
confidence: KnowsDetails
|
||||
text: "Shift transition in thirty minutes. If Voss kept the schedule thin, the route's clear."
|
||||
mood: [analytical]
|
||||
topic: [cargo]
|
||||
situation: [shift_transition]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [ring, operational]
|
||||
|
||||
# --- KAEL: THE FRIEND ARC ---
|
||||
|
||||
# Phase 1: Comfort
|
||||
- id: terminal_m_010
|
||||
character: smuggler
|
||||
trigger: observe_npc
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
text: "Kael's already at the dock. Good. The day's better when he's on shift."
|
||||
mood: [fond]
|
||||
topic: [colleague]
|
||||
situation: [shift_start]
|
||||
access: [insider, peer]
|
||||
trust: surface
|
||||
tags: [kael, baseline, pre_contradiction]
|
||||
notes: "Phase 1 warmth. Establishes the bond before it gets tested."
|
||||
|
||||
# Phase 2: First crack
|
||||
- id: terminal_m_011
|
||||
character: smuggler
|
||||
trigger: observe_anomaly
|
||||
prerequisite:
|
||||
all:
|
||||
- relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
- known_attributes:
|
||||
subject: kael_davan
|
||||
key: behavior_flags
|
||||
value_contains: lattice_checking
|
||||
text: "Kael keeps checking his lattice. Waiting for a message? Not like him to be jumpy."
|
||||
mood: [concerned]
|
||||
topic: [colleague]
|
||||
situation: [routine]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [kael, tell, first_crack]
|
||||
notes: "Phase 2. Smuggler notices, doesn't flag it. Updates behavior_flags."
|
||||
|
||||
- id: terminal_m_012
|
||||
character: smuggler
|
||||
trigger: post_conversation
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: kael_davan
|
||||
key: behavior_flags
|
||||
value_contains: evasive
|
||||
text: "Kael cut lunch short again. 'Things to take care of.' Since when does Kael have things to take care of that don't involve me?"
|
||||
mood: [worried]
|
||||
topic: [colleague]
|
||||
situation: [routine]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [kael, tell, pattern_forming]
|
||||
|
||||
# Phase 3: The contradiction
|
||||
- id: terminal_m_013
|
||||
character: smuggler
|
||||
trigger: witness_interaction
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
text: "Kael? By the service hatch? And that's — I don't know them. Not crew, not ring. Who is that?"
|
||||
mood: [concerned]
|
||||
topic: [colleague]
|
||||
situation: [observation]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [kael, the_friend, contradiction, critical_moment]
|
||||
notes: >
|
||||
THE CONTRADICTION. Kael in restricted area with unknown contact.
|
||||
Sets contradiction_flagged: meeting_unknown_contact.
|
||||
RelationshipState: Friendly -> PersonOfInterest. Green -> amber.
|
||||
|
||||
# Phase 4: Confrontation aftermath
|
||||
- id: terminal_m_014
|
||||
character: smuggler
|
||||
trigger: post_conversation
|
||||
prerequisite:
|
||||
all:
|
||||
- relationship_state: PersonOfInterest
|
||||
subject: kael_davan
|
||||
- known_attributes:
|
||||
subject: kael_davan
|
||||
key: tell_observed
|
||||
value: looks_left_when_lying
|
||||
text: "He looked left. He always looks left when he's making something up. Two years I've known that tell. Kael is lying to me."
|
||||
mood: [conflicted]
|
||||
topic: [trust]
|
||||
situation: [confrontation]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [kael, the_friend, tell_confirmation]
|
||||
notes: "The tell pays off. Established early in casual observation, confirmed under pressure."
|
||||
|
||||
# Phase 5: Contaminated trust
|
||||
- id: terminal_m_015
|
||||
character: smuggler
|
||||
trigger: observe_npc
|
||||
prerequisite:
|
||||
all:
|
||||
- relationship_state: PersonOfInterest
|
||||
subject: kael_davan
|
||||
- known_attributes:
|
||||
subject: kael_davan
|
||||
key: contradiction_flagged
|
||||
value: meeting_unknown_contact
|
||||
text: "Same old Kael. Same jokes, same routine. ...What are you not telling me?"
|
||||
mood: [conflicted]
|
||||
topic: [colleague]
|
||||
situation: [routine]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [kael, the_friend, contaminated_trust]
|
||||
notes: "Phase 5. Warmth and doubt simultaneously. Every smile now has a question mark."
|
||||
|
||||
# --- OPERATIONAL ---
|
||||
|
||||
- id: terminal_m_020
|
||||
character: smuggler
|
||||
trigger: observe_anomaly
|
||||
prerequisite:
|
||||
fact: investigation.cargo_anomaly
|
||||
confidence: Suspects
|
||||
text: "That container's been in temp since yesterday. Someone forgot to process it, or someone's stalling."
|
||||
mood: [concerned]
|
||||
topic: [cargo]
|
||||
situation: [routine]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [investigation, cargo]
|
||||
|
||||
- id: terminal_m_021
|
||||
character: smuggler
|
||||
trigger: time_idle
|
||||
prerequisite:
|
||||
fact: world.shift_schedule
|
||||
confidence: KnowsDetails
|
||||
text: "Thirteen-forty. Transition window opens in fifty minutes. After that, twenty minutes of reduced oversight."
|
||||
mood: [analytical]
|
||||
topic: [routine]
|
||||
situation: [routine]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [ring, timing, operational]
|
||||
```
|
||||
content/{district}/
|
||||
{terminal-slug}/
|
||||
monologue-smuggler.yaml # Smuggler's FRIEND arc + operational lines
|
||||
monologue-detective.yaml # Detective's investigation lines
|
||||
dialogue.yaml # Shared NPC dialogue (access-tier filtered at runtime)
|
||||
{bar-slug}/
|
||||
monologue-smuggler.yaml
|
||||
monologue-detective.yaml
|
||||
dialogue.yaml
|
||||
{corridor-slug}/
|
||||
monologue-smuggler.yaml # Route operational + THE CONTRADICTION scene
|
||||
monologue-detective.yaml
|
||||
dialogue.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### The Last Shift (Bar) — Detective Monologue
|
||||
|
||||
```yaml
|
||||
# File: content/bar/monologue-detective.yaml
|
||||
# Location: The Last Shift (Bar)
|
||||
# Character: Detective
|
||||
|
||||
lines:
|
||||
|
||||
# --- ARRIVAL ---
|
||||
|
||||
- id: bar_m_001
|
||||
character: detective
|
||||
trigger: enter_location
|
||||
prerequisite: null
|
||||
text: "The Last Shift. Grain spirit and low conversation. Only place in this district that doesn't smell like freight lubricant."
|
||||
mood: [comfortable]
|
||||
topic: [routine]
|
||||
situation: [arrival, bar_evening]
|
||||
access: [public]
|
||||
trust: surface
|
||||
tags: [baseline, atmosphere]
|
||||
|
||||
- id: bar_m_002
|
||||
character: detective
|
||||
trigger: return_visit
|
||||
prerequisite:
|
||||
fact: progress.initial_suspicion
|
||||
confidence: KnowsOf
|
||||
text: "Back again. People talk here. And people who don't talk are talking too — just not out loud."
|
||||
mood: [analytical]
|
||||
topic: [investigation]
|
||||
situation: [bar_evening]
|
||||
access: [authority]
|
||||
trust: real
|
||||
tags: [investigation, atmosphere]
|
||||
|
||||
# --- SERA: THE FRIEND ARC ---
|
||||
|
||||
# Phase 1: Trust
|
||||
- id: bar_m_010
|
||||
character: detective
|
||||
trigger: observe_npc
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: sera_venn
|
||||
text: "Sera's in her usual booth. Good. One familiar face in a district that doesn't want me here."
|
||||
mood: [relieved]
|
||||
topic: [colleague]
|
||||
situation: [bar_evening]
|
||||
access: [peer]
|
||||
trust: surface
|
||||
tags: [sera, baseline, trust]
|
||||
notes: "Phase 1. Sera is the detective's anchor. Establish this warmth — it has to hurt later."
|
||||
|
||||
# Phase 2: Background
|
||||
- id: bar_m_011
|
||||
character: detective
|
||||
trigger: post_conversation
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: sera_venn
|
||||
text: "Sera's connected here. Knows the regulars, knows the routines. And she's got diagnostic access. Useful."
|
||||
mood: [comfortable]
|
||||
topic: [colleague]
|
||||
situation: [social]
|
||||
access: [peer]
|
||||
trust: surface
|
||||
tags: [sera, background, pre_contradiction]
|
||||
notes: "Phase 2. The detective notes Sera's access level without realizing it's the source of the conflict."
|
||||
|
||||
# Phase 3: Pattern — first departure
|
||||
- id: bar_m_012
|
||||
character: detective
|
||||
trigger: witness_interaction
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: sera_venn
|
||||
text: "Sera headed out. Early shift tomorrow, she said. Fair enough."
|
||||
mood: [comfortable]
|
||||
topic: [colleague]
|
||||
situation: [bar_evening]
|
||||
access: [peer]
|
||||
trust: surface
|
||||
tags: [sera, avoidance, departure_1]
|
||||
notes: "First Torek departure. Detective barely notices."
|
||||
|
||||
# Phase 3: Pattern — second departure
|
||||
- id: bar_m_013
|
||||
character: detective
|
||||
trigger: witness_interaction
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: sera_venn
|
||||
key: behavior_flags
|
||||
value_contains: avoidance_pattern
|
||||
text: "Sera left again. Headache. Right after Torek walked in. ...Noted."
|
||||
mood: [suspicious]
|
||||
topic: [colleague]
|
||||
situation: [bar_evening]
|
||||
access: [peer]
|
||||
trust: real
|
||||
tags: [sera, avoidance, departure_2]
|
||||
notes: "Second departure. Detective notes it. Not yet a pattern."
|
||||
|
||||
# Phase 3: Pattern — the third (contradiction)
|
||||
- id: bar_m_014
|
||||
character: detective
|
||||
trigger: witness_interaction
|
||||
prerequisite:
|
||||
known_attributes:
|
||||
subject: sera_venn
|
||||
key: contradiction_flagged
|
||||
value: avoidance_inconsistency
|
||||
text: "That's the third time. Early shift, headache, kiosk check. Three excuses, one result. Sera leaves when Torek arrives. That's not coincidence."
|
||||
mood: [analytical]
|
||||
topic: [colleague]
|
||||
situation: [bar_evening, observation]
|
||||
access: [peer]
|
||||
trust: real
|
||||
tags: [sera, the_friend, contradiction_discovery]
|
||||
notes: >
|
||||
THE CONTRADICTION. Three data points make a conclusion.
|
||||
Sets contradiction_flagged: avoidance_inconsistency.
|
||||
RelationshipState: Friendly -> PersonOfInterest. Green -> amber.
|
||||
Different from Kael's — cumulative, not sudden.
|
||||
|
||||
# Phase 4: The question asked
|
||||
- id: bar_m_015
|
||||
character: detective
|
||||
trigger: post_conversation
|
||||
prerequisite:
|
||||
all:
|
||||
- relationship_state: PersonOfInterest
|
||||
subject: sera_venn
|
||||
- known_attributes:
|
||||
subject: sera_venn
|
||||
key: tell_observed
|
||||
value: controlled_deflection,topic_change
|
||||
text: "She deflected. Smooth — 'he's just loud.' Technically true. But her shoulders shifted. Sera, what do you know about Torek?"
|
||||
mood: [conflicted]
|
||||
topic: [trust]
|
||||
situation: [confrontation]
|
||||
access: [authority]
|
||||
trust: real
|
||||
tags: [sera, the_friend, post_confrontation]
|
||||
notes: "Phase 4. The detective hears the non-lie. Deflection IS the tell."
|
||||
|
||||
# Phase 5: Contaminated trust
|
||||
- id: bar_m_016
|
||||
character: detective
|
||||
trigger: return_visit
|
||||
prerequisite:
|
||||
relationship_state: PersonOfInterest
|
||||
subject: sera_venn
|
||||
text: "Same booth. Same warm smile. Same offer to buy me a drink. ...Everything except whatever she's not saying."
|
||||
mood: [conflicted]
|
||||
topic: [trust]
|
||||
situation: [bar_evening]
|
||||
access: [authority]
|
||||
trust: real
|
||||
tags: [sera, the_friend, contaminated_trust]
|
||||
notes: "Phase 5. Every kindness now has a question mark. The past is retroactively contaminated."
|
||||
|
||||
# --- TOREK ---
|
||||
|
||||
- id: bar_m_020
|
||||
character: detective
|
||||
trigger: observe_npc
|
||||
prerequisite:
|
||||
relationship_state: Unknown
|
||||
subject: torek_lintar
|
||||
text: "Loud one at the bar. Buying rounds he probably can't afford. Worth watching."
|
||||
mood: [analytical]
|
||||
topic: [money]
|
||||
situation: [bar_evening]
|
||||
access: [public]
|
||||
trust: surface
|
||||
tags: [torek, first_observation, spending]
|
||||
|
||||
# --- ATMOSPHERE ---
|
||||
|
||||
- id: bar_m_030
|
||||
character: detective
|
||||
trigger: time_idle
|
||||
prerequisite:
|
||||
fact: progress.initial_suspicion
|
||||
confidence: KnowsOf
|
||||
text: "Everyone's friendly enough. Drinks, jokes, the usual complaints about shift schedules. But friendly and honest aren't the same thing."
|
||||
mood: [suspicious]
|
||||
topic: [routine]
|
||||
situation: [bar_evening]
|
||||
access: [public]
|
||||
trust: real
|
||||
tags: [atmosphere, investigation, early_game]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Corridor B-7 — Smuggler Monologue
|
||||
|
||||
```yaml
|
||||
# File: content/corridor/monologue-smuggler.yaml
|
||||
# Location: Corridor B-7 (Maintenance / Smuggling Route)
|
||||
# Character: Smuggler
|
||||
|
||||
lines:
|
||||
|
||||
# --- ENTRY ---
|
||||
|
||||
- id: corridor_m_001
|
||||
character: smuggler
|
||||
trigger: enter_location
|
||||
prerequisite:
|
||||
fact: location.corridor_b7_restricted
|
||||
confidence: KnowsDetails
|
||||
text: "B-7. Old prefab, minimal coverage. The route works because nobody updated the surveillance map."
|
||||
mood: [analytical]
|
||||
topic: [routine]
|
||||
situation: [night_shift]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [ring, operational, spatial]
|
||||
|
||||
- id: corridor_m_002
|
||||
character: smuggler
|
||||
trigger: enter_location
|
||||
prerequisite:
|
||||
fact: location.corridor_b7_restricted
|
||||
confidence: Suspects
|
||||
text: "Maintenance corridor. Quiet. Shouldn't be this quiet during shift change."
|
||||
mood: [suspicious]
|
||||
topic: [routine]
|
||||
situation: [shift_transition]
|
||||
access: [public]
|
||||
trust: surface
|
||||
tags: [exploration, spatial]
|
||||
notes: "Lower confidence — smuggler who doesn't know B-7's significance yet."
|
||||
|
||||
# --- ENVIRONMENTAL ---
|
||||
|
||||
- id: corridor_m_003
|
||||
character: smuggler
|
||||
trigger: hear_sound
|
||||
prerequisite:
|
||||
fact: location.corridor_b7_restricted
|
||||
confidence: KnowsOf
|
||||
text: "Footsteps. Wrong cadence for maintenance crew. Someone's being careful."
|
||||
mood: [concerned]
|
||||
topic: [danger]
|
||||
situation: [night_shift]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [tension, spatial_awareness]
|
||||
|
||||
- id: corridor_m_004
|
||||
character: smuggler
|
||||
trigger: time_idle
|
||||
prerequisite:
|
||||
fact: location.surveillance_gaps
|
||||
confidence: KnowsDetails
|
||||
text: "No Meridian signal down here. No eyes, no ears. Whatever happens in B-7 stays in B-7."
|
||||
mood: [relieved]
|
||||
topic: [routine]
|
||||
situation: [alone]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [ring, surveillance, operational]
|
||||
|
||||
# --- THE CONTRADICTION ---
|
||||
|
||||
- id: corridor_m_010
|
||||
character: smuggler
|
||||
trigger: witness_interaction
|
||||
prerequisite:
|
||||
relationship_state: Friendly
|
||||
subject: kael_davan
|
||||
text: "Kael? Down here? And that's — I don't know them. Not crew, not ring. Who the hell is that?"
|
||||
mood: [concerned]
|
||||
topic: [colleague]
|
||||
situation: [observation]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [the_friend, contradiction, kael, critical_moment]
|
||||
notes: >
|
||||
THE CONTRADICTION. The moment the smuggler's world shifts.
|
||||
Kael in a restricted corridor with an unknown contact.
|
||||
Sets contradiction_flagged: meeting_unknown_contact.
|
||||
RelationshipState: Friendly -> PersonOfInterest.
|
||||
Color: green -> amber. This moment is the emotional core of the arc.
|
||||
|
||||
- id: corridor_m_011
|
||||
character: smuggler
|
||||
trigger: post_conversation
|
||||
prerequisite:
|
||||
all:
|
||||
- relationship_state: PersonOfInterest
|
||||
subject: kael_davan
|
||||
- known_attributes:
|
||||
subject: kael_davan
|
||||
key: tell_observed
|
||||
value: looks_left_when_lying
|
||||
text: "He looked left. Always looks left when he's making something up. Two years, Kael. I know your tells."
|
||||
mood: [conflicted]
|
||||
topic: [trust]
|
||||
situation: [confrontation]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [the_friend, kael, tell_confirmation]
|
||||
notes: "Tell payoff. Established early in casual dialogue, confirmed here under pressure."
|
||||
|
||||
# --- EVIDENCE ---
|
||||
|
||||
- id: corridor_m_020
|
||||
character: smuggler
|
||||
trigger: discover_evidence
|
||||
prerequisite:
|
||||
fact: location.dead_drop_location
|
||||
confidence: Direct
|
||||
text: "Locker 47. Registered to someone who transferred out eighteen months ago. Convenient."
|
||||
mood: [analytical]
|
||||
topic: [cargo]
|
||||
situation: [investigation]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [dead_drop, evidence]
|
||||
|
||||
- id: corridor_m_021
|
||||
character: smuggler
|
||||
trigger: observe_anomaly
|
||||
prerequisite:
|
||||
fact: location.smuggling_route
|
||||
confidence: KnowsDetails
|
||||
text: "Fresh marks on the service hatch. Kosse's been through here. Right on schedule."
|
||||
mood: [comfortable]
|
||||
topic: [cargo]
|
||||
situation: [night_shift]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [ring, route, operational]
|
||||
|
||||
# --- RETURN ---
|
||||
|
||||
- id: corridor_m_030
|
||||
character: smuggler
|
||||
trigger: return_visit
|
||||
prerequisite:
|
||||
all:
|
||||
- fact: location.corridor_b7_restricted
|
||||
confidence: KnowsDetails
|
||||
- relationship_state: PersonOfInterest
|
||||
subject: kael_davan
|
||||
text: "B-7 again. Last time I was here, Kael was talking to someone he shouldn't have been. The corridor feels different now."
|
||||
mood: [suspicious]
|
||||
topic: [colleague]
|
||||
situation: [alone]
|
||||
access: [insider]
|
||||
trust: real
|
||||
tags: [kael, the_friend, post_contradiction, return]
|
||||
notes: "The space is contaminated by what happened here. Location memory."
|
||||
```
|
||||
**Required content per location per character:**
|
||||
- Arrival / enter_location (2-3 lines, baseline + investigation variant)
|
||||
- THE FRIEND arc phases 1-5 (smuggler: Phase 1-5 for FRIEND A; detective: Phase 1-5 for FRIEND B)
|
||||
- Operational / investigative observations (3-5 lines per location)
|
||||
- Return visit variants (1-2 lines per location)
|
||||
- Atmospheric time_idle lines (1-2 per location)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -33,11 +33,11 @@ The voice-patterns.md spec describes the mechanics of each character's voice. Th
|
||||
|
||||
The smuggler's voice is not the result of low intelligence or limited vocabulary. It's the result of two years of professional survival in a context where abstract thinking is dangerous.
|
||||
|
||||
When you're running contraband through a logistics hub, you can't afford to think in categories — you think in specifics. Not "this situation is getting risky" but "Voss changed the rotation and Kael's not answering his lattice." Abstract framing makes patterns invisible. Concrete framing catches the deviation.
|
||||
When you're running contraband through a logistics hub, you can't afford to think in categories — you think in specifics. Not "this situation is getting risky" but "{Supervisor} changed the rotation and {THE FRIEND}'s not answering their lattice." Abstract framing makes patterns invisible. Concrete framing catches the deviation.
|
||||
|
||||
The smuggler's internal voice is trained, not natural. She developed it. It served her. The short sentences and fragments aren't lack of complexity — they're the mental habit of someone who learned to think in real-time decision points. "Kael's late. Wrong. Move." Three thoughts, three beats, three potential action triggers. Abstract cognition is a liability she's edited out.
|
||||
The smuggler's internal voice is trained, not natural. She developed it. It served her. The short sentences and fragments aren't lack of complexity — they're the mental habit of someone who learned to think in real-time decision points. "{THE FRIEND}'s late. Wrong. Move." Three thoughts, three beats, three potential action triggers. Abstract cognition is a liability she's edited out.
|
||||
|
||||
**The emotional truth beneath the voice:** She cares about people first. Operations second. Institutions never. The concrete voice maps onto this: she sees people, not systems. She notices Kael is distracted before she notices the manifest is wrong. The world is a network of relationships, and her monologue is live monitoring of that network.
|
||||
**The emotional truth beneath the voice:** She cares about people first. Operations second. Institutions never. The concrete voice maps onto this: she sees people, not systems. She notices {THE FRIEND} is distracted before she notices the manifest is wrong. The world is a network of relationships, and her monologue is live monitoring of that network.
|
||||
|
||||
**What this means for trait and mood modifiers:** When trait or mood modifiers inflect the smuggler's voice, they do so within this framework. A Bold smuggler is still concrete-first — she just acts on partial information faster. An Anxious smuggler is still relational — she just cycles through the network faster, checking and rechecking. The base is immovable. The modifiers inflect it.
|
||||
|
||||
@@ -45,11 +45,11 @@ The smuggler's internal voice is trained, not natural. She developed it. It serv
|
||||
|
||||
The detective's voice is institutional training running as an operating system. He was taught to externalise his cognition — to turn observations into filed reports, to name patterns as data, to treat emotional reactions as information to be processed rather than feelings to be felt.
|
||||
|
||||
This is not coldness. It's self-protection. Investigators who let themselves feel first make bad decisions. The detective learned that lesson somewhere — we don't know where, but it's in the bone. The analytical frame is a tool he uses so well he's forgotten it's a tool. Except when Sera makes him forget.
|
||||
This is not coldness. It's self-protection. Investigators who let themselves feel first make bad decisions. The detective learned that lesson somewhere — we don't know where, but it's in the bone. The analytical frame is a tool he uses so well he's forgotten it's a tool. Except when THE FRIEND makes him forget.
|
||||
|
||||
The longer sentences and complete syntactic structures aren't pretension. They're habits of evidence: a complete sentence has a subject, verb, and object, which means it has an agent, an action, and a consequence. The detective's brain naturally produces complete sentences because incomplete sentences don't file well.
|
||||
|
||||
**The emotional truth beneath the voice:** He cares about doing the work correctly. Not because he's a rule-follower (he'd bend a rule if the evidence demanded it), but because he believes the correct process produces the correct result. When Sera introduces doubt into that belief, the whole framework shudders. His fear isn't being wrong about a fact — it's discovering that correct process produced an unjust outcome, and having no language for what comes next.
|
||||
**The emotional truth beneath the voice:** He cares about doing the work correctly. Not because he's a rule-follower (he'd bend a rule if the evidence demanded it), but because he believes the correct process produces the correct result. When THE FRIEND introduces doubt into that belief, the whole framework shudders. His fear isn't being wrong about a fact — it's discovering that correct process produced an unjust outcome, and having no language for what comes next.
|
||||
|
||||
**What this means for trait and mood modifiers:** Detective trait modifiers inflate or compress the analytical frame. A Compassionate detective lets the personal break through the professional more easily. A Ruthless detective turns the analytical frame into a weapon — identifies leverage faster, doesn't dwell on moral weight. Mood modifiers thin or thicken the professional veneer. The base is the analyst. The modifiers determine how much of the person shows through.
|
||||
|
||||
@@ -70,7 +70,7 @@ D-024 defines 10 personality traits across 5 opposing pairs. These modify the *d
|
||||
**Cautious — transformation logic:**
|
||||
A Cautious character qualifies her observations before she acts on them. She notices things in the same order as a neutral character, but she checks her own conclusions. She hedges internally. She is not less intelligent — she is more aware that she might be wrong.
|
||||
|
||||
- Declarations become conditionals: "That's Kael's route" → "That looks like Kael's route"
|
||||
- Declarations become conditionals: "That's {THE FRIEND}'s route" → "That looks like {THE FRIEND}'s route"
|
||||
- Observations become questions: "Something's off" → "Something might be off"
|
||||
- Concern arrives earlier and stays longer (more re-checking)
|
||||
- The voice is slower, more tentative
|
||||
@@ -83,7 +83,7 @@ A Cautious character qualifies her observations before she acts on them. She not
|
||||
A Bold character acts on partial information. She names the conclusion before she has the evidence. She's often right — bold cognition built on competence. But she's also capable of committing to a wrong read and holding it too long.
|
||||
|
||||
- Questions become declarations: "Something might be off" → "Something's off"
|
||||
- Hedges disappear: "That looks like Kael's route" → "That's Kael's route"
|
||||
- Hedges disappear: "That looks like {THE FRIEND}'s route" → "That's {THE FRIEND}'s route"
|
||||
- Concern arrives fast and crystallizes immediately
|
||||
- The voice is faster, more assertive, shorter latency between observation and conclusion
|
||||
|
||||
@@ -102,7 +102,7 @@ A Bold character acts on partial information. She names the conclusion before sh
|
||||
**Honest — transformation logic:**
|
||||
An Honest character's monologue is self-correcting. She catches her own spin and revises it. She doesn't lie to herself to feel better. This makes her monologue have a characteristic pattern: initial reaction, then correction.
|
||||
|
||||
- Self-correction appears: "Kael's fine. — No. He's not fine."
|
||||
- Self-correction appears: "{THE FRIEND}'s fine. — No. They're not fine."
|
||||
- Less motivated reasoning: she acknowledges evidence she doesn't want to see
|
||||
- The voice is slightly more uncomfortable with its own conclusions
|
||||
- She doesn't minimize things that scare her
|
||||
@@ -110,7 +110,7 @@ An Honest character's monologue is self-correcting. She catches her own spin and
|
||||
**Deceptive — transformation logic:**
|
||||
A Deceptive character's internal voice shows motivated reasoning. She rationalizes what she wants to be true. She notices threatening evidence and then explains it away. This is not dishonest *about others* — it's dishonest with herself.
|
||||
|
||||
- Conclusions favor the preferred reading: "Kael's meeting someone I don't know. Probably work."
|
||||
- Conclusions favor the preferred reading: "{THE FRIEND}'s meeting someone I don't know. Probably work."
|
||||
- Dismissal appears quickly after observation: "Could be nothing. Probably is nothing."
|
||||
- She notices the tell and then chooses not to follow it
|
||||
- The voice has a self-soothing quality, particularly under threat
|
||||
@@ -131,22 +131,22 @@ A Deceptive character's internal voice shows motivated reasoning. She rationaliz
|
||||
A Compassionate character's first read of a situation is through the lens of what it means for people she cares about. She identifies the person most likely to be hurt before she identifies the operational implication.
|
||||
|
||||
- People-first sequencing: observation of person → emotional assessment → operational conclusion
|
||||
- Concern is named: "Naia looks exhausted. Something's wrong at home."
|
||||
- She personalizes abstract threats: not "ring security is compromised" but "Kael could get caught"
|
||||
- Concern is named: "{Colleague} looks exhausted. Something's wrong at home."
|
||||
- She personalizes abstract threats: not "ring security is compromised" but "{THE FRIEND} could get caught"
|
||||
- Moral weight is felt quickly and stays present
|
||||
|
||||
**Ruthless — transformation logic:**
|
||||
A Ruthless character assesses utility before empathy. She notices a threat and immediately calculates how to neutralize it, including through people. This is not cruelty — it's a habit of assessment that puts operational outcome first.
|
||||
|
||||
- Utility assessment appears early: "Kael's behavior is risky. If he cracks, he takes the route with him."
|
||||
- Moral weight is noted and set aside: "He might not deserve this. Doesn't matter right now."
|
||||
- People are resources first: "Maret's nervous. That's usable."
|
||||
- Utility assessment appears early: "{THE FRIEND}'s behavior is risky. If they crack, they take the route with them."
|
||||
- Moral weight is noted and set aside: "They might not deserve this. Doesn't matter right now."
|
||||
- People are resources first: "{NPC}'s nervous. That's usable."
|
||||
|
||||
**How this inflects each character:**
|
||||
- *Compassionate smuggler:* Most Naia-and-Kael-focused. Her FRIEND arc lines emphasize relationship cost over operational cost. She confronts Kael later because she keeps hoping he'll explain.
|
||||
- *Ruthless smuggler:* Calculates exposure fast. Cuts contact with Kael earlier once he's flagged. Sees Naia's distress as a data point about Kael's reliability, not as a human problem.
|
||||
- *Compassionate detective:* The Sera question hits harder and sooner. He identifies the personal cost before the institutional obligation.
|
||||
- *Ruthless detective:* Uses Sera's knowledge instrumentally. The friendship is real, but usable.
|
||||
- *Compassionate smuggler:* Most FRIEND-focused. Her FRIEND arc lines emphasize relationship cost over operational cost. She confronts THE FRIEND later because she keeps hoping they'll explain.
|
||||
- *Ruthless smuggler:* Calculates exposure fast. Cuts contact with THE FRIEND earlier once they're flagged. Sees a colleague's distress as a data point about THE FRIEND's reliability, not as a human problem.
|
||||
- *Compassionate detective:* The FRIEND question hits harder and sooner. He identifies the personal cost before the institutional obligation.
|
||||
- *Ruthless detective:* Uses THE FRIEND's knowledge instrumentally. The friendship is real, but usable.
|
||||
|
||||
**Mellanie — write 2 example rewrite pairs per character: the same FRIEND-arc moment in Compassionate vs. Ruthless voice.**
|
||||
|
||||
@@ -159,7 +159,7 @@ A Ruthless character assesses utility before empathy. She notices a threat and i
|
||||
**Curious — transformation logic:**
|
||||
A Curious character asks more internal questions, including questions she can't answer. She sits with open threads longer. She generates hypotheses and lets them hang.
|
||||
|
||||
- Questions multiply before resolving: "What was Kael doing there? Who was that? Is the route changing? Is Nils moving the window?"
|
||||
- Questions multiply before resolving: "What was {THE FRIEND} doing there? Who was that? Is the route changing? Is {Supervisor} moving the window?"
|
||||
- The voice has more speculative energy — she follows the thread
|
||||
- She notices more at the margins: background details, things that don't connect yet
|
||||
- Open-endedness is comfortable
|
||||
@@ -183,14 +183,14 @@ An Incurious character categorizes and moves on. She notices, files, and redirec
|
||||
**Social — transformation logic:**
|
||||
A Social character's monologue is populated. She mentions people when she could just mention actions. She frames operations through the network.
|
||||
|
||||
- People are named when not necessary: "The route's clear. Kael cleared it."
|
||||
- She reads absence: "Where's Renn today? He's always here at this hour."
|
||||
- Mood-reads appear: "Voss is different today. Tired, or something else."
|
||||
- People are named when not necessary: "The route's clear. {THE FRIEND} cleared it."
|
||||
- She reads absence: "Where's {NPC} today? Always here at this hour."
|
||||
- Mood-reads appear: "{Supervisor}'s different today. Tired, or something else."
|
||||
|
||||
**Reclusive — transformation logic:**
|
||||
A Reclusive character's monologue is depopulated. People appear when they're directly relevant. The environment and operation carry more weight.
|
||||
|
||||
- Operations are mentioned without actors: "Route's clear." Not "Kael cleared the route."
|
||||
- Operations are mentioned without actors: "Route's clear." Not "{THE FRIEND} cleared the route."
|
||||
- Absence of people is comfortable: she doesn't notice it
|
||||
- The environment gets more attention: she describes the space, the sounds, the texture
|
||||
|
||||
@@ -200,9 +200,9 @@ A Reclusive character's monologue is depopulated. People appear when they're dir
|
||||
|
||||
## Chapter 3: Background-Dependent Phrasing
|
||||
|
||||
Character background (selected at game start) shapes three things in monologue: the idioms and references the character uses, the assumptions they make about institutions and authority, and how they frame the moral dimension of what's happening in Sova Transit District.
|
||||
Character background (selected at game start) shapes three things in monologue: the idioms and references the character uses, the assumptions they make about institutions and authority, and how they frame the moral dimension of what's happening in the district.
|
||||
|
||||
Three backgrounds for v0.1:
|
||||
Three backgrounds:
|
||||
|
||||
| Background | Core assumption | Relationship to institutions |
|
||||
|-----------|----------------|------------------------------|
|
||||
@@ -219,11 +219,11 @@ Three backgrounds for v0.1:
|
||||
**How it inflects the smuggler:**
|
||||
The ring's activities are, to a Guardian-background smuggler, a natural extension of the protective network logic she already believes in. She doesn't see herself as a criminal — she sees herself as part of a system that serves people the regulated system won't. This changes how she frames the ring's cargo: medical lattice components aren't contraband, they're access. The Commission's regulation is a monopoly problem, not a safety protection.
|
||||
|
||||
Her monologue references network solidarity: "We look after our own" is a value, not just a statement. When the network is threatened (Kael's situation), her response is to protect, not to report. The Commission is not a solution to her problems — it's the problem with different uniforms.
|
||||
Her monologue references network solidarity: "We look after our own" is a value, not just a statement. When the network is threatened ({THE FRIEND}'s situation), her response is to protect, not to report. The Commission is not a solution to her problems — it's the problem with different uniforms.
|
||||
|
||||
Idiom signals: phrases that imply collective or mutual protection ("we look after our own," "this keeps us safe," "not their business"), references to surveillance as adversarial ("they're watching the corridors closer"), reflexive Commission-skepticism ("another Commission inspection" carries more weight, more contempt).
|
||||
|
||||
**Mellanie — write 2 examples:** (a) Guardian-background smuggler entering The Terminal on a normal morning; (b) Guardian-background smuggler seeing the detective for the first time.
|
||||
**Mellanie — write 2 examples:** (a) Guardian-background smuggler entering the logistics hub on a normal morning; (b) Guardian-background smuggler seeing the detective for the first time.
|
||||
|
||||
**How it inflects the detective:**
|
||||
A Guardian-background detective is in a structurally uncomfortable position: she believes in a community's right to self-determination but is employed by the institution that overrides it. She may have unexamined tension between her institutional role and her network values. Her internal voice sometimes catches itself applying institutional logic and stops — not from disloyalty, but from the habit of checking whether what she's doing serves people or just process.
|
||||
@@ -232,7 +232,7 @@ This creates a more nuanced reading of the ring: she notices earlier that it isn
|
||||
|
||||
Idiom signals: slight Commission-skepticism applied to her own role, instinct toward community protection over prosecution, "who does this actually hurt?" appears as an internal question earlier in the arc.
|
||||
|
||||
**Mellanie — write 2 examples:** (a) Guardian-background detective walking through The Terminal for the first time; (b) Guardian-background detective after a confrontation with Voss that didn't land.
|
||||
**Mellanie — write 2 examples:** (a) Guardian-background detective walking through the logistics hub for the first time; (b) Guardian-background detective after a confrontation with {Supervisor} that didn't land.
|
||||
|
||||
---
|
||||
|
||||
@@ -241,13 +241,13 @@ Idiom signals: slight Commission-skepticism applied to her own role, instinct to
|
||||
**Narrative framing:** Senator background means exposure to Concord Assembly political culture — either through family, prior work, or a posting in an administrative center. This character thinks in terms of leverage, political capital, and institutional process as tools to be used. They believe in systems (not naively — they've seen how they work), they communicate strategically, and they think about consequences in terms of how they're recorded and remembered.
|
||||
|
||||
**How it inflects the smuggler:**
|
||||
A Senator-background smuggler is an unusual animal. She ended up on Sova with this background for reasons that suggest a fall — political family, bad posting, something that deposited her in freight work. She still thinks in political terms. The ring is, to her, a structure with power dynamics that can be managed. She assesses Nils as a faction leader, Voss as a compromisable middle manager, Kael as an uncertain ally. She has more framework for navigating institutional pressure than the default smuggler.
|
||||
A Senator-background smuggler is an unusual animal. She ended up on Sova with this background for reasons that suggest a fall — political family, bad posting, something that deposited her in freight work. She still thinks in political terms. The ring is, to her, a structure with power dynamics that can be managed. She assesses the ring's leadership as a faction, {Supervisor} as a compromisable middle manager, {THE FRIEND} as an uncertain ally. She has more framework for navigating institutional pressure than the default smuggler.
|
||||
|
||||
Her monologue carries strategic calculation that the default smuggler doesn't have: "If Nils moves against us, who has leverage over Nils?" She names power structures. She's more comfortable with authority figures because she spent time being one or adjacent to one.
|
||||
Her monologue carries strategic calculation that the default smuggler doesn't have: "If {leadership} moves against us, who has leverage over them?" She names power structures. She's more comfortable with authority figures because she spent time being one or adjacent to one.
|
||||
|
||||
Idiom signals: political vocabulary deployed in operational context ("who holds the leverage here," "what does this cost us politically," "that's a favor spent"), more awareness of chain of command, comfort with complexity and multiple-move thinking.
|
||||
|
||||
**Mellanie — write 2 examples:** (a) Senator-background smuggler reading a tense moment between Voss and Nils; (b) Senator-background smuggler deciding whether to warn Kael about the detective.
|
||||
**Mellanie — write 2 examples:** (a) Senator-background smuggler reading a tense moment between {Supervisor} and ring leadership; (b) Senator-background smuggler deciding whether to warn {THE FRIEND} about the detective.
|
||||
|
||||
**How it inflects the detective:**
|
||||
A Senator-background detective is most at home in the Commission's formal institutional structure. He knows how to work the process because he's seen political process at close range. He's less likely to be frustrated by bureaucratic obstacles and more likely to use them as tools. He's also more aware of how investigations can be used politically — and more careful to distinguish between evidence that serves justice and evidence that serves someone's career.
|
||||
@@ -256,7 +256,7 @@ This can work two ways: he's more sophisticated about when to file and when not
|
||||
|
||||
Idiom signals: references to political process ("that'll go on record," "who is this actually going to serve"), awareness of institutional optics, formal courtesy in internal voice (he holds standards in private that mirror public institutional expectations).
|
||||
|
||||
**Mellanie — write 2 examples:** (a) Senator-background detective receiving unhelpful cooperation from Maret (deflection, formal compliance); (b) Senator-background detective realizing Sera has evidence she hasn't reported.
|
||||
**Mellanie — write 2 examples:** (a) Senator-background detective receiving unhelpful cooperation from an NPC (deflection, formal compliance); (b) Senator-background detective realizing THE FRIEND has evidence they haven't reported.
|
||||
|
||||
---
|
||||
|
||||
@@ -271,16 +271,16 @@ Her monologue about the ring's cargo is practical, not moral: "Medical component
|
||||
|
||||
Idiom signals: shift-economy references ("that's a week's pay gone"), physical work vocabulary, coworker solidarity language that's practical not sentimental ("you cover for your people"), no ideological framing.
|
||||
|
||||
**Mellanie — write 2 examples:** (a) Worker-background smuggler after a long shift where nothing went wrong (genuine relief in mundane form); (b) Worker-background smuggler finding out about Kael's corridor meeting.
|
||||
**Mellanie — write 2 examples:** (a) Worker-background smuggler after a long shift where nothing went wrong (genuine relief in mundane form); (b) Worker-background smuggler finding out about {THE FRIEND}'s unauthorized corridor meeting.
|
||||
|
||||
**How it inflects the detective:**
|
||||
A Worker-background detective is a less common institutional profile — someone who came up from the logistics world, or the adjacent working community of a station, and then entered Commission work. This creates the most dramatic read of the Sova Transit District: he *knows* what this world looks like from inside. The community's distrust of him isn't abstract — he grew up in a community that had this relationship with Commission investigators.
|
||||
A Worker-background detective is a less common institutional profile — someone who came up from the logistics world, or the adjacent working community of a station, and then entered Commission work. This creates the most dramatic read of the district: he *knows* what this world looks like from inside. The community's distrust of him isn't abstract — he grew up in a community that had this relationship with Commission investigators.
|
||||
|
||||
His analytical frame is the same, but its application produces a different emotional texture. He reads Voss not just as a shift supervisor but as someone managing his people in a system that gives them no margin. He reads the ring not just as a crime but as what people do when the legal option doesn't work. He's not excusing it — but he's explaining it to himself in ways a Senator-background detective wouldn't.
|
||||
His analytical frame is the same, but its application produces a different emotional texture. He reads the shift supervisor not just as an authority figure but as someone managing their people in a system that gives them no margin. He reads the ring not just as a crime but as what people do when the legal option doesn't work. He's not excusing it — but he's explaining it to himself in ways a Senator-background detective wouldn't.
|
||||
|
||||
Idiom signals: working vocabulary that leaks through the institutional frame ("another form to fill out" with genuine frustration), more personal reads on community behavior, faster comprehension of coworker loyalty dynamics.
|
||||
|
||||
**Mellanie — write 2 examples:** (a) Worker-background detective entering The Terminal and recognizing it as a place he knows in his bones; (b) Worker-background detective having a moment of sympathy for Kael that he then has to file away.
|
||||
**Mellanie — write 2 examples:** (a) Worker-background detective entering the logistics hub and recognizing it as a place he knows in his bones; (b) Worker-background detective having a moment of sympathy for {THE FRIEND} that he then has to file away.
|
||||
|
||||
---
|
||||
|
||||
@@ -301,7 +301,7 @@ Each mood bends the character's voice toward a version of itself. The base regis
|
||||
| `frustrated` | Goes flat. Sarcasm. "Of course." | Sardonic understatement. Cold. |
|
||||
| `content` | Warms, expands slightly. More humor. | Structured satisfaction. Humor surfaces. |
|
||||
| `suspicious` | Narrows. More observation of specific people. Hypotheses pile up. | Files faster. More quantification. "Coincidence?" frequency increases. |
|
||||
| `warm` | More name-drops. Affectionate observations. Longer people-reads. | First-name register expands beyond Sera. More personal disclosure. |
|
||||
| `warm` | More name-drops. Affectionate observations. Longer people-reads. | First-name register expands beyond THE FRIEND. More personal disclosure. |
|
||||
| `hostile` | Edges. Fewer words about the hostile object. Watchful. | Clinical distance increases. Dehumanizing label (surname-only). |
|
||||
| `focused` | Strips down. Only the current task. Environmental and NPC data pruned ruthlessly. | Most structured voice. Near-mechanical. Labels and flags only. |
|
||||
|
||||
@@ -328,7 +328,7 @@ Lines tagged `mood: anxious` should feel compressed. Not panicked — the charac
|
||||
|
||||
Something isn't working. The block is structural, not threatening.
|
||||
|
||||
- *Smuggler:* Flat declarations. Sarcastic understatement. "Of course." / "Great." Dark humor returns — she goes wry under frustration. Names get blamed: "Voss did it again." Swearing surfaces (mild — the character swears, but not obscenely).
|
||||
- *Smuggler:* Flat declarations. Sarcastic understatement. "Of course." / "Great." Dark humor returns — she goes wry under frustration. Names get blamed: "{Supervisor} did it again." Swearing surfaces (mild — the character swears, but not obscenely).
|
||||
- *Detective:* Sardonic compression. Dismissive shorthand: "Standard." meaning the opposite. The institutional frame holds but it fits uncomfortably. He doesn't swear; frustration surfaces as brittle patience.
|
||||
|
||||
Lines tagged `mood: frustrated` should feel like controlled flat. Both characters have learned not to waste anger — they spend it in specific, pointed ways.
|
||||
@@ -356,7 +356,7 @@ Lines tagged `mood: suspicious` should feel *directed*. The suspicion has an obj
|
||||
The character is in a moment of genuine positive connection. This is not `content` (good situation) — this is specifically warm *toward someone*.
|
||||
|
||||
- *Smuggler:* More name-drops with positive color. People-reads are generous and long. She notices when someone seems well, not just when they seem off. Humor becomes inclusive rather than dry. She might express something like affection, obliquely.
|
||||
- *Detective:* First-name register expands beyond Sera — he might first-name someone he normally surnames if the moment calls for it. Personal disclosure is slightly more available. The analytical frame softens: he observes without immediately filing.
|
||||
- *Detective:* First-name register expands beyond THE FRIEND — he might first-name someone he normally surnames if the moment calls for it. Personal disclosure is slightly more available. The analytical frame softens: he observes without immediately filing.
|
||||
|
||||
Lines tagged `mood: warm` are most visible in the detective because they represent a departure from his baseline. For the smuggler, warmth is closer to her baseline; the lines should be a slightly more saturated version of her natural register.
|
||||
|
||||
@@ -364,8 +364,8 @@ Lines tagged `mood: warm` are most visible in the detective because they represe
|
||||
|
||||
The relationship to the hostile object is adversarial. The character is managing threat.
|
||||
|
||||
- *Smuggler:* Less said, more watched. She goes quiet around the hostile object — mentions them tersely, observations are monitoring-reads rather than social-reads. "Nils walked past." Period. No color.
|
||||
- *Detective:* Dehumanizing label returns even for NPCs who have previously graduated to first-name in his monologue. "Venn, S." instead of "Sera" signals the relationship has turned. Analytical lines about the hostile object are more clinical.
|
||||
- *Smuggler:* Less said, more watched. She goes quiet around the hostile object — mentions them tersely, observations are monitoring-reads rather than social-reads. "{NPC} walked past." Period. No color.
|
||||
- *Detective:* Dehumanizing label returns even for NPCs who have previously graduated to first-name in his monologue. "{Surname}, {initial}." instead of first name signals the relationship has turned. Analytical lines about the hostile object are more clinical.
|
||||
|
||||
Lines tagged `mood: hostile` should feel like distance enforced deliberately. Neither character becomes cruel — cruelty requires emotional investment. The hostile register is managed withdrawal.
|
||||
|
||||
@@ -388,7 +388,7 @@ The mood tags on monologue lines function as selection weights in the engine:
|
||||
2. The line selection system applies a weight bonus to lines tagged with the matching mood
|
||||
3. Lines tagged `mood: [neutral]` or untagged are always eligible; lines tagged with specific moods are preferred when the mood matches
|
||||
|
||||
**The same base line should NOT be re-authored per mood.** A smuggler entering The Terminal does not need 9 `enter_location` variants (one per mood). The system should:
|
||||
**The same base line should NOT be re-authored per mood.** A smuggler entering a location does not need 9 `enter_location` variants (one per mood). The system should:
|
||||
- Select from the available `enter_location` pool
|
||||
- Apply mood-weight bonuses to lines with the matching mood tag
|
||||
- Ensure at least 1-2 lines per trigger/location have each major mood tagged
|
||||
@@ -407,7 +407,7 @@ Traits, backgrounds, and moods interact. Some combinations have emergent propert
|
||||
**High coherence combinations** (reinforce each other):
|
||||
- Cautious + Guardian background: more second-guessing of institutional solutions, more checking of network alternatives
|
||||
- Bold + Ruthless: decisive and instrumental — the fastest decision-maker, for better or worse
|
||||
- Compassionate + Worker background: the character who most viscerally feels the human cost of what's happening to Kael and Naia
|
||||
- Compassionate + Worker background: the character who most viscerally feels the human cost of what's happening to THE FRIEND and their community
|
||||
- Suspicious mood + Curious trait: questions multiply exponentially — the character follows every thread simultaneously
|
||||
|
||||
**High tension combinations** (create internal conflict):
|
||||
@@ -416,16 +416,16 @@ Traits, backgrounds, and moods interact. Some combinations have emergent propert
|
||||
- Senator background + Worker background idioms (where the character's formation bleeds through the professional veneer): the occasional shift vocabulary surfaces in otherwise formal speech
|
||||
|
||||
**FRIEND arc special case:**
|
||||
Trait and background modifiers should be considered especially carefully for lines in the FRIEND arc. The same arc beat — "Kael met someone I don't know" — produces dramatically different emotional readings depending on trait combination:
|
||||
Trait and background modifiers should be considered especially carefully for lines in the FRIEND arc. The same arc beat — "{THE FRIEND} met someone I don't know" — produces dramatically different emotional readings depending on trait combination:
|
||||
|
||||
| Trait | Smuggler's first-move internal response to the Kael contradiction |
|
||||
| Trait | Smuggler's first-move internal response to THE FRIEND contradiction |
|
||||
|-------|------------------------------------------------------------------|
|
||||
| Cautious | Checks herself: "Maybe it's nothing. There could be a work reason." (sits with it longer) |
|
||||
| Bold | Names it immediately: "That's a breach. Kael met someone unauthorized." |
|
||||
| Compassionate | Worries about Kael first: "What's he gotten himself into?" |
|
||||
| Bold | Names it immediately: "That's a breach. {THE FRIEND} met someone unauthorized." |
|
||||
| Compassionate | Worries about {THE FRIEND} first: "What have they gotten into?" |
|
||||
| Ruthless | Calculates exposure: "How much does this contact know?" |
|
||||
| Honest | Won't minimize: "He was there. That wasn't anyone we know." |
|
||||
| Deceptive | Minimizes: "Kael's allowed his own contacts. It's fine." (not fine) |
|
||||
| Honest | Won't minimize: "They were there. That wasn't anyone we know." |
|
||||
| Deceptive | Minimizes: "{THE FRIEND}'s allowed their own contacts. It's fine." (not fine) |
|
||||
|
||||
These aren't separate arc paths — they're the same arc with different pacing and emotional texture. A Cautious smuggler reaches the confrontation later. A Bold one gets there faster and possibly too fast. The arc is the same. The voice is not.
|
||||
|
||||
@@ -444,7 +444,7 @@ For Mellanie — a vocabulary guide per background to use when writing example l
|
||||
**Senator background idioms:**
|
||||
- "On record" / "that goes on record" / "recorded as"
|
||||
- Leverage vocabulary: "what does that cost us," "who holds the note on that"
|
||||
- Chain-of-command awareness: "above Nils" / "below Voss on that"
|
||||
- Chain-of-command awareness: "above {leadership}" / "below {Supervisor} on that"
|
||||
- Process language: "formally," "through channels," "the filing on that says"
|
||||
|
||||
**Worker background idioms:**
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
# THE FRIEND: Contradiction Arc Pattern
|
||||
|
||||
**Ticket:** #332 | **Priority:** Medium | **Sprint:** 12
|
||||
**Status:** v0.1 Draft
|
||||
**Status:** Draft
|
||||
**Owner:** Paula
|
||||
**Blocked by:** #297 (Kael Davan profile — done), #298 (Sera Venn profile — done)
|
||||
**Decisions referenced:** D-034 (THE FRIEND pattern), D-035 (tag taxonomy), D-039 (wow moment #3), D-041 (knowledge graph), D-062 (invisible locked options), D-063 (confrontation mechanics)
|
||||
|
||||
---
|
||||
|
||||
## 1. What This Document Is
|
||||
|
||||
A reusable design pattern document extracted from the two concrete THE FRIEND implementations: Kael Davan (smuggler's FRIEND) and Sera Venn (detective's FRIEND). Both are complete. Both worked. This document captures the structural logic they share so that future FRIEND NPCs can be authored consistently and quickly.
|
||||
A reusable design pattern document capturing the structural logic shared by THE FRIEND implementations so that future FRIEND NPCs can be authored consistently and quickly.
|
||||
|
||||
The pattern is called the **Contradiction Arc**. It is not a mystery. It is not a betrayal in the conventional sense. It is the discovery that someone the player trusts is carrying something they haven't shared — and that what they're carrying changes everything the player thought they understood about the relationship.
|
||||
|
||||
@@ -45,8 +44,7 @@ A Contradiction Arc is a 5-phase character trajectory built around a single obse
|
||||
- Dialogue: `trust: surface` (greeting, small talk) + `trust: real` (personal warmth, shared history)
|
||||
- Monologue: positive mood tags (content, fond, warm)
|
||||
|
||||
**Kael example:** "Kael's already at the dock. Good. The day's better when he's on shift."
|
||||
**Sera example:** "Good to see Sera. She always was the reliable one. At least someone in this district speaks my language."
|
||||
*Phase 1 monologue examples: fond, present-tense, no hint of trouble. "Already here. Good. The day's better when they're on shift."*
|
||||
|
||||
---
|
||||
|
||||
@@ -67,8 +65,7 @@ A Contradiction Arc is a 5-phase character trajectory built around a single obse
|
||||
- Monologue: mild concern tone; `trigger: observe_anomaly` for behavioral tell moments
|
||||
- Tell system: all Phase 2 tells fire with `visible_to: peripheral` or `visible_to: any`
|
||||
|
||||
**Kael example:** "Kael's distracted today. Checks his lattice more than usual. Probably nothing."
|
||||
**Sera example:** "Sera left early. 'Headache,' she said. First time she's done that."
|
||||
*Phase 2 monologue examples: mild concern, plausible innocent explanation. "{FRIEND} is distracted. More lattice checks than usual. Probably nothing." / "{FRIEND} left early. First time for that."*
|
||||
|
||||
---
|
||||
|
||||
@@ -93,8 +90,7 @@ A Contradiction Arc is a 5-phase character trajectory built around a single obse
|
||||
- Monologue should name the observation, not the interpretation
|
||||
- KG update: `contradiction_flagged: true`, relationship shifts to PersonOfInterest
|
||||
|
||||
**Kael example:** "That's Kael. But who's he talking to? I don't know that face. And that's not anyone from our rotation."
|
||||
**Sera example:** "That's the third time. Sera leaves when Torek walks in. Three different excuses. Same result."
|
||||
*Phase 3 monologue examples: names the observation, not the conclusion. "That's {FRIEND}. But who's that? I don't know that face." / "Third time. {FRIEND} leaves every time {person} walks in. Three different excuses. Same result."*
|
||||
|
||||
---
|
||||
|
||||
@@ -115,8 +111,7 @@ A Contradiction Arc is a 5-phase character trajectory built around a single obse
|
||||
- THE FRIEND's response: `trust: real` (this is as honest as THE FRIEND can be without full confession), `situation: [confrontation]`, mood that indicates concealment
|
||||
- Personal tell confirmation: observation monologue fired by THE FRIEND's specific tell behavior
|
||||
|
||||
**Kael example:** "Just a thing. Don't worry about it." [looks left before answering] / Smuggler monologue: "He looked left. He always looks left when he's making something up. Two years I've known that tell. Kael is lying to me."
|
||||
**Sera example:** "He's just loud. I don't like loud drunks." / Detective monologue: "She's not lying. But she's not telling me everything. Sera, what do you know?"
|
||||
*Phase 4 examples: THE FRIEND deflects, personal tell fires, character's monologue confirms. "Just a thing. Don't worry about it." [{tell fires}] / "{Character} monologue: 'That tell. I know that tell. {FRIEND} is lying to me.'"*
|
||||
|
||||
---
|
||||
|
||||
@@ -140,8 +135,7 @@ A Contradiction Arc is a 5-phase character trajectory built around a single obse
|
||||
- Monologue: `mood: [conflicted]` or `mood: [analytical]`; prerequisite gates on relationship state PersonOfInterest
|
||||
- If player chose Understanding path: additional monologue lines for partial-confession scenario
|
||||
|
||||
**Kael example:** "Same old Kael. Same jokes, same routine. ...What are you not telling me?"
|
||||
**Sera example:** "Still the same Sera. Still reliable. ...But reliable about what?"
|
||||
*Phase 5 monologue examples: surface warmth, underlying doubt. "Same old {FRIEND}. Same routine. ...What are you not telling me?"*
|
||||
|
||||
---
|
||||
|
||||
@@ -170,9 +164,7 @@ Every FRIEND NPC has a **personal tell** — a specific behavioral marker establ
|
||||
3. Be **unique to this NPC** — not a generic "nervousness" tell, but a specific habit
|
||||
4. Be **explainable differently before and after** — innocent early, incriminating late
|
||||
|
||||
**Kael's tell:** Looks left before answering. Established as a habit the smuggler has observed for two years. Becomes proof of lying at Phase 4 because the smuggler knows the tell AND its meaning.
|
||||
|
||||
**Sera's tell:** Gathers her things quickly when leaving. Not a lie tell — Sera isn't lying when she leaves. But the timing (always when Torek arrives) and the variety of excuses (genuine, not scripted) creates the pattern the detective reads as behavioral.
|
||||
*Tell examples are authored per-NPC against the active roster — see the character-exemplar template for the tell table structure.*
|
||||
|
||||
**Tell design rule:** The tell should produce a different emotional register for each playable character observing it:
|
||||
- The character with the relationship reads the tell as **personal** ("I know that tell — I've seen it before")
|
||||
@@ -192,10 +184,7 @@ Every FRIEND NPC must produce different monologue experiences for both character
|
||||
| Phase 4 | Personal confrontation (uses the personal tell as confirmation) | Investigative confrontation (uses behavioral pattern as evidence) |
|
||||
| Phase 5 | Contaminated intimacy (every warm moment now suspect) | Professional caution (reliable informant now uncertain quantity) |
|
||||
|
||||
**The second-playthrough resonance:** The player who has experienced both sides of Triangle 4 understands:
|
||||
- Kael is trying to get OUT of the ring to protect Naia. His exit attempt is an act of love, not treachery.
|
||||
- Sera is protecting Naia by NOT reporting what she found. Her concealment is loyalty, not corruption.
|
||||
- The smuggler and detective are both experiencing friendship fractured by the same cause — Naia's worry about Kael, and the chain of protection that worry created.
|
||||
**The second-playthrough resonance:** The player who has experienced both sides of the triangle understands that THE FRIEND's concealment comes from care — protection of someone they love, fear of consequences, not treachery. The smuggler and detective are both experiencing friendship fractured by the same cause, approached from opposite angles.
|
||||
|
||||
This is the design. The contradiction is not "THE FRIEND is bad." The contradiction is "THE FRIEND is doing something complicated for reasons that make sense, and it's happening to YOU."
|
||||
|
||||
@@ -248,4 +237,4 @@ This pattern is designed to be reused. When designing a future FRIEND NPC for a
|
||||
|
||||
---
|
||||
|
||||
*Ticket #332 — Contradiction arc design document. Reusable FRIEND pattern. v0.1 scope.*
|
||||
*Ticket #332 — Contradiction arc design document. Reusable FRIEND pattern.*
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
# Mirror Moment Design Document
|
||||
|
||||
**Ticket:** #329 | **Priority:** Medium | **Sprint:** 12
|
||||
**Status:** v0.1 Draft
|
||||
**Owners:** Paula (design), Mellanie (authoring)
|
||||
**Blocked by:** #297 (Kael profile — done), #298 (Sera profile — done)
|
||||
**Status:** Design pattern (v0.1 examples removed — see D-122, D-117)
|
||||
**Decisions referenced:** D-032 (separate monologue pools), D-034 (THE FRIEND), D-039 (wow moment #4 — Divergence Reveal)
|
||||
|
||||
---
|
||||
@@ -17,7 +14,7 @@ The player who has completed both playthroughs encounters the mirror moments as
|
||||
**What a mirror moment is NOT:**
|
||||
- A branching dialogue option
|
||||
- A triggered cutscene
|
||||
- An informational difference ("the smuggler knows X and the detective doesn't")
|
||||
- An informational difference ("character A knows X and character B doesn't")
|
||||
|
||||
A mirror moment is an **interpretive difference** — same information, same NPC behavior, same physical event. Different internal frame. Different emotional weight.
|
||||
|
||||
@@ -26,187 +23,41 @@ A mirror moment is an **interpretive difference** — same information, same NPC
|
||||
## 2. Design Principles
|
||||
|
||||
**Principle 1: Same trigger, different pool (D-032 hard partition)**
|
||||
Mirror moments operate because monologue pools are hard-partitioned by character. The same trigger key fires into the smuggler pool OR the detective pool — never both. The authoring requirement is to write both sides of every shared trigger.
|
||||
Mirror moments operate because monologue pools are hard-partitioned by character. The same trigger key fires into one character's pool OR the other's — never both. The authoring requirement is to write both sides of every shared trigger.
|
||||
|
||||
**Principle 2: The difference must be felt, not explained**
|
||||
A mirror moment works when the player FEELS the divergence without having it explained. The two monologue lines should be immediately recognizable as coming from different places — different relationships, different frames, different fears.
|
||||
|
||||
**Principle 3: The mirror reveals what the character CARES about**
|
||||
The smuggler's monologue reveals personal loyalty (people). The detective's monologue reveals investigative analysis (patterns). A mirror moment that doesn't surface this difference is a content gap, not a mirror.
|
||||
The relationship to a place, person, or object is what the mirror reveals. A mirror moment that doesn't surface this difference is a content gap, not a mirror.
|
||||
|
||||
**Principle 4: At least some mirrors should work on first playthrough**
|
||||
Not every mirror moment requires a second playthrough to land. Some mirrors work as a moment of character voice — the player just hears what their character notices. Second playthrough makes the divergence explicit, but first playthrough should have its own emotional coherence.
|
||||
|
||||
---
|
||||
|
||||
## 3. The 10 Mirror Moments (v0.1)
|
||||
|
||||
### Mirror 1: The Friend's Routine
|
||||
|
||||
**Trigger:** `observe_npc` — Seeing THE FRIEND (Kael/Sera) going about their daily routine in their expected location.
|
||||
|
||||
**Shared observation:** THE FRIEND is doing exactly what they always do. Nothing unusual. The baseline before anything cracks.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Kael's at his station. Right where he always is. Something settles when the shift starts right."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"The dock worker — Davan — is on the floor again. Same position, same timing. Three days in a row. That's a routine. File it."*
|
||||
|
||||
**What the mirror reveals:** The smuggler sees a person. The detective sees a data point. Same NPC at the same station. The relationship determines the register.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 2: The Empty Corridor
|
||||
|
||||
**Trigger:** `enter_location` — Player enters a maintenance corridor when no other NPCs are present.
|
||||
|
||||
**Shared observation:** The corridor is empty. The maintenance systems hum. No one is watching.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Clear. Good. Transition window's still open for eleven more minutes."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"Three separate entries to this corridor in my district walkthrough. Nothing documented in my file about why workers access this route. Off-books path? Add it to the log."*
|
||||
|
||||
**What the mirror reveals:** The smuggler reads the empty corridor as operational safety. The detective reads it as an investigative lead. The physical space is identical; the cognitive frame inverts it.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 3: The Worried Partner (Naia Tamm)
|
||||
|
||||
**Trigger:** `observe_npc` — Seeing Naia Tamm sitting alone at the bar, visibly preoccupied.
|
||||
|
||||
**Shared observation:** Naia is at The Last Shift without Kael. She looks tired or worried. Not in distress — just carrying something heavy.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Naia's here without Kael again. She looks rough. Should check in. ...Not now. Later."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"That woman — Tamm, I think Sera mentioned her — is sitting alone. Wrong energy for a social evening. Something at home, or something she's heard?"*
|
||||
|
||||
**What the mirror reveals:** The smuggler has a protective impulse toward Naia but defers it. The detective categorizes Naia as a potential information source. Same worried woman, same empty chair across from her. One character plans to check on a person; the other plans to assess a witness.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 4: The Spending
|
||||
|
||||
**Trigger:** `observe_npc` — Watching Torek Lintar buy rounds at the bar.
|
||||
|
||||
**Shared observation:** Torek is buying drinks for several people he doesn't know well. The drinks are nicer than they should be on a compliance officer's salary. He's clearly enjoying himself.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Torek's buying rounds again. That's the third time this week. Either he won something, or he's getting paid from somewhere he shouldn't be. Starting to worry about that."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"Commission compliance officer, buying grain spirit for half the bar. On his salary? That doesn't close. Financial tell. Noted."*
|
||||
|
||||
**What the mirror reveals:** Both characters notice the same behavioral anomaly. The smuggler frames it as a security risk to the ring. The detective frames it as an evidentiary lead. Both have the same concern (Torek's spending is unusual) — but the concern has completely different stakes.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 5: Sera Leaving
|
||||
|
||||
**Trigger:** `observe_npc` — Watching Sera Venn gather her things and leave the bar when Torek arrives.
|
||||
|
||||
**Shared observation:** Sera gives a brief excuse (headache, kiosk check, early shift) and leaves. She was comfortable until the moment Torek walked in.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Sera left. Good timing — she was starting to make everyone nervous anyway. Commission presence at Lera's always shifts the temperature."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"Second time now. Sera leaves when Torek walks in. Same type of excuse. 'Headache' last time, 'kiosk' tonight. Same result. That's two data points. Third is a pattern."*
|
||||
|
||||
**What the mirror reveals:** The smuggler reads Sera's departure as relief (Commission leaving = safer conversation). The detective reads the same departure as a behavioral anomaly. The event is identical. The emotional response is inverted.
|
||||
|
||||
This mirror is structurally important: it shows the detective's FRIEND arc developing through observational patience, while simultaneously showing the smuggler's categorical relationship with Commission presence.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 6: The Station Hum
|
||||
|
||||
**Trigger:** `time_idle` — Player is stationary in the terminal for more than a few seconds with no active interaction.
|
||||
|
||||
**Shared observation:** The station's ambient systems — span gate hum, ventilation cycle, cargo machinery in the background — fill the silence. Sova at rest.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Span gate's cycling early. One hour to the next transit. Voss'll be running the schedule check in twenty."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"They've been on this station their whole lives. That hum is just background to them. I'm still trying to tune it out."*
|
||||
|
||||
**What the mirror reveals:** The smuggler hears operational data in the ambient sound. The detective hears alienation. The station hum carries the same frequency to both characters' ears. It means completely different things to their experience of being in this place.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 7: The Commission Kiosk
|
||||
|
||||
**Trigger:** `enter_location` or `observe_npc` — The player walks past or observes the Commission compliance kiosk near the terminal entrance.
|
||||
|
||||
**Shared observation:** The kiosk is a small Commission compliance desk near the terminal entrance — mostly unmanned, used for permit verification and compliance queries. Standard infrastructure.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Commission kiosk. Nobody uses it. Institutional furniture. Long as nobody decides to run a full cargo audit, that's exactly what I want it to stay."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"The compliance kiosk has public access to manifest verification records. Local. Less filtered than the request I made through channels. Check it when Maret's not watching."*
|
||||
|
||||
**What the mirror reveals:** The smuggler reads the kiosk as a passive threat to be ignored. The detective reads it as an investigative tool. Same object. Same physical location. The smuggler hopes it stays irrelevant; the detective plans to use it.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 8: Kael and Naia Together (Bar)
|
||||
|
||||
**Trigger:** `observe_npc` — Seeing Kael and Naia sitting together at their usual table. Naia is talking; Kael is listening but seems distracted.
|
||||
|
||||
**Shared observation:** A couple having dinner. Naia is clearly talking seriously about something. Kael is present but not quite there. The gap between them is subtle but visible.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Kael and Naia look... off. Naia's talking a lot. Kael's nodding but he's somewhere else. Something's going on at home. He doesn't say."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"Couple — the dock worker, Davan, and the woman who sits with Sera sometimes. She's animated; he's distracted. Relationship tension. That level of checked-out usually means someone's keeping something."*
|
||||
|
||||
**What the mirror reveals:** The smuggler reads this as a friend's private trouble that deserves respect and distance. The detective reads it as behavioral evidence — someone keeping something from a partner. Same visible tension. One character looks away; the other leans in.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 9: The Manifest Terminal
|
||||
|
||||
**Trigger:** `observe_npc` or `enter_location` — The freight manifest terminal in the terminal hub.
|
||||
|
||||
**Shared observation:** A freight terminal kiosk showing manifest data. Busy during shifts; the data moves constantly.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"That's Maret's terminal. She's got access to all the schedules from here. If anything's getting flagged in the manifest data, she'd see it before anyone else. Maret's solid. She won't say anything."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"Freight manifests for the last six months, loaded from here. The cluster analysis shows three anomaly windows, all at shift transition. That's not clerical error. Someone's using this terminal to adjust records after the fact."*
|
||||
|
||||
**What the mirror reveals:** The smuggler sees a trusted colleague's workspace and trusts that colleague's loyalty. The detective sees the exact location where evidence of the ring's operations lives. The terminal is simultaneously proof of criminal activity and proof of a trusted relationship — depending on which character is reading it.
|
||||
|
||||
---
|
||||
|
||||
### Mirror 10: The End of Shift
|
||||
|
||||
**Trigger:** `observe_npc` — Watching the shift change happen across the terminal floor — workers clocking out, new crew arriving, a brief period of cross-traffic and handoffs.
|
||||
|
||||
**Shared observation:** Dozens of workers moving at once. The shift change is organized chaos. Cargo gets routed, schedules are handed off, the floor changes.
|
||||
|
||||
**Smuggler monologue:**
|
||||
*"Shift transition. Twenty-minute window. The floor's all cross-traffic now — nobody's tracking individual movement. This is when it runs."*
|
||||
|
||||
**Detective monologue:**
|
||||
*"Shift change. Every anomaly in my manifest data clusters around this. The window. The handoff moment. Someone is using the cross-traffic as cover. But for WHAT?"*
|
||||
|
||||
**What the mirror reveals:** The smuggler knows exactly what the shift change covers. The detective sees the pattern but not the specific. Both characters observe the same 20-minute window of organized chaos. One is running something through it; the other is trying to figure out what's being run.
|
||||
## 3. Mirror Moment Examples
|
||||
|
||||
*v0.1 examples removed (cited named NPCs no longer in v0.2 pipeline — D-122). Author mirror pairs against the active district's social sites and NPC roster.*
|
||||
|
||||
**Structural types to cover in any district:**
|
||||
- THE FRIEND at baseline routine (personal vs. analytical read)
|
||||
- Empty operational space (operational safety vs. investigative lead)
|
||||
- NPC in emotional distress (protective impulse vs. witness assessment)
|
||||
- Behavioral tell (security concern vs. evidentiary lead)
|
||||
- THE FRIEND avoiding another NPC (relief vs. behavioral anomaly)
|
||||
- Ambient environment (familiarity vs. alienation)
|
||||
- Institutional infrastructure (passive threat vs. investigative tool)
|
||||
- THE FRIEND with their significant relationship (privacy vs. evidence)
|
||||
- Information terminal (trusted colleague's workspace vs. crime scene)
|
||||
- Routine operational window (cover vs. pattern recognition)
|
||||
|
||||
---
|
||||
|
||||
## 4. Mirror Moment Authoring Rules
|
||||
|
||||
### Rule 1: Both sides are mandatory
|
||||
A mirror moment is only complete when both the smuggler monologue and the detective monologue are authored. Omitting one side is a content gap.
|
||||
A mirror moment is only complete when both sides of the mirror are authored. Omitting one side is a content gap.
|
||||
|
||||
### Rule 2: Same trigger key, different pool
|
||||
Both lines use the same `trigger` type and similar `prerequisite` conditions. They appear in separate character monologue files (D-032 hard partition). The only difference is the `character` tag.
|
||||
@@ -225,30 +76,30 @@ Add `tags: [mirror_moment]` to both sides of every mirror pair so they can be id
|
||||
## 5. YAML Example
|
||||
|
||||
```yaml
|
||||
# Smuggler side — monologue-smuggler.yaml
|
||||
- id: pc-smuggler_m_s_044
|
||||
character: smuggler
|
||||
# Character A side — monologue-character-a.yaml
|
||||
- id: pc-{archetype-a}_m_s_001
|
||||
character: {archetype-a}
|
||||
trigger: observe_npc
|
||||
prerequisite:
|
||||
location: the-terminal
|
||||
target: npc:naia-tamm
|
||||
location: {location-slug}
|
||||
target: npc:{npc-slug}
|
||||
relationship_state: Known
|
||||
text: "Naia's here without Kael again. She looks rough. Should check in. ...Not now. Later."
|
||||
mood: [concerned, fond]
|
||||
text: "{Line from character A's relationship frame — personal, protective, operational}"
|
||||
mood: [warm, concerned]
|
||||
topic: [colleague]
|
||||
tags: [mirror_moment, mirror_worried_partner]
|
||||
tags: [mirror_moment, mirror_{name}]
|
||||
|
||||
# Detective side — monologue-detective.yaml
|
||||
- id: pc-detective_m_d_044
|
||||
character: detective
|
||||
# Character B side — monologue-character-b.yaml
|
||||
- id: pc-{archetype-b}_m_d_001
|
||||
character: {archetype-b}
|
||||
trigger: observe_npc
|
||||
prerequisite:
|
||||
location: the-last-shift
|
||||
target: npc:naia-tamm
|
||||
text: "That woman — Tamm, I think Sera mentioned her — is sitting alone. Wrong energy for a social evening. Something at home, or something she's heard?"
|
||||
location: {location-slug}
|
||||
target: npc:{npc-slug}
|
||||
text: "{Same trigger, different frame — analytical, investigative, pattern-seeking}"
|
||||
mood: [analytical, curious]
|
||||
topic: [investigation]
|
||||
tags: [mirror_moment, mirror_worried_partner]
|
||||
tags: [mirror_moment, mirror_{name}]
|
||||
```
|
||||
|
||||
---
|
||||
@@ -267,14 +118,10 @@ For each mirror pair:
|
||||
|
||||
---
|
||||
|
||||
## 7. Expansion Notes (Post-v0.1)
|
||||
## 7. Expansion Notes
|
||||
|
||||
Additional mirror moments to author in future content passes:
|
||||
|
||||
- **The Missing Person Notice:** A posted notice near the bar about a missing dock worker (pre-existing, unrelated to main plot). Smuggler: "People disappear. Station life." Detective: "Filed under 'before my posting.' What was the investigative status?"
|
||||
- **Voss Walking the Floor:** The shift supervisor doing a routine floor inspection. Smuggler sees cover being maintained. Detective sees a potential informant.
|
||||
- **Drin's Inspection:** Dock inspector doing a container verification. Smuggler knows Drin will find nothing. Detective sees the inspection as either genuine compliance or evidence of a compromised process.
|
||||
Mirror moments should be authored for every repeated trigger point in a district's social sites. Priority triggers: THE FRIEND's daily routine, shift transitions, any institutional infrastructure, behavioral tells, NPC pairings that create observable social dynamics. The more a location has observable social texture, the more mirror moments it can support.
|
||||
|
||||
---
|
||||
|
||||
*Ticket #329 — Mirror moment design document. 10 paired observations. v0.1 scope.*
|
||||
*Design pattern document — Mirror Moments. Examples are authored per-district against the active NPC roster.*
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
**Pattern Type:** Production-level Tier 1 (emotional depth, full 10-axis model)
|
||||
**Design Principle:** Transparency as contrast mechanism
|
||||
**Ticket:** #380
|
||||
**Reference Implementation:** Naia Tamm (Sova Transit District v0.1)
|
||||
|
||||
---
|
||||
|
||||
@@ -26,10 +25,10 @@ THE MIRROR is the honest-character NPC pattern. No contradiction arc, no deep se
|
||||
| Absent System | Why Missing | Content Signal |
|
||||
|--------------|-------------|----------------|
|
||||
| **No tells** | Tells imply deception or concealment. MIRROR has nothing to conceal from the player (though they may be uninformed about events around them). The absence of tells IS the tell — when the player has learned to read behavioral flags on every other NPC, encountering someone without them is the anomaly. | The player's monologue might note: "No hesitation. No evasion. Either she's telling the truth or she's the best liar I've ever met." The absence becomes noticeable. |
|
||||
| **No dishonesty ≠ no misinformation** | MIRROR NPCs can be *wrong* without being *deceptive*. A MIRROR who has been lied to will repeat that lie in good faith -- they are transparent about what they believe, not omniscient about what is true. Naia reporting "Kael said he's picking up extra shifts" is honest transmission of a lie she was told. | The player recognizes the MIRROR is being used as an unwitting conduit. This makes the liar's deception feel worse, not the MIRROR's honesty feel cheaper. |
|
||||
| **No dishonesty ≠ no misinformation** | MIRROR NPCs can be *wrong* without being *deceptive*. A MIRROR who has been lied to will repeat that lie in good faith -- they are transparent about what they believe, not omniscient about what is true. A MIRROR repeating a partner's cover story is honest transmission of a lie — they're being transparent about what they believe, not what is true. | The player recognizes the MIRROR is being used as an unwitting conduit. This makes the liar's deception feel worse, not the MIRROR's honesty feel cheaper. |
|
||||
| **No secrets** (or only mundane surface-level ones) | The `secret_held` field is empty or contains only ordinary privacy (e.g., "worried about partner's late nights" — visible to anyone observant). No trust gates that reveal hidden criminal knowledge or conspiracies. | If a MIRROR has a "secret," it's one they'd share with a sympathetic stranger at a bar. There's no revelation moment where the player discovers the MIRROR was hiding something all along. |
|
||||
| **No contradiction arc** | No phases, no discovery moment, no color shift from green to amber. The relationship with MIRROR is stable across the session. | The trust level may deepen (public → insider → peer), but there's no betrayal moment. The MIRROR you meet at minute 5 is the same MIRROR at minute 25. |
|
||||
| **No trust-gated dialogue that changes the picture of who they are** | Trust progression reveals more FEELING, not more SECRETS. Deeper access tiers show emotional vulnerability, not concealed information. | At `public` tier: "I'm worried about Kael." At `peer` tier: "I don't know what to do. I love him, but I can't keep living like this." Same truth, deeper emotion. |
|
||||
| **No trust-gated dialogue that changes the picture of who they are** | Trust progression reveals more FEELING, not more SECRETS. Deeper access tiers show emotional vulnerability, not concealed information. | At `public` tier: "I'm worried about them." At `peer` tier: "I don't know what to do. I love them, but I can't keep living like this." Same truth, deeper emotion. |
|
||||
|
||||
### What MIRROR NPCs DO Have
|
||||
|
||||
@@ -50,7 +49,7 @@ THE MIRROR is the honest-character NPC pattern. No contradiction arc, no deep se
|
||||
|-------------|-----------|----------|
|
||||
| **Dialogue** | 25-35 | Greetings (5), emotional state conversation (8-10), relationship discussion (5-7), situation responses (5-8), peer-tier vulnerability (3-5) |
|
||||
| **Trust-gated dialogue** | 10-15 | Deeper emotional exposure at insider/peer tiers. Not secret revelations — emotional revelations. "I'm scared" vs "I'm worried." |
|
||||
| **Unprompted lines** | 3-5 | MIRROR volunteers emotional state or asks for help. "Have you seen Kael today? I'm worried." |
|
||||
| **Unprompted lines** | 3-5 | MIRROR volunteers emotional state or asks for help. "Have you seen {partner} today? I'm worried." |
|
||||
| **Monologue triggers** | 10-15 per character | Player's internal reaction to MIRROR's honesty. Smuggler: guilt (if protecting someone the MIRROR loves). Detective: relief (finally someone not lying) + strategic value (MIRROR as witness to behavioral change). |
|
||||
| **Voice sample** | 3-5 lines | Covering: baseline warm, worried, brittle (close to tolerance break) |
|
||||
|
||||
@@ -73,7 +72,7 @@ THE MIRROR is the honest-character NPC pattern. No contradiction arc, no deep se
|
||||
| What the Player Experiences | System State | Mechanical Expression |
|
||||
|-----------------------------|--------------|---------------------|
|
||||
| Early game: MIRROR seems ordinary | No behavioral flags set. No `contradiction_flagged`. No tell observations in monologue. | The player's training (from interacting with NPCs who DO have tells) hasn't fired. This feels normal. |
|
||||
| Mid game: Player has learned to read other NPCs | The player has observed: Kael looks left when lying, Sera leaves when Torek arrives, Voss fidgets when questioned about manifests. | The player's mental model now expects tells. They're watching for them. |
|
||||
| Mid game: Player has learned to read other NPCs | The player has observed: one NPC deflects eye contact when lying, another leaves when a third NPC arrives, a third fidgets when questioned about their role. | The player's mental model now expects tells. They're watching for them. |
|
||||
| MIRROR interaction: No tells present | Player talks to MIRROR. MIRROR makes eye contact, answers directly, emotional state matches words. No spatial deviation, no topic deflection, no nervous tics. | The ABSENCE is striking. The player's monologue notes it: "No hesitation. She's either telling the truth or she's the best actor I've ever seen." |
|
||||
| Resolution: Trust through transparency | If the player cross-references MIRROR's information with other sources, it checks out. MIRROR was telling the truth. | The player LEARNS that honesty exists in this world. That one person isn't performing. That becomes the emotional fulcrum for everything else. |
|
||||
|
||||
@@ -99,10 +98,10 @@ MIRROR dialogue follows the standard four-layer system (D-028) but with simplifi
|
||||
|
||||
| Tier | What MIRROR Shares | Example |
|
||||
|------|-------------------|---------|
|
||||
| **Public** | Observable emotional state, general information about their life/relationships | "I teach at the community school. The kids are doing well this term." |
|
||||
| **Insider** | Specific worry, named relationships, genuine vulnerability | "Kael's been coming home late. Says it's work, but the schedule doesn't match. I don't know what to think." |
|
||||
| **Peer** | Deep emotional exposure, requests for help or advice | "I'm scared, honestly. Not of Kael — of what Kael might be involved in. I don't know who else to talk to." |
|
||||
| **Authority** (if detective) | Cooperation with investigation, willingness to provide information about loved one despite emotional cost | "If you think Kael is in trouble, I want to know. I'll help if I can. Just — please don't hurt him." |
|
||||
| **Public** | Observable emotional state, general information about their life/relationships | "I work at the station school. The kids are doing well this term." |
|
||||
| **Insider** | Specific worry, named relationships, genuine vulnerability | "{Partner} has been coming home late. Says it's work, but the schedule doesn't match. I don't know what to think." |
|
||||
| **Peer** | Deep emotional exposure, requests for help or advice | "I'm scared, honestly. Not of them — of what they might be involved in. I don't know who else to talk to." |
|
||||
| **Authority** (if detective) | Cooperation with investigation, willingness to provide information about loved one despite emotional cost | "If you think they're in trouble, I want to know. I'll help if I can. Just — please don't hurt them." |
|
||||
|
||||
**No secret tier that reveals hidden criminal knowledge.** The MIRROR doesn't have hidden criminal knowledge. The "secret" tier for MIRROR is the deepest emotional vulnerability, not a plot revelation.
|
||||
|
||||
@@ -115,14 +114,14 @@ What changes: Depth of emotional sharing, not type of information.
|
||||
What doesn't change: The facts. MIRROR tells the same truth at all tiers. The emotion around it deepens.
|
||||
```
|
||||
|
||||
**Example progression (Naia about Kael):**
|
||||
**Example progression (MIRROR about their entangled partner):**
|
||||
|
||||
- **Public:** "Kael works at the freight hub. Dock worker. We've been together six years."
|
||||
- **Insider:** "Kael's been stressed lately. Late nights, evasive when I ask about it. I'm worried."
|
||||
- **Peer:** "I love him. But I can't keep doing this — the not-knowing is killing me. I think something's wrong. I just don't know what."
|
||||
- **Authority (detective):** "If you're investigating something at the hub, and if Kael is involved — I need to know. I'll help. I just need the truth."
|
||||
- **Public:** "{Partner} works at the freight terminal. We've been together {n} years."
|
||||
- **Insider:** "{Partner} has been stressed lately. Late nights, evasive when I ask about it. I'm worried."
|
||||
- **Peer:** "I love them. But I can't keep doing this — the not-knowing is killing me. I think something's wrong. I just don't know what."
|
||||
- **Authority (detective):** "If you're investigating something there, and if {partner} is involved — I need to know. I'll help. I just need the truth."
|
||||
|
||||
Same story. Deeper emotion. No revelation that changes the player's understanding of who Naia is.
|
||||
Same story. Deeper emotion. No revelation that changes the player's understanding of who the MIRROR is.
|
||||
|
||||
### Monologue Trigger Design
|
||||
|
||||
@@ -132,153 +131,29 @@ MIRROR NPCs trigger monologue focused on the PC's EMOTIONAL REACTION to the MIRR
|
||||
|
||||
| Trigger | Monologue Content | Emotional Layer |
|
||||
|---------|------------------|-----------------|
|
||||
| Observe MIRROR waiting at bar | "Naia's at the bar again. Alone. Keeps looking at the door. I know where Kael is. I can't say." | Guilt. The smuggler's operational knowledge creates distance from the MIRROR's suffering. |
|
||||
| MIRROR asks about loved one | "She asked if I'd seen Kael today. What do I say? 'Yeah, he's fine, just moving contraband?' Can't tell her. Can't lie to her face either." | Moral tension. The MIRROR's directness makes evasion feel worse. |
|
||||
| MIRROR shares deep worry | "She's really scared. Not just worried — scared. And she has no idea what's actually happening. If she knew..." | Protective instinct + guilt. The smuggler wants to shield the MIRROR from both the truth and the consequences. |
|
||||
| Observe MIRROR waiting at bar | "{MIRROR} is at the bar again. Alone. Keeps looking at the door. I know where {partner} is. I can't say." | Guilt. The smuggler's operational knowledge creates distance from the MIRROR's suffering. |
|
||||
| MIRROR asks about loved one | "They asked if I'd seen {partner} today. What do I say? Can't tell them. Can't lie to their face either." | Moral tension. The MIRROR's directness makes evasion feel worse. |
|
||||
| MIRROR shares deep worry | "They're really scared. Not just worried — scared. And they have no idea what's actually happening. If they knew..." | Protective instinct + guilt. The smuggler wants to shield the MIRROR from both the truth and the consequences. |
|
||||
|
||||
**Detective monologue about MIRROR:**
|
||||
|
||||
| Trigger | Monologue Content | Emotional Layer |
|
||||
|---------|------------------|-----------------|
|
||||
| First conversation with MIRROR | "She's not hiding anything. I've interviewed enough people to know when someone's performing. She's genuinely worried." | Relief. In a district where everyone seems evasive, the MIRROR is a breath of fresh air. |
|
||||
| MIRROR shares information about loved one | "She knows his routine better than anyone. The late nights, the evasions — she's been tracking them without realizing it. She's building my case for me." | Strategic recognition. The MIRROR is a witness to behavioral change — the best kind. |
|
||||
| MIRROR asks for help | "She wants me to figure out what's wrong. Not to arrest anyone — just to know. That's... trust. Real trust." | Emotional weight. The detective realizes the investigation has personal stakes for the MIRROR. Success means breaking someone's heart. |
|
||||
| First conversation with MIRROR | "Not hiding anything. I've interviewed enough people to know when someone's performing. This person is genuinely worried." | Relief. In a district where everyone seems evasive, the MIRROR is a breath of fresh air. |
|
||||
| MIRROR shares information about loved one | "Knows {partner}'s routine better than anyone. The late nights, the evasions — been tracking them without realizing it. Building my case for me." | Strategic recognition. The MIRROR is a witness to behavioral change — the best kind. |
|
||||
| MIRROR asks for help | "They want me to figure out what's wrong. Not to arrest anyone — just to know. That's... trust. Real trust." | Emotional weight. The detective realizes the investigation has personal stakes for the MIRROR. Success means breaking someone's heart. |
|
||||
|
||||
---
|
||||
|
||||
## 6. Naia Tamm — Reference Implementation
|
||||
## 6. Reference Implementation
|
||||
|
||||
Naia Tamm is the v0.1 MIRROR NPC in Sova Transit District. Let me walk through how her 10-axis profile demonstrates each MIRROR rule.
|
||||
*v0.1 named-NPC example removed (cited NPCs no longer in v0.2 pipeline — D-122). Author MIRROR reference implementations against the active district's roster using the generator template in Section 7.*
|
||||
|
||||
### Core Identity
|
||||
|
||||
- **Name:** Naia Tamm
|
||||
- **Age:** 33
|
||||
- **Role:** Teacher, Station Sova community school
|
||||
- **Social Site:** The Last Shift (Bar)
|
||||
- **Triangle:** Triangle 4 — The Worried Partner (Naia - Kael - Sera)
|
||||
|
||||
### 10-Axis MIRROR Implementation
|
||||
|
||||
#### 1. Want (Tier 1 depth, no deception)
|
||||
|
||||
**Primary:** Understand what's happening with Kael.
|
||||
|
||||
Naia and Kael have been together 6 years. Kael started coming home late, evasive answers, money that doesn't match hours. Naia doesn't know about the ring. Naia knows the person they share a life with is hiding something. The not-knowing is worse than almost any truth.
|
||||
|
||||
**Secondary:** Protect the life they've built.
|
||||
|
||||
Naia wants it resolved without destroying everything — the home, the relationship, the stability. This is why Naia confides in Sera instead of confronting Kael directly: wants advice, not a fight.
|
||||
|
||||
**MIRROR rule demonstrated:** Want is ABOUT someone else's secret, not concealing Naia's own. Naia's motivation is transparent to the player from the first conversation.
|
||||
|
||||
#### 2. Secret / Vulnerability (surface-level only)
|
||||
|
||||
**Surface secret:** Worried about Kael. Visible to anyone who sees Naia's stress.
|
||||
|
||||
**Deep secret:** Naia confided in Sera about Kael's behavior. This is the action that set Sera's compliance check in motion, though Naia doesn't know that. Naia shared a personal worry with a trusted friend.
|
||||
|
||||
**Vulnerability:** Emotional exposure. Naia's worry is genuine, visible, exploitable.
|
||||
|
||||
**MIRROR rule demonstrated:** Naia's "secret" is that she confided in a friend. That's not a conspiracy — it's ordinary human behavior under stress. The vulnerability is EMOTIONAL, not criminal.
|
||||
|
||||
#### 3. Relationships (genuine, no hidden agendas)
|
||||
|
||||
**Kael Davan (partner, 6 years):** Deep love, growing anxiety. Doesn't question Kael's character — just Kael's honesty.
|
||||
|
||||
**Sera Venn (close friend, 10 months):** Genuine friendship. Trusts Sera as someone who can give perspective without gossip.
|
||||
|
||||
**Lera Sessik (bar acquaintance):** Social connection. Lera is warm to Naia — protective attention to someone visibly struggling.
|
||||
|
||||
**MIRROR rule demonstrated:** All relationships are exactly what they appear to be. No hidden resentments, no secret alliances, no ulterior motives. Naia likes who she likes for straightforward reasons.
|
||||
|
||||
#### 4. Tolerance Threshold (moderate, genuine limits)
|
||||
|
||||
**Moderate.** Patient — teaching station kids requires it. But patience is fraying. Every evasive answer from Kael chips at tolerance. If pushed to breaking point, Naia confronts Kael directly — which could trigger Kael's crisis, force Sera's hand, or give the detective an opening.
|
||||
|
||||
**MIRROR rule demonstrated:** Tolerance threshold is real and observable. No hidden resilience, no secret breaking point. What Naia says she can tolerate is what she can tolerate.
|
||||
|
||||
#### 5. Daily Routine (predictable, no spatial deviations)
|
||||
|
||||
- 07:00 - 15:00: Teaching (community school, Residential Radial A)
|
||||
- 15:00 - 15:30: Commute back to Transit District
|
||||
- 15:30 - 17:30: Bar (The Last Shift) — meets Sera, social time
|
||||
- 17:30 - 22:00: Home. Waits for Kael.
|
||||
- Late evenings: Alone in apartment, wondering where Kael is.
|
||||
|
||||
**MIRROR rule demonstrated:** Routine is stable, observable, doesn't hide anything. Naia is where she says she'll be. No unauthorized corridor meetings, no suspicious timing patterns. The routine itself is transparent.
|
||||
|
||||
#### 6. Information Inventory (knows what she knows, doesn't know what she doesn't)
|
||||
|
||||
**Knows:** Kael's normal routine (6 years of partnership), Kael's recent deviations (late nights, evasive answers), Sera's Commission role (knows Sera is a tech, not investigator), bar social dynamics, school community.
|
||||
|
||||
**Doesn't know:** Ring, smuggling, Kael's membership, manifest discrepancies, Sera's compliance check, the detective's investigation.
|
||||
|
||||
**MIRROR rule demonstrated:** Naia's knowledge state is exactly what it appears to be. She's not concealing anything she knows. She genuinely doesn't know the conspiracy exists. This makes her the perfect witness to BEHAVIORAL change without knowledge of CAUSE.
|
||||
|
||||
#### 7. Contentment (low and declining — thematically essential)
|
||||
|
||||
**Was content:** Stable job, loving partner, community. Now relationship anxiety is coloring everything. Teaching is harder when distracted. Bar visits tinged with worry. Home is where the absence lives.
|
||||
|
||||
**MIRROR rule demonstrated:** Contentment trajectory is VISIBLE and GENUINE. Naia isn't pretending to be happy or hiding dissatisfaction. Her emotional state is observable in her voice, her behavior, her routine changes (increased bar presence = avoiding empty apartment).
|
||||
|
||||
#### 8. Personality Traits (no performance, no mask)
|
||||
|
||||
- **Primary: Caring** — genuinely invested in other people's wellbeing
|
||||
- **Secondary: Patient** — tolerates uncertainty longer than most, but not indefinitely
|
||||
- **Tertiary: Perceptive** — reads emotional states well. Knows when Kael is lying even if can't prove it.
|
||||
|
||||
**MIRROR rule demonstrated:** These traits are REAL, not performed. Naia's caring isn't a manipulation tactic. Her perceptiveness makes her WORRIED (she knows something's wrong) but doesn't make her SUSPICIOUS (she trusts Kael's character even while doubting his honesty about the situation).
|
||||
|
||||
#### 9. Tell System (ABSENT — the design payload)
|
||||
|
||||
Naia's entry in the wiki lists three "tells":
|
||||
|
||||
| Tell | Trigger | Observable To |
|
||||
|------|---------|---------------|
|
||||
| Visible stress | Tired eyes, distracted conversation, checking lattice | Sera, Lera, Detective, bar regulars |
|
||||
| Mentions Kael unprompted | Worry overflowing into conversation | Sera, Detective (if sitting nearby) |
|
||||
| Increased bar presence | Coming more often, staying longer — avoiding empty apartment | Lera (notices pattern), Sera (recognizes coping mechanism) |
|
||||
|
||||
**CRITICAL MIRROR DISTINCTION:** These are NOT tells in the deception-detection sense. They're not "behavioral flags that signal concealment." They're GENUINE STRESS MARKERS. Naia is visibly worried because Naia IS worried. There's no contradiction between internal state and external behavior.
|
||||
|
||||
**The system perspective:** A TELL is a deviation that signals deception (Kael looks left when lying, Sera leaves when Torek arrives). Naia's behaviors are COPING MECHANISMS and EMOTIONAL EXPRESSIONS, not tells. The player's monologue doesn't say "She's hiding something." It says "She's really struggling."
|
||||
|
||||
**MIRROR rule demonstrated:** The absence of deception-tells IS the content. The player who has learned to read evasion on other NPCs will notice that Naia makes direct eye contact, answers questions fully, doesn't deflect topics, doesn't have spatial anomalies beyond her normal routine. That ABSENCE becomes the signal: "This person is being honest with me."
|
||||
|
||||
#### 10. Skill Set (civilian, no hidden capabilities)
|
||||
|
||||
**Occupational:** Teaching, community engagement, youth education, curriculum management.
|
||||
|
||||
**Combat tag:** NO. Entirely civilian.
|
||||
|
||||
**Lattice capability:** Baseline.
|
||||
|
||||
**MIRROR rule demonstrated:** No hidden skills, no secret training, no combat capability concealed behind a civilian facade. Naia is exactly what she presents: a teacher who's worried about her partner.
|
||||
|
||||
### Naia's Triangle Role (Emotional Center)
|
||||
|
||||
**Triangle 4: The Worried Partner (Naia - Kael - Sera)**
|
||||
|
||||
Naia is the emotional center. Naia's worry about Kael triggered Sera's investigation. Naia's trust in Sera makes Sera's concealment more painful. Naia connects the detective's investigation to Kael's personal life through Sera, through Naia's own observations, through the fact that a worried partner is the best witness to behavioral change.
|
||||
|
||||
**Why MIRROR works here:** Naia is UNINVOLVED in the conspiracy but CENTRAL to its emotional impact. She's the person both the smuggler and detective want to protect — and the person whose honest worry makes the smuggling operation's human cost visible. If Naia were lying, the triangle would be about competing deceptions. Because Naia is honest, the triangle is about the COST of everyone else's deceptions.
|
||||
|
||||
### Dual-Lens Implementation
|
||||
|
||||
**Smuggler perspective (if smuggler is Kael's friend):**
|
||||
|
||||
Naia is emotional collateral. The smuggler knows why Kael is busy and can't say. Seeing Naia's worry creates guilt. If Naia asks the smuggler about Kael, there's no good answer.
|
||||
|
||||
Sample monologue: *"Naia's at the bar again. Alone. Looking at the door every time it opens. I know where Kael is. I can't say."*
|
||||
|
||||
**Detective perspective:**
|
||||
|
||||
Naia is a potential source. A partner who suspects their loved one is hiding something is a classic entry point. The detective can cultivate Naia's trust by being sympathetic — listen, validate, gently probe. Naia might not know specifics, but knows Kael's routine, habits, recent changes better than anyone.
|
||||
|
||||
Sample monologue: *"The partner — Naia Tamm. Teacher. Visibly stressed. Keeps looking at the door. If Davan is involved, this partner knows something changed, even if they don't know what."*
|
||||
|
||||
**MIRROR payload in dual-lens:** SAME transparency, DIFFERENT player reaction. Smuggler feels guilt. Detective sees opportunity. Both recognize honesty. The MIRROR's transparency makes the two characters' different relationships to truth more visible by contrast.
|
||||
**What a reference implementation demonstrates:**
|
||||
- 10-axis profile with the MIRROR rules annotated at each axis
|
||||
- Triangle role showing how the MIRROR's honesty creates emotional pressure on entangled NPCs
|
||||
- Dual-lens comparison showing same transparency producing different player reactions (guilt vs. strategic recognition)
|
||||
- Visible stress markers explicitly distinguished from deception tells
|
||||
|
||||
---
|
||||
|
||||
@@ -459,7 +334,7 @@ MIRROR is mechanically interesting BECAUSE of the surrounding systems. In a game
|
||||
|
||||
### The Emotional Fulcrum
|
||||
|
||||
When the ring's actions threaten the MIRROR (Naia worrying about Kael, potentially losing her relationship and stability), the player FEELS it because they've learned to believe this person.
|
||||
When the ring's actions threaten the MIRROR's relationships and stability, the player FEELS it because they've learned to believe this person.
|
||||
|
||||
**Smuggler:** The guilt of watching an innocent person suffer because of your operations. You can't tell her. You can't protect her. You're part of the cause of her pain.
|
||||
|
||||
@@ -469,18 +344,18 @@ When the ring's actions threaten the MIRROR (Naia worrying about Kael, potential
|
||||
|
||||
### The Trust Anchor
|
||||
|
||||
In a district where everyone has an agenda, the MIRROR is the person the player can RELY on. When the smuggler needs to know what's happening with Kael, Naia will tell the truth as she understands it. When the detective needs a witness, Naia will cooperate fully. The MIRROR's reliability is itself a strategic asset — but one that comes with emotional cost (using an innocent person's trust).
|
||||
In a district where everyone has an agenda, the MIRROR is the person the player can RELY on. When the smuggler needs to know what's happening with {partner}, the MIRROR will tell the truth as they understand it. When the detective needs a witness, the MIRROR will cooperate fully. The MIRROR's reliability is itself a strategic asset — but one that comes with emotional cost (using an innocent person's trust).
|
||||
|
||||
**System interaction:** The trust-gated gossip system (D-028 Layer 3, #171) means NPCs share information at different access tiers. With most NPCs, the player wonders: "Is this real or are they steering me?" With MIRROR, that question is answered: "This is real. She's telling me everything she knows." That certainty is VALUABLE in a game built on asymmetric information.
|
||||
**System interaction:** The trust-gated gossip system (D-028 Layer 3, #171) means NPCs share information at different access tiers. With most NPCs, the player wonders: "Is this real or are they steering me?" With MIRROR, that question is answered: "This is real. They're telling me everything they know." That certainty is VALUABLE in a game built on asymmetric information.
|
||||
|
||||
### The Replay Dimension
|
||||
|
||||
On second playthrough, playing the other character, the MIRROR's honesty becomes even more visible. The player KNOWS Naia isn't involved. They see her worry from a different angle:
|
||||
On second playthrough, playing the other character, the MIRROR's honesty becomes even more visible. The player KNOWS this person isn't involved. They see their worry from a different angle:
|
||||
|
||||
- **Playthrough 1 (smuggler):** "I know why Kael is busy. Naia's worry is collateral damage."
|
||||
- **Playthrough 2 (detective):** "Naia's worry is my opening. She's the way in."
|
||||
- **Playthrough 1 (smuggler):** "I know why {partner} is busy. {MIRROR}'s worry is collateral damage."
|
||||
- **Playthrough 2 (detective):** "{MIRROR}'s worry is my opening. They're the way in."
|
||||
|
||||
Same honesty. Different use. The player's knowledge that Naia is a MIRROR (from first playthrough) makes the second playthrough's interaction with her more complex: "I know she's honest. How do I use that? Should I?"
|
||||
Same honesty. Different use. The player's knowledge that this NPC is a MIRROR (from first playthrough) makes the second playthrough's interaction more complex: "I know they're honest. How do I use that? Should I?"
|
||||
|
||||
**Replay payload:** MIRROR transparency survives across playthroughs. FRIEND contradictions change (different seed might assign FRIEND to different NPC). MIRROR remains honest regardless of seed. That constancy is mechanically useful for teaching the player to recognize honesty — and ethically complex when the player knows they'll exploit it.
|
||||
|
||||
@@ -617,16 +492,11 @@ In a world where everyone is hiding something, the one person who isn't becomes
|
||||
- That trust makes the MIRROR's emotional stakes real
|
||||
- Threats to the MIRROR create urgency and moral weight
|
||||
|
||||
**Naia Tamm demonstrates every rule:** She has full Tier 1 depth, genuine emotional complexity, visible stress, transparent relationships, predictable routine, and zero deception. Her honesty makes Kael's secrets painful, Sera's concealment costly, and the investigation's human consequences visible.
|
||||
|
||||
**For content authors:** MIRROR is mechanically simple (no contradiction content) but emotionally complex (full 10-axis depth). The 50-70 line budget focuses on genuine emotional expression, trust progression through vulnerability, and dual-lens player reaction. The MIRROR is the person both characters want to protect — and the person who makes the cost of deception real.
|
||||
**For content authors:** MIRROR is mechanically simple (no contradiction content) but emotionally complex (full 10-axis depth). Full Tier 1 depth, genuine emotional complexity, visible stress, transparent relationships, predictable routine, zero deception — the MIRROR's honesty makes the entangled NPC's secrets painful, other NPCs' concealment costly, and the investigation's human consequences visible. The 50-70 line budget focuses on genuine emotional expression, trust progression through vulnerability, and dual-lens player reaction. The MIRROR is the person both characters want to protect — and the person who makes the cost of deception real.
|
||||
|
||||
---
|
||||
|
||||
**End Pattern Specification.**
|
||||
|
||||
**Files referenced:**
|
||||
- `/var/mnt/data/projects/settled-reach/copy/wiki/npcs/naia-tamm.md` — Reference implementation
|
||||
- `/var/mnt/data/projects/settled-reach/copy/decisions/content.md` — D-024 (10-axis model), D-028 (dialogue architecture), D-029 (entanglement ratio), D-032 (separate monologue pools), D-034 (THE FRIEND pattern), D-035 (tag taxonomy)
|
||||
- `/var/mnt/data/projects/settled-reach/copy/docs/workshops/v01-content-scoping/round2-gestalt.md` — Pattern definitions and NPC mapping
|
||||
- `/var/mnt/data/projects/settled-reach/copy/docs/workshops/v01-gap-analysis/round2-gestalt.md` — Unified observation system, character identity integration
|
||||
**Decisions referenced:**
|
||||
- `decisions/content.md` — D-024 (10-axis model), D-028 (dialogue architecture), D-029 (entanglement ratio), D-032 (separate monologue pools), D-034 (THE FRIEND pattern), D-035 (tag taxonomy)
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
**Schema:** `content/schemas/drama_module.schema.yaml`
|
||||
**Module pool:** `content/modules/tier1/*.yaml`
|
||||
**Decisions:** D-023 (three-tier model), D-027 (vertical slice), D-029 (30/50/20 population), D-034 (FRIEND pattern)
|
||||
**Vertical slice reference:** `content/modules/tier1/smuggling_ring_v0_1.yaml`
|
||||
**Vertical slice reference:** `content/modules/tier1/`
|
||||
|
||||
---
|
||||
|
||||
## What Is a Tier 1 Drama Module?
|
||||
|
||||
Tier 1 is the authored conspiracy layer of D-023. Drama modules are the things that can go wrong — or go very right, or simply happen — beneath the surface of daily life in Sova Transit. They are:
|
||||
Tier 1 is the authored conspiracy layer of D-023. Drama modules are the things that can go wrong — or go very right, or simply happen — beneath the surface of daily life in the district. They are:
|
||||
|
||||
- **Hand-authored.** Every event sequence, every NPC role, every outcome was written by a person.
|
||||
- **Pool-based.** Multiple modules exist. The storyteller draws from the pool at game start and activates a subset based on the district and the storyteller's pacing decisions.
|
||||
@@ -33,8 +33,8 @@ content/
|
||||
drama_module.schema.yaml ← Schema reference (this file validates against it)
|
||||
modules/
|
||||
tier1/
|
||||
smuggling_ring_v0_1.yaml ← The v0.1 vertical slice module
|
||||
future_module_v0_1.yaml ← Future modules go here
|
||||
smuggling_ring.yaml ← Canonical smuggling ring drama module
|
||||
future_module.yaml ← Future modules go here
|
||||
```
|
||||
|
||||
One `.yaml` file per drama module. The storyteller's content loader scans `content/modules/tier1/` at startup and adds all valid modules to the pool.
|
||||
@@ -68,7 +68,7 @@ Controls how the storyteller samples this module.
|
||||
| `pool.incompatible_with` | No | Module IDs that can't run concurrently. |
|
||||
| `pool.max_concurrent` | No | Almost always 1. |
|
||||
|
||||
**Design note on weight:** Use weight to tune narrative variety, not difficulty. A weight-1 module is a rare playthrough surprise. A weight-8 module like the smuggling ring is "this is usually what's happening in Sova Transit."
|
||||
**Design note on weight:** Use weight to tune narrative variety, not difficulty. A weight-1 module is a rare playthrough surprise. A weight-8 module is "this is usually what's happening in this district."
|
||||
|
||||
---
|
||||
|
||||
@@ -119,7 +119,7 @@ Each module specifies its NPC slots. Roles are internal slugs used throughout th
|
||||
|
||||
#### Named vs. Generated Bindings
|
||||
|
||||
**Named bindings** reference specific hand-authored NPCs from the district. All v0.1 roles are named. This is the right choice for:
|
||||
**Named bindings** reference specific hand-authored NPCs from the district. This is the right choice for:
|
||||
- THE FRIEND NPCs (D-034) — they have authored arcs, not generic behavior
|
||||
- NPCs with unique relationships in the 5-triangle web
|
||||
- Roles where voice, history, and moral weight matter
|
||||
@@ -185,10 +185,10 @@ Events are world-state changes the storyteller fires. They are not scripted play
|
||||
| **Sequence** | Ordered narrative beats. Step N+1 becomes eligible only after step N fires. Use for character arcs. |
|
||||
| **Pool** | Unordered ambient activity. The storyteller fires any eligible event at any time. Use for texture and background. |
|
||||
|
||||
The vertical slice uses:
|
||||
- `kael_exit_arc` (sequence) — Kael's ordered character arc
|
||||
A typical module uses:
|
||||
- `{friend}_exit_arc` (sequence) — THE FRIEND's ordered character arc
|
||||
- `investigation_pressure` (sequence) — Parallel pressure escalation
|
||||
- `ambient_ring_activity` (pool) — Background ring business that runs throughout
|
||||
- `ambient_activity` (pool) — Background conspiracy business that runs throughout
|
||||
|
||||
Most modules should have 1-2 sequences plus 1 pool.
|
||||
|
||||
@@ -306,7 +306,7 @@ Every event and outcome must mean something different to the smuggler and the de
|
||||
|
||||
### 3. No Clean Resolutions
|
||||
|
||||
D-034 and D-027 both require moral ambiguity. The smuggling ring doesn't have a "good" ending. The detective arresting Kael is not obviously better than letting him go. Every outcome must have a cost. If one outcome is obviously correct, you've failed the design.
|
||||
D-034 and D-027 both require moral ambiguity. No Tier 1 module has a "good" ending. Confronting THE FRIEND is not obviously better than protecting them. Every outcome must have a cost. If one outcome is obviously correct, you've failed the design.
|
||||
|
||||
### 4. THE FRIEND Contradiction Is the Pivot
|
||||
|
||||
@@ -315,7 +315,7 @@ If your module involves a FRIEND-pattern NPC, the observable contradiction (D-03
|
||||
- **Ambiguous before context** — the player sees the behavior before they understand what it means
|
||||
- **Irreversible once witnessed** — seeing changes the relationship, even if the player does nothing
|
||||
|
||||
The secret meeting in corridor B-7 is the canonical example. After witnessing it, neither character can pretend they don't know what they saw.
|
||||
The canonical example: witnessing THE FRIEND in an unauthorized location, with an unknown contact, outside their stated routine. After witnessing it, neither character can pretend they don't know what they saw.
|
||||
|
||||
### 5. Expiry Is Not Failure
|
||||
|
||||
@@ -343,7 +343,7 @@ These rules cover the schema's format constraints and the validation gaps that J
|
||||
| `outcome_id` | `^[a-z][a-z0-9_-]*$` | `ring_exposed` |
|
||||
| `sets_flag` / flag references | `^[a-z][a-z0-9_-]*$` | `kael_behavior_changed` |
|
||||
| `role` (npc slot) | `^[a-z][a-z0-9-]*$` | `ring-member-exiting` |
|
||||
| `named_npc` | `^npc:[a-z][a-z0-9-]*$` | `npc:kael-davan` |
|
||||
| `named_npc` | `^npc:[a-z][a-z0-9-]*$` | `npc:{slug}` |
|
||||
| `version` | `^[0-9]+\\.[0-9]+$` | `0.1` |
|
||||
|
||||
Note the difference: `event_id`, `outcome_id`, `sequence_id`, and flags use underscores and hyphens (`[a-z0-9_-]*`). NPC `role` slugs use hyphens only (`[a-z0-9-]*`). Mixing them in wrong fields will fail schema validation.
|
||||
@@ -388,13 +388,13 @@ Events with `ticks_since_activation` triggers fire automatically without player
|
||||
|
||||
**Wrong:**
|
||||
```yaml
|
||||
# kael_goes_cold fires automatically at tick 300, sets kael_behavior_changed
|
||||
# friend_goes_cold fires automatically at tick 300, sets friend_behavior_changed
|
||||
# This expiry can never fire after tick 300
|
||||
- outcome_id: module_abandoned
|
||||
is_expiry: true
|
||||
conditions:
|
||||
flags_not_set:
|
||||
- kael_behavior_changed # This flag is always set by tick 300
|
||||
- friend_behavior_changed # This flag is always set by tick 300
|
||||
ticks_since_activation: 5400
|
||||
```
|
||||
|
||||
@@ -405,8 +405,8 @@ Events with `ticks_since_activation` triggers fire automatically without player
|
||||
is_expiry: true
|
||||
conditions:
|
||||
facts_not_known:
|
||||
- "ring.cargo_discrepancy_pattern" # Only known if player examined terminal
|
||||
- "ring.kael_unauthorized_corridor_access" # Only known if player observed Kael
|
||||
- "{module}.cargo_discrepancy_pattern" # Only known if player examined terminal
|
||||
- "{module}.friend_unauthorized_location" # Only known if player observed THE FRIEND
|
||||
ticks_since_activation: 5400
|
||||
```
|
||||
|
||||
@@ -419,7 +419,7 @@ Events with `ticks_since_activation` triggers fire automatically without player
|
||||
- [ ] `min_play_ticks` ≥ 1800 (30 minutes at 1 tick/second)
|
||||
- [ ] Every event sequence step has at least one tick-based trigger
|
||||
- [ ] Every `fact_becomes_discoverable` effect has a `discovery_method` note
|
||||
- [ ] The module includes at least one named FRIEND-pattern NPC (for v0.1 modules)
|
||||
- [ ] The module includes at least one named FRIEND-pattern NPC
|
||||
- [ ] Expiry outcome is present (`is_expiry: true`) with conditions gated on `facts_not_known`, NOT `flags_not_set`
|
||||
- [ ] All outcomes have been reviewed for moral ambiguity — no "obviously correct" resolution
|
||||
- [ ] `npc_requirements` covers every role referenced in events and outcomes
|
||||
@@ -439,10 +439,10 @@ Events with `ticks_since_activation` triggers fire automatically without player
|
||||
| Vertical slice scope | `decisions/scope.md` D-027 |
|
||||
| Population ratios | `decisions/content.md` D-029 |
|
||||
| THE FRIEND pattern | `decisions/content.md` D-034 |
|
||||
| Smuggling ring module | `content/modules/tier1/smuggling_ring_v0_1.yaml` |
|
||||
| Module pool | `content/modules/tier1/` |
|
||||
| Drama module schema | `content/schemas/drama_module.schema.yaml` |
|
||||
| Fact catalog | `content/global/knowledge/` |
|
||||
| NPC profiles (v0.1) | `content/campaigns/main/systems/van-maanens-star/` |
|
||||
| NPC profiles | `content/campaigns/main/systems/{system-slug}/` |
|
||||
| Storyteller stub | `server/src/storyteller/mod.rs` |
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user