Conditions, story debug & hybrid randomness
Broad condition families tick every turn. Server rolls random table+tier; model narrates. Full story and randomness observability in debug.
engineconditionsrandomnessdebug
- 7 condition kinds (trauma, exposure, toxicity, asphyxia, exhaustion, distress, restraint)
- Hybrid randomness: server roll injected per player turn; hazard/discovery/social/ambient tiers
- chaos baseline derived from seed tone + npc_agency
- Debug: stories, conditions, random roll, LLM payload sections
- Engine version bump to v5.3
Immediate consequences & lethal rash-action tolerance
Attack a cop → instant cuff + backup. Grab or shoot the gun → death. Waiting while detained forces backup arrival. System/diverge banners centered.
enginegameplaycombatux
- Server injections: AUTHORITY RESPONSE (1st assault), LETHAL CONSEQUENCE (gun/shoot/burn), DETENTION TIMER (wait stasis)
- Backup must arrive within 1-2 turns; no 10-turn arrest loops
- Strip leaked [COMBAT ESCALATION] and [SCENE continues] from visible text
- System and diverge log entries centered in terminal
- Engine version bump to v5.8
Combat escalation — guards fight back, no plot nudges mid-fight
Server injects a mandatory fight-resolution block when you keep attacking a passive NPC. No more smoke/murmur hooks during brawls.
enginegameplaynpccombat
- [COMBAT ESCALATION — server authoritative] fires after sustained assault or passive guard loops
- Banned passive fight phrases; trained authority must win by takedown/KO/relocation
- Active combat: zero ambient nudges, no pivot to mysteries when player asks mid-fight
- Debug panel: Combat escalation (next turn) section
- Engine version bump to v5.7
Seed dials, WorldSpec & discoverable laws
Each digit of the seed code biases world physics and social physics. Worlds seed discoverable laws; share links still store the exact turn-1 bible.
engineseedsm8
- 10-axis WorldSpec decoder (type, place, isolation, law, opacity, agency, scarcity, rules, stickiness, tone)
- Opening generation injects WORLDSPEC constraints from the dial code
- STATE laws[] — surface vs true_rule; players earn knowledge through consequence
- Crossed pressures, NPC rule carriers, threads as law probes, consistency audits in prompt
- Share flow: digits bias create; preferred dial code saved; load still exact bible
- Debug panel: WorldSpec dials + laws slices
- Engine version bump to v5.0
YAN-263 · YAN-264 · YAN-265 · YAN-266 · YAN-267 · YAN-268 · YAN-269 · YAN-270 · YAN-271 · YAN-272 · YAN-273 · YAN-274 · YAN-275
Delta STATE — faster sync after scene
Turn 2+ emits only changed STATE fields; client merges into canonical world. Cuts hidden [WORLD] generation from ~12s toward sub-second for quiet turns.
engineperformancestate
- Turn 1: full STATE; turn 2+: delta patches only (target <600 chars)
- Client-side merge by id for characters, locations, laws, threads
- Per-turn delta reminder injected with player action
- Engine version bump to v5.9 — start a new session
NPC registry & realistic combat agency
Every person you meet gets a tracked persona in STATE. NPCs fight back — trained guards win fights instead of passively absorbing punches.
enginegameplaynpc
- characters[] expanded: personality, memory[], disposition, combat_posture, training, authority_level
- Rule: any human in [SCENE] gets a sheet same turn (plot cast or passerby)
- NPC COMBAT & SELF-DEFENSE: no passive punching bags; authority wins vs untrained player
- Realistic outcomes: restraint, knockout, relocation, lethal force, hard END
- Debug panel: Characters overview + JSON roster + prompt excerpts
- Engine version bump to v5.6
Structured state, combat realism & living world
Engine v4.0: JSON character/inventory/body stats, hard capability ceilings, soft endings so the world continues after the starting plot, heat, locations, and open-world chill.
enginegameplaym7
- STATE JSON every turn: player + NPCs with fixed 0-100 core stats, body map, inventory
- Stats generated when characters appear and updated in the background from interactions
- Hard capability ceilings — plot cannot override physics; no invented kung fu
- Body-part injuries gate sprint, aim, and grapple
- Realistic multi-opponent combat and heat/wanted escalation
- Soft SOFT_END keeps the prompt open after starting-plot resolution; hard END for death only
- Location graph + chill exploration; multi-phase plots with aftermath arcs
- Declared abilities for heightened/fantastical worlds only
YAN-248 · YAN-249 · YAN-250 · YAN-251 · YAN-252 · YAN-253 · YAN-254 · YAN-255 · YAN-256 · YAN-257 · YAN-258 · YAN-259 · YAN-260 · YAN-261
Abstract wake-up lines
Openings are generic place labels only — no sensory detail until the player acts.
enginegameplay
- Opening: YOU WAKE UP IN/ON [GENERIC PLACE] — no adjectives, lighting, materials, mood
- Bad example blocked: dimly lit cramped quarters with metal walls
- Full sensory truth lives in STATE; revealed when player looks, moves, or asks
- Engine version bump to v5.5
Grounded GTA-style worlds & plain openings
Seed dials bias toward contemporary normal settings. Openings use simple place names — forest, street, motel — not fairy tale prose.
engineseedsgameplay
- Weighted seed dials: ~77% grounded world_type, street-level place grain, low tone
- Prompt: NORMAL WORLD DEFAULT — GTA-style open-world energy, mundane locations
- Openings: YOU WAKE UP IN/ON [SIMPLE PLACE] — no magic, no lore dump
- WorldSpec constraints reinforce contemporary settings when grounded
- Typing sound stops when display catches up; syncing label while hidden STATE streams
- Engine version bump to v5.4
In-game dev slash commands
Type /commands in the terminal for read-only STATE introspection — story, NPCs, combat injections, dials, and more. Never sent to the LLM.
uxdebugdevtools
- /commands lists 25+ dev commands grouped by category
- Inspect: /story /npcs /traits /heat /next /dials /state /opening /debug
- Dev input shown in log but excluded from engine history and LLM payload
- System output centered with pre-wrap; works while dead or syncing
Opening lines stay in character POV
Wake-up scenes only say what you could notice on the spot — hidden geography and plot truth stay in STATE until you discover them.
enginegameplay
- Opening: YOU WAKE UP IN [immediate place] only — no 'buried under a city' spoilers
- Hedge uncertain impressions (seemingly abandoned) instead of omniscient labels
- Character-POV rule applies to all [SCENE] text, not just the opening
- Engine version bump to v4.2
Starting plot, not main plot
Renames the seeded tension to starting_plot and tells the engine not to railroad players back onto it.
enginegameplay
- STATE key main_plot → starting_plot; active_track default starting
- Soft-end label STARTING PLOT RESOLVED (never MAIN PLOT)
- Explicit no-railroad rules: chill exploration is first-class; ambient nudges are not plot magnets
- Engine version bump to v4.1 (invalidates v4.0 local saves)
Rate limits & seed RPC lockdown
Hardened the public API so the model key and shared-world table are harder to abuse.
securityops
- Per-IP rate limit on /api/game (30/min) with 429 + Retry-After
- Per-IP rate limit on seed create (10/min)
- Seed RPCs executable only via service_role; anon REST returns 401
- SUPABASE_SERVICE_ROLE_KEY required in production
YAN-216 · YAN-225 · YAN-227
Response typing sound
A looping typewriter SFX plays while engine responses reveal character-by-character during streaming and seed load.
uxaudio
- Looping typing sound during typewriter reveal (stream + seed/retry)
- public/sounds/response_typing_sound.wav + lib/typingSound.ts
- Stops when on-screen text catches up; syncing label while hidden STATE streams
Public patch notes page
Devlog lives in-repo and renders at /patch-notes.
meta
- New /patch-notes route (CRT styled)
- content/devlog.json is the source of truth — append to publish
- Links from the terminal and gallery
YAN-262
Patch notes grouped by day
Patch notes now roll up under a calendar-day heading, sorted by significance within each day.
metaux
- /patch-notes groups updates by date (newest day first)
- Within a day: significance 1–100, highest at top
- content/README.md documents the convention for future entries