Files
settled-reach/wiki/authoring/npc-patterns/contradiction-arc.md
T
jpmschweitzerandClaude Opus 4.6 453983ffd2 chore(docs): remove content-converter and content-ron Makefile target
The YAML→RON converter and its make target are v0.1 artifacts superseded
by the v0.2 RON-first generator pipeline. content-ron/ was already
gitignored; this removes the tool that generated it.

Closes #667.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 15:00:46 +01:00

17 KiB

THE FRIEND: Contradiction Arc Pattern

Ticket: #332 | Priority: Medium | Sprint: 12 Status: v0.1 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.

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.


2. The Pattern: Definition

A Contradiction Arc is a 5-phase character trajectory built around a single observable contradiction that the player discovers through spatial observation, not through dialogue. The contradiction is:

  • Observable: The player sees it happen. No NPC tells them. No dialogue flag. No notification.
  • Spatially staged: The contradiction is a behavioral deviation from expected routine (wrong location, wrong time, wrong person, wrong pattern).
  • Morally complex: THE FRIEND's concealment comes from care or fear, not malice. There is no clean resolution.
  • Dual-lens resonant: The same contradiction means something different to each playable character. The second playthrough recontextualizes the first.

3. The 5 Phases

Phase 1: Baseline Warmth (0-10 minutes)

Purpose: Establish the relationship BEFORE the contradiction. Create genuine attachment so the discovery has emotional weight.

Mechanics:

  • THE FRIEND is warm, reliable, helpful. Their dialogue is at surface/real trust for their relationship tier.
  • Monologue during this phase is fond, casual, present-tense. No hints of incoming trouble.
  • THE FRIEND's routine is consistent with their stated role. No behavioral deviations.
  • Their personal tell (the observable habit that will become load-bearing later) is established here — but reads as innocuous.

Content authoring rule: Write Phase 1 as if it is the whole story. The warmth must be real, not performed. If the player never discovers the contradiction, Phase 1 should feel like a complete, satisfying relationship.

Tag notes:

  • 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 2: First Behavioral Shift (10-15 minutes)

Purpose: Introduce behavioral tells that the observant player might notice — but that have plausible innocent explanations.

Mechanics:

  • THE FRIEND's behavior changes in small ways. Shortened interactions. Increased action frequency (lattice checking, looking around). Redirected attention.
  • These are observable but not alarming. A non-observant player may not register them at all.
  • The monologue shifts to mild concern or puzzlement. "Not like them to be..." registers something without naming it.
  • THE FRIEND's dialogue remains warm at the surface level. The behavioral tells exist beneath the dialogue.

Content authoring rule: Every tell in Phase 2 must have a non-suspicious explanation AND a suspicious one. The player who discovers the contradiction on a second playthrough should recognize these tells as load-bearing. The player experiencing them for the first time should accept the innocent explanation.

Tag notes:

  • Dialogue: same trust tiers as Phase 1 — surface content unchanged
  • 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 3: The Contradiction (15-20 minutes)

Purpose: The observable contradiction. THE FRIEND is in the wrong place, doing the wrong thing, with the wrong person — and the player sees it.

Mechanics:

  • Spatial staging: THE FRIEND deviates from their established routine in a way that is spatially visible to the player. This is NOT communicated through dialogue or UI. The player moves through the world and encounters the deviation.
  • The contradiction must be observable without being forced. The player discovers it; the game does not direct them to it. However, the contradiction is staged in a location the player will naturally visit in the course of normal gameplay.
  • The monologue fires on trigger: observe_anomaly or trigger: witness_interaction. It names what the player has seen without drawing a conclusion. The character asks the question; the player supplies the answer.
  • Entity color shifts at this moment: Friendly (green) → PersonOfInterest (amber). The visual system registers what the player has just observed.
  • Dialogue tiers lock: The discovery creates a relationship fracture. Insider/peer warmth content becomes unavailable. Only public/surface dialogue remains for this NPC going forward. The absence is the signal.

Content authoring rule: The contradiction must be:

  1. Spatially clear (the player can see what is happening)
  2. Contextually ambiguous (they understand WHAT but not WHY)
  3. Emotionally weighted (the relationship context makes the "what" feel like a wound)

Tag notes:

  • Monologue at discovery: trigger: witness_interaction or trigger: observe_anomaly, mood: [shocked, analytical]
  • 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 4: Confrontation Opportunity (20-25 minutes)

Purpose: Give the player the option to press THE FRIEND. The confrontation dialogue reveals concealment without full confession.

Mechanics:

  • A new dialogue option appears (D-062 — invisible until unlocked; players won't see it until the contradiction triggers it). The option is written in the character's internal voice (D-063).
  • THE FRIEND deflects. They give an answer that is technically not a lie, but is not the truth. Their personal tell fires during the deflection — the tell established in Phase 1 becomes the proof that they're hiding something.
  • The player can choose to accept the deflection, push harder, or walk away. All three paths have consequences.
  • This is the emotional peak. Whatever the player does here determines the shape of the rest of the session.

Content authoring rule: THE FRIEND's deflection must be sympathetic. They are not lying to harm the player. They are concealing because the truth would hurt someone they love, or would place them in impossible danger. The player who understands the full arc (second playthrough) recognizes the deflection as fear, not treachery.

Tag notes:

  • New dialogue option: confrontation style, situation: [confrontation], access: [peer, insider] — only the character who has the relationship can ask this question
  • 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 5: Contaminated Trust (25-30 minutes)

Purpose: THE FRIEND returns to surface-normal behavior. But the player is now watching differently. Every warm interaction is filtered through doubt.

Mechanics:

  • THE FRIEND's surface behavior normalizes. They resume their routine, greet the player warmly, act as if Phase 3 and 4 didn't happen (or at least, as if they're trying to move past it).
  • But dialogue has shifted: insider/peer warmth is gone, replaced by public/surface content only. The player hears the same NPC; the texture is different. The warmth is slightly performed.
  • Monologue shifts into the contaminated register: every warm interaction generates a note of doubt. The player's observational frame has changed.
  • Three player paths diverge from here:
    • Understanding — gentle follow-up, possible confession, partial truth
    • Betrayal — report/expose THE FRIEND; relationship damage is permanent
    • Observation — watch and wait; the doubt lives but no confrontation happens

Content authoring rule: Phase 5 content must work for all three player paths. The NPC's surface behavior is path-neutral — they don't know what the player has decided. The player's monologue shifts based on what decision they've made (or chosen not to make yet).

Tag notes:

  • Dialogue: trust: surface only; warm tone but no real-tier content; mood: [composed] for THE FRIEND
  • 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?"


4. Required Content Per FRIEND NPC

Content Type Count Notes
Phase 1 dialogue lines (warmth, establishment) 8-12 Across greeting, social, situation contexts
Phase 1-2 monologue (fond, mild concern) 5-8 trigger: observe_npc, trigger: post_conversation
Phase 2 behavioral tells (description + monologue) 3+ Each tell: visible_to, behavior, monologue line
Phase 3 contradiction discovery monologue 3-5 trigger: witness_interaction, observation language only
Phase 4 confrontation dialogue option (player choice) 1 In character's internal voice per D-063
Phase 4 THE FRIEND deflection dialogue 3-5 With personal tell behavior flagged
Phase 4 tell confirmation monologue 1-2 "I know this tell. They're lying."
Phase 5 contaminated-trust monologue 4-6 Varies by player path taken
Total authored ~70-100 items No generation expansion — all hand-authored

5. The Tell System

Every FRIEND NPC has a personal tell — a specific behavioral marker established in Phase 1 (innocent, recognizable) and confirmed in Phase 4 (proof of concealment). The tell must:

  1. Be physical and observable (not internal state — visible behavior the player can see)
  2. Be introduced before it becomes load-bearing — Phase 1 or early Phase 2
  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 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")
  • The character without the relationship reads the tell as behavioral pattern ("That's twice now — flag it")

6. Dual-Lens Design Requirements

Every FRIEND NPC must produce different monologue experiences for both characters observing the same behavior. The contradiction arc has two distinct "readings":

Phase Bonded Character Reading Other Character Reading
Phase 1 Warmth, familiarity, fond reliance Clinical observation, behavioral baseline, possible suspicion
Phase 2 Personal concern ("something's wrong with them") Analytical flag ("deviation from baseline, note it")
Phase 3 Betrayal, confusion, hurt Evidence accumulation, pattern confirmation, institutional assessment
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.

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."


7. The No-Clean-Resolution Rule

Every Contradiction Arc must refuse to offer a clean resolution. This is non-negotiable.

What "no clean resolution" means:

  • Confronting THE FRIEND does not produce a confession that absolves them. It produces a partial truth that raises more questions.
  • Protecting THE FRIEND does not produce safety. It produces continued risk with the added weight of knowledge.
  • Reporting THE FRIEND does not produce justice. It produces a particular kind of harm to people who didn't deserve to be caught in the consequence.
  • Ignoring THE FRIEND does not produce peace. The doubt persists. The knowledge lives.

Why this rule exists: D-027 success criterion #3 is "after each playthrough, player names an NPC they felt conflicted about." Confliction requires that no choice was clearly right. The moment a clean resolution exists — confess = forgiven, report = solved, ignore = safe — the Contradiction Arc collapses into a problem with a correct answer. The player stops feeling conflicted and starts making optimal choices. Emotional weight requires moral weight. Moral weight requires cost on every path.


8. Content Authoring Checklist

Before shipping a FRIEND NPC with a Contradiction Arc, validate:

  • Phase 1 warmth is genuine — the relationship is established as real before it's threatened
  • Phase 2 tells are pre-established in Phase 1 (not appearing for first time at contradiction)
  • Phase 3 contradiction is observable through spatial play — no dialogue/UI flag triggers it
  • Phase 3 monologue names the observation without naming the explanation
  • Phase 3 entity color shifts to amber (PersonOfInterest) at contradiction discovery
  • Phase 3 dialogue tier lock: insider/peer content unavailable post-contradiction
  • Phase 4 confrontation option appears only post-Phase 3 (D-062 invisible until unlocked)
  • Phase 4 confrontation written in character's internal voice (D-063)
  • Phase 4 THE FRIEND's deflection is sympathetic — they're concealing, not lying maliciously
  • Phase 4 personal tell fires during deflection and is confirmed in monologue
  • Phase 5 content exists for all three player paths (Understanding / Betrayal / Observation)
  • Dual-lens notes written for both characters on every key monologue trigger
  • No clean resolution on any player path
  • Total authored content: 70-100 items

9. Application to Future FRIEND NPCs

This pattern is designed to be reused. When designing a future FRIEND NPC for a new template:

  1. Identify the concealment. What is THE FRIEND hiding, and WHY? The why must be sympathetic. "Protecting someone they love" or "fear of consequences" — not "because they're secretly bad."
  2. Design the contradiction. What does the player OBSERVE that breaks the baseline? It must be spatial and behavioral, not told.
  3. Design the tell. What physical habit is introduced in Phase 1 that becomes load-bearing in Phase 4? It must be specific to this NPC.
  4. Map the dual-lens difference. How does the bonded character read the contradiction differently from the observing character? The emotional register must diverge.
  5. Refuse the clean resolution. What does each of the three player paths cost? If any path costs nothing, revise.

Ticket #332 — Contradiction arc design document. Reusable FRIEND pattern. v0.1 scope.