◈ Game EngineRuntime contract · engine 1

Content releases and player state

OwnerOwnsBoundary
Browser runtimeIsometric rendering, input, local animation, selectable dialogue, musicAnimates approved routes; sends action intents
Engine serviceCollision, encounter execution, rooms, membership, authoritative savesPersists each accepted action before acknowledgement
Content packMaps, actors, artwork, soundtracks, dialogue and progression conditionsValidated JSON; no executable scripts
WorkshopDraft validation, scene preview, asset upload, immutable publicationMember validation; owner-only draft and publish APIs
Archive adapterAuthored story export and private source provenanceHTTPS export during authoring; original source material stays private

One runtime, two games

The Unwritten Hour 1.0.0 adapts four existing chapters, keeping their dialogue, keepsakes, actor movement and progression gates. Signal Station 1.0.0 uses the same engine with unrelated maps and characters. Restoring its beacon sets a shared room flag; earning the maintenance badge remains individual progress.

The original Mage Archive world remains a separate running game. Its browser-local saves are not imported or overwritten. This first engine release provides a new journey, not a replacement of the sanctuary, its visual effects, or its live AI conversations.

State ownership

StateScope and persistence
ContentImmutable pack ID + semantic version + SHA-256. A room pins one engine-major-compatible release.
RoomMembers, release, shared boolean flags. Up to eight explicitly invited members.
PlayerScene, approved route, inventory, individual flags, actor positions and dialogue checkpoints. Private to the authenticated member.
PresencePeers visible in the same scene for 12 seconds after their last sync. No other player's inventory or dialogue is transmitted.
Page controlOne browser controls a player. Another page must explicitly take control. Retired pages and stale sequences are rejected.

Content vocabulary

Interacting starts authored dialogue or enters a conditionally unlocked exit. Dialogue beats and completion can move-actor, grant-item, or set-flag. Exit conditions reference player or room flags. A scene, character or chapter name has no special engine meaning. Unknown fields, unsupported effects, missing references and unreachable interactions fail validation.

Failure and recovery

FailureVisible outcome and recovery
Lost request or process restartThe client retains the action ID; the server retains its receipt. Retry cannot apply the action twice. The last confirmed save survives restart.
Disconnected engineFive-second calls retry within a 30-second recovery window, then show a terminal error and Reconnect. Already approved routes may finish locally.
Rejected actionConcrete error; discard the rejected action or explicitly take control. No partial state is committed.
Archive or model unavailableAn established engine capability lasts 24 hours. Movement, authored dialogue and saves call only this service. New login requires archive membership verification. No model calls exist in this release.
Interrupted conversationLeave or refresh retains its checkpoint. Only finishing grants completion effects.
Content rewritePublish a new version. Existing sessions remain on the old version; no automatic save migration.
Missing artwork or musicArtwork startup ends within 12 seconds; music within eight. Explicit error and retry/reload; no endless loading indicator.

Deployment boundary

One writer owns an atomically replaced, fsynced state file under the engine service account. Restart deployment is supported; overlapping writer generations are not. Asset bytes are content-addressed and checked before delivery. Identity bootstrap trusts the explicitly configured archive AuthReturn registration and its membership API; engine action capabilities are scoped to this service and expire in 24 hours.

Current scope

Workshop publication is agent-driven through the authenticated API. Draft preview is a read-only rendering; playable sessions use published releases. Generative authoring, arbitrary mechanics extensions, branching dialogue, save migration and live private-context AI are not implemented. Add these through versioned contracts rather than executable content scripts.