Commit Graph

10 Commits

Author SHA1 Message Date
type-two
24f812dbfd vault: offline backup script (pull accounts + worlds to local snapshots)
The vault's user data (argon2 hashes + saved worlds) only lives on the
VPS and isn't in git. backup.sh pulls /opt/mrpgi-vault/data down as a
timestamped tarball, keeps the 30 newest, and documents the restore
path in its header.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 12:22:44 +10:00
type-two
e9cf00e686 THE MRPGI BOOK: deep combined user/dev manual, linked from the live menus
- web/manual.html — 17 chapters: playing, the editor deeply, the
  authoring cookbook (full JSON reference + the five load-bearing
  puzzle patterns), dialogue trees, flags, the art pipeline with
  sprite-generation prompts, sound, driving the engine with code
  (real JSONL transcripts), AIs + MCP, prompt patterns with actual
  outputs (the roof room is the real shipped expansion), the web
  build & cloud saves, engine internals, extension recipes,
  troubleshooting, and full command/event/palette reference.
- Game menu gains "Manual": window.open on the web (via a JS plugin
  import), the default browser natively.
- README tab links the Book; repo README points at it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 11:49:24 +10:00
type-two
cd7f658444 Accounts + cloud saves: the front door for the web engine
- mrpgi-vault (standalone crate): tiny signup/login/world-save service.
  Argon2 password hashes, random session cookies, JSON-file storage,
  naive per-IP rate limit, 4MB body cap. tiny_http, no framework, no db.
  Runs as a container on the dealgod network; nginx proxies
  /engine/api/ to it.
- core: WorldBundle — a whole world (manifest + every room) as one JSON
  document, with World::to_bundle/apply_bundle.
- web bridge: mrpgi_request_save / mrpgi_alloc / mrpgi_world_in exports
  + an mrpgi_world_saved JS plugin import; the page's SAVE button pulls
  the live world out of the running engine, LOAD swaps it back in.
  SAVE_REQUESTED is an AtomicBool on purpose — wasm's thread-less
  Mutex<bool> is a plain static to LLVM and release builds const-folded
  the read (the only writer is JS-visible, not IR-visible).
- web UI: SIGN IN tab → create account (own username + password) /
  sign in / Save world / Load world / sign out. Session restores on
  revisit.

Verified live end-to-end through Cloudflare: signup → save → reload →
anonymous rejected; throwaway account removed after.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 11:38:27 +10:00
type-two
584424c939 Sierra menu bar + web README tab (thanks Matt)
- The classic dropdown menus across the top of the play screen: Game
  (New Game / Edit Mode / CRT / Sound / About) and Action (Look Around /
  Inventory / Help). Pure bus consumers — menu items inject the same
  Commands every other surface uses. Sliding along the bar switches
  menus, clicks outside close, clicks never leak into click-to-walk.
- web: README tab pinned top-right with the short guide — controls,
  editor shortcuts (undo is just Z, no Ctrl), the two-layer paint model,
  and why the lake is scenery for now.
- --shot out.png: render a few Play frames and save the real backbuffer
  to PNG — ground-truth GPU screenshots for debugging and CI. (Used to
  prove the menu colors were right when a preview browser's auto-dark
  filter was inverting light neutrals on canvas.)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 11:14:48 +10:00
type-two
fb7524e847 web: document the live deploy path + nginx bind-mount gotcha
Live at https://monsterrobot.games/engine/ (dealgod VPS, dealgod-nginx
/engine alias over /opt/dealgod/images/engine/).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 10:31:55 +10:00
type-two
11d25f5c52 Browser build: the engine compiles to WASM and runs at a URL
- mrpgi-core: ureq/tiny_http/threads are native-only deps; the AI lane
  compiles to an always-off stub on wasm32 (deterministic parser stays).
- World::from_memory + assets::cel_from_bytes — boot a game with no
  filesystem.
- mrpgi GUI on wasm: embeds games/lost-fuse via include_dir, boots
  straight into Play (Tab still opens the editor; saving needs a disk,
  so web is play + paint-only for now).
- web/: index.html shell + macroquad JS loader + build.sh producing a
  self-contained static web/dist (1.1 MB total, game included).
- .cargo/config.toml: --allow-undefined for miniquad's JS imports.

Verified in-browser: renders, typed commands reach the parser,
click-to-walk works, zero console errors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 09:35:45 +10:00
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
type-two
96b45561d0 Carve the engine into a headless core behind a command/event bus
The handover plan (docs/HANDOVER.md), P0-P6, in one pass. One insight
powers it: CLI/HTTP/MCP/Python is one feature, not four — a headless
core driven by Commands in, Events out, with every surface a thin
adapter.

- mrpgi-core: the whole sim as a library with zero macroquad (the
  workspace boundary is the guardrail). GameState::apply/tick, fixed
  1/20s cycles, deterministic replays, headless RGBA/PNG rendering.
- mrpgi-headless: JSONL stdio REPL, --script replay (AI lane off =
  byte-identical), --render-room PNG, --serve HTTP (state/command/
  events cursor/frame.png), --mcp JSON-RPC stdio server whose
  render_frame returns a real PNG so a model sees its own moves.
- Games are folders: game.json manifest (all fields default — legacy
  dirs still load), data-driven verb table feeding both the parser and
  the AI whitelist, flags with requires_flag/sets_flag gating on
  objects and dialogue choices, live UpsertRoom lore ingestion with
  validation.
- mrpgi (GUI): now one consumer of the bus; editor commits through the
  same commands MCP uses; audio became core events with per-game
  sfx/ music/ file overrides beating the chiptune synth.
- Tests: parser goldens + a full win-path playthrough asserting
  byte-identical transcripts across runs.

Deleted: the old fused src/ (root is now a virtual workspace), the
dead demo Scene/Assets path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 09:18:33 +10:00
m3ultra
d0728e121c docs: add architecture handover — headless core + command bus plan
Captures the 2026-07-05 design session: making MRPGI fully
programmatically controllable (MCP + CLI/stdio + HTTP/WebSocket) via a
headless mrpgi-core engine behind a typed command/event bus, with the
macroquad GUI as one optional front-end.

Includes: current-state analysis, the core refactor (GameState with
apply/tick), games-as-folders + JSON lore ingestion, an "always want
options" audio design (SynthSink / FileSink mp3-ogg-wav / StrudelSink,
all toggleable), a P0-P6 roadmap, quick wins, risks, and a source map.

Adds docs/architecture.svg (self-contained) plus an inline Mermaid
diagram in the handover.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 02:16:40 +10:00
type-two
d0caf983a0 Initial commit: MRPGI — Apple-Silicon AGI adventure engine
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>
2026-06-17 17:26:55 +10:00