Rooms are data, physics is code

A room is a plain RoomSpec: cast, personality rigs, locations, an action menu, two room-specific questions, ticker templates. Adding one should mean adding one file and never touching the engine.

The split

Data (a room)Code (the engine)
who is here, and their rigswhat trust, heat and standing do
where they can standhow proximity moves trust
what moves exist, and their priceswhat each move kind actually does
the two room questionscoercion, resolution, the betrayal bar's shape
how the ticker phrases thingswhat the ticker is told about

Every action declares a kind

An action in the menu names an engine ActionKind. The Syndicate's pull_in and a pair room's lock_alliance are different words, prices and blurbs over different kinds, and neither room contains any behaviour. If a new room needs something genuinely new, add a new ActionKind to the engine instead of a special case on a room id.

There is a hard version of this rule: no if (room === ...) in the engine, and no engine constant hardcoded into a component.

The room has to explain itself

RoomSpec.objective carries the game in plain English: the prize, who decides, what winning and losing look like, the badge for somebody safe, the badge for somebody out, and three how-to-watch lines. The engine never reads a word of it, and the UI reads nothing else.

That matters because the rooms are mirror images. Being tapped is the win on the rooftop; being named is the loss in the writers' room. No generic phrase is correct in both, so any hardcoded "eliminated" in a component is a bug waiting for the next room.

The three shapes so far

A fourth room has to be a fourth shape. Another room where peers vote somebody out is a reskin, and reskins are how a data-driven engine stops being one.

RoomWho decidesSelectionAlliances are
Midnight Listan outsider, from outside the politicstap, positive, visibility winsa pair
The Syndicatethe cage, by crew sizecrew, positive, and splita crew
The Cut (archived)the room, by ballotballot, negative, visibility killsa pair

Read next

More on the mechanics