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
154 lines
8.9 KiB
Markdown
154 lines
8.9 KiB
Markdown
# Station Master — Home Deck
|
||
|
||
**Describes the game as built at v0.8.0.15** (2026-09-20). Previously stamped "v0.4.5", the
|
||
prototype rules edition these references were first written against; the filename keeps that stamp
|
||
because `src/`, `CHANGELOG.md` and `docs/rules/` all cite this file by name.
|
||
|
||
**Scope:** the Home Office deck — how it is dealt, drawn, discarded and reshuffled, and what the
|
||
rules are for playing each kind of card out of it.
|
||
|
||
> **Per-card facts live in [`rules/as-built.md`](rules/as-built.md)**, which is GENERATED from
|
||
> `src/engine/content.ts` and checked by `test/card-reference.test.ts`, so it cannot disagree with
|
||
> the game. Read it for every card's name, effect, placement and whether its printed effect actually
|
||
> resolves yet. This document is how the deck WORKS; that one is what is in it.
|
||
>
|
||
> **No card counts appear here, deliberately** (TODO #15a, Jesse's call 2026-08-22): counts move
|
||
> with play balance, so a document printing them is answering a question that has a different answer
|
||
> after the next retune. Where a count matters it is rendered as a yes/no — whether the deck deals
|
||
> the card at all — which is a fact about the design. This page used to print a full counts table
|
||
> and it was wrong for a month before anyone noticed.
|
||
|
||
## The piles
|
||
|
||
- **Home Office deck** — face down. The pile a Draw comes from.
|
||
- **Three Departments** — face-up discard piles. A discard goes onto one, which is precisely so a
|
||
rival may take it; a Draw may take the top card of a Department instead of the deck.
|
||
- **Salvage Yard** — where a played-out card ends up. An Extra's card goes here after its run.
|
||
|
||
When the Home Office deck runs out it is rebuilt from the Salvage Yard and **all three Departments
|
||
in full**, reshuffled from the seeded stream. A **spent timetabled train** is not collected — its
|
||
number is on the timetable and it cannot run twice — but a *discarded* train was never played and
|
||
is still runnable, so it comes back.
|
||
|
||
## Hand and turn
|
||
|
||
The hand limit is **three**, or four while you hold a Red Flag. You may not end a turn over the
|
||
limit: play a card or discard one to a Department. Some cards cannot be discarded at all — an Extra
|
||
never can, and a timetabled train cannot when the `discardTimetabled` house rule is off — so a hand
|
||
of nothing but those has exactly one way forward, which is to play one.
|
||
|
||
The opening deal is a house-rule choice made when the game is dealt. The default (`threeRandom`) is
|
||
three cards from one shuffled deck; `threeTrackThreeOther` deals three track and three others from
|
||
two separately shuffled piles, deliberately over the hand limit, so the first turn is spent choosing
|
||
which district you can afford to build.
|
||
|
||
Drawing is one of the three Local Operations options — see [Rules](StationMaster-Rules-v0.4.5.md)
|
||
§4.2. Taking the option lets you draw **and** play or discard within the same turn.
|
||
|
||
## Track cards
|
||
|
||
Track cards are ordinary Home Office cards, not a separate personal supply.
|
||
|
||
- A placed card must **connect to existing rail**: at least one neighbour must join it.
|
||
- The **Running Track** is the row from Limit to Limit. A card placed there must carry an east–west
|
||
through route, or it breaks the main.
|
||
- Placing track **on a Limit sign** extends the Running Track and moves that sign outward. The sign
|
||
is a physical card, so it moves rather than being left stranded mid-track.
|
||
- **Nothing may be placed outside your Limits** — track, industries and, since v0.8.0.14, Modifiers
|
||
too. Your district ends at its sign.
|
||
- Curves and turnouts are printed left- or right-handed. A card may be turned 180° but never flipped
|
||
over, so its 45° leg never changes diagonal.
|
||
- A **turnout may upgrade** an existing straight, or a curve whose arc is exactly the turnout's
|
||
diverging arc. Not if the card holds standing cars or an enhancement. Every other occupied square
|
||
is unavailable.
|
||
- A turnout may be **run through but not stopped on**: it is not Operational Rail, so a Move may not
|
||
end there.
|
||
|
||
## Office cards
|
||
|
||
Every player begins at a **Whistle Post**, which is not drawn from the deck: one A/D track, no
|
||
Porters, no passenger slots, and not a Control Point.
|
||
|
||
Office cards are **upgrades in strict sequence** — Whistle Post → Depot → Station → Terminal — and
|
||
each upgrades the Office in place rather than replacing its card or its attached track. Modifiers
|
||
already beside it are preserved. Each tier adds an A/D track, a Porter, and an outbound and inbound
|
||
passenger slot; a Depot and above is a Control Point and a Passenger Facility.
|
||
|
||
An upgrade takes no placement: the Office is where it already is.
|
||
|
||
## Freight facilities
|
||
|
||
An industry is placed on a connected straight **stub off the Running Track** — never on the Running
|
||
Track itself, and never outside the Limits. A Facility carries its own rails, so placing one places
|
||
track.
|
||
|
||
Each begins with one Laborer and a three-box **MEN | AT | WORK** pipeline. No Office Area may hold a
|
||
duplicate industry, or both ends of a lockout pair — a producer and the consumer of the same
|
||
commodity cannot be built in one district.
|
||
|
||
**An industry track holds four cars, like any other card.** It is *not* sized by the industry's box
|
||
count. That distinction was a real bug: box count is how much WORK an industry can hold, not how
|
||
much RAIL it has, and conflating the two invented a printed siding no industry card carries.
|
||
|
||
## Facility modifiers
|
||
|
||
A Modifier sits on an empty square among the **nine spots around its host Facility** — and, since
|
||
v0.8.0.14, **inside your Limits**, like everything else. It may not stand in the Running Track row.
|
||
One of each kind per Office Area.
|
||
|
||
**A Modifier adds a BOX, never room for a car.** A Truck Dock beside a Grocer's Warehouse gives it a
|
||
second red box — somewhere for one more arriving load to be cleared to — and changes nothing about
|
||
how many cars may be spotted there.
|
||
|
||
**A grant the host cannot use does nothing**, and the game says so rather than pretending. An
|
||
outbound bonus beside an inbound-only facility, or the Truck Dock's inbound bonus beside the
|
||
outbound-only Packing Sheds, is discarded — the latter leaving that card with no effect at all.
|
||
Passenger modifiers beside a **Whistle Post** add Porters but create no outbound slot until the
|
||
Office becomes a Passenger Facility; the panel reports that as DORMANT rather than claiming the
|
||
facility "only receives", which was wrong in both directions.
|
||
|
||
## Train cards
|
||
|
||
Playing a **timetabled** train rolls the seeded D12 and puts its number in the first open timetable
|
||
slot at or after the result, wrapping around the 12-slot chart. It then runs at that Stage **every
|
||
Day**.
|
||
|
||
Playing an **Extra** queues it; it is made up when a Crew Tray comes free, and **the player who
|
||
played the card chooses where it starts and loads it as they choose** (§7). Where it may start is a
|
||
house rule — `divisionPointsOnly`, `ownOffice`, or `anyOffice` (the default) — and the Interchange is
|
||
also available, because it is the one Mainline card with a yard. An Extra runs once and its card
|
||
goes to the Salvage Yard.
|
||
|
||
> The v0.4.5 behaviour of launching every Extra eastbound from the Western Division Point was
|
||
> replaced in v0.6.2. The number no longer decides an Extra's direction; the start does.
|
||
|
||
The listed consist is a **maximum, not a minimum**. A train may depart with fewer cars, but not with
|
||
more, not of the wrong category, not with a car behind the caboose, and not with the engine buried
|
||
among its own cars. A Crew Tray holds four pieces, and a caboose counts toward the four.
|
||
|
||
A train made up short of what its card calls for is reported as such, with what it wanted and why
|
||
the yard could not supply it — see Rules §4.4.
|
||
|
||
**Per-train consists and printed rules: [`rules/as-built.md`](rules/as-built.md) § Trains.** It
|
||
carries the `empties only`, `reefers only`, `drop only` and `pick up empties only` restrictions,
|
||
every one of which the engine enforces.
|
||
|
||
## Enhancements, Mainline modifiers and Maneuvers
|
||
|
||
- **Enhancements** are played into your district and change what a square does — the **Small Yard**
|
||
(re-order a consist for one Move), **Interlocking**, **Yard Office**, **ABS Signals** and the rest.
|
||
`as-built.md` marks each one `live`, `dormantSolo` or `unbuilt`, which is the part only the
|
||
implementation knows.
|
||
- **Mainline modifiers** are played onto a Mainline card: the Heavy Grade helpers and Realignment.
|
||
See [Mainline deck](StationMaster-Mainline-Deck-v0.4.5.md).
|
||
- **Maneuvers** are held and spent: **Red Flags** and **Flying Switch** have their own actions.
|
||
Poling is catalogued but its effect is recorded as "TBD in the source", so there is nothing to
|
||
implement.
|
||
|
||
## Opponent-directed cards — not dealt
|
||
|
||
The **Action** and **Space-use** categories are opponent-directed and are **excluded from every
|
||
dealt deck**, because their play rules are not implemented. They are catalogued in
|
||
`as-built.md` so the composition is on record, and `check` refuses to play one. This is deliberate:
|
||
silently accepting them would make a card look playable while doing nothing.
|