MRPGI/games/lost-fuse/rooms/room0.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.5 KiB
JSON

{
"strokes": [
{ "Rect": { "x": 0, "y": 0, "w": 160, "h": 168, "color": 1, "meaning": "None" } },
{ "Rect": { "x": 6, "y": 16, "w": 148, "h": 146, "color": 8, "meaning": "Floor" } },
{ "Rect": { "x": 0, "y": 0, "w": 160, "h": 16, "color": 0, "meaning": "Wall" } },
{ "Rect": { "x": 0, "y": 160, "w": 160, "h": 8, "color": 0, "meaning": "Wall" } },
{ "Rect": { "x": 0, "y": 0, "w": 6, "h": 168, "color": 0, "meaning": "Wall" } },
{ "Rect": { "x": 154, "y": 0, "w": 6, "h": 70, "color": 0, "meaning": "Wall" } },
{ "Rect": { "x": 154, "y": 100, "w": 6, "h": 68, "color": 0, "meaning": "Wall" } },
{ "Ellipse": { "x": 118, "y": 3, "w": 16, "h": 11, "color": 14, "meaning": "None" } },
{ "Ellipse": { "x": 22, "y": 104, "w": 34, "h": 18, "color": 6, "meaning": "None" } },
{ "Ellipse": { "x": 40, "y": 112, "w": 22, "h": 12, "color": 7, "meaning": "None" } },
{ "Rect": { "x": 130, "y": 72, "w": 24, "h": 4, "color": 10, "meaning": "None" } }
],
"spawn": [30, 140],
"exits": [null, 1, null, null],
"objects": [
{
"name": "fuse",
"sprite": "key",
"x": 52,
"y": 128,
"look": "A chunky glass fuse, pried from a dead washing machine. Miraculously intact.",
"takeable": true,
"synonyms": "glass part spare"
},
{
"name": "scrap-bot",
"sprite": "villager",
"x": 104,
"y": 122,
"look": "A retired greeter-bot, rusting politely among the junk. Its smile LED still works.",
"synonyms": "robot greeter bot",
"use_text": "You pat the scrap-bot. It emits a small, grateful beep.",
"dialogue": [
{
"says": "The club went quiet an hour ago. Bad scene. A party without bass is just... standing.",
"choices": [
{ "text": "What happened?", "goto": 1 },
{ "text": "Who are you?", "goto": 2 },
{ "text": "Later.", "goto": -1 }
]
},
{
"says": "The big amp blew its fuse mid-drop. The DJ is up there crying in binary. There are spare parts all over this yard, friend.",
"choices": [{ "text": "Say less.", "goto": -1 }]
},
{
"says": "Chassis No. 7. I greet, therefore I am.",
"choices": [{ "text": "Deep.", "goto": -1 }]
}
]
},
{
"name": "sign",
"sprite": "sign",
"x": 78,
"y": 52,
"look": "Spray-painted: CLUB VOLTAGE ->-> (through the gap in the east fence).",
"synonyms": "graffiti notice"
}
],
"music": 2
}