Submodule pinned to v0.7.4 (19a6a47), `current.ts` at `0.7.4:0`, release notes rewritten in all five locales, README.md and instructions.md updated. No new version file and no migration: the outgoing 0.7.3:0's `up` is empty, `versions.md`'s common case, so `current.ts` bumps in place. Three rules corrections, all places where the code and the cards disagreed. The Yard Office is offered rather than imposed, must be reachable in one move, and cars on the lead collide — none of which it checked. Circus, Campaign and Military trains run loaded where the yard can supply it, and the per-stop point is earned once per Office Area by a fully loaded train. Red Flags becomes a directional flag on your own Limits, spent on the train it stops, playable at the moment the engine sees a certain collision. GAMES IN PROGRESS MAY NOT SURVIVE THIS ONE, and the notes lead with it in every locale — the opposite of 0.7.3 and for a different reason from 0.7.2. Nothing about the save format changed; what changed is what the rules accept. The Red Flags intent changed shape, a make-up that was legal may now be refused, and a Yard Office arrival asks a question no older history has an answer for. It fails safe: the server declines a save the rules reject, names the move, and leaves the file untouched. A game that never meets one of the three carries on, which is why this is "may not" rather than 0.7.2's "will not". README.md's diagnosing note is extended: the Mainline Phase now stops to ask three different questions of three different players, and a game sitting on one is waiting on a person rather than stuck — it shows as active with nobody to wait for, because an interruption is not a turn. Verified: `npm run check` clean, prettier clean, `make x86` packs as v0.7.4:0. NOT verified: not yet installed on a box, and none of the three rules has been played by a human — upstream TODO.md #35 still stands for extended play too. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAgJSmeV8zrMh55Mj85ESb
129 lines
12 KiB
TypeScript
129 lines
12 KiB
TypeScript
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'
|
|
|
|
export const current = VersionInfo.of({
|
|
// `<upstream>:<downstream>` — the upstream half tracks the bundled Station Master tag exactly
|
|
// (`versions.md`'s consistency checklist), so bumping the submodule pin and bumping this are one
|
|
// action. The downstream half moves only for packaging-only changes, and RESETS to `:0` when the
|
|
// upstream half moves.
|
|
version: '0.7.4:0',
|
|
releaseNotes: {
|
|
en_US:
|
|
'Bundles Station Master v0.7.4 \u2014 three rules corrections. IMPORTANT: a game already in progress may ' +
|
|
'not carry over. These change what the rules accept, so a saved game can stop replaying; the server ' +
|
|
'declines to resume one rather than breaking it, says which move it stopped at, and leaves the file ' +
|
|
'untouched, so you can put v0.7.3 back on to finish a game you care about. THE YARD OFFICE IS NOW ' +
|
|
'OFFERED, NOT AUTOMATIC. A freight train arriving in your district is asked where it should go, it ' +
|
|
'must be able to reach the yard in one move, and if there are cars standing on the way in it crashes ' +
|
|
'into them \u2014 none of which the game checked before. When it cannot be offered, the history says why. ' +
|
|
'SOME EXTRA TRAINS MUST RUN LOADED. The Circus, Campaign and Military trains take loaded cars while ' +
|
|
'the yard can supply them, empties once it cannot, and may run short. A Circus or Campaign train ' +
|
|
"earns its point for setting up ONCE IN EACH PLAYER'S DISTRICT rather than once in the game, and only " +
|
|
'when every car is full \u2014 not much of a circus if the cars are empty. RED FLAGS ARE A DIFFERENT CARD. ' +
|
|
'Instead of protecting one stopped train out on the line, a flag is planted on the east or west side ' +
|
|
'of your own district and holds the next train coming from that way, buying you a Stage to finish ' +
|
|
'switching. It comes down with the train it stops. You may also play it the moment danger appears: if ' +
|
|
'an arriving train is about to hit something, you are asked whether to flag it.',
|
|
es_ES:
|
|
'Incluye Station Master v0.7.4: tres correcciones de reglas. IMPORTANTE: una partida ya en curso ' +
|
|
'puede no conservarse. Estos cambios alteran lo que las reglas aceptan, as\u00ed que una partida guardada ' +
|
|
'puede dejar de reproducirse; el servidor se niega a reanudarla en vez de estropearla, indica en qu\u00e9 ' +
|
|
'jugada se detuvo y deja el archivo intacto, de modo que puedes volver a instalar la v0.7.3 para ' +
|
|
'terminar una partida que te importe. LA OFICINA DE PATIO AHORA SE OFRECE, NO ES AUTOM\u00c1TICA. A un ' +
|
|
'tren de mercanc\u00edas que llega a tu distrito se le pregunta ad\u00f3nde debe ir, tiene que poder alcanzar ' +
|
|
'el patio en un solo movimiento, y si hay vagones parados en el camino choca contra ellos: nada de ' +
|
|
'esto se comprobaba antes. Cuando no puede ofrecerse, el historial explica por qu\u00e9. ALGUNOS TRENES ' +
|
|
'EXTRA DEBEN CIRCULAR CARGADOS. Los trenes de Circo, de Campa\u00f1a y Militar toman vagones cargados ' +
|
|
'mientras el patio pueda suministrarlos, vac\u00edos cuando ya no, y pueden circular incompletos. Un tren ' +
|
|
'de Circo o de Campa\u00f1a gana su punto por instalarse UNA VEZ EN EL DISTRITO DE CADA JUGADOR, en lugar ' +
|
|
'de una vez por partida, y solo si todos sus vagones van llenos: poco circo es si los vagones van ' +
|
|
'vac\u00edos. LAS BANDERAS ROJAS SON OTRA CARTA. En vez de proteger a un tren parado en la l\u00ednea, la ' +
|
|
'bandera se planta en el lado este u oeste de tu propio distrito y detiene al siguiente tren que ' +
|
|
'venga por ah\u00ed, d\u00e1ndote una Etapa para terminar de maniobrar. Se retira con el tren que detiene. ' +
|
|
'Tambi\u00e9n puedes jugarla en el momento del peligro: si un tren que llega va a chocar, se te pregunta ' +
|
|
'si quieres detenerlo con la bandera.',
|
|
de_DE:
|
|
'Enth\u00e4lt Station Master v0.7.4 \u2014 drei Regelkorrekturen. WICHTIG: Eine bereits laufende Partie geht ' +
|
|
'm\u00f6glicherweise nicht mit. Diese \u00c4nderungen betreffen, was die Regeln akzeptieren, daher kann ein ' +
|
|
'gespeichertes Spiel nicht mehr nachspielbar sein; der Server verweigert die Fortsetzung, statt das ' +
|
|
'Spiel zu besch\u00e4digen, nennt den Zug, an dem er stehen blieb, und l\u00e4sst die Datei unangetastet \u2014 wer ' +
|
|
'eine Partie retten will, spielt sie mit v0.7.3 zu Ende. DAS BAHNHOFSB\u00dcRO WIRD JETZT ANGEBOTEN, NICHT ' +
|
|
'ERZWUNGEN. Ein G\u00fcterzug, der in deinem Bezirk ankommt, wird gefragt, wohin er soll; er muss den ' +
|
|
'Bahnhof in einem Zug erreichen k\u00f6nnen, und stehen Wagen im Weg, f\u00e4hrt er hinein \u2014 nichts davon wurde ' +
|
|
'vorher gepr\u00fcft. Ist das Angebot nicht m\u00f6glich, sagt die Chronik warum. EINIGE EXTRAZ\u00dcGE M\u00dcSSEN ' +
|
|
'BELADEN FAHREN. Zirkus-, Wahlkampf- und Milit\u00e4rzug nehmen beladene Wagen, solange der Bahnhof sie ' +
|
|
'liefern kann, sonst leere, und d\u00fcrfen auch kurz fahren. Ein Zirkus- oder Wahlkampfzug bekommt seinen ' +
|
|
'Punkt f\u00fcrs Aufbauen EINMAL IN JEDEM BEZIRK statt einmal im Spiel, und nur wenn jeder Wagen voll ist ' +
|
|
'\u2014 kein gro\u00dfer Zirkus, wenn die Wagen leer sind. ROTE FLAGGEN SIND EINE ANDERE KARTE. Statt einen ' +
|
|
'haltenden Zug auf der Strecke zu sch\u00fctzen, wird die Flagge an der Ost- oder Westseite des eigenen ' +
|
|
'Bezirks gesetzt und h\u00e4lt den n\u00e4chsten Zug von dort auf \u2014 eine Stufe Zeit, um das Rangieren zu ' +
|
|
'beenden. Sie kommt mit dem Zug herunter, den sie gestoppt hat. Sie l\u00e4sst sich auch im Moment der ' +
|
|
'Gefahr spielen: Steht ein ankommender Zug vor einem Zusammensto\u00df, wirst du gefragt, ob du ihn ' +
|
|
'abflaggen willst.',
|
|
pl_PL:
|
|
'Zawiera Station Master v0.7.4 \u2014 trzy poprawki zasad. WA\u017bNE: trwaj\u0105ca partia mo\u017ce nie zosta\u0107 ' +
|
|
'przeniesiona. Te zmiany dotycz\u0105 tego, co zasady dopuszczaj\u0105, wi\u0119c zapisana gra mo\u017ce przesta\u0107 si\u0119 ' +
|
|
'odtwarza\u0107; serwer odmawia wznowienia, zamiast j\u0105 zepsu\u0107, podaje ruch, na kt\u00f3rym stan\u0105\u0142, i zostawia ' +
|
|
'plik nietkni\u0119ty \u2014 mo\u017cna wr\u00f3ci\u0107 do v0.7.3 i doko\u0144czy\u0107 wa\u017cn\u0105 parti\u0119. BIURO STACYJNE JEST TERAZ ' +
|
|
'PROPONOWANE, NIE NARZUCANE. Poci\u0105g towarowy przyje\u017cd\u017caj\u0105cy do twojego okr\u0119gu jest pytany, dok\u0105d ma ' +
|
|
'jecha\u0107; musi m\u00f3c dotrze\u0107 do stacji w jednym ruchu, a je\u015bli po drodze stoj\u0105 wagony, wje\u017cd\u017ca w nie \u2014 ' +
|
|
'czego wcze\u015bniej gra w og\u00f3le nie sprawdza\u0142a. Gdy propozycja nie mo\u017ce pa\u015b\u0107, historia m\u00f3wi dlaczego. ' +
|
|
'NIEKT\u00d3RE POCI\u0104GI DODATKOWE MUSZ\u0104 JECHA\u0106 ZA\u0141ADOWANE. Poci\u0105g cyrkowy, kampanijny i wojskowy bior\u0105 ' +
|
|
'wagony \u0142adowne, dop\u00f3ki stacja mo\u017ce je dostarczy\u0107, potem puste, i mog\u0105 jecha\u0107 niepe\u0142ne. Poci\u0105g ' +
|
|
'cyrkowy lub kampanijny zdobywa punkt za rozstawienie RAZ W OKR\u0118GU KA\u017bDEGO GRACZA, a nie raz na gr\u0119, ' +
|
|
'i tylko gdy wszystkie wagony s\u0105 pe\u0142ne \u2014 marny to cyrk, gdy wagony s\u0105 puste. CZERWONE FLAGI TO INNA ' +
|
|
'KARTA. Zamiast chroni\u0107 stoj\u0105cy poci\u0105g na szlaku, flag\u0119 stawia si\u0119 po wschodniej lub zachodniej ' +
|
|
'stronie w\u0142asnego okr\u0119gu i zatrzymuje ona nast\u0119pny poci\u0105g z tamtej strony, daj\u0105c Etap na doko\u0144czenie ' +
|
|
'manewr\u00f3w. Znika razem z poci\u0105giem, kt\u00f3ry zatrzyma\u0142a. Mo\u017cna j\u0105 te\u017c zagra\u0107 w chwili zagro\u017cenia: je\u015bli ' +
|
|
'przyje\u017cd\u017caj\u0105cy poci\u0105g ma si\u0119 zderzy\u0107, gra pyta, czy go zaflagowa\u0107.',
|
|
fr_FR:
|
|
'Inclut Station Master v0.7.4 \u2014 trois corrections de r\u00e8gles. IMPORTANT : une partie d\u00e9j\u00e0 en cours ' +
|
|
'peut ne pas \u00eatre conserv\u00e9e. Ces changements modifient ce que les r\u00e8gles acceptent, donc une ' +
|
|
"sauvegarde peut cesser d'\u00eatre rejouable ; le serveur refuse de la reprendre au lieu de l'ab\u00eemer, " +
|
|
"indique le coup o\u00f9 il s'est arr\u00eat\u00e9 et laisse le fichier intact : vous pouvez r\u00e9installer la v0.7.3 " +
|
|
'pour terminer une partie qui compte. LE BUREAU DE TRIAGE EST D\u00c9SORMAIS PROPOS\u00c9, PAS IMPOS\u00c9. Un train ' +
|
|
'de marchandises qui arrive dans votre district se voit demander o\u00f9 aller ; il doit pouvoir atteindre ' +
|
|
'le triage en un seul mouvement, et si des wagons stationnent sur le chemin, il les percute \u2014 rien de ' +
|
|
"tout cela n'\u00e9tait v\u00e9rifi\u00e9 auparavant. Quand la proposition ne peut pas \u00eatre faite, l'historique dit " +
|
|
'pourquoi. CERTAINS TRAINS SUPPL\u00c9MENTAIRES DOIVENT ROULER CHARG\u00c9S. Les trains de Cirque, de Campagne ' +
|
|
'et Militaire prennent des wagons charg\u00e9s tant que le d\u00e9p\u00f4t peut en fournir, des vides ensuite, et ' +
|
|
"peuvent rouler incomplets. Un train de Cirque ou de Campagne gagne son point d'installation UNE FOIS " +
|
|
"DANS LE DISTRICT DE CHAQUE JOUEUR au lieu d'une fois par partie, et seulement si tous ses wagons " +
|
|
"sont pleins : ce n'est pas un grand cirque si les wagons sont vides. LES DRAPEAUX ROUGES SONT UNE " +
|
|
'AUTRE CARTE. Au lieu de prot\u00e9ger un train arr\u00eat\u00e9 sur la ligne, le drapeau se plante du c\u00f4t\u00e9 est ou ' +
|
|
'ouest de votre propre district et retient le prochain train venant de l\u00e0, vous offrant une \u00c9tape ' +
|
|
"pour finir vos man\u0153uvres. Il tombe avec le train qu'il arr\u00eate. Vous pouvez aussi le jouer au moment " +
|
|
'du danger : si un train qui arrive va percuter quelque chose, on vous demande si vous voulez le ' +
|
|
'drapeauter.',
|
|
},
|
|
migrations: {
|
|
/**
|
|
* NOTHING TO CARRY, AND THIS TIME SOME GAMES WILL NOT SURVIVE.
|
|
*
|
|
* A migration moves DATA a previous version wrote. There is none to move: the package keeps its
|
|
* saved games as a seed plus the moves played, and nothing about their shape has changed.
|
|
*
|
|
* WHAT HAS CHANGED IS WHAT THE RULES ACCEPT, and that is what decides whether a save replays.
|
|
* v0.7.4 carries three rules corrections, and each can stop an older history:
|
|
*
|
|
* - Red Flags is a different card. `maneuver.redFlags` no longer names a train to protect; it
|
|
* names the side of a district to flag. A save containing the old form stops there.
|
|
* - Some Extras must now take a loaded car while the yard can supply one, so a make-up that
|
|
* was legal under v0.7.3 may be refused.
|
|
* - A Yard Office arrival now ASKS the district's owner. An older history has no answer
|
|
* recorded for a question that did not exist, so a replay reaching one stops.
|
|
*
|
|
* None of that can be migrated: the moves were made under rules that no longer hold, and
|
|
* re-deciding them would invent a game nobody played. It FAILS SAFE, which is why this is empty
|
|
* rather than an argument for holding the release — `src/server/index.ts` replays each save on
|
|
* startup and REFUSES to resume one the rules reject, naming the move it stopped at and leaving
|
|
* the file untouched. A game in progress is declined, never silently corrupted, and an operator
|
|
* who wants it back can put v0.7.3 on and finish it. The release notes say so first.
|
|
*
|
|
* A game that never met one of the three simply carries on, so this is "may not" rather than
|
|
* "will not" — unlike v0.7.2, where a deck change condemned every save without exception.
|
|
*/
|
|
up: async ({ effects }) => {},
|
|
down: IMPOSSIBLE,
|
|
},
|
|
})
|