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>
118 lines
6.4 KiB
Markdown
118 lines
6.4 KiB
Markdown
# 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 .`
|