Session lifecycle & limits
A session moves through a small set of states. Knowing them helps you host confidently — especially around pausing and reloading.
The states
Section titled “The states”A game’s status is one of three values:
- stopped — created but not running (pre-start), or paused. Rules don’t tick. The map can be edited.
- started — running. Rules tick (~once a second), bots move, the clock runs.
- ended — terminal. A win condition, countdown, or elimination finished the game. Rules don’t tick.
The typical path is stopped → started → ended. You can also stop a running game back to stopped (a pause), and start it again.
When you hit Start, the engine runs its pre-flight checklist, then:
- runs one-shot start initializers (role assignments, dealt targets, opening countdowns),
- spawns items declared by the game,
- positions bots, and
- begins the tick loop.
Pause and resume
Section titled “Pause and resume”Pausing (stop) freezes the simulation: rules stop evaluating and the countdown clock freezes where it is. This is the safe moment to fix a mis-placed zone or wait for latecomers. Resuming rolls the deadline forward by however long you were paused, so players don’t lose game time and the visible “time remaining” doesn’t jump.
Ending finishes the session and disconnects players. Games also end on their own when:
- a countdown (fixed duration) expires,
- a team is eliminated, or
- a rule fires an end-game action (a win condition).
When a game ends, everyone gets a game-over event.
Reloading the console
Section titled “Reloading the console”Reloading the GM console mid-game is safe. The console remembers the active session and reconnects on load, replaying the current world so you’re right back where you were. You won’t lose a game by refreshing the browser.
Players reconnect the same way — rejoining with the code resyncs them to the live state.
What persists (and what doesn’t)
Section titled “What persists (and what doesn’t)”Sessions live in the engine’s memory, not a database. Practically:
- The live game state survives reloads and brief disconnects (the server keeps holding it).
- Sessions are not persisted across an engine restart, and there’s no long-term history of past games.
- Idle sessions expire. After a long stretch with no activity (on the order of an hour), a session is automatically reaped to free resources. A code that “stopped working” is usually an expired session — just create a new one.
Join codes
Section titled “Join codes”Each session gets a unique four-letter, pronounceable join code (SHON,
ZOOT, NONA). They’re designed to be easy to say aloud and type, and they’re
case-insensitive. There are enough of them to comfortably cover many simultaneous
sessions. More on how codes are
generated.