From da34b92421d89473a1ce4599b3ff96dd3cbe2ca4 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 24 Feb 2026 11:14:01 +0100 Subject: [PATCH] =?UTF-8?q?feat(content):=20author=20diegetic=20tutorial?= =?UTF-8?q?=20monologue=20lines=20=E2=80=94=20per=20character=20(#330)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 10 lines per character teaching 5 core mechanics diegetically: movement/exploration, fog of perception, sound model, NPC interaction, insert/HUD. Detective lines in analytical register, smuggler lines in street-smart fragments. Fires on first-time events (first_move, first_fog_encounter, first_sound_heard, first_npc_proximity, first_insert_open, etc.). _tut_ ID discriminator, cooldown -1. Co-Authored-By: Claude Opus 4.6 --- .../transit/monologue/detective/tutorial.yaml | 231 ++++++++++++++++++ .../transit/monologue/smuggler/tutorial.yaml | 216 ++++++++++++++++ 2 files changed, 447 insertions(+) create mode 100644 content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/tutorial.yaml create mode 100644 content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/tutorial.yaml diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/tutorial.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/tutorial.yaml new file mode 100644 index 000000000..103b9541f --- /dev/null +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/tutorial.yaml @@ -0,0 +1,231 @@ +character: detective +location: tutorial +lines: + # Diegetic Tutorial Monologue — Ticket #330 — Detective + # Authored per sprint-17 copy briefing and D-016 (internal monologue as core system). + # + # These lines teach mechanics through character voice — not UI instructions. + # Distinct from opening.yaml (which covers the first 5 minutes and sets voice/motivation). + # These fire on first-time events throughout gameplay, wherever they occur. + # + # Coverage: + # Movement / exploration — first_move, first_new_section + # Fog of perception — first_fog_encounter, first_fog_edge + # Sound model — first_sound_heard, first_off_screen_sound + # NPC interaction — first_npc_proximity, first_npc_face_read + # Insert / HUD — first_insert_open, first_insert_contact_flag + # + # Voice: analytical, procedure-oriented, careful. No contractions in analytical mode. + # Colon usage for categorization. 'Let's see what...' and 'Worth flagging' verbal tics. + # ID discriminator: _tut_ per sprint briefing. + # cooldown: -1 — fire once, never repeat. + # priority: tutorial — higher than general pool lines. + + # ----------------------------------------------------------------------- + # MOVEMENT / EXPLORATION + # ----------------------------------------------------------------------- + + - id: pc-detective_m_d_tut_001 + text: "Signage: section designators on the corridor wall. Commission-standard markings. Worth learning before the district learns me." + role: player_character + access: [public] + trust: surface + situation: [movement, exploration] + trigger: first_move + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, movement, navigation, analytical] + notes: > + Detective version of the 'check the signage' tutorial. Colon usage for the signage + label (section 2.2 verbal pattern). 'Commission-standard markings' — institutional + framing; he reads the environment through his professional lens first. 'Worth learning + before the district learns me' — dry awareness of his asymmetric visibility in this + community. Same teaching as the smuggler version, different cognitive frame. + + - id: pc-detective_m_d_tut_002 + text: "Three sections in range from the main terminal. Commission briefing had the layout. Let's confirm it against the floor." + role: player_character + access: [public] + trust: surface + situation: [movement, investigation] + trigger: first_new_section + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, movement, navigation, analytical] + notes: > + Fires on entering a new section for the first time. 'Commission briefing had the + layout' — he arrived with a map, now he's verifying it against reality. 'Let's + confirm it against the floor' — 'Let's' verbal tic, investigative method stated as + principle: documentation is a starting point, not a substitute for observation. + Teaches: the district has distinct sections to explore. + + # ----------------------------------------------------------------------- + # FOG OF PERCEPTION + # ----------------------------------------------------------------------- + + - id: pc-detective_m_d_tut_003 + text: "Visual range terminates at the corridor junction. Consistent with district atmo settings. Anything past that point: unconfirmed." + role: player_character + access: [public] + trust: surface + situation: [observation, exploration] + trigger: first_fog_encounter + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, fog, perception, analytical] + notes: > + Detective fog tutorial — analytical register throughout. 'Visual range terminates at' + instead of 'Can't see past.' 'Consistent with atmo settings' — he already knows this + is an environmental property, not an anomaly. 'Anything past that point: unconfirmed' + — colon usage, precise epistemic status. Teaches: perception boundary exists, and + the detective categorizes it as an information state, not a barrier. Compare to + smuggler's 'Might be worth checking' — same fog, different response. + + - id: pc-detective_m_d_tut_004 + text: "Can't clear the far bay from here. Going around is the procedure — not a limitation, a working condition." + role: player_character + access: [public] + trust: surface + situation: [observation] + trigger: first_fog_edge + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, fog, perception, analytical] + notes: > + Second fog encounter line — fires at a fog zone boundary. 'Going around is the + procedure' — detective frames the limitation as methodology. The second clause + ('not a limitation, a working condition') is self-instruction: he's telling himself + not to treat fog as frustrating but as standard operating environment. Teaches: + perception range is persistent throughout gameplay, and the correct response is + movement, not waiting. + + # ----------------------------------------------------------------------- + # SOUND MODEL + # ----------------------------------------------------------------------- + + - id: pc-detective_m_d_tut_005 + text: "Voices. Down the corridor. Source count indeterminate from here — distance degrades clarity." + role: player_character + access: [public] + trust: surface + situation: [observation] + trigger: first_sound_heard + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, sound, perception, analytical] + notes: > + Detective sound tutorial — analytical framing of the briefing's example. 'Source count + indeterminate' is the precise version of 'can't tell how many.' 'Distance degrades + clarity' — technical, causal. He hears, notes what he can establish (voices, direction) + and what he can't (count, content). No contractions. Teaches: sound channel is active + and distance-limited. Compare to smuggler's 'Can't make out the words' — same acoustic + reality, systematized differently. + + - id: pc-detective_m_d_tut_006 + text: "Footsteps. Metal-grated surface. Two sets minimum — moving away. Service access corridor, by the acoustic signature." + role: player_character + access: [public] + trust: surface + situation: [observation] + trigger: first_off_screen_sound + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, sound, perception, analytical] + notes: > + Second sound tutorial — fires on an off-screen audio source. The detective parses + the sound through multiple analytical dimensions: surface type, count, direction, + room type. 'Two sets minimum' — precise but not overclaiming. 'By the acoustic + signature' is technical terminology applied to diegetic audio interpretation. + Teaches: sound carries more than presence — floor type, distance, count, direction + are all extractable. The detective extracts all of them automatically. + + # ----------------------------------------------------------------------- + # NPC INTERACTION + # ----------------------------------------------------------------------- + + - id: pc-detective_m_d_tut_007 + text: "Civilians in range. Standard approach: observe before engaging. Let them surface what's relevant before directing the conversation." + role: player_character + access: [public] + trust: surface + situation: [social, observation] + trigger: first_npc_proximity + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, npc, interaction, analytical] + notes: > + Detective NPC tutorial — procedural, method-as-principle. 'Civilians in range' is + his categorization (Commission-trained: everyone is a witness category until proven + otherwise). 'Standard approach' — he has a protocol. 'Let them surface what's relevant' + is the investigative principle: don't prime witnesses, let them self-select information. + No contractions throughout. Teaches: NPC interaction is player-initiated and + approach-sensitive. Different method than the smuggler ('give them reason to') — + same outcome, different social model. + + - id: pc-detective_m_d_tut_008 + text: "Commission credentials flag on approach. They know who I am before I speak. Worth noting who adjusts their behavior." + role: player_character + access: [public] + trust: surface + situation: [social, investigation] + trigger: first_npc_face_read + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, npc, observation, analytical, authority] + notes: > + Fires when the player observes an NPC at close range. The detective's asymmetry: + his authority access tier makes him visible in ways the smuggler is not. NPCs react + to his presence before interaction begins. 'Worth noting who adjusts their behavior' + — 'Worth' verbal tic, sets up behavioral observation as investigation method. Teaches: + the detective's Commission credentials affect NPC behavior, and that behavioral + response is data. + + # ----------------------------------------------------------------------- + # INSERT / HUD + # ----------------------------------------------------------------------- + + - id: pc-detective_m_d_tut_009 + text: "Lattice overlay active: time, contact positions, flagged entities. Commission-linked. Standard procedure to keep it running." + role: player_character + access: [public] + trust: surface + situation: [routine] + trigger: first_insert_open + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, insert, hud, analytical] + notes: > + Detective insert tutorial. Colon usage: catalogs what the overlay contains. 'Commission- + linked' — institutional framing, establishes why the detective's HUD is denser than + the smuggler's. 'Standard procedure' — not a discovery, a protocol. Teaches: the + insert is an active investigation tool, not optional. Compare to smuggler's 'Should + show the time and nearby contacts' — same overlay, presented as procedural requirement + vs. operational check. + + - id: pc-detective_m_d_tut_010 + text: "Nine identity flags in range. Cross-referencing case file now. Let's see what matches." + role: player_character + access: [public] + trust: surface + situation: [investigation, routine] + trigger: first_insert_contact_flag + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, insert, hud, lattice, investigation] + notes: > + Fires when the insert first populates with flagged entities. Count given precisely + ('Nine identity flags'). 'Case file' — the detective's overlay cross-references a + pre-loaded investigation file, not just a general registry. 'Let's see what matches' + — 'Let's see what' verbal tic closing the tutorial sequence. Teaches: the detective's + insert is investigation-keyed, matching observed faces against case file entries. + This is why his overlay is analytically denser than the smuggler's. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/tutorial.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/tutorial.yaml new file mode 100644 index 000000000..7b7a1097a --- /dev/null +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/tutorial.yaml @@ -0,0 +1,216 @@ +character: smuggler +location: tutorial +lines: + # Diegetic Tutorial Monologue — Ticket #330 — Smuggler + # Authored per sprint-17 copy briefing and D-016 (internal monologue as core system). + # + # These lines teach mechanics through character voice — not UI instructions. + # Distinct from opening.yaml (which covers the first 5 minutes and sets voice/motivation). + # These fire on first-time events throughout gameplay, wherever they occur. + # + # Coverage: + # Movement / exploration — first_move, first_new_section + # Fog of perception — first_fog_encounter, first_fog_edge + # Sound model — first_sound_heard, first_off_screen_sound + # NPC interaction — first_npc_proximity, first_npc_face_read + # Insert / HUD — first_insert_open, first_insert_contact_flag + # + # Voice: observational, street-smart, practical. Fragments. Standalone "Good." as tic. + # No analytical distance — the smuggler reads, reacts, files, moves on. + # ID discriminator: _tut_ per sprint briefing. + # cooldown: -1 — fire once, never repeat. + # priority: tutorial — higher than general pool lines. + + # ----------------------------------------------------------------------- + # MOVEMENT / EXPLORATION + # ----------------------------------------------------------------------- + + - id: pc-smuggler_m_s_tut_001 + text: "These corridors all look the same. Mental note: check the signage." + role: player_character + access: [public] + trust: surface + situation: [movement, exploration] + trigger: first_move + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, movement, navigation] + notes: > + Directly from the sprint briefing example. First move teaches navigation: the district + looks homogeneous, signage is the tool. 'Mental note' is the smuggler's internal + flag for things to remember — operational housekeeping, not analysis. Establishes + early: this environment requires active spatial tracking. + + - id: pc-smuggler_m_s_tut_002 + text: "Two lefts past the junction, right at the supply hatch. That's dock four. Route's in the muscle now." + role: player_character + access: [public] + trust: surface + situation: [movement, routine] + trigger: first_new_section + mood: [content] + priority: tutorial + cooldown: -1 + tags: [tutorial, movement, navigation, operational] + notes: > + Fires on entering a new section for the first time. 'Route's in the muscle' — the + smuggler doesn't memorize spatially, she moves until it's automatic. Practical, + self-sufficient. Teaches: the district has multiple sections, each requires its own + orientation. 'Dock four' is a landmark. Forward movement is rewarded with familiarity. + + # ----------------------------------------------------------------------- + # FOG OF PERCEPTION + # ----------------------------------------------------------------------- + + - id: pc-smuggler_m_s_tut_003 + text: "Can't see past that corner. Might be worth checking." + role: player_character + access: [public] + trust: surface + situation: [observation, exploration] + trigger: first_fog_encounter + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, fog, perception] + notes: > + Directly from the sprint briefing example. First fog boundary. Restated as habit: + the smuggler doesn't treat the fog as a limitation, she treats every unknown corner + as a question worth answering. 'Might be worth' — not paranoia, just operational + instinct. Teaches: the perception boundary is navigable, not fixed. + + - id: pc-smuggler_m_s_tut_004 + text: "Haze cuts off past the junction. Anything in it — can't say." + role: player_character + access: [public] + trust: surface + situation: [observation] + trigger: first_fog_edge + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, fog, perception] + notes: > + Second fog encounter line — fires when the player reaches the boundary of a fog zone + (the edge of visible range). 'Can't say' — plain statement of unknowing, not anxiety. + The smuggler accepts incomplete information as a working condition, not a failure state. + Teaches: perception range is an ongoing factor, not a one-time obstacle. + + # ----------------------------------------------------------------------- + # SOUND MODEL + # ----------------------------------------------------------------------- + + - id: pc-smuggler_m_s_tut_005 + text: "Voices down the hall. Can't make out the words from here." + role: player_character + access: [public] + trust: surface + situation: [observation] + trigger: first_sound_heard + mood: [focused] + priority: tutorial + cooldown: -1 + tags: [tutorial, sound, perception] + notes: > + Directly from the sprint briefing example. First sound heard that's not immediately + visible. Teaching: sound carries information, but range and occlusion limit it. + 'Can't make out the words' establishes both the value of the sound channel (voices = + people = relevant) and its limitation (unclear at range). Moving toward source is + the implied next step. + + - id: pc-smuggler_m_s_tut_006 + text: "Footsteps. Two sets. Moving away — good." + role: player_character + access: [public] + trust: surface + situation: [observation] + trigger: first_off_screen_sound + mood: [content] + priority: tutorial + cooldown: -1 + tags: [tutorial, sound, perception, operational] + notes: > + Second sound line — fires when audio from an off-screen source is detected. The + smuggler parses footsteps as count and direction instinctively. 'Moving away — good.' + — the standalone 'Good.' tic applied to tactical assessment. Teaches: sound carries + directional and movement data, not just presence. Two sets = two people, which is + specific enough to be operationally useful. + + # ----------------------------------------------------------------------- + # NPC INTERACTION + # ----------------------------------------------------------------------- + + - id: pc-smuggler_m_s_tut_007 + text: "Could ask around. People talk if you give them reason to." + role: player_character + access: [public] + trust: surface + situation: [social, observation] + trigger: first_npc_proximity + mood: [content] + priority: tutorial + cooldown: -1 + tags: [tutorial, npc, interaction, social] + notes: > + Directly from the sprint briefing example. First time in range of an NPC. The smuggler + doesn't approach directly — she flags the option. 'Give them reason to' is street-smart + social knowledge: people don't volunteer freely, they need a hook. Teaches: NPC + interaction is player-initiated, and approach matters. No mechanics text — just the + character's own method stated as personal principle. + + - id: pc-smuggler_m_s_tut_008 + text: "Know the face. Don't need the name." + role: player_character + access: [public] + trust: surface + situation: [social, observation] + trigger: first_npc_face_read + mood: [content] + priority: tutorial + cooldown: -1 + tags: [tutorial, npc, observation, social] + notes: > + Fires when the player observes an NPC at close range (face visible). The smuggler + reads people by face, not by name — the name comes later if relevant. Teaches: NPCs + are identifiable by observation, and the insert overlay will fill in names when + available. The smuggler's social intelligence is pre-lattice, instinctive. + + # ----------------------------------------------------------------------- + # INSERT / HUD + # ----------------------------------------------------------------------- + + - id: pc-smuggler_m_s_tut_009 + text: "Check the overlay. Should show the time and nearby contacts." + role: player_character + access: [public] + trust: surface + situation: [routine] + trigger: first_insert_open + mood: [content] + priority: tutorial + cooldown: -1 + tags: [tutorial, insert, hud, operational] + notes: > + Directly from the sprint briefing example. First insert/HUD open. The smuggler's + overlay shows time and nearby contacts — both operationally critical. 'Should show' + — practical, not certain. Teaches: the insert is the primary tool for time-tracking + and NPC awareness. Diegetic: she checks it the same way she checks a shift board. + + - id: pc-smuggler_m_s_tut_010 + text: "Overlay marks Kael two sections over. Good." + role: player_character + access: [public] + trust: surface + situation: [routine, social] + trigger: first_insert_contact_flag + mood: [content, warm] + priority: tutorial + cooldown: -1 + tags: [tutorial, insert, hud, kael, friend-arc] + notes: > + Fires when the insert first flags a known contact (here: Kael, the FRIEND NPC). + 'Two sections over' — spatial data from the overlay. 'Good.' standalone tic — + warm, settling. Teaches: the insert shows known NPC positions in real-time. + Also seeds the Kael relationship: the smuggler checks his location as a habit, + not a task. His position is always relevant to her.