The four hand-written references brought up to the game as it actually runs, ahead of the next testing round, plus a Quickstart to hand a tester who has never played. They had not been touched since v0.6.2 — a month and two minor versions — and each now says at the top which build it describes. ONE LIVE BUG CAME OUT OF THE PASS. mainlineDescription told players "Cars may be sorted into any new order here" on the Interchange. It is the printed capability and has never been implemented: nothing reads sortsCars to permit a sort, and its one live use is marking the card an Extra may be made up on, because it is the Mainline card with a yard. That sentence is not only documentation — view.ts renders it as a Mainline card's `what`, so it is what a player reads on the board, and the generated reference printed a "Sorts cars: yes" column beside it. A card advertising a button that does not exist sends a player hunting for it and then concluding the game is broken. What the documents had wrong, all of it verified against the code rather than read for tone: the victory model in the Rules book (firstToTarget / highestAfterDays and the target-bearing length presets stopped existing in 2026-08 — it is a free days count and a combined floor of 3 x players x days); "there is no lobby, no server, no multiplayer"; crossing time in mph rather than regions; Extras launched automatically eastbound; the Uncontrolled Siding listed as a passing card; industry track length taken from the box count; and a "Sister Trains" optional rule that never existed. The Home deck's counts table came out under TODO #15a — Jesse's own ruling that counts move with balance — and it had been wrong for a month, which is the argument made twice. The Home and Mainline deck references are restructured to explain how a deck is USED and to defer every per-card table to rules/as-built.md. Duplicating it by hand is precisely the drift #15a was raised about: as-built needed no correction beyond the Interchange, because build:cards regenerates it and a test fails when the checked-in file disagrees. Everything hand-maintained around it had drifted; it had not. docs/design.md, the index everything starts from, said v0.4.3, "what is not: the server", and 493 tests. It now also lists the player-facing references, which it never has, so the Quickstart is findable at all. 999 fast tests and 35 sim tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DmdqqCNoiqE7GBo6wthBnR
443 lines
30 KiB
Markdown
443 lines
30 KiB
Markdown
# Station Master — Rules
|
||
|
||
**Describes the game as built at v0.8.0.15** (2026-09-20). Previously stamped "v0.4.5", the
|
||
prototype rules edition this reference was first written against; the filename keeps that stamp
|
||
because `src/`, `CHANGELOG.md` and `docs/rules/` all cite this file by name.
|
||
|
||
**Authority:** observed code paths and tests. Where a card face, a prototype document and executable
|
||
behaviour differ, this document reports **executable behaviour** and marks unimplemented material.
|
||
Per-card numbers are not repeated here — [`rules/as-built.md`](rules/as-built.md) is generated from
|
||
`src/engine/content.ts` and is the table of record.
|
||
|
||
**New to the game? Start with the [Quickstart](StationMaster-Quickstart.md).**
|
||
|
||
## 1. Overview and background
|
||
|
||
Station Master is a railroad-operations game set in the timetable-and-train-order era. Each player operates an Office Area on a shared east–west Division. The local work is building rail, switching cars, moving passengers and freight through facilities, and keeping the Office clear. The shared work is dispatching scheduled trains across the Division. The player holding the Superintendent’s Fedora decides whether to clear a following train into an occupied Subdivision; an unsafe decision can cause a collision.
|
||
|
||
Revenue is the score. Passenger boarding and detraining, freight loading and unloading, completed runs, collisions, and victory conditions are all resolved by the rules configured when the game is dealt.
|
||
|
||
This book is divided as follows:
|
||
|
||
1. overview and scope;
|
||
2. definitions;
|
||
3. creating, saving, replaying, and configuring games;
|
||
4. the shared basic game mechanics;
|
||
5. the implemented solitaire game;
|
||
6. the implemented multiplayer/engine status; and
|
||
7. FAQs and implementation limits.
|
||
|
||
The companion references are the [Quickstart](StationMaster-Quickstart.md) for a new player,
|
||
[Mainline deck](StationMaster-Mainline-Deck-v0.4.5.md), [Home deck](StationMaster-Home-Deck-v0.4.5.md),
|
||
[components](StationMaster-Components-v0.4.5.md), and the generated per-card table
|
||
[`rules/as-built.md`](rules/as-built.md).
|
||
|
||
## 2. Definitions
|
||
|
||
| Term | Meaning |
|
||
| --- | --- |
|
||
| A/D track | An Office arrival/departure capacity. A Whistle Post has 1; Depot, Station, and Terminal have 2, 3, and 4. |
|
||
| Card location | A square in an Office Area grid. A train may end a switching Move only on Operational Rail. |
|
||
| Classification Yard | The holding yard for used rolling stock. It refills the Division Yard only when that yard is completely empty. |
|
||
| Control Point | A Depot, Station, or Terminal. It breaks the shared Mainline into Subdivisions. A Whistle Post is not one. |
|
||
| Crew Tray | An engine plus up to four coupled rolling-stock cars. The engine itself does not count as a car. |
|
||
| Department pile | One of three shared face-up card stacks. Draw and discard affect only the top card. |
|
||
| Division Point | The western or eastern end of the shared Division, where trains enter and leave it. |
|
||
| Division Yard | The active source of rolling stock. |
|
||
| Expedited train | A train with the expedite rule. It performs Load/Unload at an Office after arriving, then attempts to depart at the end of that same Stage. |
|
||
| Facility | A Passenger Facility at an upgraded Office or a Freight Facility at an industry. |
|
||
| Freight Agent | The Local Operations option that stocks one outbound box, clears one inbound box, unjams one load, or ends without acting. |
|
||
| Limits | The two signs defining an Office Area’s Running Track. They move outward when that track is extended. |
|
||
| Local Operations | The first player-driven phase of a Stage. A player chooses one: switch, draw, or Freight Agent. |
|
||
| Mainline | The shared cards between Offices and Division Points. |
|
||
| MEN \| AT \| WORK | A three-box freight pipeline. Any load on it locks its industry track. |
|
||
| Operational Rail | A card on which a train may finish a Move. Turnouts are pass-through only; a locked industry is not usable at all. |
|
||
| Running Track | The east–west track between an Office Area’s Limits, including its Office. |
|
||
| Secondary Track | All local rail inside the Limits that is not Running Track. |
|
||
| Stage | One of twelve turns in a Day. Its phases are Local Operations, New Train, Mainline, Load/Unload and Shift Change. **On screen the last two are labelled "Cargo" and "Supervisor Shift"** — same phases, the names the interface uses. |
|
||
| Subdivision | Mainline between Division Points or Control Points. Clearance checks look through the whole next Subdivision. |
|
||
| Superintendent | The player with the Fedora. The role decides same-direction clearances and rotates every three Stages. |
|
||
| Timetabled train | A numbered train card scheduled to one of the 12 Stage slots, then due at that slot each Day. Odd numbers go west; even numbers go east. |
|
||
|
||
## 3. Create, save, replay, and game configuration
|
||
|
||
### 3.1 Starting a new game in the shipped client
|
||
|
||
The front page has three doors: **Play multiplayer**, **Play solitaire**, and **Browse replays**.
|
||
|
||
**Solitaire** runs entirely in your own browser and needs nothing from the server. Select **New
|
||
game**, then choose:
|
||
|
||
1. a numeric seed, or leave it blank for a fresh browser-generated seed;
|
||
2. a starting hand;
|
||
3. passenger, freight, and train-transit Revenue rates;
|
||
4. the number of Days, and the optional rules.
|
||
|
||
**Multiplayer** goes to the lobby — see §3.5. It needs the server, because the game is authoritative
|
||
there rather than in any one browser.
|
||
|
||
The browser writes those choices into the URL. A particular game is defined by the **seed plus these house rules**, not the seed alone.
|
||
|
||
The three starting-hand choices are:
|
||
|
||
| Choice | Setup result |
|
||
| --- | --- |
|
||
| Three random cards | Default. Deal three cards from one shuffled deck. |
|
||
| Six random cards | Deal six cards from one shuffled deck. The player begins over the normal hand limit and must play/discard down before ending the first Draw turn. |
|
||
| Three random track and three random non-track cards | Shuffle track and non-track piles separately for the opening deal; then recombine and shuffle their remainders for all later draws. |
|
||
|
||
The three Revenue values are independently rounded and clamped to 0–5:
|
||
|
||
- passenger Revenue per coach, paid on boarding and again on detraining;
|
||
- freight Revenue per load, paid on completion of an outbound load and again on completion of an inbound unload; and
|
||
- train Revenue per transit, paid to every player when a train leaves the Division.
|
||
|
||
Defaults are 1 / 1 / 0. Zero turns that revenue source off; it does not prevent the underlying operation.
|
||
|
||
### 3.2 Deterministic setup and the seed
|
||
|
||
The engine uses one seeded random stream for shuffles, Mainline selection, opening D12 rolls, timetable rolls, and automatic Heavy Grade orientation. Given the same seed, configuration, player names/order, and accepted action history, it reconstructs the same state.
|
||
|
||
At setup it creates each Office Area as `Limit — Whistle Post — Limit`, makes the Division Yard, creates players + 3 Crew Trays, turns up three Department cards, and constructs the shared Division.
|
||
|
||
In a multi-player engine game, every player receives two seeded D12 rolls:
|
||
|
||
- The **division roll** orders seats from low west to high east; equal results put the lower player index farther east.
|
||
- The **Superintendent roll** gives the initial Fedora to the first player tied for highest.
|
||
|
||
The opening deal starts at the Superintendent’s seat and proceeds **eastward** — increasing seat index, which is how the Division map draws the table.
|
||
|
||
### 3.3 Saving, resuming, and replaying solitaire
|
||
|
||
The local save format is JSON containing the seed, the accepted intent history, and the house rules. It does not serialize mutable game state. Loading recreates the game from the seed and replays every action through the rules engine. If an old history reaches an action that is no longer legal, replay stops there instead of forcing an invalid state.
|
||
|
||
The browser also stores the current local game and resumes it automatically when the page opens without an explicit seed in the URL. A downloaded save is named `station-master-seed<seed>-day<day>.json`.
|
||
|
||
**Undo is solitaire-only.** It removes the final accepted intent and rebuilds the game from the earlier history. Random outcomes are not rerolled: replaying the same action consumes the same seeded result. Undo can therefore change the player’s decision after seeing an outcome, but cannot fish for a different timetable die roll.
|
||
|
||
### 3.4 Game modes and endings
|
||
|
||
Three modes: **Solitaire**, **Competitive** and **Co-op**. All three are playable.
|
||
|
||
**Length is a free `days` count**, not a preset. The old `short`/`standard`/`campaign` presets
|
||
carried a `target` and were dropped in 2026-08; they survive only as a convenience argument for the
|
||
simulation tooling, resolving to 3, 5 and 10 Days. The default is 5.
|
||
|
||
**How a game ends and who wins:**
|
||
|
||
1. **The timetable runs out** at the end of the last Day. Then:
|
||
2. **The combined Revenue floor** is checked first — `3 × players × days`. Fall short and
|
||
**everybody loses**, whatever anyone individually scored.
|
||
3. **Co-op** wins as a table if the floor is met.
|
||
4. **Competitive** is won by the **highest individual Revenue** once the floor is met.
|
||
5. **Collisions end it early.** Breaching the per-Day or total collision limit ends play at once in a
|
||
collective loss — the railroad has been declared unsafe.
|
||
|
||
**Extended play (Gitea#11).** Both days-based endings — running out of timetable, and closing short
|
||
of the Revenue floor — offer **another Day**, because they are the same event seen twice: the last
|
||
Day ended, and this is what the books say. A collision ending is **not** extendable, and neither is a
|
||
collision breach during an extended Day. The official result is frozen when the timetable first ran
|
||
out, so a railroad declared unsafe on Day 9 does not retract who won on Day 5.
|
||
|
||
**Three optional rules, all implemented:**
|
||
|
||
| Rule | Effect |
|
||
| --- | --- |
|
||
| Reduced Visibility | Five switching Moves instead of six, in Stages 1, 2, 3, 11 and 12 — the night Stages. |
|
||
| Employee Rotation | Every player moves one chair at the end of each Day. Revenue and the Fedora travel with the player; the Office Areas stay with the seats. |
|
||
| Emergency Toolbox | Starts every player holding the Red Flags status, so the hand limit opens at four. |
|
||
|
||
(There is no "Sister Trains" flag. It appeared in an earlier draft of this document and never in the
|
||
configuration.)
|
||
|
||
### 3.5 Multiplayer setup
|
||
|
||
Multiplayer is delivered and is what this package is for. The flow:
|
||
|
||
1. **Create or join.** The host creates a game and gets a **game code**; everyone else joins with
|
||
that code. Seats fill as people arrive, and any seat left empty can be **filled with a bot**.
|
||
2. **Start.** Once the host starts, that same page is where every player plays their turns and
|
||
watches the table. There is nothing else to open.
|
||
3. **The server is authoritative.** The game lives on the server, not in a browser: it survives a
|
||
page reload, a browser restart and a service update, replaying its intent history to get back to
|
||
where it was.
|
||
4. **Your seat is a token in YOUR browser**, scoped to the origin you joined at. A reload finds it
|
||
and puts you straight back. Clearing site data, a private window, or a different browser does not:
|
||
the seat is still yours and still on the server, but that browser can no longer prove it is you.
|
||
An administrator can mint a **single-use recovery link** (StartOS action **Restore a Seat**) that
|
||
trades a code for the token and expires in 30 minutes.
|
||
5. **Watching the table.** Other players' turns arrive as an ordered replay rather than as a board
|
||
that has silently rearranged itself, with a `[N behind]` counter, Pause and Skip.
|
||
|
||
Solitaire needs none of this and runs with the page alone.
|
||
|
||
## 4. Basic game mechanics
|
||
|
||
### 4.1 The Stage sequence
|
||
|
||
Each of 12 Stages follows this sequence:
|
||
|
||
```text
|
||
1. Local Operations — each player, starting with the Superintendent and proceeding eastward
|
||
2. New Train — make up due timetabled trains, then queued second sections and Extras
|
||
3. Mainline — automatic train movement in numeric order
|
||
4. Load/Unload — each player, same order. On screen: "Cargo"
|
||
5. Shift Change — expedited departures, workers. On screen: "Supervisor Shift"
|
||
```
|
||
|
||
**"Proceeding left" is seat order, west to east**, which is how the Division map draws it — the
|
||
screen says "eastward" for that reason, because a table has no shared left.
|
||
|
||
At a Shift Change, Laborers and Porters reset. The Fedora moves after Stages 3, 6, 9, and 12. At Day end, dispatch-device use resets, collision count resets, the Day and Stage roll over, and victory is checked.
|
||
|
||
### 4.2 Local Operations: choose one option
|
||
|
||
On a player’s Local Operations turn, choose exactly one available option.
|
||
|
||
**Switch.** Select any Crew Tray currently in that player’s Office Area. It gets six Moves, or five under Reduced Visibility on the listed night Stages. A Move travels any connected distance in one direction and must end on Operational Rail. Reversing is a separate Move. A train may pass through a turnout but cannot stop on it. It may not share or pass through another train except through an Office with a free A/D track.
|
||
|
||
Standing cars couple automatically when the train reaches them; it may not pass them, and the resulting consist may not exceed four cars. Coupling forward places cars ahead of the engine; coupling while backing places them behind it. Setting out cars does not spend a Move, but the cut must come from an outer end of the consist and may not be left on the Office. A **Small Yard** re-orders a consist for one Move, and since v0.8.0.14 may also place cars **ahead
|
||
of the engine** — which is how a cut is set up to be shoved into a facing industry. Each option on
|
||
the menu shows the train it would build, laid out west to east as the board draws it, and says
|
||
whether the result may leave the Office or would be held there. Flying Switch spends one Move to
|
||
roll a tail cut into a connected Freight Facility.
|
||
|
||
**Draw.** Take one card from the face-down Home Office or the exposed top of one Department pile. During this option, play eligible cards and/or discard cards to Department piles, then finish at the hand limit. Track, facilities, offices, modifiers, enhancements, and train cards have the placement or scheduling rules in the deck references. Mainline modifiers are played from this option as well.
|
||
|
||
**Freight Agent.** Make one of these operations, then the turn ends: stock one green outbound box from a matching loaded Division Yard car; clear one red inbound box to the Classification Yard; unjam one outbound, inbound, or MEN | AT | WORK load to the Classification Yard; or explicitly end without acting. Freight can be stocked only when an unclaimed empty matching car is already spotted at that industry. Passengers may wait in a green Office box without a train present.
|
||
|
||
Implementation note, still true at v0.8.0.15: `card.discard` is accepted during Local Operations
|
||
without checking that the Draw option was chosen — unlike `card.play`, which does check. This is an
|
||
implementation quirk rather than a fourth published turn option.
|
||
|
||
### 4.3 Track, switching, and local safety
|
||
|
||
The Running Track cannot be broken by a curve or other card lacking its east–west through route. Local branches use turnouts and 45° curves. Cards that touch vertically connect only if their 45° legs share the correct diagonal; mere adjacency is not rail connection.
|
||
|
||
An industry’s track is locked while any load is on its MEN | AT | WORK pipeline. Trains cannot enter, cross, pick up from, or set cars out there. When it is unlocked, an industry track is ordinary Operating Rail and holds up to four cars, the same as any other non-turnout, non-Limits card: a crew may set out one, two, three or four cars there, whatever it is carrying. An industry’s green and red boxes are how much work it can hold, not how much rail it has, and a Modifier beside it adds a box without adding room for a car.
|
||
|
||
Train-card restrictions also apply while switching. No-switching trains cannot move, set out, or sort locally. Trains 3/4 share a one-freight-car budget for pickup or setout at each grid location. Trains 7/8 cannot set out their coach. X13 cannot pick up, and X22 may pick up empty cars only.
|
||
|
||
### 4.4 New Train phase
|
||
|
||
At the Stage shown on the timetable, the engine makes up the matching timetabled train if a Crew Tray is free. It starts at the Division Point appropriate to its direction. A train may receive matching loaded or empty cars from the Division Yard until its listed maximum consist is reached or no suitable car remains. It is permitted to leave under-strength.
|
||
|
||
A Second Section order on the due train creates another identical timetabled train behind it when a
|
||
free tray is available. A played Extra is made up after timetabled trains and Second Sections when a
|
||
tray is free, and **the player who played the card chooses where it starts** — either Division
|
||
Point, the Interchange, or an Office, according to the `extraStart` house rule — and loads it as they
|
||
choose rather than going round the table.
|
||
|
||
A timetabled train's consist is built by the table: **starting with the Superintendent and working
|
||
eastward, each player adds ONE car**, going round again until the train is full or the Division Yard
|
||
holds nothing it can take.
|
||
|
||
**When the yard can supply nothing, the game says so.** The round is skipped — there is no point
|
||
asking for a car that cannot be given — and the train is reported as made up short, naming what its
|
||
card wanted, how many such cars are waiting in the Classification Yard, and how far the Division Yard
|
||
is from bare. See §4.6 for why that happens to coaches in particular.
|
||
|
||
### 4.5 Mainline movement and Office arrival
|
||
|
||
Mainline movement is automatic and processes lower train numbers first; a timetabled train outranks an Extra with the same number. A train at a Division Point, at an Office A/D track, or already crossing a Mainline card attempts its applicable movement.
|
||
|
||
**Crossing time is the card's REGIONS**, one per Stage — not its printed mph, which is scenery, and
|
||
not the train's Fast/Slow rating, which only **Hilly** reads. See the
|
||
[Mainline deck](StationMaster-Mainline-Deck-v0.4.5.md) reference for what moves a train's entry
|
||
point. On a normal card, a train must check the entire next Subdivision before entering it:
|
||
|
||
- an opposing train normally blocks entry;
|
||
- a following same-direction train asks the Superintendent to allow or deny clearance;
|
||
- Red Flags or ABS Signals hold the follower automatically; and
|
||
- **Double Track** — the one card two trains may stand on — allows entry without that check. The
|
||
**Uncontrolled Siding** is not a passing card: a train arriving to find it occupied takes the
|
||
siding a region behind, which costs it the extra Stage instead of a collision.
|
||
|
||
An Office arrival normally takes a free A/D track. If the Office is full, the inbound train collides and the local Office player loses 5 Revenue; Interlocking instead holds it at the Limits. A coachless inbound train may divert to a Yard Office. Cars fouling the Running Track at the Office also cause a collision.
|
||
|
||
An expedited train remains available for this Stage’s Load/Unload work after arriving, then attempts to depart at Shift Change. A non-expedited arrival waits until a later Mainline phase. A train departing an Office must be correctly made up: engine at one end, caboose at the far end if present.
|
||
|
||
When a train leaves the far Division Point, its cars are returned to yards, its Crew Tray becomes free, and each player receives the configured train-transit Revenue (zero by default).
|
||
|
||
### 4.6 Passenger work
|
||
|
||
Passenger work occurs during Load/Unload, at a Depot, Station, or Terminal. Each Porter may take one action per Stage.
|
||
|
||
- **Board:** replace an empty coach on an eligible train at the Office with a loaded coach from a green outbound box. The removed empty coach goes to the Classification Yard. Earn configured passenger Revenue.
|
||
- **Detrain:** replace a loaded coach on an eligible train with an empty coach from the Division Yard, placing the loaded coach into an available red inbound box. Earn configured passenger Revenue.
|
||
|
||
Crack Limited trains permit passenger work at Terminals only. Military Train and Director's Private
|
||
Car permit no passenger work. A Whistle Post has no Porters.
|
||
|
||
> **Coaches travel one way, and it is worth knowing before you plan around passengers.** Boarding
|
||
> sends the emptied coach to the **Classification** Yard; detraining draws a fresh empty out of the
|
||
> **Division** Yard; and §2.2 returns the Classification Yard only when the Division Yard runs
|
||
> completely bare. Measured over one three-Day game: sixteen coaches in the Division Yard at setup,
|
||
> **none from Day 2 Stage 8 onward**, fifteen piled in Classification while the Division Yard held
|
||
> steady at 46–47 freight cars and stopped draining — so the refill never fired and no passenger
|
||
> could board or detrain anywhere for the rest of the game, while trains whose cards call for coaches
|
||
> were made up empty.
|
||
>
|
||
> **This is the rules working as printed and the ruling is that it stands** (Jesse, 2026-09-17, the
|
||
> same ruling Gitea#2 got: running out is part of the game). What changed is that the game now says
|
||
> it — the yard panel warns while the shortage lasts, and a train made up short reports why. Whether
|
||
> the ratchet should be broken is open as TODO #108, to be decided on a second game's evidence.
|
||
|
||
### 4.7 Freight work
|
||
|
||
Freight work also occurs during Load/Unload. Each Laborer can take one action per Stage. Every freight facility has MEN, AT, and WORK boxes.
|
||
|
||
For an **outbound load**, first use the Freight Agent to put a matching loaded car into the green box, with an unclaimed empty matching car spotted on the industry track. A Laborer starts the load on MEN, then advances it to AT, then WORK, then onto the empty car. Completing the last step changes that car to loaded, sends the replaced empty car to the Classification Yard, and earns configured freight Revenue.
|
||
|
||
For an **inbound unload**, a matching loaded car must be spotted at an inbound-capable industry and the Division Yard must contain a matching empty car. A Laborer replaces the spotted loaded car with that empty car and starts the load on WORK. Laborers move it backward through AT and MEN into a free red inbound box. That final placement earns configured freight Revenue. Clearing the red box later with the Freight Agent pays no additional Revenue.
|
||
|
||
## 5. Solitaire
|
||
|
||
Solitaire is one named player and one Office Area, running entirely in the browser with no server.
|
||
It is **not** the only implemented game any more — see §6 — but it is the one that needs nothing but
|
||
the page.
|
||
|
||
Solitaire-specific features are:
|
||
|
||
- a local browser save, automatic resume, and JSON download/load;
|
||
- **unlimited step-by-step Undo** back through accepted action history — multiplayer has none,
|
||
because a shared game cannot be rewound under the other players; and
|
||
- a seed/rules URL suitable for sharing or reproducing a game.
|
||
|
||
Automatic phases get a visible beat in solitaire too, so the board plays its own moves out rather
|
||
than jumping.
|
||
|
||
The active deck removes all 22 opponent-directed cards. Therefore, the defensive cards whose only purpose is to answer them (Facing Point Locks and Water Column) can be placed but have no opportunity to fire; Overpass has no effect at all. The game still includes shared-rail mechanics such as Mainline clearance, but with one player no other player can occupy the Division.
|
||
|
||
To win the default one-player game, finish Day 5 having met the combined Revenue floor —
|
||
`3 × players × days`, which at one player over five Days is **15**. Below it is a loss, and the game
|
||
offers you another Day rather than simply ending. Train-transit Revenue defaults to zero, so the
|
||
score has to come principally from passenger and freight work.
|
||
|
||
## 6. Multiplayer
|
||
|
||
### 6.1 What the engine supports
|
||
|
||
The rules engine has always supported multiple named players; since v0.7 the lobby, server and
|
||
client around it are delivered too, so this section now describes a game people actually play. The
|
||
engine has player, seat, score, Office Area, Division, phase-order, co-op and competitive-mode data
|
||
for multiple named players. It deals each player a hand, creates one Office Area per seat, starts acting order at the Superintendent and proceeds eastward, and models the following multiplayer-specific outcomes:
|
||
|
||
- the D12 seating and Superintendent rolls described in section 3;
|
||
- individual Revenue in competitive play and shared total Revenue in co-op;
|
||
- a collective loss on breaching the collision limits;
|
||
- the combined Revenue floor, `3 × players × days`; and
|
||
- train-transit Revenue awarded to every player, if that revenue setting is nonzero.
|
||
|
||
The engine’s setup checks only that there is at least one player and that Solitaire has exactly one player. It does not enforce a maximum player count, although the test and design material exercise two through four players.
|
||
|
||
### 6.2 What IS delivered
|
||
|
||
Everything in §3.5: a lobby with game codes, seating, bots filling empty chairs, an authoritative
|
||
server that survives restarts and updates by replaying its intent history, per-seat reconnection, an
|
||
administrator's single-use seat-recovery link, and an ordered replay of other players' turns on each
|
||
player's own screen.
|
||
|
||
The package also exposes administrative **actions** on StartOS — list games in progress, get the
|
||
join secret, manage a game, restore a seat — documented in the wrapper repository rather than here.
|
||
|
||
### 6.3 What is NOT delivered
|
||
|
||
**No card may be played at another player.** The 12 space-use and 10 action cards are excluded from
|
||
every dealt deck in every mode, and `check` rejects playing one. That includes Derail, Broken
|
||
Coupler, Railroad Crossing, the score-penalty cards, Vandalism, Hotbox, Outlawed and all
|
||
table-space cards. Facing Point Locks and Water Column exist only as dormant defences against
|
||
effects nothing can currently cause, and Overpass has no effect at all.
|
||
|
||
**No multiplayer Undo.** A shared game cannot be rewound under the other players.
|
||
|
||
### 6.4 How multiplayer differs from solitaire
|
||
|
||
Players have separate districts, hands and scores, and share the Home Office deck, the Department
|
||
piles, the yards, the timetable, the Mainline and every traffic consequence. One player acts at a
|
||
time.
|
||
|
||
**A seat is not a player**, and the distinction is load-bearing. Offices belong to seats; Revenue,
|
||
hands, the Fedora and identity belong to players. With **Employee Rotation** on, players move one
|
||
chair at the end of each Day and take their Revenue and the Fedora with them, while the districts
|
||
stay where they are.
|
||
|
||
So multiplayer changes shared traffic, scores, turn order and how the game is won or lost — not card
|
||
attacks, which do not exist in any mode.
|
||
|
||
## 7. Frequently asked questions
|
||
|
||
### Is the same seed always the same game?
|
||
|
||
Only with the same house rules, player configuration/order, and action history. The seed drives all engine randomness, but the starting hand and Revenue settings also change the game.
|
||
|
||
### Why can’t I end my draw turn?
|
||
|
||
Your hand exceeds three cards, or four when the Red Flags hand-limit status is active. Play or discard down to the limit.
|
||
|
||
### Why can’t my train move onto a turnout?
|
||
|
||
It may move through a turnout but cannot end a Move there because turnouts are not Operational Rail.
|
||
|
||
### Why can’t a train enter my industry?
|
||
|
||
Its MEN | AT | WORK pipeline contains a load, which locks the track; the rail geometry does not connect; another train occupies it; mandatory coupling would exceed four cars; or four cars are already standing there, which is as many as any card holds.
|
||
|
||
### Why won’t an industry accept a new outbound load?
|
||
|
||
The green box may be full, the Division Yard may lack a matching loaded car, or there is no unclaimed empty matching car already spotted on that industry’s track.
|
||
|
||
### Why does an inbound freight unload require an empty car in the Division Yard?
|
||
|
||
The engine immediately replaces the spotted loaded car with a matching empty car. It will not create a new car from nothing.
|
||
|
||
### Why did an arriving train collide instead of wait?
|
||
|
||
The Office had no free A/D track and no Interlocking. A full Office is an automatic local collision. An Interlocking holds the arrival at the Limits.
|
||
|
||
### Why is a train held at an Office even though the Mainline is clear?
|
||
|
||
It may be on Secondary Track rather than the Office, or be badly made up: its engine is between cars or its caboose is not at the far end.
|
||
|
||
### Why did an expedited train leave after passenger/freight work?
|
||
|
||
Expedite means it departs in the Stage it arrived, but the departure waits until Shift Change so the
|
||
train is still present for that Stage's Load/Unload phase.
|
||
|
||
### Can I choose the direction of an Extra or a Heavy Grade?
|
||
|
||
**An Extra, yes** — the player who played the card chooses where it starts and which way it runs, and
|
||
loads it as they choose (v0.6.2). **A Heavy Grade, no**: orientation is rolled from the seed. That is
|
||
a decision rather than a gap — the card sits between two districts and belongs to neither, so handing
|
||
the choice to one neighbour would advantage them permanently. See the Mainline deck reference.
|
||
|
||
### Can I use an Interchange to reorder a train?
|
||
|
||
**No, and the card used to claim otherwise.** Its printed car-sorting has never been implemented; the
|
||
description was corrected on 2026-09-20 to stop advertising it. What the Interchange actually offers
|
||
is the one Mainline card with a yard, so an **Extra may be made up and started there**. Re-ordering a
|
||
consist is done at a **Small Yard** in a district.
|
||
|
||
### Can I play attack cards on another player?
|
||
|
||
No. All action and space-use cards are excluded from every dealt deck in every mode, and playing one
|
||
is rejected.
|
||
|
||
### Is multiplayer playable?
|
||
|
||
**Yes.** Lobby, game codes, seating, bots, an authoritative server that survives restarts, per-seat
|
||
reconnection and a replayed view of everyone else's turns are all delivered — see §3.5 and §6. The
|
||
opponent-directed cards remain unimplemented in every mode, so there are still no card attacks.
|
||
|
||
### Why did my passenger train arrive with no coaches?
|
||
|
||
Almost certainly the coach ratchet in §4.6: every coach has ended up in the Classification Yard,
|
||
which comes back only when the Division Yard runs completely bare. The yard panel warns when this
|
||
has happened, and a train made up short says so in the log.
|
||
|
||
### Why is every option in the Small Yard marked "HELD at the Office"?
|
||
|
||
Because that train is **already made up**, so every re-order on offer would break it — most often by
|
||
moving the caboose off the rear, which §8.2 will not let a train depart with. If the train is *not*
|
||
currently fit to run, at least one option will be marked "MADE UP, ready to leave".
|