import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ // `:` — 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. // // FOUR COMPONENTS IS FINE. ExVer's upstream half is an arbitrary-length dotted number, not semver // — checked against the SDK's own parser rather than assumed, since every example in `versions.md` // has three: `0.7.9.8:0` parses to upstream `[0,7,9,8]`, which sorts above `[0,7,9]`, so a box on // 0.7.9:0 sees this as an update rather than refusing it as a downgrade. version: '0.8.0.5:0', releaseNotes: { en_US: 'Bundles Station Master v0.8.0.5 — you can watch the other players now. GAMES IN PROGRESS ON ' + 'THIS SERVER ARE UNAFFECTED and will resume normally. Until now another player could move a ' + 'train the length of their district and the only trace on your screen was a line of text: your ' + 'board showed your own Office Area and nobody else’s, and a bot’s whole turn arrived as a ' + 'position that had simply changed. Now every move is replayed on your screen in the order it ' + 'happened. The Office Area follows whoever is acting, so you watch their switching moves step ' + 'across their board — which is the part worth seeing, and the part reading the history could ' + 'never convey. A row above the board says how many moves behind you are and counts down, with ' + 'a Skip button when you would rather not wait; nothing is lost by skipping, since every line ' + 'is already in the History panel. The automatic phases — New Train, the Mainline, the shift ' + 'change — used to resolve between one click and the next without ever being drawn, and now ' + 'take a visible beat when something happens in them and none at all when nothing does. ' + 'Switching moves in the history finally say who made them and name the train, instead of ' + 'reading as an anonymous “CREW moved”. Playback speed is a per-player setting and can be ' + 'turned off entirely — and it now goes both ways, so you can slow it to twice or three times ' + 'the default if you would rather linger. Fixes over v0.8.0, from the first game played on it: ' + 'a player’s last move in a run used to vanish the instant it appeared, snapping the board back ' + 'to your own district before you could look at it, and bot turns went by far too fast to ' + 'follow — a bot now announces what it is about to do, and takes a beat over each thing it ' + 'does. **Playback speed is a control on the play screen now**, next to the zoom: press − to ' + 'watch other players more slowly, all the way to a full minute for one switching turn, or turn ' + 'it off to have every move drawn at once. It was previously only settable through the address ' + 'bar, which did not survive arriving from the front page — so it never took effect for anyone ' + 'who reached the game the ordinary way. Also fixed: the end-of-Day summary reported "0 today" ' + 'beside a running collision total that disagreed with it, because the Day had already ticked ' + 'over by the time you read it. It names the Day instead — "2 on Day 1, 2 in all". And from ' + 'playing that: Skip has moved to the left of the row, where your eye already is; the row says ' + 'WHO you are waiting on and what they are doing, instead of only how far behind you are; and ' + 'the speed setting now stretches other players\u2019 moves without stretching the clock, so ' + 'finishing your own turn no longer leaves you waiting on the phases behind it. And there is ' + 'somewhere to look: the Home Office deck is drawn at last, face down with its count, and ' + 'whichever pile a move just touched lights up for as long as that move is on screen — the deck ' + 'when somebody draws from it, the Department a card is taken from or discarded onto, the ' + 'Salvage Yard when a played card ends up there. What lights follows what is public: a card ' + 'drawn face down from the deck stays private, and only the deck getting shorter is shown.', es_ES: 'Incluye Station Master v0.8.0.5 — ahora puedes ver jugar a los demás. LAS PARTIDAS EN CURSO EN ' + 'ESTE SERVIDOR NO SE VEN AFECTADAS y se reanudarán con normalidad. Hasta ahora otro jugador ' + 'podía mover un tren a lo largo de todo su distrito y el único rastro en tu pantalla era una ' + 'línea de texto: tu tablero mostraba tu propia Área de Oficina y la de nadie más, y el turno ' + 'completo de un bot llegaba como una posición que simplemente había cambiado. Ahora cada ' + 'movimiento se reproduce en tu pantalla en el orden en que ocurrió. El Área de Oficina sigue a ' + 'quien está jugando, así que ves sus maniobras avanzar por su tablero, que es lo que merece la ' + 'pena ver y lo que el historial nunca podía transmitir. Una fila sobre el tablero indica ' + 'cuántos movimientos llevas de retraso y va descontando, con un botón Saltar por si prefieres ' + 'no esperar; no se pierde nada al saltar, porque cada línea ya está en el panel de Historial. ' + 'Las fases automáticas — Tren Nuevo, la Línea Principal, el cambio de turno — se resolvían ' + 'entre un clic y el siguiente sin dibujarse nunca, y ahora tienen una pausa visible cuando algo ' + 'ocurre en ellas y ninguna cuando no ocurre nada. Las maniobras en el historial por fin dicen ' + 'quién las hizo y nombran el tren, en lugar de leerse como un anónimo «CREW moved». La ' + 'velocidad de reproducción es un ajuste por jugador y se puede desactivar por completo, y ahora ' + 'funciona en ambos sentidos: puedes ralentizarla al doble o al triple si prefieres detenerte. ' + 'Correcciones sobre la v0.8.0, salidas de la primera partida jugada con ella: el último ' + 'movimiento de una serie desaparecía en el instante en que aparecía, devolviendo el tablero a tu ' + 'propio distrito antes de que pudieras verlo, y los turnos de los bots pasaban demasiado rápido ' + 'para seguirlos — ahora un bot anuncia lo que va a hacer y se detiene un momento en cada cosa ' + 'que hace. **La velocidad de reproducción es ahora un control en la pantalla de juego**, junto ' + 'al zoom: pulsa − para ver a los demás más despacio, hasta un minuto entero para una maniobra, ' + 'o desactívala para que cada movimiento se dibuje de golpe. Antes solo se podía ajustar desde ' + 'la barra de direcciones, y eso no sobrevivía al entrar desde la página inicial, así que nunca ' + 'surtía efecto para quien llegaba al juego por el camino normal. También corregido: el resumen ' + 'de fin de Día decía «0 hoy» junto a un total de colisiones que lo contradecía, porque el Día ' + 'ya había cambiado cuando lo leías. Ahora nombra el Día: «2 en el Día 1, 2 en total». Y a raíz ' + 'de jugarlo: Saltar se ha movido a la izquierda de la fila, donde ya está tu mirada; la fila ' + 'dice a QUIÉN estás esperando y qué está haciendo, en vez de sólo cuánto te falta; y el ajuste ' + 'de velocidad alarga ahora los movimientos de los demás sin alargar el reloj, así que terminar ' + 'tu turno ya no te deja esperando las fases que vienen detrás. Y ahora hay dónde mirar: por fin ' + 'se dibuja el mazo de la Oficina Central, boca abajo y con su recuento, y la pila que acaba de ' + 'tocar un movimiento se ilumina mientras ese movimiento está en pantalla: el mazo cuando ' + 'alguien roba de él, el Departamento del que se toma o en el que se descarta una carta, el ' + 'Depósito de Chatarra cuando allí acaba una carta jugada. Lo que se ilumina respeta lo que es ' + 'público: una carta robada boca abajo del mazo sigue siendo privada, y sólo se muestra que el ' + 'mazo mengua.', de_DE: 'Enthält Station Master v0.8.0.5 — Sie können den anderen jetzt beim Spielen zusehen. LAUFENDE ' + 'PARTIEN AUF DIESEM SERVER SIND NICHT BETROFFEN und werden normal fortgesetzt. Bisher konnte ' + 'ein anderer Spieler einen Zug durch sein ganzes Revier bewegen, und die einzige Spur auf ' + 'Ihrem Bildschirm war eine Textzeile: Ihr Brett zeigte nur Ihren eigenen Dienstbereich und den ' + 'von niemandem sonst, und der komplette Zug eines Bots erschien als eine Stellung, die sich ' + 'einfach geändert hatte. Jetzt wird jeder Zug auf Ihrem Bildschirm in der Reihenfolge ' + 'wiedergegeben, in der er geschah. Der Dienstbereich folgt demjenigen, der am Zug ist, sodass ' + 'Sie seine Rangierbewegungen über sein Brett wandern sehen — das ist der sehenswerte Teil und ' + 'der, den das Protokoll nie vermitteln konnte. Eine Zeile über dem Brett zeigt, wie viele Züge ' + 'Sie im Rückstand sind, und zählt herunter, mit einer Überspringen-Schaltfläche, wenn Sie ' + 'nicht warten möchten; dabei geht nichts verloren, denn jede Zeile steht schon im Protokoll. ' + 'Die automatischen Phasen — Neuer Zug, die Hauptstrecke, der Schichtwechsel — liefen zwischen ' + 'einem Klick und dem nächsten ab, ohne je gezeichnet zu werden, und halten nun sichtbar inne, ' + 'wenn darin etwas passiert, und gar nicht, wenn nichts passiert. Rangierbewegungen im ' + 'Protokoll nennen endlich den Spieler und den Zug, statt als anonymes „CREW moved“ zu ' + 'erscheinen. Die Wiedergabegeschwindigkeit ist eine Einstellung pro Spieler und lässt sich ' + 'ganz abschalten — und sie wirkt jetzt in beide Richtungen, sodass Sie sie auf das Doppelte ' + 'oder Dreifache verlangsamen können, wenn Sie lieber verweilen. Korrekturen gegenüber v0.8.0, ' + 'aus der ersten damit gespielten Partie: der letzte Zug einer Folge verschwand in dem Moment, in ' + 'dem er erschien, und das Brett sprang zu Ihrem eigenen Revier zurück, bevor Sie hinsehen ' + 'konnten; und Bot-Züge liefen viel zu schnell ab, um ihnen zu folgen — ein Bot kündigt jetzt an, ' + 'was er vorhat, und hält bei jedem Schritt kurz inne. **Die Wiedergabegeschwindigkeit ist jetzt ' + 'ein Bedienelement im Spielbildschirm**, neben dem Zoom: mit − sehen Sie den anderen langsamer ' + 'zu, bis zu einer ganzen Minute für einen Rangiervorgang, oder Sie schalten sie aus, damit jeder ' + 'Zug auf einmal gezeichnet wird. Bisher war sie nur über die Adresszeile einstellbar, was den ' + 'Weg über die Startseite nicht überlebte — für jeden, der das Spiel auf dem normalen Weg ' + 'erreichte, wirkte sie also nie. Ebenfalls behoben: die Tagesabschluss-Übersicht meldete „0 ' + 'heute" neben einer Kollisionssumme, die dem widersprach, weil der Tag beim Lesen schon ' + 'umgeschlagen war. Sie nennt jetzt den Tag: „2 an Tag 1, 2 insgesamt". Und aus dem Spielen ' + 'heraus: Überspringen sitzt jetzt links in der Zeile, wo Ihr Blick ohnehin ist; die Zeile sagt, ' + 'auf WEN Sie warten und was er tut, statt nur wie weit Sie zurück sind; und die ' + 'Geschwindigkeit dehnt die Züge der anderen, ohne die Uhr mitzudehnen — nach Ihrem eigenen Zug ' + 'warten Sie also nicht mehr auf die Phasen dahinter. Und es gibt jetzt etwas anzusehen: der ' + 'Stapel der Hauptverwaltung wird endlich gezeichnet, verdeckt und mit seiner Anzahl, und der ' + 'Stapel, den ein Zug gerade berührt hat, leuchtet so lange, wie dieser Zug zu sehen ist — der ' + 'Stapel, wenn jemand daraus zieht, die Abteilung, aus der eine Karte genommen oder auf die ' + 'abgeworfen wird, der Schrottplatz, wenn dort eine gespielte Karte landet. Was leuchtet, folgt ' + 'dem, was öffentlich ist: eine verdeckt gezogene Karte bleibt privat, gezeigt wird nur, dass ' + 'der Stapel kürzer wird.', pl_PL: 'Zawiera Station Master v0.8.0.5 — teraz możesz obserwować grę pozostałych. TRWAJĄCE PARTIE NA ' + 'TYM SERWERZE NIE SĄ NARUSZONE i zostaną normalnie wznowione. Do tej pory inny gracz mógł ' + 'przeprowadzić pociąg przez cały swój okręg, a jedynym śladem na twoim ekranie była linijka ' + 'tekstu: twoja plansza pokazywała wyłącznie twój własny Obszar Biura i niczyj inny, a cała ' + 'tura bota pojawiała się jako pozycja, która po prostu się zmieniła. Teraz każdy ruch jest ' + 'odtwarzany na twoim ekranie w kolejności, w jakiej nastąpił. Obszar Biura podąża za tym, kto ' + 'wykonuje ruch, więc widzisz, jak jego manewry przesuwają się po jego planszy — a to właśnie ' + 'warto zobaczyć i tego historia nigdy nie potrafiła przekazać. Wiersz nad planszą pokazuje, o ' + 'ile ruchów jesteś z tyłu, i odlicza, z przyciskiem Pomiń, jeśli wolisz nie czekać; pominięcie ' + 'nic nie kosztuje, bo każda linijka jest już w panelu Historii. Fazy automatyczne — Nowy ' + 'Pociąg, Linia Główna, zmiana warty — rozstrzygały się między jednym kliknięciem a drugim, ' + 'nigdy nie będąc narysowane, a teraz zatrzymują się na widoczną chwilę, gdy coś się w nich ' + 'dzieje, i wcale, gdy nic się nie dzieje. Manewry w historii wreszcie mówią, kto je wykonał, i ' + 'nazywają pociąg, zamiast brzmieć jak anonimowe „CREW moved”. Szybkość odtwarzania jest ' + 'ustawieniem dla każdego gracza osobno i można ją całkiem wyłączyć — a teraz działa w obie ' + 'strony, więc możesz ją zwolnić dwu- lub trzykrotnie, jeśli wolisz się zatrzymać. Poprawki w ' + 'stosunku do v0.8.0, z pierwszej rozegranej na niej partii: ostatni ruch w serii znikał w chwili, ' + 'gdy się pojawiał, a plansza wracała do twojego własnego okręgu, zanim zdążyłeś spojrzeć; tury ' + 'botów przebiegały o wiele za szybko, by dało się je śledzić — teraz bot zapowiada, co zamierza ' + 'zrobić, i zatrzymuje się na chwilę przy każdej czynności. **Szybkość odtwarzania jest teraz ' + 'sterowana na ekranie gry**, obok powiększenia: naciśnij −, aby obserwować pozostałych wolniej, ' + 'aż do całej minuty na jeden manewr, albo wyłącz ją, by każdy ruch był rysowany od razu. ' + 'Wcześniej dawała się ustawić tylko z paska adresu, co nie przetrwało wejścia ze strony ' + 'startowej — więc dla każdego, kto trafiał do gry zwykłą drogą, nigdy nie działała. Poprawiono ' + 'także: podsumowanie końca Dnia pokazywało „0 dzisiaj" obok sumy kolizji, która temu przeczyła, ' + 'bo Dzień już się przewinął, gdy je czytałeś. Teraz nazywa Dzień: „2 w Dniu 1, 2 łącznie". A z ' + 'samej gry: Pomiń przeniesiono na lewą stronę wiersza, tam gdzie i tak patrzysz; wiersz mówi, na ' + 'KOGO czekasz i co robi, a nie tylko o ile jesteś z tyłu; a ustawienie szybkości wydłuża teraz ' + 'ruchy innych, nie wydłużając zegara — po własnej turze nie czekasz już na fazy za nią. I jest ' + 'wreszcie na co patrzeć: talia Centrali jest w końcu narysowana, zakryta i z liczbą kart, a ' + 'stos, którego właśnie dotknął ruch, podświetla się na tak długo, jak długo ten ruch jest na ' + 'ekranie — talia, gdy ktoś z niej dobiera, Dział, z którego bierze się kartę lub na który się ' + 'ją odrzuca, Złomowisko, gdy trafia tam zagrana karta. To, co się świeci, idzie za tym, co ' + 'jawne: karta dobrana zakryta z talii pozostaje prywatna, widać tylko, że talia maleje.', fr_FR: 'Contient Station Master v0.8.0.5 — vous pouvez maintenant regarder jouer les autres. LES ' + 'PARTIES EN COURS SUR CE SERVEUR NE SONT PAS AFFECTÉES et reprendront normalement. Jusqu’ici ' + 'un autre joueur pouvait déplacer un train sur toute la longueur de son district et la seule ' + 'trace sur votre écran était une ligne de texte : votre plateau ne montrait que votre propre ' + 'Zone de Bureau et celle de personne d’autre, et le tour entier d’un bot arrivait comme une ' + 'position qui avait simplement changé. Désormais chaque coup est rejoué sur votre écran dans ' + 'l’ordre où il a eu lieu. La Zone de Bureau suit celui qui joue, si bien que vous voyez ses ' + 'manœuvres progresser sur son plateau — c’est la partie qui vaut d’être vue, et celle que lire ' + 'l’historique ne pouvait jamais rendre. Une ligne au-dessus du plateau indique de combien de ' + 'coups vous êtes en retard et décompte, avec un bouton Passer si vous préférez ne pas ' + 'attendre ; rien n’est perdu en passant, puisque chaque ligne est déjà dans le panneau ' + 'Historique. Les phases automatiques — Nouveau Train, la Grande Ligne, la relève — se ' + 'résolvaient entre un clic et le suivant sans jamais être dessinées, et marquent maintenant un ' + 'temps visible quand quelque chose s’y produit, et aucun quand rien ne s’y produit. Les ' + 'manœuvres dans l’historique disent enfin qui les a faites et nomment le train, au lieu de se ' + 'lire comme un « CREW moved » anonyme. La vitesse de relecture est un réglage par joueur et ' + 'peut être entièrement désactivée — et elle joue maintenant dans les deux sens, vous pouvez donc ' + 'la ralentir au double ou au triple si vous préférez prendre le temps. Corrections par rapport à ' + 'la v0.8.0, issues de la première partie jouée avec elle : le dernier coup d’une série ' + 'disparaissait à l’instant où il apparaissait, ramenant le plateau à votre propre district avant ' + 'que vous puissiez le voir, et les tours des bots défilaient bien trop vite pour être suivis — un ' + 'bot annonce désormais ce qu’il va faire et marque un temps sur chacune de ses actions. **La ' + 'vitesse de relecture est maintenant un réglage sur l’écran de jeu**, à côté du zoom : appuyez ' + 'sur − pour regarder les autres plus lentement, jusqu’à une minute entière pour une manœuvre, ' + 'ou désactivez-la pour que chaque coup soit dessiné d’un coup. Elle ne se réglait auparavant ' + 'que depuis la barre d’adresse, ce qui ne survivait pas à l’arrivée depuis la page d’accueil — ' + 'elle n’a donc jamais pris effet pour quiconque atteignait le jeu par le chemin normal. Corrigé ' + 'aussi : le récapitulatif de fin de Journée affichait « 0 aujourd’hui » à côté d’un total de ' + 'collisions qui le contredisait, la Journée ayant déjà tourné au moment de la lecture. Il nomme ' + 'la Journée : « 2 le Jour 1, 2 en tout ». Et à l’usage : Passer est désormais à gauche de la ' + 'ligne, là où se porte déjà le regard ; la ligne dit QUI vous attendez et ce qu’il fait, et pas ' + 'seulement de combien vous êtes en retard ; et le réglage de vitesse étire les coups des autres ' + 'sans étirer l’horloge, si bien qu’après votre propre tour vous n’attendez plus les phases qui ' + 'le suivent. Et il y a enfin où regarder : la pioche de la Direction est dessinée, face cachée ' + 'avec son compte, et la pile qu’un coup vient de toucher s’allume tant que ce coup est à ' + 'l’écran — la pioche quand quelqu’un y prend une carte, le Département d’où une carte est tirée ' + 'ou sur lequel elle est défaussée, la Casse quand une carte jouée y aboutit. Ce qui s’allume ' + 'suit ce qui est public : une carte piochée face cachée reste privée, et seule la pioche qui ' + 'raccourcit est montrée.', }, migrations: { /** * NOTHING TO CARRY, AND CHECKED THE SAME NARROW WAY v0.7.9.8's ENTRY WAS. * * The rule this package lives by is in the game's README: a save is a seed plus the moves * played, replayed through the CURRENT rules, so the only thing that strands an older save is a * change that makes a once-legal move illegal. So the question is never "how big was the * release" — v0.8.0 is a large one — but "did any predicate change its answer". * * Measured with `git diff v0.7.9.8..v0.8.0.1 -- src/engine/`. The WHOLE engine diff is eight * lines: * four `GameEvent` types (`trayMoved`, `carsCoupled`, `carsDropped`, `consistSorted`) gained a * `player` field, and the four places that build them pass it. `check()` is untouched, `legal.ts` * and `advance.ts` are untouched, and no predicate anywhere was edited. Games in progress resume, * and the release notes say so in all five locales rather than leaving it to be discovered. * * EVENTS ARE NOT PERSISTED, so widening four of them cannot invalidate anything on disk: a * `SavedGame` is `{ seed, config, history: Intent[], … }` and the events are derived by replaying * it. The narration TEXT of two lines changed with them ("Moved Train 3 …" where it used to read * "CREW moved …"), which a resumed game simply regenerates — the log is not stored either. * * WHAT IS NOT COVERED BY THAT ARGUMENT, and why it still does not need a migration: the wire * between this server and a browser gained a lot. `Push` now carries ordered presentation steps * and a public-board baseline, and the board deltas changed shape. None of it is on disk, and a * browser reloads onto the new page as part of the update, so there is no version skew to * migrate — the same reasoning v0.7.9.8 used for its own `Frame` changes. * * v0.8.0.1 ADDED NOTHING TO THIS ARGUMENT: `git diff v0.8.0..v0.8.0.1 -- src/engine/` is empty. * It changed `sim/pacing.ts`, `web/step-queue.ts` and `web/main.ts` — how long a step is shown * and when the queue calls itself idle — which is presentation and touches neither the rules nor * anything on disk. * * v0.8.0.2 DOES TOUCH THE ENGINE, and it is worth being exact about why that is still nothing to * migrate. `git diff v0.8.0.1..v0.8.0.2 -- src/engine/` is three added lines: `collisionsPrevDay` * declared on `GameState`, initialised to 0 in `setup.ts`, and assigned at the Day rollover in * `advance.ts`. It is a counter that nothing checks — no predicate reads it, so no once-legal move * became illegal. * * v0.8.0.3 THROUGH v0.8.0.5 ADD NOTHING AGAIN: `git diff v0.8.0.2..v0.8.0.5 -- src/engine/` is empty. * One moved the Skip button, changed what the waiting row says, and stopped the speed control * stretching the clock; one took a hostname out of comments; the last drew the Home Office deck * and lit the pile a watched move touched, which is a diff of two frames the client already * holds. None of it is a rule, and none of it is on disk. * * A NEW STATE FIELD CANNOT STRAND A SAVE HERE, which is the property worth naming rather than * re-deriving: a `SavedGame` holds `{ seed, config, history }` and NOT a serialised `GameState`. * Resuming calls `createGame` — which fills the new field from `setup.ts` — and then replays the * intents through the current rules, so the field is populated on the way past. There is no old * shape on disk for a new field to be missing from. * * THE ONE THING THAT WOULD HAVE NEEDED CARE, had it been built the way the plan first described: * the display-step collector runs inside `submit()`, and the resume path (`fromMultiplayerSave`) * deliberately does not go through `submit()`. So replaying a saved game emits no steps and burns * no sequence numbers. A test in the game pins that, because it is a property rather than an * accident. */ up: async ({ effects }) => {}, down: IMPOSSIBLE, }, })