MRPGI/games/lost-fuse/rooms/room1.json
type-two 2fdd730cde Add the updated manual and a teaching game: The DJ's Lost Fuse
- MANUAL.md brought up to the workspace era: game folders + manifest,
  flags & gated puzzles, hidden dialogue choices, audio file
  overrides, a Programmatic control section (CLI/HTTP/MCP/Python),
  and the new two-crate architecture map.
- games/lost-fuse: three rooms that demonstrate every mechanic in one
  chain — item, needs-lock, object sets_flag, a dialogue choice hidden
  behind requires_flag, dialogue sets_flag, and a flag-locked wins
  finale. Verified winnable headlessly, gate included.
- games/lost-fuse/expansion/roof.jsonl: a live lore drop that upserts
  a fourth room into a running game and rewires an exit — the "drop
  JSON lore in" workflow, runnable as a one-liner.
- games/README.md: the guided tour — mechanic-to-JSON map, the live
  expansion demo, and how to prompt an LLM (or point Claude's MCP at
  the engine) to write valid lore.

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

65 lines
2.6 KiB
JSON

{
"strokes": [
{ "Rect": { "x": 0, "y": 0, "w": 160, "h": 168, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 6, "y": 16, "w": 148, "h": 146, "color": 7, "meaning": "Floor" } },
{ "Rect": { "x": 0, "y": 0, "w": 65, "h": 16, "color": 8, "meaning": "Wall" } },
{ "Rect": { "x": 95, "y": 0, "w": 65, "h": 16, "color": 8, "meaning": "Wall" } },
{ "Rect": { "x": 0, "y": 160, "w": 160, "h": 8, "color": 8, "meaning": "Wall" } },
{ "Rect": { "x": 0, "y": 0, "w": 6, "h": 70, "color": 8, "meaning": "Wall" } },
{ "Rect": { "x": 0, "y": 100, "w": 6, "h": 68, "color": 8, "meaning": "Wall" } },
{ "Rect": { "x": 154, "y": 0, "w": 6, "h": 168, "color": 8, "meaning": "Wall" } },
{ "Rect": { "x": 66, "y": 4, "w": 28, "h": 12, "color": 5, "meaning": "None" } },
{ "Rect": { "x": 14, "y": 24, "w": 34, "h": 8, "color": 13, "meaning": "None" } },
{ "Rect": { "x": 112, "y": 22, "w": 34, "h": 8, "color": 11, "meaning": "None" } },
{ "Rect": { "x": 60, "y": 30, "w": 40, "h": 6, "color": 14, "meaning": "None" } }
],
"spawn": [80, 140],
"exits": [2, null, null, 0],
"objects": [
{
"name": "amp",
"sprite": "chest",
"x": 122,
"y": 132,
"look": "The club's outdoor amp, tall as a fridge. Its fuse slot gapes empty and scorched.",
"synonyms": "amplifier speaker stack",
"use_text": "You slot the fuse home. The amp THUMPS alive - bass rolls down the street like weather.",
"needs": "fuse",
"sets_flag": "music_on"
},
{
"name": "bouncer",
"sprite": "orc",
"x": 80,
"y": 108,
"look": "A slab of security chrome parked in front of the club door. Its arms are crossed so hard they have fused.",
"synonyms": "guard security doorbot",
"use_text": "You push the bouncer. The bouncer does not notice.",
"dialogue": [
{
"says": "List. Name. No name, no party.",
"choices": [
{ "text": "C'mon, one dance?", "goto": 1 },
{
"text": "Hear that bass? I fixed your amp. I'm with the band.",
"goto": 2,
"requires_flag": "music_on",
"sets_flag": "on_the_list"
},
{ "text": "Fine.", "goto": -1 }
]
},
{
"says": "No list, no dance. The list is life.",
"choices": [{ "text": "Harsh.", "goto": -1 }]
},
{
"says": "...That WAS you? Respect, fixer. You're on the list. The booth is upstairs, north door.",
"choices": [{ "text": "Let's go.", "goto": -1 }]
}
]
}
],
"music": 3
}