4.4 KiB
LANE-CONTENT — Door depth & the moral layer (Phase 3, parallel)
Executor: Opus 4.8. Branch: lane/content (from main after Phase 2).
Owns: src/scenes/door/, src/rules/, src/data/strings/ (door-related
files), tests. Prereq reading: CLAUDE.md → docs/GAME_DESIGN.md §3.1/§4 →
the Phase-2 REVIEW block in LANEHANDOVER.md.
Phase-2 reality (read before coding)
- The night is now a real flow:
NightSceneowns clock/meters/audio/save and aNightContext(see its interface —sfx,requestLocation,beatIntervalMsare new since Phase 1). Door and Floor run concurrently ALL night; the player toggles via the doorway ("step inside") and the floor's entry exit. - While the player is on the floor, Kayden rules the real queue in
DoorScene.kaydenRule()(admit 80%, samejudge(), no UV stamp 1-in-7 — stamp accuracy is decided inNightScene.onVerdict). - Heat is run-scoped and saved; 3rd strike ends the night AND the run
immediately (
endReason: 'licence'). Nights chain Thu→Fri→Sat viaNightSummaryScene.nextAction();save.tscarriesGameState. ui/Stamp+ sfx are live in the deny path;data/strings/door.tshasFAIL_TEXT.licence.
Deliverables (in priority order)
1. The Guest List clipboard (design §3.1 — specced, never built)
A desk clipboard panel: tonight's list (generated, 8–14 names, some misspelled
versions of real patron names). Patrons with claimsGuestList get a "'m on the
list" line when they step up; player cross-checks. knowsOwner patrons who are
DENIED trigger the existing furious-Dazza path (judge already scores this —
surface it: their step-up line should drop hints ("Terry said swing by"), and
data/strings/dazza.ts has the owner-scare text to foreshadow).
Misspelling rule: a name that ALMOST matches is usually legit (bad handwriting);
an exact-match name on a confident patron is sometimes a lift. Tells, not
certainty. Pure logic in rules/guestList.ts + tests.
2. Scripted moral encounters (design §4.3 — the heart)
2–3 scripted patrons injected per night by the generator override hook
(generatePatron(ctx, clockMin, archetypeOverride) + a new scripted-encounter
scheduler in rules/ or data/): the girl who needs back in to grab her mate
(no stamp, over capacity), the freshly-dumped regular who just wants one quiet
beer (already loose). Multi-beat dialogue via the existing toast/dialogue
patterns. Doing the human thing costs Vibe or risks Heat; the game never says
which choice was right. NO achievement chimes, no morality meter — the design
doc is explicit that this stays unscored.
3. The Inspector (archetype exists, does nothing yet)
Activate inspector: reads as a boring punter at the rope (their doll is
deliberately unremarkable). If admitted, they observe for ~30 clock-min:
any live breach in that window (capacity over licensed, a maggot on the floor,
underage inside) converts its deferred strike to IMMEDIATE. Then they leave and
Dazza texts "that was the INSPECTOR you muppet". If denied — nothing happens,
ever (they were just a quiet person; paranoia is the tax). Pure logic
rules/inspector.ts + tests; wiring via bus events only.
4. The Incident Report (design §3.3 — lying groundwork)
On the Night Summary: a short form (3–4 incidents sampled from
NightState.incidents) where the player picks a written account per incident —
truthful or flattering. Store both truth and account in
GameState.pastReports. Cross-night audit (contradictions → strikes) is
Phase 4; THIS lane only builds the form + storage + one taste: a lie about a
kayden incident can be contradicted by Kayden's own log line next morning
(Dazza text). Keep the form fast — 20 seconds, not homework.
5. Sobriety line-walk (stretch)
The third challenge: cursor-follow line at the desk. Only if 1–4 land clean.
Constraints
- All scoring through
judge()/meters:delta/heat:strike— no new direct meter paths. New events need a CONTRACT CHANGE REQUEST (declaration-merge bridges are BANNED now — request and wait for the fold). - Kayden must interact sanely with everything you add (e.g. he auto-admits guest-list liars — that's fine and funny; make sure it can't crash).
- Every pure module tested; play a full 3-night run before your handover and report what the run FELT like — the economy findings from Phase 1 are still open and your content changes the mix.