- 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>
48 lines
2.0 KiB
JSON
48 lines
2.0 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": 8, "meaning": "Floor" } },
|
|
{ "Rect": { "x": 0, "y": 0, "w": 160, "h": 16, "color": 0, "meaning": "Wall" } },
|
|
{ "Rect": { "x": 0, "y": 160, "w": 65, "h": 8, "color": 0, "meaning": "Wall" } },
|
|
{ "Rect": { "x": 95, "y": 160, "w": 65, "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": 168, "color": 0, "meaning": "Wall" } },
|
|
{ "Rect": { "x": 40, "y": 96, "w": 80, "h": 52, "color": 5, "meaning": "None" } },
|
|
{ "Rect": { "x": 56, "y": 108, "w": 48, "h": 28, "color": 13, "meaning": "None" } },
|
|
{ "Rect": { "x": 12, "y": 24, "w": 30, "h": 8, "color": 11, "meaning": "None" } },
|
|
{ "Rect": { "x": 118, "y": 24, "w": 30, "h": 8, "color": 13, "meaning": "None" } },
|
|
{ "Rect": { "x": 58, "y": 8, "w": 44, "h": 10, "color": 14, "meaning": "None" } },
|
|
{ "Rect": { "x": 52, "y": 62, "w": 56, "h": 12, "color": 7, "meaning": "None" } }
|
|
],
|
|
"spawn": [80, 144],
|
|
"exits": [null, null, 1, null],
|
|
"objects": [
|
|
{
|
|
"name": "turntable",
|
|
"sprite": "altar",
|
|
"x": 80,
|
|
"y": 72,
|
|
"look": "The decks. A crown for whoever dares. Below, three hundred robots hold their breath.",
|
|
"synonyms": "decks booth dj deck",
|
|
"use_text": "You drop the needle. The building inhales - then the beat lands and three hundred robots lose their minds. You are the DJ now. THE PARTY IS SAVED.",
|
|
"requires_flag": "on_the_list",
|
|
"wins": true
|
|
},
|
|
{
|
|
"name": "dj",
|
|
"sprite": "villager",
|
|
"x": 36,
|
|
"y": 112,
|
|
"look": "The resident DJ, head in hands, humming quiet error tones.",
|
|
"synonyms": "deejay resident",
|
|
"dialogue": [
|
|
{
|
|
"says": "My set... my fuse... my LIFE...",
|
|
"choices": [{ "text": "I got you. Watch this.", "goto": -1 }]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"music": 4
|
|
}
|