mrpquest/DESIGN.md
type-two f421448919 Sierra soul: 250-point scoring, real gated exits, two deaths, vanishing Beckies
Uses the new MRPGI features (room names/enter prose, exit_flags, points,
kills, consumes, visible_flag/hidden_by_flag). Golden path re-verified:
250/250 and the win; gate tests cover all four locked exits, the kebab
death, and the improvised-words Becky-grue.

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

118 lines
6.4 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 |
Progression is gated through flags, dialogue, and the win condition — plus
four real flag-gated exits (engine feature added for this game): the car door
(`seatbelt-freed`), the kitchen side door (`side-door-open`), the vine climb
(`noticed-vine`), and the beaded curtain (`back-room-open`).
**Scoring:** 250 points on offer (`max_score` in game.json), Sierra-style —
takes, first successful uses, and dialogue-choice flag flips all pay out.
**Deaths:** the mouldy kebab (eat it despite two warnings), and improvising
the five words at the hive (the Becky-grue). Death restarts the day.
**Vanishings:** the poster fragments exist only after the frenzy
(`visible_flag`), and the Beckies leave the entrance for good after dispersal
(`hidden_by_flag`). The lollipop is consumed when given (`consumes`).
## 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 .`