diff --git a/content/global/enums/access-tiers.yaml b/content/global/enums/access-tiers.yaml index 21412494d..a0ee720cc 100644 --- a/content/global/enums/access-tiers.yaml +++ b/content/global/enums/access-tiers.yaml @@ -1 +1,41 @@ -# Access tiers: public, insider, authority, peer, hostile +# 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. diff --git a/content/global/enums/activities.yaml b/content/global/enums/activities.yaml new file mode 100644 index 000000000..601365c27 --- /dev/null +++ b/content/global/enums/activities.yaml @@ -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 diff --git a/content/global/enums/moods.yaml b/content/global/enums/moods.yaml index c676a3f57..270015040 100644 --- a/content/global/enums/moods.yaml +++ b/content/global/enums/moods.yaml @@ -1 +1,36 @@ -# 8 mood values +# 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: fond + description: Warm, affectionate. Genuine positive feeling toward the listener. + + - value: comfortable + description: At ease, relaxed. Default positive-neutral state. + + - value: worried + description: Anxious about something specific. Distracted, checking surroundings. + + - value: suspicious + description: Guarded, measuring words. Something feels off to this NPC. + + - value: analytical + description: Thoughtful, assessing. Processing information rather than emoting. + + - value: conflicted + description: > + Torn between competing impulses. Loyalty vs. self-preservation, duty vs. + friendship. The mood of someone who hasn't decided what to do yet. + + - value: concerned + description: Worried about someone else's wellbeing. Empathetic distress. + + - value: relieved + description: Tension has eased. Something feared didn't happen, or a burden lifted. diff --git a/content/global/enums/motivations.yaml b/content/global/enums/motivations.yaml index aec994dca..8aff21d5c 100644 --- a/content/global/enums/motivations.yaml +++ b/content/global/enums/motivations.yaml @@ -1 +1,41 @@ -# 6 functional motivations (System B) +# 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. diff --git a/content/global/enums/patterns.yaml b/content/global/enums/patterns.yaml index 60ea55e39..b5ed47083 100644 --- a/content/global/enums/patterns.yaml +++ b/content/global/enums/patterns.yaml @@ -1 +1,57 @@ -# 9 thematic patterns (System A) +# 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. diff --git a/content/global/enums/situations.yaml b/content/global/enums/situations.yaml index f1c8245c7..820b44eb7 100644 --- a/content/global/enums/situations.yaml +++ b/content/global/enums/situations.yaml @@ -1 +1,53 @@ -# 13 situation values (D-035) +# 13 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 diff --git a/content/global/enums/topics.yaml b/content/global/enums/topics.yaml index c610c1bfc..0ec722333 100644 --- a/content/global/enums/topics.yaml +++ b/content/global/enums/topics.yaml @@ -1 +1,44 @@ -# 9 topic values +# 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. diff --git a/content/global/enums/triggers.yaml b/content/global/enums/triggers.yaml index c74009f32..7de1783b9 100644 --- a/content/global/enums/triggers.yaml +++ b/content/global/enums/triggers.yaml @@ -1 +1,56 @@ -# 9 monologue trigger types +# 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." diff --git a/content/global/enums/trust-tiers.yaml b/content/global/enums/trust-tiers.yaml index d5e8f8ae8..00f5c7b9f 100644 --- a/content/global/enums/trust-tiers.yaml +++ b/content/global/enums/trust-tiers.yaml @@ -1 +1,28 @@ -# Trust tiers: surface, real, secret +# 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. diff --git a/content/global/knowledge/entity-attributes.yaml b/content/global/knowledge/entity-attributes.yaml index c99baed2c..daf2070d7 100644 --- a/content/global/knowledge/entity-attributes.yaml +++ b/content/global/knowledge/entity-attributes.yaml @@ -1 +1,235 @@ -# Entity attributes — 16 canonical EntityKnowledge keys (D-055) +# Entity Knowledge Attributes — 16 canonical keys +# Source: D-024 (10-axis model), wiki-review workshop A7, v01-content-scoping workshop +# All keys are observer->target, stored in EntityKnowledge.known_attributes BTreeMap +# Reference: docs/wiki/knowledge/entity-attributes.md + +# Categories: identity (4), social (2), behavioral (2), leverage (2), investigation (2), role-perspective (4) +# History: 14 original keys + 4 new role-perspective keys + 2 renames (secret_held -> leverage_held, secret_confidence -> leverage_confidence) + +attributes: + + # --- Identity Attributes (4) --- + + - key: name + category: identity + value_type: freeform + description: > + Full name as known to the observer. If absent or generic, + monologue and dialogue use role descriptor instead. + examples: + - "Kael Davan" + - "Kael" + - "the dock worker" + + - key: role + category: identity + value_type: freeform + description: > + Occupational or social role. Default descriptor when name is unknown. + Used in access tier calculation. + examples: + - "dock worker" + - "shift supervisor" + - "bartender" + - "ring coordinator" + + - key: faction + category: identity + value_type: freeform + description: > + Institutional or organizational allegiance. Commission-tagged individuals + trigger different NPC behavior. Used for authority/peer dialogue filtering. + examples: + - "Commission" + - "civilian" + - "ring member" + - "unknown" + + - key: species + category: identity + value_type: freeform + description: > + Species identifier. Not load-bearing in v0.1 (all human). + Placeholder for future non-human NPCs. + examples: + - "human" + + # --- Social Attributes (2) --- + + - key: relationship_type + category: social + value_type: freeform + description: > + Relationship category from observer's perspective. + Drives RelationshipState calculation and monologue emotional tone. + examples: + - "colleague" + - "friend" + - "authority figure" + - "suspect" + - "partner" + - "stranger" + + - key: trust_level + category: social + value_type: enum + values: + - trusted + - reliable + - uncertain + - suspicious + - compromised + description: > + Trust assessment — observer's subjective judgment. Encompasses both the + read action and the state. No separate trust_read key. Gates trust-tier + dialogue (surface/real/secret). + + # --- Behavioral Attributes (2) --- + + - key: routine_pattern + category: behavioral + value_type: freeform + description: > + Observed routine description. Deviation detection triggers monologue + when current behavior doesn't match known pattern. + examples: + - "morning shift 06:00-14:00, bar after shift" + - "arrives 06:00, break 10:30, departs 14:00" + - "irregular schedule, seen at odd hours" + + - key: behavior_flags + category: behavioral + value_type: freeform + description: > + Comma-separated behavioral observations. Multiple flags accumulate + as evidence. Detective's analytical lattice auto-flags some behaviors. + examples: + - "nervous,lattice_checking" + - "avoidance_pattern,evasive" + - "spending_beyond_means" + - "reliable,punctual" + + # --- Leverage Attributes (2) --- + # Renamed from secret_held/secret_confidence per workshop A7 + + - key: leverage_held + category: leverage + value_type: freeform + renamed_from: secret_held + description: > + What the observer believes gives them power over this entity. + Covers secrets, debts, promises, obligations, and compromising positions. + Drives PersonOfInterest state. Gates confrontation dialogue. + examples: + - "ring membership" + - "unreported evidence" + - "gambling debt" + - "exit attempt" + - "owes favor to Voss" + + - key: leverage_confidence + category: leverage + value_type: enum + renamed_from: secret_confidence + values: + - suspected + - likely + - confirmed + description: > + How certain the observer is about the leverage. Suspected allows + fishing questions; confirmed enables direct confrontation. + + # --- Investigation Attributes (2) --- + + - key: tell_observed + category: investigation + value_type: freeform + description: > + Specific tell noted by observer. Captures the observer's interpretive + conclusion about behavior. Accumulated tells build case strength. + Monologue references specific tells when they recur. + examples: + - "looks left when lying" + - "leaves when Torek arrives" + - "checks lattice before answering" + - "forced casualness after shift supervisor passes" + implementation_note: > + Server may track tells via behavior_flags internally. tell_observed is + retained as a content-authoring key for its distinct narrative purpose. + + - key: contradiction_flagged + category: investigation + value_type: freeform + description: > + Boolean-ish flag — presence of value means contradiction detected. + THE FRIEND arc trigger. When set, monologue tone shifts, dialogue + options change, RelationshipState moves toward PersonOfInterest. + examples: + - "meeting_unknown_contact" + - "avoidance_inconsistency" + - "manifest_access_mismatch" + implementation_note: > + Server may track via behavior_flags with contradiction: prefix. + Retained as documented key for arc transition gating. + + # --- Role-Perspective Attributes (4 new per workshop A7) --- + # Same enums across all archetypes; interpretation is archetype-dependent. + # Smuggler reads "risk" as operational exposure; detective reads it as + # threat to investigation. See wiki entity-attributes.md for full mapping. + + - key: risk_assessment + category: role-perspective + value_type: enum + values: + - none + - low + - moderate + - high + - critical + description: > + Observer's assessment of how much danger this entity poses or attracts. + Gates operational monologue. High-risk triggers cautionary dialogue. + Nature of "risk" depends on observer archetype. + + - key: loyalty_assessment + category: role-perspective + value_type: enum + values: + - solid + - dependable + - uncertain + - wavering + - hostile + description: > + Observer's assessment of this entity's reliability and loyalty. + Determines how much the observer relies on or confides in the target. + Wavering triggers monitoring; hostile triggers defensive posture. + + - key: position_integrity + category: role-perspective + value_type: enum + values: + - solid + - thin + - cracking + - blown + - "N/A" + description: > + Observer's assessment of this entity's cover, position stability, + or facade status. When degraded, monologue reflects increasing anxiety + or strategic recalculation. N/A when cover concept does not apply. + + - key: moral_weight + category: role-perspective + value_type: enum + values: + - innocent + - peripheral + - complicit + - compromised + - willing + description: > + Observer's assessment of this entity's moral involvement. Shapes the + observer's moral arc and internal conflict. Smuggler assesses complicity + in ring operations; detective assesses culpability in the crime. + Same scale, different lens.