nomeansnoquest/rooms/room0.json
m3ultra 50817ced59 NOMEANSNO QUEST v1.0 — the first MRPCI game
Six rooms of band history: the 1979 basement (Portastudio, Mom, the Castle box), D.O.A. at UVic, the alley wall that named the band, Alternative Tentacles 1987 (Jello signs you), the Roskilde main stage 1994 (MODELBEAST flux matte painting quantized by the engine; ops paint only walkability + cycling footlights), and the Polish field 1997 (the $2,500 van ransom — with one fatal dialogue option to prove checkpoint mercy). 60 points, deterministic playthrough in tests/, zero engine forks: pure game data + rhai. Generated art via tools/gen_sprites.py + gen_rooms.py.

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

922 lines
12 KiB
JSON

{
"name": "The Basement, 1979",
"enter_text": "Wood panel, concrete, one bare bulb. John's kit crowds the rug; the 180-pound Portastudio owns the workbench. Through the wall, Mom's washer keeps better time than most drummers.",
"ops": [
{
"FbmFill": {
"x": 0,
"y": 0,
"w": 320,
"h": 100,
"ramp": [
110,
110,
153,
110
],
"scale": 34.0,
"octaves": 2,
"seed": 3,
"ink": {
"color": 0,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
0,
0
],
[
0,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
26,
0
],
[
26,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
52,
0
],
[
52,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
78,
0
],
[
78,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
104,
0
],
[
104,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
130,
0
],
[
130,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
156,
0
],
[
156,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
182,
0
],
[
182,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
208,
0
],
[
208,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
234,
0
],
[
234,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
260,
0
],
[
260,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
286,
0
],
[
286,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
312,
0
],
[
312,
99
]
],
"ink": {
"color": 68,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 268,
"y": 10,
"w": 34,
"h": 22,
"ink": {
"color": 20,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 271,
"y": 13,
"w": 28,
"h": 16,
"ink": {
"color": 162,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Line": {
"pts": [
[
285,
13
],
[
285,
28
]
],
"ink": {
"color": 20,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"VoronoiFill": {
"x": 0,
"y": 100,
"w": 320,
"h": 90,
"cell": 44,
"colors": [
22,
22,
21,
22
],
"edge_color": 21,
"edge": 1.0,
"seed": 9,
"ink": {
"color": 0,
"pri": "Band",
"ctl": {
"Set": 0
},
"hot": null
}
}
},
{
"Rect": {
"x": 6,
"y": 62,
"w": 30,
"h": 38,
"ink": {
"color": 28,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 10,
"y": 68,
"w": 22,
"h": 22,
"ink": {
"color": 25,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Ellipse": {
"cx": 21,
"cy": 79,
"rx": 8,
"ry": 8,
"ink": {
"color": 126,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 24,
"y": 64,
"w": 6,
"h": 3,
"ink": {
"color": 183,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 4,
"y": 40,
"w": 36,
"h": 6,
"ink": {
"color": 110,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 8,
"y": 30,
"w": 8,
"h": 10,
"ink": {
"color": 200,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 20,
"y": 32,
"w": 8,
"h": 8,
"ink": {
"color": 89,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Ellipse": {
"cx": 96,
"cy": 148,
"rx": 44,
"ry": 14,
"ink": {
"color": 68,
"pri": "Band",
"ctl": {
"Set": 0
},
"hot": null
}
}
},
{
"Rect": {
"x": 128,
"y": 84,
"w": 66,
"h": 16,
"ink": {
"color": 110,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 128,
"y": 84,
"w": 66,
"h": 3,
"ink": {
"color": 153,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 214,
"y": 38,
"w": 26,
"h": 34,
"ink": {
"color": 30,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 217,
"y": 42,
"w": 20,
"h": 8,
"ink": {
"color": 176,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 217,
"y": 54,
"w": 20,
"h": 3,
"ink": {
"color": 19,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 217,
"y": 60,
"w": 14,
"h": 3,
"ink": {
"color": 19,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 292,
"y": 96,
"w": 28,
"h": 8,
"ink": {
"color": 110,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 292,
"y": 88,
"w": 28,
"h": 8,
"ink": {
"color": 153,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 292,
"y": 80,
"w": 28,
"h": 8,
"ink": {
"color": 110,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 292,
"y": 72,
"w": 28,
"h": 8,
"ink": {
"color": 153,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 292,
"y": 64,
"w": 28,
"h": 8,
"ink": {
"color": 110,
"pri": "Keep",
"ctl": {
"Set": 1
},
"hot": null
}
}
},
{
"Rect": {
"x": 292,
"y": 100,
"w": 28,
"h": 90,
"ink": {
"color": 21,
"pri": "Band",
"ctl": {
"Set": 0
},
"hot": null
}
}
}
],
"scale": {
"horizon_y": 92,
"min_scale": 0.72,
"full_y": 186
},
"spawn": [
160,
150
],
"exits": [
null,
1,
3,
null
],
"exit_flags": [
"",
"",
"demo_done",
""
],
"exit_blocked": [
"",
"",
"No demo, no destiny. The Portastudio is right there.",
""
],
"hotspots": [
{
"name": "gig poster",
"rect": [
212,
36,
30,
38
],
"msgs": {
"look": "D.O.A. — TONIGHT — UVic. Vancouver's finest, one ferry away. John already circled it.",
"do": "You're going. Obviously you're going. (Walk east, up the stairs.)"
}
},
{
"name": "washer",
"rect": [
4,
60,
34,
42
],
"msgs": {
"look": "Mom's washing machine, mid-cycle. A wet 4/4 that never rushes and never drags.",
"listen": "Chunk. Chunk. Chunk. Honestly? Tighter than most bands you've seen.",
"do": "It's Mom's. Some things are sacred."
}
},
{
"name": "window",
"rect": [
266,
8,
38,
26
],
"msgs": {
"look": "Grey Victoria daylight. The Island doesn't hurry, and neither does the rain."
}
},
{
"name": "workbench",
"rect": [
126,
82,
70,
20
],
"msgs": {
"look": "The workbench holds the TEAC four-track like an altar holds a relic."
}
}
],
"props": [
{
"name": "portastudio",
"sprite": "portastudio",
"x": 160,
"y": 104,
"synonyms": "four-track teac tascam recorder deck",
"msgs": {
"look": "The TEAC Portastudio. 180 pounds of overdubbing possibility. It wants tape and it wants a reason.",
"do": "It powers up with a hum like a small appliance dreaming big.",
"listen": "Tape hiss. The sound of potential."
},
"solid": true
},
{
"name": "castle box",
"sprite": "castlebox",
"x": 224,
"y": 146,
"synonyms": "box junk castle",
"msgs": {
"look": "A box of gear from Castle, the cover band you both did time in. Cables, setlists nobody needs, and — is that a fresh reel of tape?"
},
"solid": true
},
{
"name": "drum kit",
"sprite": "drumkit",
"x": 92,
"y": 136,
"synonyms": "drums kit",
"msgs": {
"look": "John's kit, tuned like a jazz kit because he IS a jazz kid. The high school band has no idea what it's incubating.",
"play": "You are a bassist. There are laws."
},
"solid": true
}
],
"npcs": [
{
"name": "John",
"sprite": "john",
"x": 66,
"y": 148,
"portrait": "john-face",
"wander": 12,
"msgs": {
"look": "Your kid brother. Eight years younger, already swings harder than drummers twice his age."
},
"dialogue": [
{
"says": "Sticks spin in his fingers. “So? Are we a band, or are we two guys who own instruments?”",
"choices": [
{
"text": "We need a sound of our own first.",
"goto": 1
},
{
"text": "Heard D.O.A. play UVic tonight.",
"goto": 2
},
{
"text": "Later, John.",
"goto": -1
}
]
},
{
"says": "“No guitar player, eh? Fine. You be the guitar. I'll be the horn section.” He plays a bar of 9/8 like it's nothing.",
"choices": [
{
"text": "That. Exactly that.",
"goto": -1
}
]
},
{
"says": "“Then what are we still doing in the basement? GO. Take notes. Loud ones.”",
"choices": [
{
"text": "On it.",
"goto": -1
}
]
}
]
},
{
"name": "Mom",
"sprite": "mom",
"x": 26,
"y": 126,
"portrait": "mom-face",
"wander": 6,
"msgs": {
"look": "Mom, running the laundry room like mission control."
},
"dialogue": [
{
"says": "“Play all you like, love — the whites are done at eight.” She pauses. “The loud one in 7/4 was nice.”",
"choices": [
{
"text": "You could tell it was 7/4?",
"goto": 1
},
{
"text": "Thanks, Mom.",
"goto": -1
}
]
},
{
"says": "“I've been listening to that washer for twenty years, Robert. I know time when I hear it.”",
"choices": [
{
"text": "...Mom might be the best musician in the house.",
"goto": -1
}
]
}
]
}
],
"music": 1,
"script": "room0.rhai"
}