DESIGN.md: full cast/map/scene table/puzzle spec + laserdisc research; ENGINE v2 mechanics
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
7710c3a830
commit
11e4c557b2
124
DESIGN.md
Normal file
124
DESIGN.md
Normal file
@ -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.
|
||||||
13
ENGINE.md
13
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).
|
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.
|
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)
|
## Player loop (player.js structure)
|
||||||
1. **Boot**: fetch scenes.json → preload manifest.
|
1. **Boot**: fetch scenes.json → preload manifest.
|
||||||
2. **Preloader**: two `<video>` elements, A/B swap. While A plays scene N, B preloads
|
2. **Preloader**: two `<video>` elements, A/B swap. While A plays scene N, B preloads
|
||||||
|
|||||||
259
research/laserdisc-research.md
Normal file
259
research/laserdisc-research.md
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user