Content files (RON templates, YAML campaigns, gauntlet data) are consumed exclusively by the server. Colocate them at server/content/ and update all path references in Rust source, tooling scripts, and schema files. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
693 lines
33 KiB
YAML
693 lines
33 KiB
YAML
# yaml-language-server: $schema=../../schemas/drama_module.schema.yaml
|
|
#
|
|
# Tier 1 Drama Module: The Smuggling Ring (v0.1)
|
|
# The vertical slice Tier 1 module for D-027.
|
|
#
|
|
# NARRATIVE CORE:
|
|
# A logistics worker (the smuggler PC, if played) is embedded in a small ring
|
|
# smuggling unlicensed lattice components through Sova Transit District (D-037).
|
|
# The ring is led by Voss from The Terminal. Kael Davan — a ring member and the
|
|
# smuggler's FRIEND — is quietly trying to exit to protect his partner Naia Tamm.
|
|
# Sera Venn (the detective's FRIEND) has noticed Kael's manifest discrepancies
|
|
# but hasn't reported them, protecting Naia by proxy.
|
|
#
|
|
# DUAL-LENS EXPERIENCE:
|
|
# Smuggler plays INSIDE the ring: manage drops, cover tracks, notice Kael going cold.
|
|
# Detective plays OUTSIDE: cargo anomalies → follow Kael → witness secret meeting →
|
|
# confront or protect.
|
|
#
|
|
# SUCCESS CRITERIA (D-027):
|
|
# #1: 30 minutes of daily-life play before the ring activates (min_play_ticks: 2100)
|
|
# #3: Player names Kael as an NPC they felt conflicted about
|
|
# #4: observe→notice→follow→discover emerges from systems, not scripts
|
|
|
|
module_id: smuggling_ring_v0_1
|
|
display_name: "The Smuggling Ring"
|
|
version: "0.1"
|
|
tier: 1
|
|
description: >
|
|
A small ring of logistics workers smuggling unlicensed lattice components through
|
|
Sova Transit District. The ring's weakest link — Kael Davan — is trying to exit
|
|
to protect his partner. The detective investigates cargo anomalies. The smuggler
|
|
manages ring operations and navigates Kael's loyalty crisis. Neither character
|
|
knows the other's full picture until confrontation forces it.
|
|
|
|
notes: >
|
|
This module IS the vertical slice (D-027). It exercises every system at full depth:
|
|
dual-lens NPC observation, tell progression, trust-gated dialogue, knowledge graph
|
|
confidence accumulation, confrontation weight (D-063), walk-away consequences (D-064),
|
|
and THE FRIEND contradiction arc (D-034). All outcome paths must feel earned.
|
|
No outcome is "the right answer" — Kael's situation has no clean resolution.
|
|
|
|
dual_lens:
|
|
smuggler: >
|
|
You're inside the ring. Voss manages operations; you handle logistics cover.
|
|
Kael used to be reliable. Lately he's absent, distracted, making excuses.
|
|
The drop schedule is at risk. Do you pressure him, cover for him, or cut him?
|
|
You don't know he's trying to get out. He doesn't know you've noticed.
|
|
detective: >
|
|
Cargo manifest discrepancies in The Terminal. Small, systematic, deniable.
|
|
Your analytical lattice flags them before your conscious mind does.
|
|
Follow the thread: discrepancy → dock worker with odd schedule → Kael Davan →
|
|
maintenance corridors → someone he shouldn't be meeting. And then what?
|
|
Arrest a man trying to leave a ring he never wanted to join?
|
|
|
|
pool:
|
|
weight: 8
|
|
compatible_districts:
|
|
- sova-transit
|
|
max_concurrent: 1
|
|
|
|
# ── ENTRY CONDITIONS ─────────────────────────────────────────────────────────
|
|
# Ring activity begins after player has had time to establish routine (D-027 #1).
|
|
# The ring is already running at game start — the module activates when the
|
|
# storyteller decides the tension has built enough to surface.
|
|
|
|
entry_conditions:
|
|
world_state:
|
|
- type: npc_present
|
|
role: ring-leader
|
|
- type: npc_present
|
|
role: ring-member-exiting
|
|
- type: location_accessible
|
|
location: the-terminal
|
|
- type: location_accessible
|
|
location: maintenance-corridors
|
|
|
|
activation:
|
|
trigger: storyteller_push
|
|
min_play_ticks: 2100 # ~35 minutes at 1 tick/second — D-027 criterion #1
|
|
# The storyteller pushes activation when player has established presence
|
|
# in The Terminal or The Last Shift through routine interaction.
|
|
# Proximity trigger (maintenance-corridors) is a secondary activation path
|
|
# if the player wanders there early.
|
|
|
|
# ── NPC REQUIREMENTS ─────────────────────────────────────────────────────────
|
|
# All core roles are named (hand-authored NPCs from the vertical slice).
|
|
# No generated NPC slots in v0.1 — the smuggling ring uses the 15 authored NPCs.
|
|
|
|
npc_requirements:
|
|
- role: ring-leader
|
|
display_hint: >
|
|
Runs the ring from The Terminal. Logistics authority = cover.
|
|
Never handles contraband directly. Pressure source for Kael.
|
|
binding: named
|
|
named_npc: "npc:voss"
|
|
must_have_motivation: HANDLER
|
|
|
|
- role: ring-member-exiting
|
|
display_hint: >
|
|
Kael Davan. Dock worker, ring member, smuggler's FRIEND.
|
|
Trying to exit quietly to protect Naia. This is THE FRIEND contradiction.
|
|
Every event sequence runs through this role.
|
|
binding: named
|
|
named_npc: "npc:kael-davan"
|
|
must_have_pattern: FRIEND
|
|
must_have_motivation: TURNCOAT
|
|
|
|
- role: partner-uninvolved
|
|
display_hint: >
|
|
Naia Tamm. Kael's partner. Does not know about the ring.
|
|
Her safety is Kael's motivation for exiting. Her ignorance is the moral weight.
|
|
Discovery of her connection to Kael is a late-investigation revelation.
|
|
binding: named
|
|
named_npc: "npc:naia-tamm"
|
|
must_have_motivation: CIVILIAN
|
|
|
|
- role: evidence-holder
|
|
display_hint: >
|
|
Sera Venn. Detective's FRIEND. Commission field tech.
|
|
She has noticed Kael's manifest discrepancies but hasn't reported them —
|
|
she knows Naia, and filing means Kael's arrest and Naia's exposure.
|
|
Her silence IS the detective's investigation blocker in phase 1.
|
|
binding: named
|
|
named_npc: "npc:sera-venn"
|
|
must_have_pattern: FRIEND
|
|
must_have_motivation: WITNESS
|
|
|
|
- role: ring-operative
|
|
display_hint: >
|
|
The ring's operational member in maintenance corridors.
|
|
Handles physical drops. Not a speaking character — observable behavior only.
|
|
Can be the anonymous contact Kael meets.
|
|
binding: named
|
|
named_npc: "npc:nils-davan"
|
|
is_optional: false
|
|
|
|
- role: institutional-watcher
|
|
display_hint: >
|
|
Maret Korr. A Commission observer embedded at The Terminal.
|
|
Her growing attention is the external pressure that accelerates the timeline.
|
|
She doesn't know about the ring specifically — she's tracking cargo patterns.
|
|
binding: named
|
|
named_npc: "npc:maret-korr"
|
|
must_have_motivation: OPERATOR
|
|
is_optional: true # Module runs without Maret, but with degraded tension arc
|
|
|
|
# ── EVENTS ───────────────────────────────────────────────────────────────────
|
|
# Two sequences + one pool.
|
|
# Sequence A: Kael's exit arc (the FRIEND contradiction backbone)
|
|
# Sequence B: Investigation pressure arc (escalating discovery opportunities)
|
|
# Pool: ambient ring activity (fires opportunistically throughout the module)
|
|
|
|
events:
|
|
|
|
sequences:
|
|
|
|
# SEQUENCE A: Kael's Exit Arc
|
|
# The narrative spine. Each step makes Kael's contradiction more visible.
|
|
# Observable to both characters, interpreted differently.
|
|
|
|
- sequence_id: kael_exit_arc
|
|
label: "Kael's Exit Arc"
|
|
description: >
|
|
Kael Davan's progressive attempt to leave the ring.
|
|
Tells intensify. Routine deviations appear. The secret meeting is the
|
|
pivot point — after it fires, both characters' understanding shifts.
|
|
steps:
|
|
|
|
- event_id: kael_goes_cold
|
|
label: "Kael Goes Cold"
|
|
description: >
|
|
Kael starts missing social patterns he'd normally keep — fewer bar visits,
|
|
shorter responses at The Terminal, leaving early. His tell system activates:
|
|
the shoulder-check behavior appears. Nothing dramatic. Just absence where
|
|
there was presence. The smuggler notices because they work together.
|
|
The detective might notice if they've been tracking Kael's baseline.
|
|
triggers:
|
|
- type: ticks_since_activation
|
|
ticks: 300 # ~5 minutes after module activates
|
|
effects:
|
|
- type: npc_routine_deviation
|
|
npc_role: ring-member-exiting
|
|
description: >
|
|
Kael skips his usual post-shift drink at The Last Shift.
|
|
Leaves the terminal 15 minutes early. No explanation.
|
|
- type: tell_intensify
|
|
npc_role: ring-member-exiting
|
|
description: >
|
|
Kael's shoulder-check behavior activates at The Terminal.
|
|
Visible to any character with forward vision cone in his direction.
|
|
sets_flag: kael_behavior_changed
|
|
|
|
- event_id: drop_happens_without_kael
|
|
label: "Scheduled Drop — Kael Absent"
|
|
description: >
|
|
A ring drop occurs in maintenance corridor C-7. Kael was supposed
|
|
to verify the cargo. He wasn't there. Nils covered it.
|
|
The smuggler notices the irregularity in the paperwork.
|
|
The detective — if watching cargo patterns — sees a manifest entry
|
|
with no verifying signature where one is normally present.
|
|
triggers:
|
|
- type: ticks_since_event
|
|
after_event: kael_goes_cold
|
|
ticks: 450 # ~7.5 minutes after goes-cold
|
|
effects:
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.kael_missed_verification"
|
|
discoverable_by: any
|
|
discovery_method: >
|
|
Smuggler: check the cargo manifest in The Terminal office.
|
|
Detective: analytical lattice flags unsigned verification entry.
|
|
- type: location_state
|
|
location: maintenance-corridors
|
|
description: "An unsigned cargo verification entry exists in corridor C-7's log."
|
|
sets_flag: kael_missed_drop
|
|
|
|
- event_id: kael_secret_meeting
|
|
label: "Kael's Secret Meeting"
|
|
description: >
|
|
Kael meets an off-district contact in maintenance corridor B-7.
|
|
This is the observable contradiction (D-034): Kael, in a restricted
|
|
area he has no logged reason to be in, talking to someone who's
|
|
not in any district NPC roster. His body language is tense.
|
|
If the player is in visual range: this is the pivot moment.
|
|
If not: the meeting happens anyway — the world doesn't wait.
|
|
triggers:
|
|
- type: ticks_since_event
|
|
after_event: drop_happens_without_kael
|
|
ticks: 600 # ~10 minutes after the dropped verification
|
|
- type: player_proximity
|
|
target_type: location
|
|
target: maintenance-corridors
|
|
radius_tiles: 12 # Player wandering near triggers the meeting early
|
|
effects:
|
|
- type: npc_routine_deviation
|
|
npc_role: ring-member-exiting
|
|
description: >
|
|
Kael enters maintenance corridor B-7. Locked door to restricted
|
|
supply closet. Emerges with the ring-operative 8 minutes later.
|
|
Neither acknowledges the encounter publicly.
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.kael_unauthorized_corridor_access"
|
|
discoverable_by: any
|
|
discovery_method: >
|
|
Player must be in visual range of corridor B-7.
|
|
Or examine the corridor door access log (investigative action).
|
|
- type: tell_intensify
|
|
npc_role: ring-member-exiting
|
|
description: >
|
|
After the meeting, Kael's shoulder-check frequency doubles.
|
|
Also: he avoids eye contact with the smuggler at The Terminal.
|
|
sets_flag: secret_meeting_occurred
|
|
|
|
- event_id: kael_sends_message
|
|
label: "Kael Sends the Message"
|
|
description: >
|
|
Kael sends an encrypted Meridian message to an off-district contact.
|
|
The detective's analytical lattice can detect an anomalous outgoing
|
|
packet from the district node — not the content, just the pattern
|
|
(frequent, encrypted, sent from cargo bay terminals, not personal devices).
|
|
The smuggler won't see this unless they're specifically watching Kael.
|
|
triggers:
|
|
- type: ticks_since_event
|
|
after_event: kael_secret_meeting
|
|
ticks: 200
|
|
effects:
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.kael_unusual_meridian_activity"
|
|
discoverable_by: detective
|
|
discovery_method: >
|
|
Detective's analytical lattice flags the outgoing packet pattern.
|
|
Requires player to be in or adjacent to The Terminal cargo bay.
|
|
sets_flag: kael_message_sent
|
|
|
|
- event_id: ring_leader_confronts_kael
|
|
label: "Voss Confronts Kael"
|
|
description: >
|
|
Voss calls Kael into The Terminal supervisor's office.
|
|
Closed door. Raised voices (audible only from adjacent room/position).
|
|
Kael emerges pale. Voss emerges neutral. The smuggler can witness
|
|
the approach/departure without hearing content. The detective can
|
|
observe Kael's state immediately after if in The Terminal.
|
|
This is Voss applying pressure. Kael is now visibly under strain.
|
|
triggers:
|
|
- type: flag_set
|
|
flag: kael_message_sent
|
|
- type: ticks_since_event
|
|
after_event: kael_message_sent
|
|
ticks: 400
|
|
effects:
|
|
- type: npc_routine_deviation
|
|
npc_role: ring-leader
|
|
description: "Voss calls Kael into the supervisor's office. Door closed."
|
|
- type: npc_routine_deviation
|
|
npc_role: ring-member-exiting
|
|
description: >
|
|
Kael emerges from the meeting looking strained. His shoulder-check
|
|
is now constant. He takes an unscheduled break outside, alone.
|
|
- type: tell_intensify
|
|
npc_role: ring-member-exiting
|
|
description: >
|
|
Kael's contentment hits lowest observed level. He now actively avoids
|
|
the ring-operative (Nils) in public. The disconnection is visible.
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.voss_kael_private_meeting"
|
|
discoverable_by: any
|
|
discovery_method: >
|
|
Observe the meeting room door (spatial). Or ask Kael directly
|
|
after (trust-gated dialogue unlocks "Are you alright?" option).
|
|
sets_flag: voss_pressure_applied
|
|
|
|
# SEQUENCE B: Investigation Pressure Arc
|
|
# External pressure that escalates the timeline.
|
|
# Fires in parallel with Sequence A.
|
|
|
|
- sequence_id: investigation_pressure
|
|
label: "Investigation Pressure Arc"
|
|
description: >
|
|
Maret Korr's institutional attention creates a closing window.
|
|
Her growing interest is the reason the module can't stay in equilibrium forever.
|
|
She doesn't know about the ring — she's a pattern-watcher. But patterns
|
|
are what the detective investigates too. Their paths converge.
|
|
steps:
|
|
|
|
- event_id: maret_flags_anomaly
|
|
label: "Maret Flags the Cargo Anomaly"
|
|
description: >
|
|
Maret Korr files an internal Commission note flagging The Terminal's
|
|
cargo variance rate as statistically unusual. Not an investigation —
|
|
just a flag. The detective's institutional access can pull this note.
|
|
The smuggler has no way to know it exists (unless the detective tells them).
|
|
triggers:
|
|
- type: ticks_since_activation
|
|
ticks: 900 # ~15 minutes after activation
|
|
effects:
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.commission_cargo_flag"
|
|
discoverable_by: detective
|
|
discovery_method: >
|
|
Detective queries Commission data via institutional access
|
|
(authority access tier, Terminal records).
|
|
sets_flag: commission_flag_exists
|
|
|
|
- event_id: maret_increases_presence
|
|
label: "Maret Increases Her Presence"
|
|
description: >
|
|
Maret starts spending more time in The Terminal. More frequent
|
|
walkthroughs during shift changes. Her attention to the cargo bay
|
|
area is noticeable to anyone watching. Ring members are unnerved.
|
|
Voss starts accelerating the timeline to close operations before
|
|
institutional attention becomes formal investigation.
|
|
triggers:
|
|
- type: ticks_since_event
|
|
after_event: maret_flags_anomaly
|
|
ticks: 600
|
|
- type: player_action
|
|
action: examine
|
|
target_role: institutional-watcher
|
|
effects:
|
|
- type: npc_routine_deviation
|
|
npc_role: institutional-watcher
|
|
description: >
|
|
Maret adds two extra Terminal walkthroughs per shift cycle.
|
|
Spends 15 minutes studying the cargo bay manifest terminals.
|
|
- type: tell_intensify
|
|
npc_role: ring-leader
|
|
description: >
|
|
Voss becomes quieter, more deliberate. Less casual conversation.
|
|
His tell — the stillness before speaking — becomes more frequent.
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.voss_accelerating_timeline"
|
|
discoverable_by: any
|
|
discovery_method: >
|
|
Smuggler: Voss mentions "the schedule moving up" in a guarded
|
|
conversation (trust-gated, ring-insider access required).
|
|
Detective: observe Voss and Nils in two exchanges within same shift.
|
|
sets_flag: timeline_accelerating
|
|
|
|
- event_id: final_shipment_scheduled
|
|
label: "The Final Shipment Is Scheduled"
|
|
description: >
|
|
The ring schedules the last major drop — after this, they go dark.
|
|
This is the closing window. If the detective hasn't uncovered enough
|
|
by the time this fires, the ring disperses and the operation closes
|
|
without exposure (escaped outcome). If they have, confrontation
|
|
becomes unavoidable. The smuggler knows about this drop. Kael doesn't
|
|
want to participate. Voss insists.
|
|
triggers:
|
|
- type: flag_set
|
|
flag: timeline_accelerating
|
|
- type: ticks_since_event
|
|
after_event: maret_increases_presence
|
|
ticks: 800
|
|
effects:
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.final_shipment_scheduled"
|
|
discoverable_by: any
|
|
discovery_method: >
|
|
Smuggler: direct notification from Voss.
|
|
Detective: cargo manifest shows an unusual large entry for 3 days out.
|
|
- type: npc_routine_deviation
|
|
npc_role: ring-member-exiting
|
|
description: >
|
|
Kael's schedule changes: he's assigned to the cargo bay
|
|
during the drop window. He doesn't want to be there.
|
|
sets_flag: final_shipment_known
|
|
|
|
pools:
|
|
|
|
# POOL: Ambient ring activity — opportunistic events that add texture
|
|
- pool_id: ambient_ring_activity
|
|
label: "Ambient Ring Activity"
|
|
description: >
|
|
Low-level ring business that happens throughout the module regardless of
|
|
player engagement. Creates the sense that the ring exists independently.
|
|
Players who look closely will find more; players who don't still feel the world moving.
|
|
events:
|
|
- event_id: cargo_discrepancy_appears
|
|
label: "Small Cargo Discrepancy Appears"
|
|
description: >
|
|
A minor manifest irregularity appears in The Terminal records.
|
|
Small enough to be deniable. Systematic enough to be a pattern.
|
|
The detective's analytical lattice may flag it. The smuggler can
|
|
correct it if they notice it — covering tracks is part of their role.
|
|
triggers:
|
|
- type: ticks_since_activation
|
|
ticks: 150 # Fires early and repeats
|
|
effects:
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.cargo_discrepancy_pattern"
|
|
discoverable_by: any
|
|
discovery_method: >
|
|
Detective: analytical lattice flags during Terminal walkthrough.
|
|
Smuggler: check manifest terminals (or get flagged by the discrepancy
|
|
in their own work).
|
|
once: false # Repeats — pattern builds over time
|
|
|
|
- event_id: sera_avoids_torek
|
|
label: "Sera Avoids Torek at The Bar"
|
|
description: >
|
|
Sera Venn reroutes her usual path through The Last Shift to avoid
|
|
standing near Torek Lintar (the Commission enforcement officer).
|
|
Anyone watching Sera's normal pattern would notice.
|
|
This is the detective's first clue that Sera's behavior is odd.
|
|
triggers:
|
|
- type: ticks_since_activation
|
|
ticks: 500
|
|
effects:
|
|
- type: npc_routine_deviation
|
|
npc_role: evidence-holder
|
|
description: >
|
|
Sera takes a longer route to her usual seat, passing through
|
|
the back of the bar to avoid Torek's sightline.
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.sera_avoidance_behavior"
|
|
discoverable_by: detective
|
|
discovery_method: >
|
|
Observe Sera's path through the bar on two separate occasions.
|
|
Requires forward vision cone and awareness of her baseline route.
|
|
once: false
|
|
|
|
- event_id: nils_makes_supply_run
|
|
label: "Nils Makes an Unscheduled Supply Run"
|
|
description: >
|
|
The ring-operative (Nils) enters the maintenance corridors with a
|
|
small container logged as "calibration tools". The container isn't
|
|
logged for return. Someone paying attention to cargo flow would notice.
|
|
triggers:
|
|
- type: ticks_since_activation
|
|
ticks: 700
|
|
effects:
|
|
- type: npc_routine_deviation
|
|
npc_role: ring-operative
|
|
description: "Nils takes a container to maintenance corridor C-7."
|
|
- type: fact_becomes_discoverable
|
|
fact_id: "ring.nils_unlogged_cargo"
|
|
discoverable_by: any
|
|
discovery_method: >
|
|
Watch Nils's cargo handling pattern over two shifts.
|
|
Or examine maintenance corridor C-7 access log.
|
|
once: false
|
|
|
|
# ── OUTCOMES ─────────────────────────────────────────────────────────────────
|
|
# Five resolution states. Checked each tick after the first sequence step fires.
|
|
# Order matters — the storyteller applies the first matching outcome.
|
|
# is_terminal: true ends the module.
|
|
|
|
outcomes:
|
|
|
|
# 1. RING EXPOSED
|
|
# Detective successfully uncovers the operation.
|
|
# Commission becomes involved. Arrests/flight follow.
|
|
- outcome_id: ring_exposed
|
|
label: "Ring Exposed"
|
|
is_terminal: true
|
|
description: >
|
|
The detective accumulates enough evidence to trigger a formal Commission
|
|
inquiry. The ring collapses: arrests, flight, or both. Voss is detained.
|
|
Kael's situation is now public. The smuggler (if played) faces consequences.
|
|
Naia learns what Kael was doing — and why he was trying to leave.
|
|
No clean endings. The right outcome for the detective who goes all the way.
|
|
conditions:
|
|
facts_known:
|
|
- "ring.cargo_discrepancy_pattern"
|
|
- "ring.kael_unauthorized_corridor_access"
|
|
- "ring.voss_kael_private_meeting"
|
|
flags_set:
|
|
- secret_meeting_occurred # set by kael_secret_meeting event
|
|
- commission_flag_exists # Commission was watching before exposure
|
|
effects:
|
|
- type: npc_disposition
|
|
npc_role: ring-leader
|
|
shift: hostile
|
|
description: "Voss is detained or flees. Commission inquiry opens."
|
|
- type: npc_disposition
|
|
npc_role: ring-member-exiting
|
|
shift: hostile
|
|
description: >
|
|
Kael is arrested or disappears. His exit attempt is now moot.
|
|
His relationship with Naia is exposed.
|
|
- type: faction_reaction
|
|
faction: lattice-commission
|
|
reaction: grateful
|
|
description: "Commission credits the detective's investigation."
|
|
- type: npc_exit
|
|
npc_role: ring-leader
|
|
description: "Voss leaves the district — detained, fled, or both."
|
|
|
|
# 2. KAEL ESCAPES THE RING
|
|
# Unique path. Requires the player to engage with Kael directly
|
|
# and choose to help him rather than expose the ring wholesale.
|
|
- outcome_id: kael_escapes
|
|
label: "Kael Escapes the Ring"
|
|
is_terminal: true
|
|
description: >
|
|
Through the player's choices — helping Kael cover his exit, or warning him,
|
|
or simply choosing not to act on what they know — Kael successfully leaves
|
|
the ring before the final shipment. He and Naia leave the district quietly.
|
|
The ring continues without him, smaller and more cautious.
|
|
This outcome requires discovering Kael's secret AND choosing restraint.
|
|
The smuggler can engineer this by covering for Kael with Voss.
|
|
The detective can achieve this by confronting Kael privately rather than
|
|
filing a report. The most morally complicated path.
|
|
conditions:
|
|
facts_known:
|
|
- "ring.kael_unauthorized_corridor_access"
|
|
flags_set:
|
|
- kael_behavior_changed # set by kael_goes_cold — his exit arc begins here
|
|
- secret_meeting_occurred # set by kael_secret_meeting — the pivot moment
|
|
- voss_pressure_applied # set by ring_leader_confronts_kael — pressure applied
|
|
# ring_exposed is checked first in the outcomes list and is terminal,
|
|
# so kael_escapes only evaluates if ring_exposed hasn't fired.
|
|
# No flags_not_set needed here — outcome ordering handles priority.
|
|
effects:
|
|
- type: npc_disposition
|
|
npc_role: ring-member-exiting
|
|
shift: friendly
|
|
description: "Kael remembers whoever helped him. He's gone, but grateful."
|
|
- type: npc_exit
|
|
npc_role: ring-member-exiting
|
|
description: "Kael and Naia leave Sova Transit District."
|
|
- type: faction_reaction
|
|
faction: the-ring
|
|
reaction: suspicious
|
|
description: "The ring is destabilized by Kael's exit. Voss is alert to further leaks."
|
|
|
|
# 3. RING COMPLETES OPERATION
|
|
# The ring finishes the final shipment and goes dark before discovery.
|
|
# Default path if the detective doesn't move fast enough.
|
|
- outcome_id: ring_completes
|
|
label: "Ring Completes the Operation"
|
|
is_terminal: true
|
|
description: >
|
|
The final shipment clears. The ring disperses. Voss transfers. Nils goes quiet.
|
|
Kael stays — he's now out by default, the ring having dissolved around him.
|
|
The evidence trail goes cold. The detective closes the case as inconclusive.
|
|
The smuggler completes their last run and waits to see if there's another.
|
|
Unsatisfying only if you expected a tidy resolution. The world moved on.
|
|
conditions:
|
|
flags_set:
|
|
- final_shipment_known # set by final_shipment_scheduled event
|
|
- timeline_accelerating # set by maret_increases_presence — Maret forced their hand
|
|
facts_not_known:
|
|
- "ring.cargo_discrepancy_pattern" # detective never found the basic pattern — no investigation
|
|
ticks_since_activation: 3600 # Module ran for ~60 minutes without full exposure
|
|
# kael_message_sent was previously gated here but auto-fires at tick ~1550,
|
|
# making this outcome permanently unreachable. Replaced with player-action fact gate.
|
|
effects:
|
|
- type: faction_reaction
|
|
faction: the-ring
|
|
reaction: neutral
|
|
description: "The ring successfully completed this operation. They'll be back."
|
|
- type: npc_exit
|
|
npc_role: ring-leader
|
|
description: "Voss transfers to another station for 'career development'."
|
|
- type: location_access_change
|
|
location: maintenance-corridors
|
|
change: open
|
|
description: "The restricted supply closet is now empty. Access log shows it cleared."
|
|
|
|
# 4. RING SPLINTERS
|
|
# Partial discovery. The ring fractures but doesn't fully collapse.
|
|
# An incomplete ending that leaves threads for future investigation.
|
|
- outcome_id: ring_splinters
|
|
label: "Ring Splinters"
|
|
is_terminal: false # Not terminal — splinter state can evolve
|
|
description: >
|
|
Enough evidence surfaces that the ring knows it's been partially seen.
|
|
Voss shuts down active operations. Nils disappears. Kael stays — now the
|
|
one person in the district who knows what happened and has no one to tell.
|
|
The formal investigation stalls for lack of a clear chain of evidence.
|
|
The detective has facts but not the complete picture. The smuggler
|
|
faces an awkward return to normalcy. Both know the ring isn't gone — just quiet.
|
|
conditions:
|
|
facts_known:
|
|
- "ring.cargo_discrepancy_pattern" # detective found some evidence — ring responds
|
|
events_fired:
|
|
- kael_goes_cold # event ID — Kael's behavioral shift fired
|
|
flags_set:
|
|
- kael_missed_drop # set by drop_happens_without_kael — ring destabilized
|
|
ticks_since_activation: 2400
|
|
# Mutually exclusive with ring_completes via facts_known/facts_not_known on
|
|
# ring.cargo_discrepancy_pattern. No auto-flag gate needed.
|
|
effects:
|
|
- type: npc_disposition
|
|
npc_role: ring-leader
|
|
shift: suspicious
|
|
description: "Voss goes quiet. He's watching to see who knows what."
|
|
- type: npc_exit
|
|
npc_role: ring-operative
|
|
description: "Nils stops appearing at The Terminal. Transferred, officially."
|
|
- type: faction_reaction
|
|
faction: the-ring
|
|
reaction: suspicious
|
|
description: "The ring is alerted to exposure risk. Future operations will be more careful."
|
|
|
|
# 5. INVESTIGATION STALLS (post-splinter exit)
|
|
# The ring splinters but the detective never breaks through to the pivot evidence.
|
|
# Explicit terminal exit for the non-terminal ring_splinters state.
|
|
- outcome_id: ring_stalemate
|
|
label: "Investigation Stalls"
|
|
is_terminal: true
|
|
description: >
|
|
The ring went dark after the splinter. The detective has the cargo discrepancy
|
|
on record — enough to flag, not enough to pursue. The case stays open but cold.
|
|
No arrests. No answers. Kael stays in the district, the only person who knows
|
|
the full shape of what happened, with no one left to tell it to.
|
|
The ring will reconstitute elsewhere. It always does.
|
|
conditions:
|
|
facts_known:
|
|
- "ring.cargo_discrepancy_pattern" # ring_splinters already fired (same gate)
|
|
facts_not_known:
|
|
- "ring.kael_unauthorized_corridor_access" # detective never reached the pivot evidence
|
|
flags_set:
|
|
- kael_missed_drop
|
|
- final_shipment_known # ring finished while investigation stalled
|
|
ticks_since_activation: 4500 # 2100 ticks after ring_splinters window — investigation ran cold
|
|
effects:
|
|
- type: faction_reaction
|
|
faction: lattice-commission
|
|
reaction: neutral
|
|
description: "The discrepancy flag stays in Maret's file. No follow-up action."
|
|
- type: npc_exit
|
|
npc_role: ring-leader
|
|
description: "Voss quietly transfers. No announcement, no incident report."
|
|
|
|
# 6. MODULE EXPIRY (quiet exit)
|
|
# Player never engaged at all. Module times out without drama.
|
|
# NOTE (Gestalt, Sprint 18): Condition uses facts_not_known, not flags_not_set.
|
|
# kael_behavior_changed fires automatically at tick 300 (time-triggered), making
|
|
# flags_not_set: [kael_behavior_changed] permanently false after tick 300.
|
|
# Gate expiry on player-action-required facts instead.
|
|
- outcome_id: module_abandoned
|
|
label: "Module Abandoned"
|
|
is_terminal: true
|
|
is_expiry: true
|
|
description: >
|
|
The player never engaged with the ring's signals. The final shipment
|
|
completed without incident. The ring disperses on its own schedule.
|
|
Kael stays. The world is unchanged. This is not failure — it's the game
|
|
acknowledging that not every conspiracy needs a protagonist.
|
|
The 70% mundane majority (D-029) plays out: life continued.
|
|
conditions:
|
|
facts_not_known:
|
|
- "ring.cargo_discrepancy_pattern" # Only known via player examination of terminal
|
|
- "ring.kael_unauthorized_corridor_access" # Only known via player observing Kael in B-7
|
|
ticks_since_activation: 5400 # ~90 minutes with zero player investigation
|
|
effects:
|
|
- type: faction_reaction
|
|
faction: the-ring
|
|
reaction: neutral
|
|
description: "The ring closed operations without incident. No record of compromise."
|