From 11e4c557b2552993753e5d2754494daadb937fe6 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Sun, 19 Jul 2026 19:02:11 +1000 Subject: [PATCH] DESIGN.md: full cast/map/scene table/puzzle spec + laserdisc research; ENGINE v2 mechanics Co-Authored-By: Claude Fable 5 --- DESIGN.md | 124 ++++++++++++++++ ENGINE.md | 13 ++ research/laserdisc-research.md | 259 +++++++++++++++++++++++++++++++++ 3 files changed, 396 insertions(+) create mode 100644 DESIGN.md create mode 100644 research/laserdisc-research.md diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..f4b27bf --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,124 @@ +# RECORD STORE GUY — production design v1 (cast, map, scenes, puzzles) +Transcription-ready for the editor / shots JSON. Sources: WORLDS.md (creative), +research/laserdisc-research.md (structural analysis of DL/SA/DL2 — Gemini deep research). + +## Mechanics adopted from the laserdisc canon +| From | Mechanic | RSG version | +|---|---|---| +| DL | Mirrored scenes (flipped video = "new" room) | `mirror: true` scene flag — engine flips video (CSS scaleX(-1)) AND swaps left/right inputs. FREE content doubling, zero credits. Use on: rack-jumps, canyon runs, asteroid weave. | +| DL | Failed-scene replay queue before finale | Scenes you died in (max 8) queue up and replay before Track 7 — "the Dead Wax remembers." Fits the remix boss volley perfectly. | +| SA | Difficulty tiers (Cadet skips 50%) | EASY "Casual Browser": skips the hardest scene per track, windows +0.2s. NORMAL "Collector". HARD "Completist": every scene, cue:false on repeat visits. | +| SA | ENERGIZE branch | **DROP THE NEEDLE**: flashing headphones prompt mid-scene; ignore = keep dodging (default path); hit action DURING flash = power-up branch — music surges, guy goes on offense, alternate cooler clip, bonus 500. Optional per scene; 4 planned (t2, t3, t5, t6). Costs 1 extra clip each — premium moments. | +| DL2 | Treasures (unprompted inputs) | **WHITE LABELS**: 7 hidden white-label records, one per track, flash ~0.5s in the background of a normal scene; unprompted ↑ during the flash collects (wrong guesses don't kill — they're ignored, DL2's cruelty declined). All 7 → true-ending stinger unlocks (the cat/PROMO scene + sequel tease). NO forced loop-back. | +| DL2 | Checkpoints per era | Already in engine (checkpoint per track start). | + +## CAST (blocks.json roster — prompt blocks to be drafted in bible at concept-art time) +| id | who | role | notes | +|---|---|---|---| +| hero | Dez | player character | exists in blocks.json v1 | +| deadwax | The Dead Wax | villain, boss, world-warper | exists v1; also "remembers your deaths" | +| cat | Mildred, store cat | chaos neutral; stinger; Track-1 fake-out hazard | knocks things onto you; true-ending payoff | +| boringguy | The Boring Guy | Shift NPC — endurance monologue | beige everything, lanyard | +| namedropper | The Name-Dropper | Shift NPC — trap conversation | expensive jacket, never buys | +| postman | The Postman | Shift executioner (overquote) | kicks door in, standard-issue righteousness | +| accountant | The Accountant | Shift executioner (underquote) | rises through floor, adjusts glasses | +| creatures | (per-world, non-ingredient) | vinyl-fin sharks, sleeve-dactyls, security programs, THE NEEDLE | prompted per-shot, no ingredient stills needed | + +## MAP (flow) +``` +INTRO → T1 (4) → SH1 filing → T2 sea (5) → SH2 tape → T3 lava (4) → SH3 postage + → T4 space (5) → SH4 boringguy → T5 grid (5) → SH5 namedropper → T6 runout (4) + → SH6 mailers → [REPLAY QUEUE: died-in scenes] → T7 boss (3 volleys) → WIN +Branches: SH1 wrong-file → MISFILE DIMENSION (2-scene punishment loop, rejoins SH1) + needle-drop alts in t2s4, t3s4, t5s2, t6s1 (parallel premium clips) + 7 white labels → +stinger after WIN +``` +Checkpoints at every T#s1. Lives 5. A flawless run ≈ 45 scenes × ~5s ≈ 8–9 min of +video — right between Space Ace (8) and Dragon's Lair (12) perfect runs. Feels canon. + +## SCENE TABLE (id | beat | player does | on fail | notes) +Windows/timings tuned in-editor later; inputs listed in order. (m)=mirror-eligible. + +**T1 CLOSING TIME** — t1s1 shelf avalanche | ← | crushed, thumbs-up · t1s2 rolling 12" +boulder chase | ↑ vault counter | steamrolled into embossed pancake · t1s3 tape-tentacle +bin | → jump | mummified in tape (cat watches, unmoved) · t1s4 ceiling fan | ↓ duck | +fan-launched into the SALE bin. White label #1 flashes in t1s2 background shelf. + +**SH1 FILING** — choice ←house/↑techno-under-house/→techno (1.5s). Wrong → death-pit +clip → MISFILE DIMENSION: mf1 endless wrong crates, alphabet closes in | ↓ hide behind +"Misc" divider | crushed by a falling serif A · mf2 climb out on a rope of taped-together +price stickers | ↑,action | sticker rope snaps, filed forever. Rejoins SH1 retry. +Da Brat D-or-B runs as SH1's second visit variant (either answer → customer-correction +scene, survive with ↓ nod). + +**T2 SIDE A/SEA** — t2s1 floor liquefies | ↑ | glug · t2s2 rack-to-rack on wave peaks (m) +| →,→ | theatrical rack-tip topple · t2s3 shark run | ←,↑ | swallowed, shark burps +headphones · t2s4 whirlpool + tonearm [NEEDLE-DROP alt: guy surfs the tonearm itself] +| action | spindle-drain glug · t2s5 gatefold surf escape | →,action | wipeout, washed +into lost-property. White label #2 floats past in t2s3. + +**T3 HOT WAX** — t3s1 crate stepping-stones, rhythm | →,→,↑ on beat | solemn Terminator +sink · t3s2 stalactite drip | ← | fresh-pressed 7" with his face · t3s3 sleeve-dactyls +| ↓ then action swat | carried off, single record floats down (m) · t3s4 geyser gauntlet +[NEEDLE-DROP alt: rides a geyser like an elevator, grabs white label #3 automatically] +| ↑,→,action | launched skyward. + +**SH2 THE TAPE** — random:[thin-real, thick-real]. choice ←thin/→thick (1.5s). Wrong = +mimic eats arm; tableau: mimic politely re-shelves itself. Right → seal mailer, proceed. + +**T4 B-SIDE/SPACE** — t4s1 decompression grab | action | polite forever-wave drift · +t4s2 zero-g rack leaps (m) | →,↑ | ibid · t4s3 asteroid weave (m) | ←,→,← | 78rpm +impact · t4s4 black-hole spindle slingshot | action at perihelion (0.5s, hardest +non-boss window) | spaghettified into a groove · t4s5 re-entry record surf | hold ↓, +action bail | smoking crater, hand with record emerges. White label #4 orbits in t4s4. + +**SH3 POSTAGE** — choice ←under/↑exact/→over (1.5s). Under → accountant rises, ends +you. Over → postman kicks door, executes. Exact → both nod, withdraw. (Both deaths +QUALITY-tier candidates.) + +**T5 THE GRID** — t5s1 EQ-bar floor crossing on the quiet bars | → on beat ×2 | +derezzed to sad 8-bit sprite · t5s2 light-disc battle [NEEDLE-DROP alt: guy duel-wields +45s, aggressive counter-rush] | ←,action,→ | disc to chest, mannequin clang · t5s3 +derezz-wall corridor run | ↑,↑ | ibid · t5s4 platter-lock gate | action on groove-gap +align | lock spits him into t5s1 (soft fail: replay, no death — variety) · t5s5 +Technics light-cycle escape | hold →, ↑ ramp | wipeout → screensaver-bounce death. +White label #5 renders as the only NON-neon object in t5s3. + +**SH4 BORING GUY** — endurance: ↓ nods at 4 conversational beats across one clip; +miss → he starts over (same clip, tighter windows); 3rd restart → time-lapse death +(cobwebs, seasons, skeleton in flannel). + +**T6 THE RUN-OUT** — t6s1 needle chase, canyon sprint [NEEDLE-DROP alt: he jump-grabs +the needle's cartridge and RIDES it — segues to t6s3 skipping t6s2] | ↑,→,↑ | caught: +white-noise flash, a click in the groove forever (the eerie one) · t6s2 dust-boulder +storm | ↓ into scratch crevice | buried, coughs a shellac 78 · t6s3 ridge-ripple run +(m) | → at crest | flung a groove over, watches himself rerun it (meta) · t6s4 label +approach, tendrils erupt | action | yanked under the paper. White label #6 half-buried +in t6s2 dust. + +**SH5 NAME-DROPPER** — trap choice: ↑enthusla = 45-min-conversation aging death / +↓ noncommittal grunt = survive / → name a rarer record = he evaporates in shame, ++1000, ALSO drops white label #7 as he vanishes (the only missable-by-politeness one). + +**SH6 MAILERS** — rhythm fold ×4 | ↓,←,→,action on beats | fatal papercut, operatic +slow-mo, single tear. + +**REPLAY QUEUE** — engine replays up to 8 died-in scenes ("the Dead Wax remembers"), +needle-skip transition card between each. Clear them → T7. + +**T7 BOSS** — t7s1 tendril storm | ←,↓,→ | pressed into picture disc of his own face · +t7s2 the remix: 1s hazard callbacks | 4-input chain (shark! geyser! disc! needle!) | +death = your statistically-most-died death replayed at 2x with the Dead Wax laughing · +t7s3 platter run + THE NEEDLE LIFT | action, 0.4s, no cue on HARD | pressed between +platters. WIN → dawn, PROMO sticker, cold coffee. +7 labels → stinger: cat paws it +back out. RECORD STORE GUY WILL RETURN. + +## Puzzle taxonomy (for the editor's window types) +reflex (arrow/action) · chain (2–4 inputs) · rhythm (inputs on beat) · choice +(branching, 1.5s) · endurance (n windows, miss = restart clip) · unprompted +(white labels — no cue, no fail) · needle-drop (optional action during flash → +branch) · hold (hold ↓/→ then release-input). + +## Clip-count delta vs WORLDS.md budget ++2 Misfile Dimension, +4 needle-drop alts, +1 Da Brat variant, +1 stinger, −0 mirrors +(free): ≈ 72 final clips, ~4900 credits with same assumptions — still ~4100 contingency. diff --git a/ENGINE.md b/ENGINE.md index ba0a039..73dcd03 100644 --- a/ENGINE.md +++ b/ENGINE.md @@ -61,6 +61,19 @@ default death; a `choices` window must be the clip's last window; `random: ["a", on a scene picks one of two clip/outcome sets per attempt (for THE TAPE mimic gag). Choice windows default to longer durations (1.5s) — they're decisions, not reflexes. +## v2 mechanics (spec'd in DESIGN.md — build after Phase 3) +- `mirror: true` scene flag: CSS `transform: scaleX(-1)` on the video + swap + left/right in input handling and cues. Free content doubling (Dragon's Lair trick). +- Replay queue: scenes died-in (cap 8) replay before the final track. +- Difficulty tiers: easy = skip scenes flagged `skippableOnEasy` + windows +0.2s; + hard = `cue:false` everywhere after first visit. +- `needledrop: {t, clip, bonus}` on a scene: optional action input during a flash + window branches to an alternate clip; ignoring it is not a fail. +- `collect: {t, input}` on a scene: unprompted input during a background flash sets + a flag (white labels); wrong unprompted inputs outside windows stay ignored. +- Endurance windows: `onMiss: "restart"` (replay clip, tighter windows), `maxRestarts`. +- Hold windows: `hold: true` — input must be held from window open to close. + ## Player loop (player.js structure) 1. **Boot**: fetch scenes.json → preload manifest. 2. **Preloader**: two `