refactor(simulation): move content/ under server/ (#669)

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>
This commit is contained in:
2026-03-17 10:31:20 +01:00
co-authored by Claude Opus 4.6
parent c0669489ff
commit b2ef56440f
73 changed files with 153 additions and 55 deletions
@@ -0,0 +1,41 @@
# 5 access tier values (D-035, D-028 Layer 1)
# Hard filter on every dialogue line — determines who can hear what
name: access-tiers
decision_ref: D-035
description: >
Access tiers control which dialogue lines are available to the player based
on their current social standing at the NPC's social site. This is a hard
filter — lines are invisible if access doesn't match. A line can be eligible
for multiple access tiers (access is a list). The detective's institutional
Commission lattice registers as 'authority'; the smuggler's ring membership
provides 'insider' access.
values:
- value: public
description: >
Available to anyone. Surface-level conversation, safe topics, the social
wallpaper that everyone hears. Greetings, weather, the local complaint.
- value: insider
description: >
Available to people who belong. Ring members, established regulars, anyone
the NPC considers part of their social group. The smuggler starts here at
the logistics hub.
- value: authority
description: >
Available to institutional figures. Commission agents, station security,
anyone with formal investigative standing. The detective's default tier.
NPCs are more careful, more formal, less revealing.
- value: peer
description: >
Available to social equals who have earned personal trust. Not institutional,
not group membership — individual relationship. Requires repeated positive
interactions. The tier where real conversation happens.
- value: hostile
description: >
Available when the relationship has broken down. Accusations, threats,
defensive responses. Activates when trust drops below threshold or after
a confrontation event.
@@ -0,0 +1,55 @@
# NPC activity types for routine scheduling
# Derived from Gestalt routine format + Miri cultural patterns (Sova Transit District)
name: activities
decision_ref: D-024
description: >
Activity categories for NPC routine entries. Each routine schedule entry has a
phase (morning/afternoon/evening/night) and an activity describing what the NPC
is doing. Activities are used by the observation event generator to determine
what the player sees when observing an NPC, and by the situation activation
system to set dialogue context.
values:
- value: working
description: On-shift job duties — processing cargo, inspecting manifests, operating equipment
- value: supervising
description: Overseeing others' work — shift supervisor role, checking quality, giving orders
- value: maintaining
description: Maintenance and repair tasks — fixing equipment, cleaning, infrastructure upkeep
- value: patrolling
description: Security rounds — checking access points, monitoring areas, enforcement presence
- value: socializing
description: Casual social interaction — chatting at the bar, break room conversation, gossip
- value: drinking
description: At The Last Shift or similar — consuming drinks, unwinding after shift
- value: eating
description: Meal time — food vendors, break room, bar food
- value: resting
description: Off-shift downtime — in quarters, low activity, recuperating
- value: commuting
description: Moving between locations — corridor transit, shift change movement
- value: gambling
description: Card game at the bar — the regular social ritual, information exchange venue
- value: trading
description: Legitimate commerce — buying, selling, negotiating, market activity
- value: operating
description: >
Ring operations — contraband handling, manifest doctoring, coordination.
Only visible to characters with sufficient knowledge or direct observation.
- value: waiting
description: Idle between activities — lingering, watching, killing time
- value: meeting
description: Arranged or coincidental encounter with specific NPCs — planned conversation
+34
View File
@@ -0,0 +1,34 @@
# 8 mood values (D-035, D-028 Layer 4)
# Mood tags for weighted dialogue selection
name: moods
decision_ref: D-035
description: >
NPC mood tags for Layer 4 weighted selection. The engine matches NPC current
mood state against line mood tags to weight selection. NPC mood changes based
on simulation events (triangle pressure, time of day, recent interactions).
Lines can be appropriate for multiple moods.
values:
- value: anxious
description: Anxious about something specific. Distracted, checking surroundings. (Renamed from 'worried' in Sprint 14.)
- value: frustrated
description: Blocked, irritated, empathetically distressed. Outward-directed tension. (Renamed from 'concerned' in Sprint 14.)
- value: content
description: At ease, relaxed. Default positive-neutral state. (Renamed from 'comfortable' in Sprint 14.)
- value: suspicious
description: Guarded, measuring words. Something feels off to this NPC.
- value: warm
description: Warm, affectionate. Genuine positive feeling toward the listener. (Renamed from 'fond' in Sprint 14.)
- value: hostile
description: Actively antagonistic. Trust broken, relationship damaged. (Added in Sprint 14.)
- value: relieved
description: Tension has eased. Something feared didn't happen, or a burden lifted.
- value: focused
description: Thoughtful, assessing, task-oriented. Processing information rather than emoting. (Renamed from 'analytical', merged with 'conflicted' in Sprint 14.)
@@ -0,0 +1,41 @@
# 6 functional motivations — System B (D-050)
# NPC functional role in the conspiracy/investigation structure
name: motivations
decision_ref: D-050
description: >
Functional motivations (System B) define an NPC's role relative to the
conspiracy and investigation structure. Combined with thematic patterns
(System A) to produce the full NPC generation model. Motivations are
uppercase enum values referenced by npc-profile.schema.json.
values:
- value: HANDLER
description: >
Manages or coordinates others within the ring structure. Has authority
over ring operations and knowledge of the network. Devra-type.
- value: WITNESS
description: >
Has seen or knows something significant, possibly without realizing it.
Their testimony or observations are valuable to the investigation.
- value: TURNCOAT
description: >
Wavering loyalty. Could flip sides given the right pressure or
incentive. The uncertain element in any conspiracy.
- value: CIVILIAN
description: >
Genuinely uninvolved. Their mundane concerns and daily life provide
the substrate that makes the conspiracy invisible. The honest majority.
- value: OPERATOR
description: >
Active participant in ring operations. Handles logistics, moves product,
takes direct action. Kael, Renn — the workers of the conspiracy.
- value: SKEPTIC
description: >
Questions the status quo — institutional, criminal, or both. May be
suspicious of the ring, critical of the Commission, or both. Asks
uncomfortable questions.
+57
View File
@@ -0,0 +1,57 @@
# 9 thematic patterns — System A (D-050)
# NPC archetype patterns for character generation and narrative role
name: patterns
decision_ref: D-050
description: >
Thematic patterns (System A) define an NPC's narrative archetype — their
structural role in the story. Combined with functional motivations (System B)
to produce the full NPC generation model. Patterns are uppercase enum values
referenced by npc-profile.schema.json.
values:
- value: FRIEND
description: >
Production-level complex NPC bonded to a playable character (D-034).
Full 10-axis depth, contradiction arc, multi-phase relationship.
One per playable character in v0.1.
- value: MIRROR
description: >
Reflects the player character's situation from a different angle.
What the player could become, or what they might have been.
- value: ANCHOR
description: >
Stabilizing presence in the community. The person everyone knows,
who provides continuity and normalcy. The bar owner, the shift lead.
- value: GHOST
description: >
Absent or barely-present figure whose influence is felt through
others. Referenced in dialogue, effects visible, person rarely seen.
- value: CATALYST
description: >
Triggers change in others. Their actions or arrival destabilize
existing equilibria. The new hire, the returning contact.
- value: THRESHOLD
description: >
Gatekeeper between social worlds. Controls access to information,
spaces, or people. Their cooperation or opposition shapes player options.
- value: REMNANT
description: >
Carries the past. Remembers how things were before the current
situation. Provides historical context and perspective.
- value: SYSTEM
description: >
Represents institutional power. Their actions reflect organizational
priorities, not personal ones. The Commission agent, the inspector.
- value: NOBODY
description: >
Deliberately flat. Social wallpaper with one memorable trait.
Part of the 30% truly flat population (D-029). Provides the noise
floor that makes investigation signal meaningful.
@@ -0,0 +1,60 @@
# 14 situation values (D-035, D-028 Layer 2)
# Situation context for dialogue line eligibility — engine-state-to-situation mapping
name: situations
decision_ref: D-035
description: >
Dialogue situation tags. The engine activates situations based on simulation
state (time of day, interaction history, NPC routine state, triangle pressure).
Content authors tag lines with situations; the engine decides which situations
are currently active for a given NPC encounter.
values:
- value: arrival
description: Player has just arrived at this location (first visit this game-day)
- value: shift_start
description: NPC is beginning their work shift — settling in, task-focused
- value: shift_end
description: NPC is wrapping up their work shift — tired, ready to leave
- value: shift_transition
description: >
The gap between shifts when oversight is thinnest. Key operational window
for the ring. People are moving, handoffs happening, attention divided.
- value: bar_evening
description: Social hours at The Last Shift — off-duty, relaxed, drinks flowing
- value: night_shift
description: Late hours, skeleton crew. Quieter, more intimate conversations.
- value: investigation
description: Player is actively asking pointed or probing questions
- value: confrontation
description: >
Triangle tension has escalated past the pressure threshold. NPCs are
agitated, defensive, or aggressive. Activated by triangle pressure system.
- value: social
description: NPC is in a social activity — bar, break room, casual conversation
- value: alone
description: NPC is by themselves, no other NPCs nearby
- value: emergency
description: An urgent event is occurring — alarm, accident, security incident
- value: routine
description: Normal daily activity, nothing notable happening
- value: observation
description: Player is watching from a distance, not directly interacting
- value: greeting
description: >
Initial contact phase of an encounter. Layer 2 (D-028) uses greeting lines
with access tier filtering to differentiate first meeting vs established vs
post-confrontation greetings. Added Sprint 8 amendment. NOTE: server
derive_situations() does not yet push Situation::Greeting — pending Rust update.
+44
View File
@@ -0,0 +1,44 @@
# 9 topic values (D-035, D-028 Layer 4)
# Topic tags for weighted dialogue selection
name: topics
decision_ref: D-035
description: >
Dialogue topic tags for Layer 4 weighted selection. The engine matches NPC
current concern topics against line topic tags to weight selection. Lines can
cover multiple topics. Note: 'crime' is deliberately excluded — NPCs think
of smuggling as 'cargo' or 'money', not crime. The dual-lens interpretation
is what makes those topics crime-adjacent for the detective.
values:
- value: colleague
description: Talk about coworkers, workplace relationships, team dynamics
- value: routine
description: Daily schedules, habits, shift patterns, the rhythm of station life
- value: cargo
description: >
Freight, manifests, shipments — setting-specific. For ring members,
this covers contraband discussion without calling it that.
- value: money
description: Finances, costs, wages, spending. The economic squeeze.
- value: trust
description: Reliability, loyalty, who can be counted on, who's changed
- value: danger
description: Threats, risks, things to watch out for, security concerns
- value: institution
description: >
The Commission, station administration, regulations, official procedures.
How institutional power affects daily life.
- value: personal
description: Family, health, aspirations, feelings — non-work life
- value: investigation
description: >
Direct references to the detective's work, evidence, suspicions.
Typically only surfaces at higher trust levels or under pressure.
+56
View File
@@ -0,0 +1,56 @@
# 9 monologue trigger types (D-035, D-032)
# What causes an internal monologue line to fire
name: triggers
decision_ref: D-035
description: >
Monologue trigger types. The observation event generator detects simulation
events and fires triggers consumed by the monologue system. Each trigger type
selects from character-specific pools (D-032 hard partition) and applies
prerequisite knowledge gates before selection.
values:
- value: enter_location
description: >
Player enters a new area. First impressions, atmosphere, spatial awareness.
"The Last Shift. Lera's already got my usual poured."
- value: observe_npc
description: >
Player sees an NPC doing something notable — an activity, a posture, a
tell. "Kael's at the corner booth. He looks rough tonight."
- value: hear_sound
description: >
Sound event from fog edge — voices through walls, footsteps in corridors,
machinery changes. The player interprets what they can't see.
- value: observe_anomaly
description: >
NPC deviates from known routine. The character notices something out of
place. "That's not where they usually go." Requires prerequisite knowledge
of the NPC's normal pattern.
- value: post_conversation
description: >
After dialogue ends. The character reflects on what was said, what wasn't
said, what felt off. Processing and interpretation.
- value: discover_evidence
description: >
Player examines an informational object — a manifest, a terminal, a
personal item. The character interprets what they find.
- value: witness_interaction
description: >
Player sees two NPCs interacting with each other. The character reads the
body language, the tone, the context. Social observation.
- value: time_idle
description: >
Player hasn't acted for a while. The character's mind wanders — ambient
thoughts, rumination, noticing background details.
- value: return_visit
description: >
Player returns to a previously visited area. Changed perspective, new
details noticed, comparison to last time. "Something's different."
@@ -0,0 +1,28 @@
# 3 trust tier values (D-035, D-028 Layer 3)
# Hard filter for trust-gated gossip disclosure
name: trust-tiers
decision_ref: D-035
description: >
Trust tiers control information disclosure depth. Each NPC tracks trust
progression per player character, starting at surface. Trust advances
through repeated positive interactions. This is a hard filter — lines at
'real' or 'secret' trust are invisible until the player earns that level.
values:
- value: surface
description: >
Default tier. Safe, non-committal responses. What the NPC tells
strangers and acquaintances. The public face.
- value: real
description: >
Earned through repeated positive interactions. The NPC shares genuine
opinions, workplace complaints, personal concerns. What they tell
people they trust.
- value: secret
description: >
Highest tier. The NPC reveals information they'd normally hide —
involvement in the ring, knowledge of the smuggling operation,
fears and vulnerabilities. Reaching this tier with THE FRIEND is
where the contradiction arc becomes explicit.