mrpquest/DESIGN.md
type-two 3241b6f14d MORPQUEST: Record Store Day — a Beyond Morp graphical adaptation
Fourteen EGA screens for MRPGI: nano banana backgrounds squeezed into the
engine's 160x168 double-wide-pixel frame, hand-pixelled item sprites, the
full RSD flag chain (poster frenzy -> yard door secret -> roof -> side door
-> clerk favours -> back-room seam -> payment -> notice -> BeckyWall
dispersal), the five-word true ending, and two scripted test paths (golden
win + gate locks), both green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 14:56:30 +10:00

108 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MORPQUEST — Record Store Day
### A Beyond Morp graphical adaptation for MRPGI
You're on a quick cat-food run. Your Uncle's list is in the glovebox. The record
shop's front door is a wall of Taylor Swift superfans. Morp is not cruel; Morp
is accurate.
Adapted from the Beyond Morp text adventure (RSD storyline). Fourteen screens,
one day, five words, one white label.
## The map (room / exits N,E,S,W — as built, matching the art)
```
[4 Toilet]--(W door)--[3 Alley]--(N)--[5 Yard]--(E, vine)--[6 Roof]
| |
(S) (N, side door)
| |
[0 Car]-(E)-[1 Car Park]-(N)-[2 Entrance] [7 Kitchen]
(E->alley) |
(N)
|
[9 Rock]-(E)-[8 Shop Floor]-(E)-[10 Dance]-(N)-[11 Listening]
|
(N)
|
[12 Counter]-(N, beads)-[13 Back Room]
```
| # | room | N | E | S | W | music |
|---|------|---|---|---|---|-------|
| 0 | Your Car (interior) | | 1 | | | calm |
| 1 | Car Park | 2 | | | 0 | calm |
| 2 | Shop Entrance (BeckyWall) | | 3 | 1 | | tense |
| 3 | Alley — "Scenic Rim" | 5 | | 2 | 4 | eerie |
| 4 | Toilet — "Pacific Rim" | | | 3 | | spooky |
| 5 | Yard behind shop | 7 | 6 | 3 | | eerie |
| 6 | Roof — "Above the Rim" | | | | 5 | calm |
| 7 | Kitchen | 8 | | 5 | | tense |
| 8 | Shop Floor (hub) | 12 | 10 | 7 | 9 | jolly |
| 9 | Rock Aisle | | 8 | | | jolly |
| 10 | Dance Racks | 11 | | | 8 | jolly |
| 11 | Listening Station | | | 10 | | calm |
| 12 | Counter | 13 | | 8 | | tense |
| 13 | Back Room | | | 12 | | spooky |
Physical access is open (the engine has no flag-gated exits); progression is
gated Infocom-style through flags, dialogue, and the win condition.
## Main chain (flags in order)
1. Car: take `paperclip` (under seat). **seatbelt** `needs paperclip``seatbelt-freed`.
Take `car-keys`, `wallet`, `45-adapter`, `tote-bag`. (Kebab: examine-only warning.)
2. Entrance: Becky Theologian dialogue → ask which variant is canon → `poster-frenzy`
(the hive shreds a Taylor poster).
3. Entrance: **shredded poster fragments** use `requires poster-frenzy``knows-yard-door-secret`
(fragments spell YARD DOOR SECRET).
4. Toilet: take `elastic-band` (cupboard). Yard: **vinyl vine** use `requires knows-yard-door-secret`
`noticed-vine` ("It isn't a ladder. But it's climbable.") — narratively unlocks the roof (east edge).
5. Roof: **door-shaped absence** use → `seen-door-outline`.
6. Entrance: Dave dialogue, choice gated on `seen-door-outline``side-door-open`
("Yeah nah. That was NOT there." He shoulders it anyway.)
7. Kitchen: take `consolation-lollipop` (sink bench, under a soggy flyer).
8. Listening Station: **turntable** `needs 45-adapter``station-working`.
**sad balloon** `needs elastic-band``eyepatch-made`.
9. Shop Floor: take `clean-sleeve` (by the crates). **half-sleeved record** `needs clean-sleeve`
`shop-tidied` ("Clerk notices. Pretends not to. But it counts.")
10. Counter: Clerk dialogue — favour 1 gated on `shop-tidied``clerk-warm`; favour 2 gated
on `eyepatch-made` (node reachable once warm) → `back-room-open` ("The beaded curtain is
no longer purely decorative.")
11. Back Room: **hidden seam** use `requires back-room-open``found-grail`; take
`white-label` + `delay-notice` (they were "always there"; the seam look points at them).
12. Counter: **card terminal** `needs wallet``paid`.
13. Entrance: **notice board** `needs delay-notice``notice-posted`. Becky Crier dialogue:
read-the-notice choice gated on `notice-posted`, then lollipop choice → `beckies-dispersed`.
14. Car: **ignition** `requires beckies-dispersed`, `needs car-keys`, **wins**.
## True-ending layer — the five words (strict order via flag chain)
`use` each surface; each requires the previous word:
- Car **rear-view mirror**`word-rsd` ("RSD", scratched in the plastic)
- Toilet **lipstick mirror** `requires word-rsd``word-first`
- Kitchen **greasy splashback** `requires word-first``word-global`
- Listening **spinning record** `requires word-global` (and station fixed, narratively) → `word-ambassador`
- Counter **receipt spike** `requires word-ambassador``word-version`
Becky Crier's final node: bonus choice "SAY THE WORDS" `requires word-version`
`curse-broken` → the hive blinks awake ("…why are we here?" The door is a door again.)
## Side quests
- **S1 Rock Aisle:** take `mystery-disc` from the chud box; **yellow Daly-Wilson sleeve**
`needs mystery-disc``break-ancestor-revealed`; Clerk dialogue bonus choice.
- **S2 Dance Racks:** **overstuffed crate** `needs tote-bag``made-space`; DJ Someguy
dialogue choice gated on it ("Keep your face normal. Your face is loud.")
- **S3 Mirror liturgy** is the word chain above.
## Voice rules (from the tone bible)
Second person, present tense, parser-deadpan. Short declaratives; the last beat
turns. Colon-verdicts. Parenthetical counter-voice. Morp is accurate, not cruel.
Never zany, never explains a joke, never punches down, no exclamation marks in
narration.
## Build pipeline
- `tools/gen_art.py` — nano banana (OpenRouter) backgrounds + NPC sprites,
squeezed to 160×168 (the GUI shows 2×-wide pixels, so art is generated wide).
- `tools/gen_items.py` — deterministic tiny item sprites (PIL, hand-placed pixels).
- Engine quantizes PNGs to EGA on load; walls/priority painted as strokes over the art.
- Playtest: `mrpgi-headless --script tools/playtest.jsonl --game .`