AI lane (ported from MRPGI): unknown typed sentences go to a local LLM (MRPCI_AI: ollama default / openrouter / off) that maps them onto already-legal commands; one in flight, polled per tick, hard-off under --script so replays stay byte-identical. Portraits: NPCs/props gain a portrait sprite drawn beside the dialogue window in the GUI (6x) and annotated frames (2x); sergeant + vend-bot faces in the demo. Also: --script + --render-room renders the frame a replay ends on. Verified: 5 test suites green, deterministic 25/25 playthrough, GUI boots.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adaptations from the software-rendering playbook, at MRPCI's level of the
stack:
- pic.rs: fBm noise fill, jittered Voronoi fill (with mortar edges) and
scatter — seeded, deterministic, Bayer-dithered through palette ramps
- particles.rs: rain/snow/embers layer on its own RNG stream; RoomDoc
gains `weather`; visuals can never perturb gameplay replays
- font.rs: built-in 5x7 font stamped in index space; headless frames are
now annotated (room chip, score, dialogue windows, transcript strip) so
MCP render_frame shows what a player actually reads (--raw to skip)
- render.rs: compose split into index-space compositing + palette blit;
effective_palette() exports the cycle-LUT-applied strip
- GUI: frame ships to the GPU as indices + a 256x1 palette texture; a
fragment shader does the lookup plus CRT curvature/scanlines/vignette
and room-change fades
- Neon Precinct: fBm night sky + stars, Voronoi sidewalk & wet cobbles,
fBm asphalt, rain in Neon Row and Rain Alley
Verified: replay determinism (byte-identical events x2), 25/25 win path,
GUI boots with the shader.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>