The generated card reference now carries the half TODO #15a said was the point of generating it: every Enhancement's `live` / `dormantSolo` / `unbuilt` status — whether its printed effect actually resolves yet — and the opponent-directed Action and Space-use cards, none of which is dealt in any deck. A transcription cannot carry either fact. Card counts are removed throughout, as ruled: they move with play balance so a document printing them is stale on the next retune. Where a count matters it is a yes/no "is this dealt at all", which is a fact about the design rather than the current tuning. #88 closes with it — it asked whether `card-reference.md`'s industry rows were stale, deliberately without rewriting them since Laborer counts are a balance decision. They are; nothing in the engine changed; that file is simply no longer where anyone looks. The balance question it guarded is #70. Save compatibility becomes a general rule in `README.md` § Design notes rather than a fact restated per version: a save is a list of moves and reopens by being re-played through the CURRENT rules, so any change that makes a once-legal move illegal stops an older one there — a deck change being the likeliest breaker. It fails safe every time. #40 generalised, #32's version-specific note dropped, #52 carries the ruling that versioned replays are a post-1.0 question. #94 opened: a Red Flag set out at an Office's Limits holds the next train from that side and is drawn nowhere. `DivisionView`'s office node has no `redFlag` field and `board-svg.ts` never mentions one, so after the single log line announcing it there is nothing on screen. Same class as Gitea#21 and #22, and already on the common board's step 1 list. No engine change. 897 tests pass, unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E3Qk7uresKCHksdZajXCLg
261 lines
16 KiB
Markdown
261 lines
16 KiB
Markdown
# Station Master — the cards as built
|
||
|
||
> **Generated from `src/engine/content.ts` by `scripts/build-card-reference.ts`. Do not edit by
|
||
> hand** — `npm run build:cards` rewrites it, and `test/card-reference.test.ts` fails if this file
|
||
> and the code disagree.
|
||
|
||
This is the one file in `docs/rules/` that describes the game **as it currently is**. Everything
|
||
else in this directory is a historical record and marked as such: [`rules-v0.1.md`](rules-v0.1.md)
|
||
transcribes the prototype PDFs, [`open-questions.md`](open-questions.md) tracks how the gaps in
|
||
them were decided, and [`rules-v0.2.md`](rules-v0.2.md) and
|
||
[`card-reference.md`](card-reference.md) both describe superseded card sets. Read those for the
|
||
reasoning; read this for the numbers.
|
||
|
||
The engine instantiates from the same constants this is emitted from, so a disagreement between
|
||
this page and the game is a bug in the generator, not a stale table.
|
||
|
||
**No card counts appear here, deliberately** (TODO #15a, Jesse 2026-08-22): the counts move with
|
||
play balance, so a document that prints them is answering a question that will have a different
|
||
answer next retune. Where a count matters it is a yes/no — whether the deck deals the card at
|
||
all — which is a fact about the design rather than about the current tuning.
|
||
|
||
---
|
||
|
||
## Trains
|
||
|
||
12 timetabled and 10 Extras, 22 in all.
|
||
Odd numbers run west, even run east; a pair shares a class and is the same card face in two
|
||
directions. A Crew Tray holds four pieces and a caboose counts toward the four, which is why no
|
||
train with a caboose carries more than three revenue cars.
|
||
|
||
### Timetabled
|
||
|
||
| # | Class | Speed | Runs | Consist | Printed rules |
|
||
| ---: | --- | --- | --- | --- | --- |
|
||
| 1 | Crack Limited | fast | west | 2 coaches (2 pieces) | terminals only; no switching; expedite; *"Stop at Terminals only."* |
|
||
| 2 | Crack Limited | fast | east | 2 coaches (2 pieces) | terminals only; no switching; expedite; *"Stop at Terminals only."* |
|
||
| 3 | Express | fast | west | 2 freight (2 pieces) | one freight per location; expedite; *"May drop or pick up one freight car at every location."* |
|
||
| 4 | Express | fast | east | 2 freight (2 pieces) | one freight per location; expedite; *"May drop or pick up one freight car at every location."* |
|
||
| 5 | The Sparrow | fast | west | 3 coaches (3 pieces) | no switching; expedite |
|
||
| 6 | The Sparrow | fast | east | 3 coaches (3 pieces) | no switching; expedite |
|
||
| 7 | Local | slow | west | 1 freight + 1 coach (2 pieces) | coach stays on station track; *"Maximum one freight, one coach."* |
|
||
| 8 | Local | slow | east | 1 freight + 1 coach (2 pieces) | coach stays on station track; *"Maximum one freight, one coach."* |
|
||
| 9 | Heavy Freight | slow | west | 3 freight + 1 caboose (4 pieces) | — |
|
||
| 10 | Heavy Freight | slow | east | 3 freight + 1 caboose (4 pieces) | — |
|
||
| 11 | Drag Freight | slow | west | 2 freight + 1 caboose (3 pieces) | — |
|
||
| 12 | Drag Freight | slow | east | 2 freight + 1 caboose (3 pieces) | — |
|
||
|
||
### Extras
|
||
|
||
| # | Class | Speed | Runs | Consist | Printed rules |
|
||
| ---: | --- | --- | --- | --- | --- |
|
||
| X13 | Appleseed Extra | slow | player's choice | 3 freight + 1 caboose (4 pieces), empties only | drop only; *"May drop MTs but not pick up anything."* |
|
||
| X14 | Fruit Growers Express | fast | player's choice | 2 reefers + 1 caboose (3 pieces) | expedite; *"Reefers only. May pick up one extra loaded reefer."* |
|
||
| X15 | Yard Xfer | slow | player's choice | 2 freight + 1 caboose (3 pieces) | — |
|
||
| X16 | Light Engine Move | fast | player's choice | engine only | no switching; *"No cars at all."* |
|
||
| X17 | Campaign Train | fast | player's choice | 1 coach (1 piece) | no switching; stop then expedite; stop earns point; must run loaded; *"One turn at station (speeches) then expedite. Earns a point per Office Area if the candidate is aboard."* |
|
||
| X18 | Circus Train | slow | player's choice | 2 freight + 1 coach + 1 caboose (4 pieces) | no switching; stop earns point; must run loaded; *"One turn stopped in an Office Area (circus set-up) earns 1 point, once per Area, if fully loaded."* |
|
||
| X19 | Military Train | slow | player's choice | 1 freight + 2 coaches (3 pieces) | no switching; no passenger work; expedite; must run loaded; *"Troops and materiel: runs loaded where the yard can supply it."* |
|
||
| X20 | Director's private car | slow | player's choice | 2 freight + 1 coach (3 pieces) | no passenger work |
|
||
| X21 | Freight Extra | slow | player's choice | 3 freight + 1 caboose (4 pieces) | — |
|
||
| X22 | Pee-Dee | slow | player's choice | 1 caboose (1 piece) | pick up empties only; *"Per-diem train. May only pick up MTs."* |
|
||
|
||
---
|
||
|
||
## Mainline cards
|
||
|
||
A card is divided into **regions**, and a train advances one region per Stage — so the regions a
|
||
card prints are what it costs to cross. Where a train *enters* is what the rules move: a fast
|
||
train on Hilly, a Heavy Grade with Helpers, or a card whose back region is a siding rather than
|
||
part of the road all change the entry point rather than the card's length.
|
||
|
||
| Card | Regions | Default entry | Fast / slow entry | Trains may pass | Sorts cars |
|
||
| --- | ---: | ---: | --- | :---: | :---: |
|
||
| Plains | 1 | 0 | — | — | — |
|
||
| Curves | 2 | 0 | — | — | — |
|
||
| Hilly | 2 | 0 | 1 / 0 | — | — |
|
||
| Heavy Grade | 3 | 0 | — | — | — |
|
||
| Double Track | 1 | 0 | — | yes | — |
|
||
| Uncontrolled Siding | 2 | 1 | — | — | — |
|
||
| Tunnel | 2 | 0 | — | — | — |
|
||
| Trestle | 1 | 0 | — | — | — |
|
||
| Interchange | 2 | 1 | — | — | yes |
|
||
|
||
The Mainline deck is 10 cards; the two Division Points are the fixed ends of
|
||
the Division and are not dealt. What each card does, in the words the game uses on screen:
|
||
|
||
- **Plains** — 1 region — one Stage each. · 1 Stage for every train — the printed speed is scenery. · One train at a time — anything following has to wait for it to clear.
|
||
- **Curves** — 2 regions — one Stage each. · 2 Stages for every train — the printed speed is scenery. · One train at a time — anything following has to wait for it to clear.
|
||
- **Hilly** — 2 regions — one Stage each. · This card reads the train's FAST/SLOW rating: a fast train starts further along and crosses in 1 Stage, a slow one in 2 Stages. No other card cares which it is. · One train at a time — anything following has to wait for it to clear.
|
||
- **Heavy Grade** — 3 regions — one Stage each. · A grade, climbing eastward. 3 Stages to climb it and 3 Stages to run down, before help. Helpers start an UPHILL train a region further on; Brakeman does the same DOWNHILL and Airbrakes another again, and Airbrakes cannot be played without Brakeman. Never less than one Stage. · One train at a time — anything following has to wait for it to clear.
|
||
- **Double Track** — 1 region — one Stage each. · 1 Stage for every train — the printed speed is scenery. · TRAINS MAY PASS — two trains may stand on this card at once, so a following train is not held behind a slower one.
|
||
- **Uncontrolled Siding** — 2 regions — one Stage each. · A train with the card to itself starts past the back region and is across in 1 Stage. · UNCONTROLLED SIDING — arrive to find a train already here and you take the siding, a region behind it. You are not in the same place, so you do not run into it; it costs you the extra Stage instead. · One train at a time — anything following has to wait for it to clear.
|
||
- **Tunnel** — 2 regions — one Stage each. · 2 Stages for every train — the printed speed is scenery. · One train at a time — anything following has to wait for it to clear.
|
||
- **Trestle** — 1 region — one Stage each. · 1 Stage for every train — the printed speed is scenery. · One train at a time — anything following has to wait for it to clear.
|
||
- **Interchange** — 2 regions — one Stage each. · A train with the card to itself starts past the back region and is across in 1 Stage. · An Extra beginning its run here starts in the back region and takes the extra Stage. · One train at a time — anything following has to wait for it to clear. · Cars may be sorted into any new order here.
|
||
|
||
---
|
||
|
||
## Office cards
|
||
|
||
Upgrades are strictly sequential — no skipping a tier — so a Terminal needs all three cards in
|
||
order. Green slots are outbound passengers, red are inbound, and the design gives slots **equal**
|
||
to Porters rather than one more.
|
||
|
||
| Office | Control point | Passenger facility | A/D tracks | Porters | Green | Red |
|
||
| --- | :---: | :---: | ---: | ---: | ---: | ---: |
|
||
| Whistle Post | — | — | 1 | 0 | 0 | 0 |
|
||
| Depot | yes | yes | 2 | 1 | 1 | 1 |
|
||
| Station | yes | yes | 3 | 2 | 2 | 2 |
|
||
| Terminal | yes | yes | 4 | 3 | 3 | 3 |
|
||
|
||
Whistle Posts are a fixed supply of 4 outside the deck, and Limits signs a
|
||
supply of 8.
|
||
|
||
---
|
||
|
||
## Freight facilities
|
||
|
||
Each lists the car types it works, which way its traffic flows, and the industries it may not sit
|
||
beside. **Every lockout pair is a producer and the consumer of the same commodity** — you may
|
||
build one end of a chain or the other, never both, which is what forces traffic to run between
|
||
districts rather than in circles inside one. No two of the same industry may share an Office Area,
|
||
and that rule is enforced for every kind rather than repeated in each row.
|
||
|
||
| Industry | Cars | Flow | Green | Red | Laborers | Locked out with |
|
||
| --- | --- | --- | ---: | ---: | ---: | --- |
|
||
| Freight House | boxcar | both | 1 | 1 | 1 | Grocer's Warehouse |
|
||
| Mine Tipple | hopper | outbound | 1 | 0 | 1 | Power Plant |
|
||
| Refinery | tank | outbound | 1 | 0 | 1 | Power Plant |
|
||
| Power Plant | hopper, tank | inbound | 0 | 1 | 1 | Mine Tipple, Refinery |
|
||
| Packing Sheds | reefer | outbound | 1 | 0 | 1 | Grocer's Warehouse |
|
||
| Grocer's Warehouse | boxcar, reefer | inbound | 0 | 1 | 1 | Packing Sheds, Freight House |
|
||
|
||
---
|
||
|
||
## Modifier cards
|
||
|
||
Each sits beside a host and raises one of its capacities. `office` as a host means any Passenger
|
||
Facility — so a modifier that adds a green slot to an Office adds nothing to a Whistle Post, which
|
||
is not one.
|
||
|
||
| Modifier | Hosts | +Green | +Red | +Laborers | +Porters |
|
||
| --- | --- | ---: | ---: | ---: | ---: |
|
||
| Waiting area | any Passenger Facility | 1 | — | — | 1 |
|
||
| Restaurant | any Passenger Facility | 1 | — | — | 1 |
|
||
| Hotel | any Passenger Facility | 1 | — | — | 1 |
|
||
| Truck dock | Freight House, Packing Sheds, Grocer's Warehouse | — | 1 | — | — |
|
||
| Railroad Express Agency | Freight House | 1 | — | 1 | — |
|
||
| Forklifts | Freight House, Packing Sheds | 1 | — | 1 | — |
|
||
| Prep Plant | Mine Tipple | 1 | — | 1 | — |
|
||
| Coal Piles | Mine Tipple | 1 | — | 1 | — |
|
||
| Conveyor Belts | Mine Tipple | 1 | — | 1 | — |
|
||
| Pipelines | Refinery | 1 | — | 1 | — |
|
||
| Oil Depot | Refinery | 1 | — | 1 | — |
|
||
| Viscosity breakers | Refinery | 1 | — | 1 | — |
|
||
| Transmission lines | Power Plant | — | — | 1 | — |
|
||
| Rotary Dumps | Power Plant | — | — | 1 | — |
|
||
| Steam Turbines | Power Plant | — | — | 1 | — |
|
||
| Ice House | Packing Sheds, Grocer's Warehouse | 1 | — | 1 | — |
|
||
| Local small groceries | Grocer's Warehouse | — | — | 1 | — |
|
||
|
||
---
|
||
|
||
## Track cards
|
||
|
||
Track is **in the Home Office deck** and is drawn and played like any other card — not a separate
|
||
per-player supply. Operational Rail is the flag that says a train may stop on the card; a turnout
|
||
may be run through but not stopped on.
|
||
|
||
| Track | Geometry | Hand | Operational rail | Move cost | Dealt |
|
||
| --- | --- | --- | :---: | ---: | :---: |
|
||
| Straight track | straight | none | yes | 1 | yes |
|
||
| Curved track (right) | curved | right | yes | 1 | yes |
|
||
| Curved track (left) | curved | left | yes | 1 | yes |
|
||
| Sharp Curved Track (right) | sharpCurved | right | yes | 2 | no |
|
||
| Sharp Curved Track (left) | sharpCurved | left | yes | 2 | no |
|
||
| Turnout (right) | turnout | right | — | 1 | yes |
|
||
| Turnout (left) | turnout | left | — | 1 | yes |
|
||
|
||
A row marked "no" is a shape the engine understands but the deck does not currently print.
|
||
|
||
---
|
||
|
||
## Enhancements
|
||
|
||
The column that only the implementation can fill in: **whether the printed effect actually
|
||
resolves yet.** `live` is read during play; `dormantSolo` is implemented at the point of attack
|
||
but the attack is an opponent-directed card held out of every deck, so nothing reaches it in a
|
||
solitaire game; `unbuilt` means the effect is recorded and nothing reads it. A transcription
|
||
cannot carry this column, which is the argument for generating the page rather than writing it.
|
||
|
||
| Enhancement | Placement | Requires | Effect resolves |
|
||
| --- | --- | --- | :---: |
|
||
| Interlocking | runningTrackStraight | — | **live** |
|
||
| Facing Point Locks | onCard | interlocking in the district | **dormantSolo** |
|
||
| Yard office | secondaryTrackStraight | — | **live** |
|
||
| Small yard | secondaryTrackStraight | — | **live** |
|
||
| Water column | runningTrackStraight | — | **dormantSolo** |
|
||
| Overpass | onCard | — | **unbuilt** |
|
||
| Telegraph | runningTrackStraight | — | **live** |
|
||
| Telephone | onCard | telegraph on the same card | **live** |
|
||
| Radio | onCard | telephone on the same card | **live** |
|
||
| ABS Signals | mainlineCard | — | **live** |
|
||
|
||
---
|
||
|
||
## Opponent-directed cards, and what answers them
|
||
|
||
**None of these is dealt in any deck today.** A card that can only be played at another player
|
||
has no legal target in a solitaire game, and a defence with nothing to defend against is as dead
|
||
a draw as the attack — so both halves are held out until the attacks are implemented. They are
|
||
listed because they are the design, and because what a defence answers is the only record of why
|
||
it exists.
|
||
|
||
### Action cards — opponent-directed
|
||
|
||
| Card | Played on | Effect | Answers |
|
||
| --- | --- | --- | --- |
|
||
| Derail | a moving train in the Local Phase | That train must stop for the remainder of the turn. | — |
|
||
| Broken coupler | a moving train in the Mainline Phase | That train must stop and not move. | — |
|
||
| Railroad crossing | any Secondary Track Straight | May not be used as a stop point for switching. May not become an Industry. | — |
|
||
| Per Diem inventory | another player | Lose one point per 2 empty cars on Secondary Tracks. | — |
|
||
| Demurrage charge | another player | Lose one point per 2 loaded freight cars on Secondary Tracks. | — |
|
||
| Customer complaints | another player | Lose one point per 2 coaches in loading boxes. | — |
|
||
| Vandalism | another player | A train passing a Hobo Jungle has a boxcar looted (converted to empty). | — |
|
||
| Hotbox | another player | A train just arrived must set one car (chooser’s pick) onto Secondary Track until it departs. | — |
|
||
| Outlawed | another player | A train just arrived may not depart for one turn — the crew’s hours have expired. | — |
|
||
|
||
### Space-use cards — opponent-directed
|
||
|
||
| Card | Played on | Effect | Answers |
|
||
| --- | --- | --- | --- |
|
||
| Bean house | adjacent to any straight, curve, turnout, Limit | Burns tablespace. | — |
|
||
| Flop house | adjacent to any straight, curve, turnout | Burns tablespace. | — |
|
||
| Watertower | adjacent to any straight, turnout on Running Track | Burns tablespace. | — |
|
||
| Hobo Jungle | adjacent to any straight, turnout, Limit on Running Track | Burns tablespace. Vandalism can loot a boxcar passing it. | — |
|
||
| Section House | adjacent to any straight, curve, turnout | Burns tablespace. | — |
|
||
| City blocks | adjacent to any straight, curve, turnout, Limit | Burns tablespace. | — |
|
||
| Engine Shops | adjacent to any straight, curve, turnout | Burns tablespace. | — |
|
||
| Tenderloin District | adjacent to any straight, curve, turnout, Limit | Burns tablespace. | — |
|
||
| Engineer cemetery | adjacent to any straight, curve, turnout, Limit | Burns tablespace. | — |
|
||
|
||
### Maneuver cards
|
||
|
||
| Card | Played on | Effect | Answers |
|
||
| --- | --- | --- | --- |
|
||
| Red Flags | any time | A stopped train is prevented from being hit; the approaching train is prevented from moving. | — |
|
||
| Flying Switch | any time | Break a cut of cars away from behind the engine and roll them into an industry. | — |
|
||
| Poling | any time | TBD in the source. | — |
|
||
|
||
Mainline modifier cards, for completeness — these ARE dealt:
|
||
|
||
| Card | Played on | Effect | Answers |
|
||
| --- | --- | --- | --- |
|
||
| Brakeman | a GRADE Mainline card | Faster passage downhill. | — |
|
||
| Airbrakes | a GRADE Mainline card | Faster passage downhill. Brakeman must be in effect. | — |
|
||
| Helpers | a GRADE Mainline card | Faster passage uphill. | — |
|
||
| Realignment | a Mainline card | Convert one Mainline type to another. Not while a train is on it. | — |
|
||
| Facing Point Locks | adjacent to Interlocking | Prevents Derail being played on you. | Derail |
|
||
|