A new-school reimagining of Sierra's 1980s AGI interpreter in Rust + macroquad: - Dual-buffer (visual + priority) room model with hand-painted walkability - In-engine room editor: brush/line/rect/fill/pick/erase/oval/image/spawn/object tools - Sprite pipeline (PNG -> EGA quantize), multi-room worlds with edge exits - Objects with look/use/needs/keys/win conditions (no code) - Forgiving text parser + optional local-LLM lane (Ollama / OpenRouter) - Branching NPC dialogue trees, chiptune SFX, per-room ambient music - Content kit: 61 archetypes across fantasy/scifi/monsters/saucy/horror - Full docs: README, EDITOR_GUIDE, MANUAL, art manifesto + Gemini prompts Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
15 lines
3.8 KiB
JSON
15 lines
3.8 KiB
JSON
[
|
|
{ "name": "candle", "sprite": "candle", "x": 40, "y": 120, "look": "A guttering candle. The flame leans away from something you can't see.", "takeable": true, "synonyms": "light flame taper", "use_text": "You shield the candle. The dark leans back in, patient.", "needs": "", "wins": false },
|
|
{ "name": "skull", "sprite": "skull", "x": 110, "y": 130, "look": "A yellowed skull. It grins, because that's the only expression it has left.", "takeable": true, "synonyms": "head bone cranium", "use_text": "You hold the skull up. 'Alas,' you begin. It does not laugh. It cannot.", "needs": "", "wins": false },
|
|
{ "name": "coffin", "sprite": "coffin", "x": 70, "y": 118, "look": "A coffin with the lid slightly... ajar. You did not leave it ajar.", "takeable": false, "synonyms": "casket box tomb", "use_text": "You ease the coffin open. It's empty. Somehow that's worse.", "needs": "", "wins": false },
|
|
{ "name": "gravestone", "sprite": "gravestone", "x": 30, "y": 124, "look": "A leaning gravestone. The name has been scratched out. Recently. By a fingernail.", "takeable": false, "synonyms": "headstone grave tomb marker", "use_text": "You trace the scratched-out name. It's almost yours. Almost.", "needs": "", "wins": false },
|
|
{ "name": "cobweb", "sprite": "cobweb", "x": 130, "y": 40, "look": "A cobweb thick as lace. Something built this with patience and a plan.", "takeable": false, "synonyms": "web spiderweb silk", "use_text": "You brush the cobweb aside. It re-knits behind you. You decide not to notice.", "needs": "", "wins": false },
|
|
{ "name": "portrait", "sprite": "portrait", "x": 80, "y": 50, "look": "An old portrait. The eyes follow you. You test this twice. Twice is one time too many.", "takeable": false, "synonyms": "painting picture frame", "use_text": "You turn the portrait to the wall. You hear it turn back.", "needs": "", "wins": false },
|
|
{ "name": "clock", "sprite": "clock", "x": 120, "y": 118, "look": "A grandfather clock stopped at 3:07. It ticks once, just for you.", "takeable": false, "synonyms": "grandfather time pendulum", "use_text": "You wind the clock. Somewhere upstairs, something else wakes up.", "needs": "", "wins": false },
|
|
{ "name": "mirror", "sprite": "mirror", "x": 20, "y": 90, "look": "A foxed mirror. Your reflection is a half-second late, and a little too pleased.", "takeable": false, "synonyms": "looking glass reflection", "use_text": "You wave. The reflection finishes waving after you stop.", "needs": "", "wins": false },
|
|
{ "name": "doll", "sprite": "doll", "x": 60, "y": 132, "look": "A porcelain doll. It was facing the wall. It is not, now.", "takeable": true, "synonyms": "toy figure puppet", "use_text": "You turn the doll to face the wall again. It feels like a truce. A temporary one.", "needs": "", "wins": false },
|
|
{ "name": "diary", "sprite": "diary", "x": 90, "y": 130, "look": "A locked diary, the leather warm as skin. It wants to be read. That's the problem.", "takeable": false, "synonyms": "journal book log", "use_text": "The little key fits. The diary falls open to a page that simply reads, in fresh ink: RUN.", "needs": "key", "wins": false },
|
|
{ "name": "ouija", "sprite": "ouija", "x": 100, "y": 134, "look": "An ouija board. The planchette already rests on GOODBYE, and you haven't asked anything.", "takeable": false, "synonyms": "board spirit planchette", "use_text": "You touch the planchette. It drags to your name and spells it. Correctly.", "needs": "", "wins": false },
|
|
{ "name": "crypt door", "sprite": "door", "x": 80, "y": 116, "look": "A stone crypt door with a skull-shaped recess. The way out, if there is one, is through it.", "takeable": false, "synonyms": "door gate stone exit", "use_text": "You set the skull into the recess. Stone grinds on stone, the door yawns wide, and grey dawn light spills in. You stumble out, alive. THE END.", "needs": "skull", "wins": true }
|
|
]
|