more info on train moves in history. train info added to tooltip on timetable and division map. support for multiple trains in area switching. more info on train7/8 wrt location of coach on initial train build.
This commit is contained in:
+183
@@ -21,6 +21,189 @@ page as `v0.1.0 · <sha> · <date>`, so what is deployed can always be identifie
|
||||
|
||||
## Unreleased
|
||||
|
||||
## 0.4.6 — 2026-08-16
|
||||
|
||||
Four play reports in one release: trains that seemed to move before you could work them, a train card
|
||||
you could not look at again, a switching list that never said which train it meant, and a Freight
|
||||
Agent button that looked like it might be where the money was.
|
||||
|
||||
### Why did that train move? The history now says
|
||||
|
||||
**Reported:** "some trains seem to be moving before I can switch or do other operations on them. It
|
||||
may be that the rules as written and implemented are just wrong. It may be that it's my perception."
|
||||
|
||||
It was perception — but the log was feeding it, in one place with an outright falsehood.
|
||||
|
||||
**The arrival line was wrong about Expedite.** It said an expedited train *"leaves again this same
|
||||
Mainline Phase; there is no turn in which to work it"*. The expedited departure was moved to
|
||||
Supervisor Shift precisely so the Porters and Laborers get their Stage with the train, so **Cargo is
|
||||
available and only Local Operations is not** — the log was talking players out of the one turn they
|
||||
had. Both branches now name the phases:
|
||||
|
||||
> Train 8 ARRIVED at the Whistle Post carrying loaded boxcar, empty coach — it stands here for the
|
||||
> rest of this Stage. You can work it in Cargo now, switch it in the NEXT Stage's Local Operations,
|
||||
> and it departs in that Stage's Mainline Phase.
|
||||
|
||||
**Every departure now carries the rule that released it.** They all read alike before, so the one
|
||||
that matters — an Expedited train going at the end of the Stage it arrived — looked exactly like an
|
||||
ordinary train going a Stage later:
|
||||
|
||||
> Train 8 HIGHBALLED — departed the Western Division Point onto the Mainline. **Why now:** it was
|
||||
> made up and the Subdivision ahead was clear, so its run begins
|
||||
|
||||
**EXPEDITE TURNS OUT TO BE CONDITIONAL**, which is most of why it feels arbitrary at the table.
|
||||
`shiftChange` has always said so in a comment — *"an expedited train that would need a ruling simply
|
||||
stays, and runs normally next Stage"* — and it happens often: on one seed with ordinary traffic
|
||||
running, Train 6 The Sparrow was held this way and collected **four** Local Operations turns instead
|
||||
of none. That was silent. It now says so, and the card and the arrival line no longer promise that an
|
||||
Expedited train can never be switched.
|
||||
|
||||
Three tests pin the claims the log makes, so a phase-order change cannot leave the narration lying:
|
||||
an ordinary train gets a Local Operations turn and leaves in a Mainline Phase; an Expedited train
|
||||
alone on the Division gets Cargo, no Local Operations, and leaves in Supervisor Shift; an Expedited
|
||||
train held for a ruling gets its Local Operations turns after all.
|
||||
|
||||
*Also fixed:* a Division Point departure was narrated as a **fake phase marker** — "▸ train 8
|
||||
highballed phase" — and the new departure line reported the wrong end of the railroad, because it
|
||||
read the train's position after `enterMainline` had already moved it onto the Mainline.
|
||||
|
||||
### The train's card, after the card is gone
|
||||
|
||||
**Reported:** "once a train card's been played, how would I see that particular train card again —
|
||||
what it's allowed to do and not allowed to do, and how it has to be loaded? Could I see it on a
|
||||
timetable tooltip? If a train is on the board, could its tooltip include its special rules?"
|
||||
|
||||
Yes to both. `trainRules` already produced the card as one line and the Office card already showed
|
||||
it; it now also rides on:
|
||||
|
||||
- **the Timetable** — hovering a slot gives the train's card under `ITS CARD —`, which is where a
|
||||
player already looks for that train;
|
||||
- **the Division map chip** — a train out on the Mainline can now be asked what it is, which is
|
||||
exactly where "why did that leave without me?" gets asked.
|
||||
|
||||
Two lines in that card were wrong and are corrected. **The coach rule** said *"a cut carrying it may
|
||||
only be set out at the Office"*, which reads as a place you can do it — you cannot, §A.4 refuses the
|
||||
Office square outright, so the coach can never be set out anywhere. **The Expedite rule** said only
|
||||
"it departs in the same Stage it arrives", which is true and useless; it now names the phases, and
|
||||
the clearance exception above.
|
||||
|
||||
### Which train are you switching?
|
||||
|
||||
**Reported from play:** "when switching, make it clear which train you are switching — it is possible
|
||||
to have more than one train available."
|
||||
|
||||
A train standing on an A/D track while a local shunts is ordinary, and the page got it wrong twice
|
||||
over. `Frame.moves` was built from the **first tray in the map**, with a comment admitting it — *"One
|
||||
crew. Solitaire has one, and with more the answer would depend on which is selected — a question the
|
||||
page does not yet ask."* So the board highlighted one crew's reachable squares while the action list
|
||||
offered every crew's moves under a single "Switching" heading of bare coordinates.
|
||||
|
||||
Worse, and not noticed until this was pulled apart: identical labels were collapsed across the whole
|
||||
action kind. *"move to (0, 2)"* describes one crew's move exactly as it describes another's, so **one
|
||||
of the two was silently dropped and could not be chosen at all** — a legal move with no button.
|
||||
|
||||
Now:
|
||||
|
||||
- **One heading per crew**, naming the train and where it stands — *"Switching Train 8, standing at
|
||||
(-1, -3)"*. The train is named in the heading rather than on every button, so the buttons stay
|
||||
short.
|
||||
- **A "Which train are you switching?" row** when there is more than one, and the crew chosen there
|
||||
is the crew whose squares the board draws. One crew at a time on purpose: every crew's highlights
|
||||
at once merge into a blob and stop meaning "here is where *this* train can go".
|
||||
- **De-duplication is per crew**, so two trains that can both reach the same square each get a button.
|
||||
- **A train that may not switch is not offered as one.** `movesFor` is pure track geometry and six
|
||||
cards print "no switching", which `check` enforces and it does not — the Circus Train was being
|
||||
offered as a crew to switch, with every one of its moves refused.
|
||||
|
||||
Display state, deliberately not in the game: which train a player is looking at is not a fact about
|
||||
the railroad, and two players may reasonably be looking at different ones.
|
||||
|
||||
*Found while fixing it:* the grouping key had briefly been `type + separator + trayId`, and a stray
|
||||
byte in that separator collapsed every crew back into one group. The crew now travels as **data on
|
||||
the entry** rather than encoded into a map key that `GROUP_ORDER` also prefix-matches on.
|
||||
|
||||
### The Freight Agent's red box says what it does, and what it does not pay
|
||||
|
||||
**Reported:** "it wasn't obvious if that was a mechanical thing or if that's the actual revenue
|
||||
generation. I believe that's actually where you get the revenue, and that completes unloading the
|
||||
car."
|
||||
|
||||
It is the mechanical one, and the button now says so. The Revenue for an inbound load is paid **one
|
||||
step earlier** — §9.3: *"The last [Laborer] places the load on a red Unloading box. **Earn a Revenue
|
||||
point.**"* Clearing the box is §6.3's Freight Agent operation, *"select one Rolling Stock from a
|
||||
Facility's red Inbound box and place it into the Classification Yard pile"*, and the printed rule
|
||||
attaches no Revenue to it. Confirmed against the engine as well as the rules: `clearInbound` emits
|
||||
`inboundCleared` alone, with no `revenueChanged` beside it, and the score does not move.
|
||||
|
||||
clear red box at (0,0)
|
||||
|
||||
becomes
|
||||
|
||||
send the loaded coach in the red Inbound box at (0,0) to the Classification Yard — pays nothing
|
||||
(the Revenue was paid when the passengers detrained); it frees the last slot so more passengers
|
||||
can detrain here
|
||||
|
||||
The wording follows the facility: an inbound freight load and a coach whose passengers have detrained
|
||||
both wait in the same red box, and both were paid for a step earlier.
|
||||
|
||||
### Making up a Local says which order the cars go on in
|
||||
|
||||
**Reported from play:** "I can't drop a car at all — trying to get an empty to an industry, but I
|
||||
can't drop any cars on the siding first." Chased through two wrong guesses (it was not movement, and
|
||||
it was not the 0.4.5 fix falling short) to a single train and a single arrangement.
|
||||
|
||||
Trains **7/8 Local** print *"coach must remain on station track if switching"*, which the engine
|
||||
reads as "the coach is never set out". A cut always comes off an **outer end**, so if the coach is on
|
||||
one outer end and the engine is on the other, every cut on offer contains the coach — and the train
|
||||
is locked. It cannot set out its freight car, and it cannot even uncouple to **run around**, because
|
||||
that means leaving the coach standing too. The one escape is a Small Yard, of which there is exactly
|
||||
1 copy in the 213-card deck.
|
||||
|
||||
All six arrangements, checked against the rules rather than reasoned about:
|
||||
|
||||
```
|
||||
ENGINE boxcar coach NOTHING — the train is locked
|
||||
boxcar ENGINE coach can set out: boxcar
|
||||
boxcar coach ENGINE can set out: boxcar
|
||||
ENGINE coach boxcar can set out: boxcar
|
||||
coach ENGINE boxcar can set out: boxcar
|
||||
coach boxcar ENGINE NOTHING — the train is locked
|
||||
```
|
||||
|
||||
Two of six lock, and they are exactly the two where the coach holds one outer end and the engine
|
||||
holds the other. **It is only the Local.** Over 60 games, every other train that stood in a district
|
||||
with cars where a set-out was allowed managed one — Drag Freight, Heavy Freight, the Freight Extra,
|
||||
the Director's private car, Yard Xfer, Appleseed — 127 positions, zero blocked. The Local: 1,181
|
||||
positions, every one refused, all `COACH_MUST_STAY`.
|
||||
|
||||
The cruelty is that the locking order `ENGINE boxcar coach` is both the prototypical mixed-train
|
||||
make-up and what the game naturally produces: cars are appended as they are clicked with the engine
|
||||
on the nose, so the **last car added takes the outer end**, and the freight car is the natural first
|
||||
pick.
|
||||
|
||||
**So the make-up panel now says so.** The whole remedy is "do not add the coach last", and it is
|
||||
stated at the only moment it can still be acted on:
|
||||
|
||||
- nothing on the train yet → *"Add the coach FIRST… ENGINE, coach, freight is the order that works."*
|
||||
- coach on, freight still to come → *"Now add the freight car — it takes the outer end, leaving the
|
||||
coach safely inside."* A **hint**, not a warning: the coach lands on the outer end the moment it
|
||||
goes on, including for the player who has just been told to put it there, and colouring that as a
|
||||
mistake punishes them for taking the advice.
|
||||
- coach on the outer end with nothing left to add → a real **warning**, because there is no next step.
|
||||
- freight already on and the coach still to come → *"send it out without the coach if you want it to
|
||||
work the district"*, since "add the coach first" is advice it is too late to take.
|
||||
|
||||
Shown **only** for a train the order can lock, so it is not a standing caption a player learns to
|
||||
skip — every other train, and a Local with no coach coming, get nothing.
|
||||
|
||||
**The rules are untouched.** This is guidance, not a rules change; the open §A.4 question about where
|
||||
the Local's coach stands while its engine works is still open in `TODO.md`, and answering it (letting
|
||||
the coach be set out at the Office, as the card's wording suggests) would let the prototypical
|
||||
make-up work and make this advice unnecessary.
|
||||
|
||||
**Verified end to end**, not just unit-tested: played to a real Local make-up, followed the advice
|
||||
through both steps, and confirmed the resulting `ENGINE coach boxcar` can set a car out.
|
||||
|
||||
## 0.4.5 — 2026-08-14
|
||||
|
||||
### A train can back out of a curve again
|
||||
|
||||
Reference in New Issue
Block a user