implemented SC-101

This commit is contained in:
2026-08-15 13:45:07 +02:00
parent 57bc10ba79
commit e5f41bde07
3 changed files with 33 additions and 26 deletions
@@ -79,4 +79,12 @@ title: Declarations
<<declare $errand_door_list = false as bool>>
<<declare $errand_find_contact = false as bool>>
<<declare $errand_ask_about_name = false as bool>>
// Player name substitution. Uppercase [PC] in the Skill Bible means the full,
// formal form (STANDING ORDER, PROVENANCE); lowercase [pc] means the familiar
// short form (CONFLUENCE, FACEWORK). Two variables, not one — collapsing them
// loses a characterisation rule the bible states for four separate voices.
// Defaults are placeholders; naming the PC is design's call.
<<declare $player_name = "Vesper" as string>>
<<declare $player_name_full = "Vesper Adaire" as string>>
===
@@ -1,10 +1,10 @@
// The door. Scene files stay thin: they set the stage, detour into character
// nodes for the actual talking, then branch on the outcome.
//
// `Start` is the DialogueRunner's entry node (set on the Dialogue System
// prefab), so this is where the game begins.
// Reached from SC-101's exit placeholder (TODO(SC101-EXIT)). The game's
// DialogueRunner entry is `Start` in Scenes/SC101.yarn.
title: Start
title: Entrance_Door
---
Narrator: Neon bleeds across wet asphalt. The queue hasn't moved in ten minutes.
<<detour Bouncer_Talk>>
@@ -7,10 +7,10 @@
// stack types so trust becomes an artifact of imbalance.
// See Assets/Candidates/candidates.json.
//
// Discovery order: hooks are independently reachable in any order via
// <<detour>> from the desk. Never <<if>>-guard a hook on another hook having
// fired, on any $self_lean_*, or on skill_rank(...). Never make a hook only
// reachable as fall-through from another.
// Beat order: hooks fire in sequence from SC101_Desk (STANDING ORDER →
// HOUSE POUR → FACEWORK → CONFLUENCE). Each remains an independently authored
// node. Never <<if>>-guard a hook on another hook having fired, on any
// $self_lean_*, or on skill_rank(...).
//
// Passive pattern (clue-bearing):
// one voice per hook, from the candidate's attached pair;
@@ -24,49 +24,48 @@
//
// Body stays neutral on purpose: no lean, no candidate attachment.
title: Start
---
<<jump SC101_Desk>>
===
title: SC101_Desk
---
<<set $seen_sc_101 = true>>
<<set $visited_desk = true>>
Narrator: A desk under a single lamp. The card is face-down. Your hands already know where the corners are.
-> Made Asset hook
<<detour SC101_Hook_MadeAsset>>
<<jump SC101_Desk>>
-> Journalist hook
<<detour SC101_Hook_Journalist>>
<<jump SC101_Desk>>
-> Inheritor hook
<<detour SC101_Hook_Inheritor>>
<<jump SC101_Desk>>
-> Neutral hook
<<detour SC101_Hook_Neutral>>
<<jump SC101_Desk>>
-> Leave the desk
Narrator: You leave the card where it is. The lamp keeps the shape of your hands on the blotter.
Narrator: The mahogany doors are too heavy for the hinges someone recently, badly, tightened — you feel the extra half-second of resistance before either side gives. Beyond them: a hall built for four hundred people politely disagreeing about tariffs, hosting perhaps sixty, none of whom look like they've read the programme.
Narrator: Someone left a card with your name on it at the registration desk three hours before you decided to come. You don't remember deciding.
<<detour SC101_Hook_Inheritor>>
<<detour SC101_Hook_Neutral>>
<<detour SC101_Hook_Journalist>>
<<detour SC101_Hook_MadeAsset>>
Narrator: You're drawn toward a seat — toward a waiting conversation you didn't agree to have yet.
// TODO(SC101-EXIT): temporary. Act I hub node is unnamed — guide §6.1.
<<jump Entrance_Door>>
===
title: SC101_Hook_MadeAsset
---
CONFLUENCE: You don't turn it over. You don't have to. The stock, the margin, the way the emboss catches — one, two, three, and three is the one. Which means somebody trained you for a card like this.
CONFLUENCE: One: the seating chart's alphabetical. Two: one gap in it, held open past the start time. Three, and three is the one, {$player_name}: whoever printed this knew you'd be late to your own arrival. Which means somebody in this room has already met you, {$player_name}, and you're the only one who doesn't know it.
<<set $found_made_asset_intuition = true>>
<<set $self_lean_made_asset += 1>>
===
title: SC101_Hook_Journalist
---
FACEWORK: Your throat tightens before you decide what the card is. Not curiosity. Recognition of a person you haven't named yet. That reaction is wrong for a story. It's right for a meeting.
FACEWORK: His hands gave it away before his face did — a flinch toward you, checked, turned into reaching for a drink that wasn't there. That's not a stranger's hands. What did you do to earn that flinch?
<<set $found_journalist_intuition = true>>
<<set $self_lean_journalist += 1>>
===
title: SC101_Hook_Inheritor
---
STANDING ORDER: You straighten the card so its top edge is parallel to the desk's. Nobody taught you that. You correct it anyway. The rule is older than you are, and it still applies.
STANDING ORDER: You are standing in a doorway, {$player_name_full}. That's the whole of what's certain. Build outward from there — a person who starts anywhere else is a person coming apart in public.
<<set $found_inheritor_intuition = true>>
<<set $self_lean_inheritor += 1>>
===
title: SC101_Hook_Neutral
---
HOUSE POUR: The lamp is warm enough. Your mouth is dry. Neither of those is information about who you are — only about how long you've been standing here.
HOUSE POUR: Cigar smoke, spilled aperitif, and under it — cold, sharp — the ammonia bite of a floor mopped in a hurry, love. Someone's trying to make this room smell like money. It smells like panic with good cologne on top.
===