9735468d252fb5ff5ba31af3a5e75437091187bf
2
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
e255076b5c |
v0.4.9f — an Extra starts where you put it, a train card is never discarded
The 0.6.2 change, ported to the playtest line. Three from the v0.4.9e gameplay-testing round — Gitea#4 extras did not start where the player said, #6 train cards could be discarded, #7 four train cards had the wrong coach counts — plus two bugs found underneath #4. Gitea#2 is diagnosed but NOT fixed; it needs a ruling, and the reasoning is in TODO.md. GITEA#4 — AN EXTRA STARTS WHERE THE PLAYER PUTS IT. Both Division Points are offered now, and the START decides the direction rather than the number: an odd westbound Extra placed at the WEST end would otherwise leave the Division on its first move having crossed nothing and be paid for the run. At an Interchange or a Control Point the player picks the direction. The Interchange start is a YARD, off the running line, which is what makes the Superintendent clause work — placing an Extra there can never force a collision, a guaranteed one holds it for another Stage, and a potential one is the Superintendent's to rule on, which are §8.1's two existing answers. Where an Extra may start is a new setting in the New Game dialog, defaulting to what the engine already did so this build does not change under its testers mid-line. FOUND UNDERNEATH IT, both already shipping: an Extra started away from a Division Point could never be given a consist and ran empty, so the Control Point start has been broken since it was added; and collide left destroyed trains' transits on the Mainline card, permanently poisoning that card for every later train. THE MAINLINE CARDS ARE DEALT FROM THE PRINTED DECK NOW, without replacement. They were drawn from the nine types with replacement, so a Division could hold two Interchanges — and "an Extra may start at the Interchange if one is on the board" only reads as a rule if the board holds at most one. This re-deals every seed, so both published replays were retired and re-recorded. GITEA#6 — A TRAIN CARD IS NEVER DISCARDED, Timetabled and Extra alike. No forcing mechanism was needed: nothing discardable plus a hand over the limit leaves exactly one legal way to end the turn, and playing a train is unconditionally legal, so a hand of four cannot trap anyone. The hand panel says so on the train, and the blocked end-turn button changes its wording. GITEA#7 — COACH COUNTS. 1/2 Crack Limited 3 -> 2, 5/6 The Sparrow 2 -> 3. WHAT DIFFERS FROM THE MAIN LINE. The car-placement round rotation test that accompanies #7 there arrived with the 0.6 multiplayer work and does not exist here, so there was nothing for the coach-count change to follow. src/web/main.ts and test/web.test.ts needed hand-resolution: this line's New Game dialog has neither the mode radios nor the victory dials, so only the Extra-start parts were taken. The content.ts comment pass came across whole; main's TODO documentation item did not, since this line keeps its own TODO. 623 tests pass, tsc clean, site builds. |
||
|
|
7c35e002af |
v0.4.9e — five of six playtest bugs: one button per train, and a load that has to go somewhere
Gameplay testing on 0.4.9d returned six reports. Five are fixed; the sixth could not be reproduced and is written up in TODO.md with the two questions that would pin it down. TWO TRAINS AT ONE PLATFORM ANSWERED TO ONE BUTTON. `porter.board` and `porter.detrain` carried no tray, so there was one button per platform however many trains stood at it and the reducer filled the first empty coach on the A/D tracks. `check` and the reducer were not even asking the same question: `check` skipped a train whose card refuses passenger work and the reducer did not. Both intents now carry an optional `trayId`, one function resolves the train and the coach for check/execute/reduce alike, `legal.ts` offers one candidate per train, and the label names it. A LOAD COULD BE MADE AND BROKEN WITHOUT GOING ANYWHERE. A Freight House could unload the boxcar it had just loaded; a platform could detrain the passengers it had just boarded. Full Revenue at both ends for a movement that never happened. Jesse's rule: a load made anywhere in an Office Area may not be broken anywhere in that Office Area, ever — it has to be carried to another district. The load carries the seat that made it (`RollingStock.origin`), stripped by `pooled` at every yard push. Measured at -0.60 +/- 0.10 Revenue a game (t = -6.1) over 400 paired deals: 78 worse, 3 better, 319 unchanged — free Revenue coming off the board, not a nerf. THE GROCER'S WAREHOUSE SHIPPED AND THE REFINERY RECEIVED. Both were `flow: 'both'` on the reading that "Freight House" was a collective term for exactly those two, and therefore what §9.3 described. The engine has dealt a Freight House CARD since before v0.4.9, so §9.3 names it and the argument goes. The card set agrees: all three Refinery modifiers grant +1 outbound. Refinery outbound-only, Grocer's inbound-only, Freight House the one two-way industry — which leaves exactly the one same-district pairing the rule above refuses. NOT REPRODUCED: cars left behind when backing up over them. Five layouts tried, including cars spotted at an industry; every one couples the lot. Three are pinned in `apply.test.ts`. One way to create such cars was closed anyway — `flyingSwitch` wrote its cut past `carsOn`. Both published replays that had gone dead were re-recorded; a rules change retires a save, and `harness.test.ts` is what catches it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011nbvwWMef8CuEP6t5cgkTv |