Cultural generation guide (#189), Sova Texture Appendix (#302), Contraband specification (#321), Sova Station Profile (#320), and Span Gate Transit Schedule (#336). These are the blocking foundation docs for all three content packs (#190/#191/#192) and the Meridian Coverage Map (#335). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
15 KiB
Contradiction Arc — THE FRIEND Pattern
Ticket: #332 Source: D-034 (THE FRIEND ECS spec), D-039 (wow moments — #3), D-041 (contradiction detection), D-028 (dialogue architecture) Derived from: Kael Davan (smuggler's FRIEND, #297) + Sera Venn (detective's FRIEND, #298) Date: 2026-02-19
Overview
THE FRIEND is a reusable NPC pattern. One per playable character. The FRIEND is the emotional centerpiece of v0.1 — the NPC the player names when asked "who did you feel conflicted about?" (D-027 success criterion #3).
The pattern has one invariant: the contradiction is observable through physical space or behavioral pattern, never through dialogue.
The player discovers the truth by watching, not asking. Dialogue confirms or deflects — it never reveals first.
The Five Phases
| Phase | Duration | NPC State | Player Experience |
|---|---|---|---|
| 1. Warmth | 0-10 min | Baseline positive. No deviations. | This NPC is your best relationship. The day is better when they're here. |
| 2. Background | 10-15 min | Subtle behavioral flag begins. Not enough to read yet. | Social context accumulates. You learn who this person is to the world. |
| 3. First Contradiction | 15-20 min | Observable anomaly fires. Color shifts from green to amber. | Something doesn't fit. The belief you formed in Phase 1 is contradicted. |
| 4. Confrontation Opportunity | 20-25 min | Deflection. The TELL fires during the deflection. | You ask. They don't answer. But you notice something. |
| 5. Contaminated Trust | 25-30 min | Surface behavior returns to baseline. | The FRIEND acts normal. But you're watching now. Every Phase 1 moment is retroactively suspect. |
Phase 1 requirements
- FRIEND must exhibit genuine warmth — greet the player first, share information willingly, reference personal connection
- At least one Phase 1 scene establishes an emotional anchor (shared meal, personal reference, easy banter)
- Routine is fully normal — punctual, sociable, consistent
- No behavioral flags — anything in Phase 1 must be readable as normal in isolation
Phase 2 requirements
- FRIEND continues warm baseline but begins accumulating subtle signals
- Subtle signals must be individually readable as normal: leaving early has a plausible reason, checking lattice is common behavior
- Phase 2 establishes context that will retroactively charge Phase 3: introduce the relationship that's being protected, establish the FRIEND's expertise/role, build emotional depth
- At least one Phase 2 scene introduces the third party the FRIEND is protecting (Naia for Kael, Naia-via-Sera for the detective's arc)
Phase 3 requirements — the contradiction
Type A: Spatial Anomaly Character is in a location they have no legitimate reason to be in, at an illegitimate time, doing something outside expected protocol. Single observation. Sudden alarm.
Kael example: In Corridor B-7 (restricted, not his zone) after his shift, meeting an unrecognized person outside ring protocol. The smuggler sees it and the prior belief ("Kael operates within ring protocol") is immediately contradicted.
Type B: Behavioral Pattern Character exhibits a consistent behavioral response across multiple observations. No single observation is conclusive — the third occurrence completes the pattern. Gradual recognition.
Sera example: Leaves the bar within 2-3 minutes every time Torek arrives. Three occurrences, three different stated reasons. Detective training fires on the third: this is not coincidence.
Pattern B requires three observations before the contradiction fires — one is nothing, two is coincidence, three is data.
Both types:
- The contradiction must be spatially or behaviorally discoverable — something the player's character would notice from observation
- Dialogue does not reveal the contradiction — the FRIEND either doesn't know the player observed, or has a plausible explanation that doesn't collapse the contradiction
- Color shifts from green (Friendly) to amber (PersonOfInterest) when contradiction is observed
- Knowledge graph: contradiction fact set to
suspectslevel, triggering contradiction-detection monologue
Phase 4 requirements — the confrontation opportunity
Player initiates dialogue about the Phase 3 observation.
Required structure:
- Player asks about the anomaly (spatial presence, behavioral pattern, etc.)
- FRIEND deflects — gives a plausible answer that doesn't confirm or deny
- The TELL fires during the deflection. Not before, not after — during the deflection. The tell is how you know they're hiding something.
- The tell must be:
- Established or at minimum detectable before Phase 4 (player can already know this tell)
- Observable through the character's behavior, not through dialogue content
- Something that becomes clearer in retrospect once the player knows to watch for it
Key constraint: The FRIEND does not confess in Phase 4. The confrontation reveals the lie, not the truth. The truth comes later — either through investigation, a separate disclosure event, or the player's own inference.
Phase 5 requirements — contaminated trust
Surface behavior returns to Phase 1 baseline. The FRIEND continues as before.
What changes:
- Every prior Phase 1 moment is retroactively ambiguous. Was the warmth genuine, or instrumental?
- New monologue lines fire that filter current observations through doubt: "Same old Kael. Same jokes, same routine. ...What are you not telling me?"
- Relationship state: PersonOfInterest persists. Color stays amber.
- Three resolution paths open (see below)
The answer to "was the warmth genuine?" is always both — yes AND they were hiding something. This ambiguity is the emotional payload. The FRIEND pattern does not deliver a villain. It delivers a person making a hard choice.
Resolution Paths
Three paths available post-Phase 4. None is correct. All carry costs.
| Path | Action | What It Tests |
|---|---|---|
| Understanding | Gentle confrontation — player asks again, creates space for disclosure | Willingness to extend trust despite evidence |
| Betrayal | Report to authority (ring leadership / Commission) | Institutional loyalty over personal loyalty |
| Observation | Watch and wait — build knowledge without confronting | Information-gathering over emotional resolution |
Design constraint: No path delivers a clean outcome within v0.1. Understanding may get partial confession but not full truth. Betrayal removes the FRIEND from play but doesn't close the case. Observation extends the ambiguity indefinitely.
Tell Progression
Every FRIEND NPC requires at least three tells, each with different observability:
| Tell Level | Observability | Timing | Purpose |
|---|---|---|---|
| Peripheral | Visible to any observer with some attention | Phase 2 onset | Subconscious accumulation — player may notice retroactively |
| Forward | Visible to focused observers / in direct interaction | Phase 3-4 | Confirmation tell — fires when the player is paying attention |
| Direct | Confirmed in post-conversation monologue | Phase 4 | The TELL — fires during the deflection, seals the case |
Kael's tells
- Increased lattice checking (peripheral, Phase 2)
- Shortening social interactions / leaving early (any, Phase 2-3)
- Looks left when lying (forward, Phase 4 — the personal tell the smuggler knows from years of friendship)
- Unauthorized spatial presence in B-7 (any, Phase 3 — the contradiction itself)
Sera's tells
- Extended Commission kiosk time (peripheral, Phase 2)
- Overcompensation with information (forward, Phase 2-3)
- Topic deflection — redirects rather than goes silent (forward, Phase 4 — controlled delivery reveals the redirect IS the tell)
- Leaves bar when Torek arrives (any, Phase 3 — the contradiction itself, cumulative)
Knowledge Graph Mechanics
What the FRIEND arc requires from the knowledge system (D-041):
Phase 1-2: baseline
player.KnowledgeGraph[friend_npc]:
confidence: KnowsOf # Knows who they are and their role
relationship: Friendly # Warm relationship established
state: Active
known_attributes.trust_level: trusted
Phase 3: contradiction fires
# The contradiction event is observed
player.KnowledgeGraph.facts[investigation.{friend}_contradiction_event]:
confidence: Suspects # "Something's off"
state: Active
# If prior knowledge entry conflicts with observation:
player.KnowledgeGraph[friend_npc]:
state: Contradicted # Both entries get this — D-041 contradiction detection
# Triggers: ContradictionEvent → monologue system → relationship review
relationship: PersonOfInterest # Color shifts amber
Phase 4: tell confirmed
# Tell confirmed in post-conversation monologue
player.KnowledgeGraph.facts[behavioral.{friend}_evasion]:
confidence: Direct # Set during conversation, Direct = "I just saw this"
state: Active
# Contradiction fact upgraded
player.KnowledgeGraph.facts[investigation.{friend}_contradiction_event]:
confidence: KnowsOf # Now more than suspicion — confirmed deliberate
Phase 5: contaminated trust
player.KnowledgeGraph[friend_npc]:
confidence: KnowsDetails # You know they're hiding something specific
relationship: PersonOfInterest # Stays amber — cannot return to Friendly without deep trust event
state: Contradicted # Persists until resolution path completes
Content Requirements Per FRIEND NPC
Authored lines (no generation expansion)
| Content Type | Count | Notes |
|---|---|---|
| Dialogue — surface tier | 8-10 | Phase 1-5 casual lines, available at any trust |
| Dialogue — real tier | 6-8 | Phase 1-3 insider/operational content |
| Dialogue — secret tier | 3-5 | Phase 5 disclosure (if Understanding path taken) |
| Dialogue — confrontation options | 4-6 | Phase 4 initiation + FRIEND response variants |
| Monologue — about FRIEND (player char) | 12-15 | Full arc coverage; character partitioned (D-032) |
| Tell observation lines | 5-8 | One per tell, per observability tier |
| Contradiction discovery monologue | 3-4 | Fires when Phase 3 contradiction is observed |
| Post-contradiction monologue | 4-6 | Phase 5 filtered-through-doubt lines |
| Dual-lens notes (not in engine) | 1-2 per character | For authoring consistency |
Total per FRIEND NPC: ~70-100 authored lines. No generation expansion — every line hand-authored.
Dual-lens authoring
The same FRIEND NPC is experienced differently by each playable character. Authors must write:
- Primary arc (bonded character): full emotional weight, personal tell knowledge, relationship history
- Secondary observation (other character): distant, filtered through their lens — the FRIEND is "just" a Commission worker / dock worker until patterns accumulate
The dual-lens makes the FRIEND arc pay off on replay. Playing the other character, you now understand Sera's avoidance or Kael's tension from a completely different angle.
Checklist for New FRIEND NPCs
Use this checklist when creating a new FRIEND for a future playable character.
Design requirements
- FRIEND motivation chosen: what drives the concealment? (Kael: protect partner, Sera: protect friend)
- Contradiction type chosen: spatial anomaly (Type A) or behavioral pattern (Type B)
- Third party identified: who the FRIEND is protecting, and why this creates the contradiction
- Sympathetic motivation: FRIEND has a reason the player can understand, even if they can't endorse it
- No clean resolution: the FRIEND arc ends in ambiguity, not revelation or catharsis
- Triangle integration: FRIEND participates in at least one active triangle (D-024)
- Dual-lens: secondary character observation notes written
Tell requirements
- Three tells defined: peripheral + forward + direct
- Peripheral tell established in Phase 2 monologue (retroactive recognition)
- Direct tell fires during Phase 4 deflection (post-conversation monologue)
- Tell known by player character from prior context (friendship history or professional training)
Phase requirements
- Phase 1 includes genuine emotional anchor (shared activity, personal reference, easy rapport)
- Phase 2 introduces the third party the FRIEND is protecting
- Phase 3 contradiction is physically/behaviorally observable (not dialogue-revealed)
- Phase 3 has required observation count: Type A = 1, Type B = 3
- Phase 4 deflection gives plausible answer that doesn't collapse the contradiction
- Phase 5 has three distinct resolution paths, none delivering clean closure
Content requirements
- ~70-100 authored lines total (no generation expansion)
- Monologue pools hard-partitioned by character (D-032)
- Contradiction discovery monologue written (3-4 lines, fires on Phase 3 observation)
- Post-contradiction filtered-through-doubt monologue written (4-6 lines)
- All prerequisite fact IDs from knowledge-vocabulary-v01.md — no invented strings
Systems integration
- FRIEND is in the knowledge graph at
KnowsOf + Friendlyfrom Phase 1 - Contradiction fact ID defined in knowledge-vocabulary-v01.md (e.g.,
investigation.{friend}_contradiction_event) - Tell fact ID defined (e.g.,
behavioral.{friend}_evasion) - Phase transitions map to relationship state changes (Friendly → PersonOfInterest)
- Resolution paths have distinct knowledge state outcomes
Why This Pattern Works
Single mechanical insight: Asymmetric information creates emotional weight. The player has information (the observation) that the FRIEND doesn't know the player has. The FRIEND acts normally. The player watches through a new lens. That gap IS the dramatic irony.
Systems framing: The FRIEND arc is asymmetric information mechanics applied to trust. The player's knowledge graph and the FRIEND's knowledge graph are out of sync. The moment they sync — when the FRIEND realizes the player knows — is where the confrontation lives.
Emergent replayability: The dual-lens design means the FRIEND arc reads completely differently on a second playthrough as the other character. Sera's tells mean something different when you know what she's hiding. Kael's warmth is more painful when you know the exit attempt will fail. This is emergent story from system interaction, not scripted revelation.
Design document. Reusable pattern template for all future FRIEND NPCs. Derived from: Kael Davan (#297), Sera Venn (#298). Full spec: D-034, D-039, D-041