v0.4.9h — a leg that is part of the row, the deck the sheet prints, and regions not miles per hour

The 0.4.9 line's port of v0.7.2, minus Gitea#18: the Division map redraw is a
multiplayer redesign and does not belong in a build people are mid-playtest on.

Gitea#17 — a 45° leg is an end of the west-to-east row, so backing into a cut
through a curve's south leg no longer couples it back to front, and a crew
pulling out through a leg takes its own cut with it.

Gitea#14 — every count is docs/Deck cards5.xlsx, including removing the Q12
office doubling and the Gap 12 industry tripling.

Gitea#15 — RAR reversed it: the placement is legal; what must hold is that no
train crosses the gap.

Gitea#3 — the printed speeds are scenery. One Stage per printed region, and
where a train starts is what varies.
This commit is contained in:
Jesse.Markowitz
2026-08-26 15:21:49 -04:00
parent f684c60f2e
commit e9683cc8c5
22 changed files with 4079 additions and 3055 deletions
+73
View File
@@ -19,6 +19,79 @@ page as `v0.1.0 · <sha> · <date>`, so what is deployed can always be identifie
---
## 0.4.9h — 2026-08-26
Four issues off the tracker, the same four that ship as **0.7.2** on `main`. Two are engine bugs a
player hit at the board and two are the design catching up with rulings from RAR. `main`'s fifth
change, the Division map redrawn as a single row (Gitea#18), is deliberately NOT here: it is a
multiplayer redesign, and pushing one of those into the build people are mid-playtest on invalidates
the feedback.
### A 45° leg is part of the row (Gitea#17)
**REPORTED:** "Cars were West to East Caboose, Loaded boxcar, Loaded boxcar, Loaded boxcar. After
backing into that square cars were attached to the train Loaded boxcar, Loaded boxcar, Loaded boxcar,
Caboose, Engine." The caboose came back next to the engine instead of at the far end, which also
leaves the train badly made up under §8.2.
The square was a `sw` CURVE and the train backed in through its SOUTH leg. `standing` runs west to
east, and both places that walk that row asked the PORT which end they were at — but a 45° leg leaves
through the MIDDLE of its edge, so its end of the run is whichever end the arc does not reach. A `sw`
curve's south leg is the row's EAST end; an `se` curve's south leg is its WEST end. `rowEndAt` answers
it from the card, and `cutTowards` is narrowed to `'e' | 'w'` so every caller must resolve.
**The second half was live too:** a crew standing on a curve and pulling out through the leg drove
away LEAVING ITS OWN CUT STANDING, against §A.4. That is the "cars left behind when backing up over
them" report, carried as NOT REPRODUCED since 2026-08-22 — the earlier sweep had tried that case only
with an east or west exit.
### The deck is the sheet (Gitea#14)
Every count in the catalogue is `docs/Deck cards5.xlsx`'s count. Track halved to 16 straights, 8+8
curves, 8+8 turnouts. **Both long-standing multipliers come out with it** — the Q12 office doubling
(14 → 7) and the Gap 12 industry tripling (27 → 9) — because both were measured against a deck with
96 track cards, and halving the track turns the tripling backwards. Measured over 300 games on
identical seeds: reefer cars set out by a crew 49 / 0 / 39 across the three configurations, mean
revenue −0.20 / +0.22 / +0.27. The sheet's own density is the best of the three.
Everything sheet 5 does not list is dealt ZERO copies rather than deleted, so the rules stay
implemented: the dispatching ladder, Facing Point Locks, Flying Switch, Section House and Vandalism,
all confirmed as deliberate removals. 84 rows now agree with the sheet card for card; the only ones
that do not are the ten Safety, Event and Inspection cards it adds that are not built.
### A rail may stop dead against its neighbour (Gitea#15)
Filed as "track placements must connect" and **reversed by RAR on review**: the placement is fine,
and a stub like that has a use as a siding to park cars on. What he asked to confirm is that no train
can traverse the gap — and it cannot: every hop is gated on `joins`, which tests both ports and the
diagonal. That was already true and simply unpinned; the reported geometry is now a test, including
the check that the card IS reachable from the side that joins.
### Crossing a Mainline card is regions, not miles per hour (Gitea#3)
**REPORTED:** a train taking two Stages to clear Double Track, which prints 60. RAR: "Ignore speed
signs, they are just graphics. Regions shown on cards indicate how many stages it takes to cross."
Q1 and Q2 are superseded together, and Q2 — a Slow train adds a Stage to every card — is what
produced the report. Cards carry a region count and where a train STARTS is what varies: Plains 1,
Double Track 1, Trestle 1, Curves 2, Tunnel 2, Heavy Grade 3. Fast/Slow is read on Hilly alone, which
no longer reads the consist. Grade modifiers move the start: Helpers an uphill train, Brakeman a
downhill one, Airbrakes another again. The Uncontrolled Siding and Interchange print a back region
that is not road — a train arriving to find the siding occupied takes it and runs a region behind,
and an Extra beginning its run at an Interchange starts there.
Three things were missing rather than wrong: a following train ENTERING a one-region card behind
another was never tested for a collision, which is what ABS is for; ABS was holding silently on the
Office and Division Point paths; and `collide` never released the A/D track of a train destroyed as
it left. The Uncontrolled Siding was marked "trains may pass", which skipped the collision test and
made the siding do nothing.
Measured: on a 3-player Division the Mainline cards cost a fast train ~5.6 Stages against ~5.4 before
and a slow one ~6.0 against ~9.4. Fast traffic is unchanged; **slow traffic is about a third
quicker**.
---
## 0.4.9g — 2026-08-25
Four more off the Gitea tracker, all of them things a player saw at the board: **#8** a per-diem train