0.8.1.0:0 — bundle Station Master v0.8.1.0, and date the games in Manage Game
A table pass over 0.8.0.17. The second-digit bump is deliberate: 0.8.1 had been reserved for the seatless display table, which is getting more thought, and this batch earned the number on its own. GAMES IN PROGRESS RESUME, AND IT WAS MEASURED BEFORE RELEASE rather than argued from the diff. The bundled release changes what sits in the yards, so the risk was real. All twelve saves on the test box were pulled and replayed through `tryResumeSession` — the server's own boot check — against the new build: six resume, six refuse, and the six refusals are the SAME six, at the same moves, with the same codes, that 0.8.0.17 already logged. Nothing new was stranded. That replay is the check worth repeating on any release that touches state, because it answers before the install rather than after. THE GAME'S OWN FIX, for the README's benefit: the Freight Agent's "clear the red Inbound box" returned the car to the Classification Yard still marked loaded, carrying a load already delivered and already paid for. `pooled()` strips a load's `origin` stamp and keeps `loaded` on purpose — a train can retire at a Division Point with freight aboard — so the call site's comment, "a car back in a yard is back in the common supply, carrying nothing", described something it never did. Coaches suffered worst: detraining takes `coach && !loaded` out of the Division Yard, so a cleared coach came back as stock that could never unload a passenger. 18 loaded coaches against 6 empty over five measured games. THIS PACKAGE'S OWN CHANGE IS THE MANAGE GAME DROPDOWN. It listed each game's code, seat count and position and nothing about when the game was last touched, so four games on a server looked alike — reported 2026-09-22: "I've got four games out there, but I have no idea which one's which or how old they are." `lastMoveAt` was already on the wire from the server's `summary()` and simply unused. Each option now carries both an age and a timestamp, because they answer different questions: "5h ago" answers the one that was asked, and the date beside it is what you quote when deciding to end a game. A lobby has had no move, so it reports when it was created and says so. `when()` moved out of `gamesInProgress.ts` into `utils.ts` alongside a new `ago()`, shared by both actions so an administrator sees one date format wherever a game is named — the second copy would have been the one that drifted. No route, file model or interface changed. README and instructions.md carry the release, and the notes in all five locales say games in progress are unaffected. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MUizFYCMHRWhbWwXhp7WPR
This commit is contained in:
@@ -13,7 +13,30 @@ Station Master is a railroad operations board game with an authoritative multipl
|
|||||||
solitaire needs no server and is not what this package is for. This package runs that server —
|
solitaire needs no server and is not what this package is for. This package runs that server —
|
||||||
the browser client, the lobby, and the intent/SSE API — as a single StartOS service.
|
the browser client, the lobby, and the intent/SSE API — as a single StartOS service.
|
||||||
|
|
||||||
**Bundled version: 0.8.0.17.** Four fixes from a live playtest of 0.8.0.16, every one of them a case
|
**Bundled version: 0.8.1.0.** A table pass over 0.8.0.17, and a second-digit bump taken
|
||||||
|
deliberately — 0.8.1 had been reserved for the seatless display table, which is getting more
|
||||||
|
thought. **The one that changes state:** the Freight Agent's "clear the red Inbound box" returned
|
||||||
|
the car to the Classification Yard still marked loaded, carrying a load already delivered and
|
||||||
|
already paid for. `pooled()` strips a load's `origin` stamp and keeps `loaded` on purpose (a train
|
||||||
|
can retire with freight aboard), so the call site's comment — "a car back in a yard is back in the
|
||||||
|
common supply, carrying nothing" — described something it never did. Coaches suffered worst:
|
||||||
|
detraining needs `coach && !loaded` out of the Division Yard, so a cleared coach came back as stock
|
||||||
|
that could never unload a passenger. 18 loaded coaches against 6 empty over five measured games.
|
||||||
|
|
||||||
|
**Games in progress resume, and it was measured before release**, not argued from the diff: all
|
||||||
|
twelve saves on the test box were replayed through `tryResumeSession` — the server's own boot check
|
||||||
|
— against the new build. Six resume, six refuse, and the six refusals are the same six, at the same
|
||||||
|
moves, with the same codes, that 0.8.0.17 already logged. **That replay is the check to repeat on
|
||||||
|
any release that touches state**, because it answers before the install rather than after.
|
||||||
|
|
||||||
|
Also: leaving a running game no longer strands you in a lobby with no way to join or create
|
||||||
|
(`runLobby` never restored the section `enterSeating` hides); the lobby's action buttons carry the
|
||||||
|
board's amber; an Enhancement in the history names the Mainline card it went on, slot and type, by
|
||||||
|
its printed name; the Manage Game dropdown says how long ago each game was last touched; and §6.2's
|
||||||
|
Department refill — always implemented, never documented — is written into the game's rules
|
||||||
|
reference.
|
||||||
|
|
||||||
|
**Previously, 0.8.0.17.** Four fixes from a live playtest of 0.8.0.16, every one of them a case
|
||||||
of the game knowing something and the screen not saying it. **ABS Signals could be played on only
|
of the game knowing something and the screen not saying it. **ABS Signals could be played on only
|
||||||
one Mainline card** although its own tooltip said "any": the engine allowed all of them, but the
|
one Mainline card** although its own tooltip said "any": the engine allowed all of them, but the
|
||||||
action list drops duplicate labels and every placement described itself identically, so all but the
|
action list drops duplicate labels and every placement described itself identically, so all but the
|
||||||
|
|||||||
@@ -35,6 +35,41 @@ watches the table — there is nothing else to open.
|
|||||||
Solitaire runs entirely in your own browser and needs nothing from the server, so it works here
|
Solitaire runs entirely in your own browser and needs nothing from the server, so it works here
|
||||||
exactly as it does on the public Station Master site.
|
exactly as it does on the public Station Master site.
|
||||||
|
|
||||||
|
**What changed in 0.8.1.0. Games already running on this server resume normally** — this was
|
||||||
|
measured, not assumed: every save on the test server was replayed against the new build first, and
|
||||||
|
the only games that refuse are the same ones that already refused.
|
||||||
|
|
||||||
|
**Passenger coaches stopped piling up unusable.** When the Freight Agent cleared a red Inbound box,
|
||||||
|
the car went back to the Classification Yard still marked as carrying its load — a load that had
|
||||||
|
already been delivered and already been paid for. A coach that came back that way could never be
|
||||||
|
used to unload passengers again, so they accumulated in the yards as dead stock. The car comes back
|
||||||
|
**empty** now, which is what the rules always intended.
|
||||||
|
|
||||||
|
**And that option says what it does.** It used to read "send the loaded coach in the red Inbound box
|
||||||
|
to the Classification Yard", which is true of the counters and nonsense as a sentence. It now says
|
||||||
|
the passengers leave the station and the coach goes back to the yard empty.
|
||||||
|
|
||||||
|
**The lobby is not a dead end any more.** Leaving a game in progress took you back to the lobby, and
|
||||||
|
the lobby showed only the games you were already in — with no way to join a different one or start a
|
||||||
|
new one. Both doors were there the whole time, hidden. They come back now.
|
||||||
|
|
||||||
|
**The lobby's buttons look like buttons.** Look up game, Join, Create new game, Copy code, Copy
|
||||||
|
invite link, Start game and Rejoin carry the same amber border the action buttons in the game do,
|
||||||
|
which has always meant "this is something you can do now".
|
||||||
|
|
||||||
|
**Taking the last card from a Department refills it** — that is the rule (§6.2) and always has been,
|
||||||
|
but it was not written down anywhere, so it surprised a player at the table. It is in the Rules and
|
||||||
|
the Home deck reference now.
|
||||||
|
|
||||||
|
**Managing a game tells you how old it is.** The dropdown in the Manage Game action listed the code
|
||||||
|
and the position but nothing about when the game was last touched, so four games looked alike. Each
|
||||||
|
now says how long ago the last move was and when.
|
||||||
|
|
||||||
|
**In the history, an Enhancement says which Mainline card it went on** — the slot and the card type
|
||||||
|
both, since a Division can be dealt two of the same card — and calls the card by its printed name.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
**What changed in 0.8.0.17. Games already running on this server resume normally** — no rule
|
**What changed in 0.8.0.17. Games already running on this server resume normally** — no rule
|
||||||
changed.
|
changed.
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,9 @@
|
|||||||
import { i18n } from '../i18n'
|
import { i18n } from '../i18n'
|
||||||
import { sdk } from '../sdk'
|
import { sdk } from '../sdk'
|
||||||
import { listGames } from '../serverApi'
|
import { listGames } from '../serverApi'
|
||||||
|
import { when } from '../utils'
|
||||||
import type { GameRow } from '../serverApi'
|
import type { GameRow } from '../serverApi'
|
||||||
|
|
||||||
/** "3 Aug 2026, 14:32" — a timestamp a person reads, not an epoch they decode. */
|
|
||||||
function when(ms: number): string {
|
|
||||||
return new Date(ms).toLocaleString('en-GB', {
|
|
||||||
dateStyle: 'medium',
|
|
||||||
timeStyle: 'short',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function describe(g: GameRow): string {
|
function describe(g: GameRow): string {
|
||||||
const who = g.playerNames.join(', ')
|
const who = g.playerNames.join(', ')
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { i18n } from '../i18n'
|
import { i18n } from '../i18n'
|
||||||
import { sdk } from '../sdk'
|
import { sdk } from '../sdk'
|
||||||
import { deleteGame, exportGame, listGames } from '../serverApi'
|
import { deleteGame, exportGame, listGames } from '../serverApi'
|
||||||
|
import { ago, when } from '../utils'
|
||||||
|
|
||||||
const { InputSpec, Value } = sdk
|
const { InputSpec, Value } = sdk
|
||||||
|
|
||||||
|
|||||||
@@ -6,3 +6,31 @@ export const uiPort = 8081
|
|||||||
// server's own per-game persistence (`games/<gameId>/`, `index.json`) and this package's
|
// server's own per-game persistence (`games/<gameId>/`, `index.json`) and this package's
|
||||||
// store.json (the join secret) share this one directory — see README's Volume and Data Layout.
|
// store.json (the join secret) share this one directory — see README's Volume and Data Layout.
|
||||||
export const dataDir = '/data'
|
export const dataDir = '/data'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "3 Aug 2026, 14:32" — a timestamp a person reads, not an epoch they decode.
|
||||||
|
*
|
||||||
|
* Shared by the two actions that list games, so the administrator sees one date format wherever
|
||||||
|
* a game is named. It lived in `gamesInProgress.ts` until v0.8.1.0, when the Manage Game dropdown
|
||||||
|
* needed it too and copying it would have been the second copy to drift.
|
||||||
|
*/
|
||||||
|
export function when(ms: number): string {
|
||||||
|
return new Date(ms).toLocaleString('en-GB', { dateStyle: 'medium', timeStyle: 'short' })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* How long ago, in the coarsest unit that is still true: "12m", "3h", "2d".
|
||||||
|
*
|
||||||
|
* The Manage Game dropdown is a one-line select whose job is to tell four games apart, and the
|
||||||
|
* question asked of it is "how old are these" (Jesse, 2026-09-22: "I've got four games out there,
|
||||||
|
* but I have no idea which one's which or how old they are"). An absolute date answers WHEN and
|
||||||
|
* makes the reader do the subtraction; this answers the question directly and costs four
|
||||||
|
* characters, so the label carries both.
|
||||||
|
*/
|
||||||
|
export function ago(ms: number, now: number = Date.now()): string {
|
||||||
|
const mins = Math.max(0, Math.round((now - ms) / 60_000))
|
||||||
|
if (mins < 60) return `${mins}m`
|
||||||
|
const hours = Math.round(mins / 60)
|
||||||
|
if (hours < 48) return `${hours}h`
|
||||||
|
return `${Math.round(hours / 24)}d`
|
||||||
|
}
|
||||||
|
|||||||
+109
-109
@@ -10,121 +10,121 @@ export const current = VersionInfo.of({
|
|||||||
// — checked against the SDK's own parser rather than assumed, since every example in `versions.md`
|
// — 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
|
// 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.
|
// 0.7.9:0 sees this as an update rather than refusing it as a downgrade.
|
||||||
version: '0.8.0.17:0',
|
version: '0.8.1.0:0',
|
||||||
releaseNotes: {
|
releaseNotes: {
|
||||||
en_US:
|
en_US:
|
||||||
'Bundles Station Master v0.8.0.17 — four fixes from a live playtest, every one of them the game ' +
|
'Bundles Station Master v0.8.1.0 — a table pass over v0.8.0.17. **Games already running on this ' +
|
||||||
'knowing something the screen did not say. **Games already running on this server resume ' +
|
'server resume normally**, and that was measured rather than assumed: every save on the test ' +
|
||||||
'normally**: no rule changed. **ABS Signals could be played on only one Mainline card**, although ' +
|
'server was replayed against this build before release, and the only games that refuse are the ' +
|
||||||
'the card says any of them. Nothing was wrong with the rule — the game described every one of ' +
|
'same ones that already refused. **Passenger coaches stopped piling up unusable.** When the ' +
|
||||||
'those placements with the same words, and the action list hides duplicates, so all but one ' +
|
'Freight Agent cleared a red Inbound box, the car went back to the Classification Yard still ' +
|
||||||
'disappeared before you saw them. **You can now see what is standing on a Mainline card.** One ' +
|
'marked as carrying its load — a load already delivered and already paid for. A coach that came ' +
|
||||||
'carrying ABS Signals draws a signal mast with a lit lamp at its corner, and the Heavy Grade ' +
|
'back that way could never unload passengers again, so they gathered in the yards as dead stock; ' +
|
||||||
'modifiers draw as BRK, AIR and HLP beside the card\'s name. None of them marked the board at all ' +
|
'over five measured games there were 18 such coaches against 6 usable ones. The car comes back ' +
|
||||||
'before: the only way to find out a card was protected — which is what decides whether a second ' +
|
'**empty** now, which is what the rules always meant. **And the option says what it does**: it ' +
|
||||||
'train on it is safe — was to hover it and read the tooltip. **The Freight Agent says what it ' +
|
'read "send the loaded coach in the red Inbound box to the Classification Yard", which is true of ' +
|
||||||
'actually did.** The line read "one car moved to or from a facility" even when nothing had moved, ' +
|
'the counters and nonsense as a sentence. It now says the passengers leave the station and the ' +
|
||||||
'and then said nothing more. Doing nothing is a legitimate choice — the rules ask for no action, ' +
|
'coach goes back to the yard empty. **The lobby is not a dead end.** Leaving a game in progress ' +
|
||||||
'and a bot declines rather than break open a working box to look busy — so it now says when it ' +
|
'returned you to a lobby showing only the games you were already in, with no way to join a ' +
|
||||||
'has, and why; and when work does happen it names the car, the industry by name instead of a grid ' +
|
'different one or start a new one — both doors were on the page the whole time, hidden. **The ' +
|
||||||
'coordinate, and which way the car went. **The whole guide is reachable from inside a game**, in ' +
|
'lobby\'s buttons look like buttons**, carrying the same amber border that has meant "you can do ' +
|
||||||
'the This Game card: the Quickstart, the Rules in full, every card, both deck references and the ' +
|
'this now" everywhere else in the game. **Taking the last card from a Department refills it** — ' +
|
||||||
'Components list, each opening in a new tab so reading one mid-turn does not lose your game. The ' +
|
'that is the rule and always has been, but it was written down nowhere, so it surprised a player ' +
|
||||||
'previous release published the Quickstart alone and the links at its foot all led nowhere. They ' +
|
'at the table; it is in the Rules and the Home deck reference now. **Managing a game tells you ' +
|
||||||
'are served as plain text for now, so their tables come out as rows of pipes. **Smaller:** the ' +
|
'how old it is**: the dropdown listed the code and the position and nothing about when the game ' +
|
||||||
'action list and the history log had been printing the same square in two different orders, and ' +
|
'was last touched, so four games looked alike. **Smaller:** in the history an Enhancement now ' +
|
||||||
'now agree.',
|
'names the Mainline card it went on — the slot and the card type both, since a Division can be ' +
|
||||||
|
'dealt two of the same card — and calls the card by its printed name.',
|
||||||
es_ES:
|
es_ES:
|
||||||
'Incluye Station Master v0.8.0.17 — cuatro correcciones de una partida de prueba, todas del mismo ' +
|
'Incluye Station Master v0.8.1.0 — una revisión tras una partida de prueba de v0.8.0.17. **Las ' +
|
||||||
'tipo: el juego sabía algo que la pantalla no decía. **Las partidas ya en curso en este servidor ' +
|
'partidas ya en curso en este servidor se reanudan con normalidad**, y eso se midió en vez de ' +
|
||||||
'se reanudan con normalidad**: no ha cambiado ninguna regla. **Las Señales ABS solo podían ' +
|
'suponerse: todas las partidas guardadas del servidor de pruebas se reprodujeron contra esta ' +
|
||||||
'jugarse en una carta de Línea Principal**, aunque la carta dice que en cualquiera. La regla ' +
|
'versión antes de publicarla, y las únicas que fallan son las que ya fallaban. **Los coches de ' +
|
||||||
'nunca estuvo mal: el juego describía todas esas jugadas con las mismas palabras, y la lista de ' +
|
'viajeros dejaron de acumularse inservibles.** Cuando el Agente de Carga vaciaba una caja roja de ' +
|
||||||
'acciones oculta los duplicados, así que todas menos una desaparecían antes de que las vieras. ' +
|
'entrada, el vagón volvía al Patio de Clasificación marcado aún como cargado — con una carga ya ' +
|
||||||
'**Ahora se ve qué hay sobre una carta de Línea Principal.** La que lleva Señales ABS dibuja un ' +
|
'entregada y ya pagada. Un coche que volvía así nunca podía volver a descargar viajeros, así que ' +
|
||||||
'mástil de señal con una luz encendida en su esquina, y los modificadores de Pendiente Fuerte ' +
|
'se acumulaban como material muerto: en cinco partidas medidas, 18 de ellos frente a 6 ' +
|
||||||
'aparecen como BRK, AIR y HLP junto al nombre de la carta. Antes ninguno marcaba el tablero: la ' +
|
'utilizables. Ahora el vagón vuelve **vacío**, que es lo que las reglas siempre quisieron decir. ' +
|
||||||
'única forma de saber que una carta estaba protegida — lo que decide si un segundo tren sobre ' +
|
'**Y la opción dice lo que hace**: antes decía "enviar el coche cargado de la caja roja al Patio ' +
|
||||||
'ella es seguro — era pasar el ratón por encima. **El Agente de Carga dice lo que hizo ' +
|
'de Clasificación", cierto para las fichas y absurdo como frase. Ahora dice que los viajeros ' +
|
||||||
'realmente.** La línea decía "un vagón movido desde o hacia una instalación" incluso cuando nada ' +
|
'salen de la estación y el coche vuelve vacío al patio. **El vestíbulo ya no es un callejón sin ' +
|
||||||
'se había movido, y luego callaba. No hacer nada es una elección legítima — las reglas no exigen ' +
|
'salida.** Salir de una partida en curso te devolvía a un vestíbulo que solo mostraba las ' +
|
||||||
'ninguna acción, y un bot prefiere eso a destrozar una caja que funciona — así que ahora lo dice, ' +
|
'partidas en las que ya estabas, sin forma de unirte a otra ni crear una nueva; ambas puertas ' +
|
||||||
'y explica por qué; y cuando sí hay trabajo, nombra el vagón, la industria por su nombre en vez ' +
|
'estaban allí todo el tiempo, ocultas. **Los botones del vestíbulo parecen botones**, con el ' +
|
||||||
'de una coordenada, y en qué dirección fue. **Toda la guía es accesible desde dentro de la ' +
|
'mismo borde ámbar que significa "puedes hacer esto ahora" en el resto del juego. **Tomar la ' +
|
||||||
'partida**, en la tarjeta Esta Partida: la Guía Rápida, las Reglas completas, todas las cartas, ' +
|
'última carta de un Departamento lo rellena** — es la regla y siempre lo fue, pero no estaba ' +
|
||||||
'ambas referencias de mazos y la lista de Componentes, cada una en una pestaña nueva para no ' +
|
'escrita en ninguna parte y sorprendió a un jugador; ya está en las Reglas y en la referencia del ' +
|
||||||
'perder la partida. La versión anterior publicaba solo la Guía Rápida y los enlaces de su pie no ' +
|
'mazo. **Gestionar una partida dice cuánto hace que se jugó**: la lista mostraba el código y la ' +
|
||||||
'llevaban a ninguna parte. Se sirven como texto plano por ahora, así que sus tablas salen como ' +
|
'posición pero nada sobre la última jugada, así que cuatro partidas parecían iguales. **Menor:** ' +
|
||||||
'filas de barras. **Menor:** la lista de acciones y el registro imprimían la misma casilla en dos ' +
|
'en el historial, una Mejora nombra la carta de Línea Principal sobre la que se jugó — la ' +
|
||||||
'órdenes distintos, y ahora coinciden.',
|
'posición y el tipo, porque pueden repartirse dos iguales — y la llama por su nombre impreso.',
|
||||||
de_DE:
|
de_DE:
|
||||||
'Enthält Station Master v0.8.0.17 — vier Korrekturen aus einem Testspiel, alle von derselben Art: ' +
|
'Enthält Station Master v0.8.1.0 — ein Durchgang nach einem Testspiel von v0.8.0.17. **Bereits ' +
|
||||||
'das Spiel wusste etwas, das der Bildschirm nicht sagte. **Bereits laufende Partien auf diesem ' +
|
'laufende Partien auf diesem Server werden normal fortgesetzt**, und das wurde gemessen statt ' +
|
||||||
'Server werden normal fortgesetzt**: keine Regel hat sich geändert. **ABS-Signale konnten nur auf ' +
|
'angenommen: jeder Spielstand des Testservers wurde vor der Freigabe gegen diesen Build ' +
|
||||||
'einer einzigen Streckenkarte gespielt werden**, obwohl die Karte jede erlaubt. Die Regel war nie ' +
|
'abgespielt, und nur die Partien verweigern, die schon vorher verweigerten. **Personenwagen ' +
|
||||||
'falsch — das Spiel beschrieb alle diese Züge mit denselben Worten, und die Aktionsliste blendet ' +
|
'häufen sich nicht mehr unbrauchbar an.** Wenn der Frachtagent eine rote Eingangsbox leerte, ' +
|
||||||
'Duplikate aus, sodass alle bis auf einen verschwanden, bevor man sie sah. **Man sieht jetzt, was ' +
|
'kehrte der Wagen in den Rangierbahnhof zurück, immer noch als beladen markiert — mit einer ' +
|
||||||
'auf einer Streckenkarte steht.** Eine Karte mit ABS-Signalen zeichnet einen Signalmast mit ' +
|
'Ladung, die längst geliefert und längst bezahlt war. Ein so zurückgekehrter Wagen konnte nie ' +
|
||||||
'brennender Lampe in ihrer Ecke, und die Steigungs-Modifikatoren erscheinen als BRK, AIR und HLP ' +
|
'wieder Fahrgäste ausladen, also sammelten sie sich als totes Material: in fünf gemessenen ' +
|
||||||
'neben dem Kartennamen. Bisher markierte keiner von ihnen das Brett: Um zu erfahren, dass eine ' +
|
'Partien 18 davon gegen 6 brauchbare. Jetzt kommt der Wagen **leer** zurück, wie es die Regeln ' +
|
||||||
'Karte geschützt ist — was entscheidet, ob ein zweiter Zug darauf sicher ist — musste man mit der ' +
|
'immer meinten. **Und die Option sagt, was sie tut**: sie lautete "den beladenen Wagen aus der ' +
|
||||||
'Maus darüberfahren. **Der Frachtagent sagt, was er wirklich getan hat.** Die Zeile lautete "ein ' +
|
'roten Box in den Rangierbahnhof schicken" — für die Marker zutreffend und als Satz unsinnig. ' +
|
||||||
'Wagen zu oder von einer Anlage bewegt", auch wenn sich nichts bewegt hatte, und schwieg dann. ' +
|
'Jetzt heißt es, die Fahrgäste verlassen den Bahnhof und der Wagen kehrt leer zurück. **Die Lobby ' +
|
||||||
'Nichts zu tun ist eine legitime Wahl — die Regeln verlangen keine Aktion, und ein Bot verzichtet ' +
|
'ist keine Sackgasse mehr.** Wer eine laufende Partie verließ, landete in einer Lobby, die nur ' +
|
||||||
'lieber, als eine funktionierende Box aufzubrechen — also sagt er es jetzt und begründet es; und ' +
|
'die eigenen Partien zeigte, ohne Weg zu einer anderen oder zu einer neuen — beide Türen waren ' +
|
||||||
'wenn gearbeitet wird, nennt er den Wagen, die Industrie beim Namen statt einer Koordinate, und ' +
|
'die ganze Zeit da, nur verborgen. **Die Knöpfe der Lobby sehen aus wie Knöpfe**, mit demselben ' +
|
||||||
'die Richtung. **Die ganze Anleitung ist aus dem laufenden Spiel erreichbar**, in der Karte Diese ' +
|
'bernsteinfarbenen Rand, der im übrigen Spiel "das kannst du jetzt tun" bedeutet. **Die letzte ' +
|
||||||
'Partie: Schnellstart, die vollständigen Regeln, jede Karte, beide Deck-Referenzen und die ' +
|
'Karte aus einer Abteilung zu nehmen füllt sie wieder auf** — das ist die Regel und war es immer, ' +
|
||||||
'Komponentenliste, jeweils in einem neuen Tab, damit das Lesen die Partie nicht verliert. Die ' +
|
'stand aber nirgends geschrieben und überraschte einen Spieler; jetzt steht sie in den Regeln und ' +
|
||||||
'vorherige Version veröffentlichte nur den Schnellstart, und die Links an seinem Fuß führten ins ' +
|
'in der Deck-Referenz. **Die Partieverwaltung sagt, wie alt eine Partie ist**: die Liste nannte ' +
|
||||||
'Leere. Sie werden vorerst als reiner Text ausgeliefert, ihre Tabellen erscheinen also als Reihen ' +
|
'Code und Position, aber nichts über den letzten Zug, sodass vier Partien gleich aussahen. ' +
|
||||||
'von Strichen. **Kleineres:** Aktionsliste und Verlauf gaben dasselbe Feld in zwei verschiedenen ' +
|
'**Kleineres:** im Verlauf nennt eine Verbesserung die Streckenkarte, auf die sie kam — Platz und ' +
|
||||||
'Reihenfolgen aus und stimmen nun überein.',
|
'Kartentyp, denn es können zwei gleiche ausliegen — und beim gedruckten Namen.',
|
||||||
pl_PL:
|
pl_PL:
|
||||||
'Zawiera Station Master v0.8.0.17 — cztery poprawki z rozgrywki testowej, wszystkie tego samego ' +
|
'Zawiera Station Master v0.8.1.0 — przegląd po rozgrywce testowej v0.8.0.17. **Partie już ' +
|
||||||
'rodzaju: gra wiedziała coś, czego ekran nie mówił. **Partie już trwające na tym serwerze ' +
|
'trwające na tym serwerze wznawiają się normalnie**, i zostało to zmierzone, a nie założone: ' +
|
||||||
'wznawiają się normalnie**: żadna zasada się nie zmieniła. **Sygnały ABS można było zagrać tylko ' +
|
'każdy zapis z serwera testowego odtworzono na tej wersji przed wydaniem, a odmawiają tylko te ' +
|
||||||
'na jednej karcie Magistrali**, choć karta mówi o dowolnej. Zasada nigdy nie była błędna — gra ' +
|
'partie, które odmawiały już wcześniej. **Wagony pasażerskie przestały gromadzić się ' +
|
||||||
'opisywała wszystkie te zagrania tymi samymi słowami, a lista akcji ukrywa duplikaty, więc ' +
|
'bezużytecznie.** Gdy Agent Towarowy opróżniał czerwoną skrzynkę przyjęć, wagon wracał na stację ' +
|
||||||
'wszystkie poza jednym znikały, zanim je zobaczyłeś. **Teraz widać, co stoi na karcie ' +
|
'rozrządową wciąż oznaczony jako załadowany — ładunkiem już dostarczonym i już opłaconym. Tak ' +
|
||||||
'Magistrali.** Karta z Sygnałami ABS rysuje maszt sygnałowy z zapaloną lampą w rogu, a ' +
|
'powracający wagon nigdy więcej nie mógł wyładować pasażerów, więc gromadziły się jako martwy ' +
|
||||||
'modyfikatory Stromego Podjazdu pojawiają się jako BRK, AIR i HLP obok nazwy karty. Wcześniej ' +
|
'tabor: w pięciu zmierzonych partiach 18 takich wobec 6 użytecznych. Teraz wagon wraca **pusty**, ' +
|
||||||
'żaden z nich nie znaczył planszy: jedynym sposobem, by dowiedzieć się, że karta jest chroniona — ' +
|
'tak jak zasady zawsze zakładały. **A opcja mówi, co robi**: brzmiała "wyślij załadowany wagon z ' +
|
||||||
'co decyduje, czy drugi pociąg na niej jest bezpieczny — było najechanie na nią kursorem. **Agent ' +
|
'czerwonej skrzynki na stację rozrządową" — prawdziwe dla znaczników i bez sensu jako zdanie. ' +
|
||||||
'Towarowy mówi, co naprawdę zrobił.** Linia brzmiała "jeden wagon przesunięty do lub z zakładu" ' +
|
'Teraz mówi, że pasażerowie opuszczają stację, a wagon wraca pusty. **Poczekalnia nie jest już ' +
|
||||||
'nawet wtedy, gdy nic się nie ruszyło, i potem milkła. Nicnierobienie to uprawniony wybór — ' +
|
'ślepym zaułkiem.** Wyjście z trwającej partii przenosiło do poczekalni pokazującej tylko twoje ' +
|
||||||
'zasady nie wymagają żadnej akcji, a bot woli odpuścić, niż rozbić działającą skrzynkę — więc ' +
|
'partie, bez możliwości dołączenia do innej ani stworzenia nowej — obie bramy były tam cały czas, ' +
|
||||||
'teraz to mówi i wyjaśnia dlaczego; a gdy praca się odbywa, nazywa wagon, zakład po nazwie ' +
|
'ukryte. **Przyciski poczekalni wyglądają jak przyciski**, z tą samą bursztynową obwódką, która w ' +
|
||||||
'zamiast współrzędnych, i kierunek. **Cały przewodnik jest dostępny z wnętrza gry**, w karcie Ta ' +
|
'grze oznacza "to możesz teraz zrobić". **Wzięcie ostatniej karty z Departamentu uzupełnia go** — ' +
|
||||||
'Partia: Szybki start, pełne zasady, każda karta, obie referencje talii i lista komponentów, ' +
|
'to zasada i zawsze nią była, ale nigdzie jej nie zapisano i zaskoczyła gracza; teraz jest w ' +
|
||||||
'każda w nowej zakładce, by czytanie nie zgubiło partii. Poprzednie wydanie publikowało tylko ' +
|
'Zasadach i w referencji talii. **Zarządzanie partią mówi, ile ma lat**: lista podawała kod i ' +
|
||||||
'Szybki start, a odnośniki u jego stopy prowadziły donikąd. Na razie są podawane jako zwykły ' +
|
'pozycję, lecz nic o ostatnim ruchu, więc cztery partie wyglądały tak samo. **Drobne:** w ' +
|
||||||
'tekst, więc ich tabele wychodzą jako rzędy kresek. **Drobne:** lista akcji i dziennik wypisywały ' +
|
'historii Ulepszenie nazywa kartę Magistrali, na którą trafiło — miejsce i typ, bo mogą trafić ' +
|
||||||
'to samo pole w dwóch różnych kolejnościach, a teraz są zgodne.',
|
'się dwie takie same — i po nazwie z karty.',
|
||||||
fr_FR:
|
fr_FR:
|
||||||
'Contient Station Master v0.8.0.17 — quatre corrections issues d\'une partie de test, toutes de la ' +
|
'Contient Station Master v0.8.1.0 — une passe après une partie de test de v0.8.0.17. **Les ' +
|
||||||
'même nature : le jeu savait quelque chose que l\'écran ne disait pas. **Les parties déjà en cours ' +
|
'parties déjà en cours sur ce serveur reprennent normalement**, et cela a été mesuré plutôt que ' +
|
||||||
'sur ce serveur reprennent normalement** : aucune règle n\'a changé. **Les Signaux ABS ne ' +
|
'supposé : chaque sauvegarde du serveur de test a été rejouée contre cette version avant ' +
|
||||||
'pouvaient être joués que sur une seule carte de Grande Ligne**, alors que la carte en autorise ' +
|
'publication, et seules refusent les parties qui refusaient déjà. **Les voitures de voyageurs ne ' +
|
||||||
'n\'importe laquelle. La règle n\'a jamais été fautive : le jeu décrivait tous ces placements avec ' +
|
's\'accumulent plus, inutilisables.** Quand l\'Agent de Fret vidait une case rouge d\'arrivée, le ' +
|
||||||
'les mêmes mots, et la liste d\'actions masque les doublons, de sorte que tous sauf un ' +
|
'wagon repartait vers la gare de triage encore marqué comme chargé — d\'un chargement déjà livré ' +
|
||||||
'disparaissaient avant que vous les voyiez. **On voit maintenant ce qui se trouve sur une carte ' +
|
'et déjà payé. Une voiture revenue ainsi ne pouvait plus jamais débarquer de voyageurs, elles ' +
|
||||||
'de Grande Ligne.** Celle qui porte des Signaux ABS dessine un mât de signal avec une lampe ' +
|
's\'entassaient donc en matériel mort : sur cinq parties mesurées, 18 contre 6 utilisables. Le ' +
|
||||||
'allumée dans son coin, et les modificateurs de Forte Rampe apparaissent en BRK, AIR et HLP à ' +
|
'wagon revient **vide** désormais, ce que les règles ont toujours voulu dire. **Et l\'option dit ' +
|
||||||
'côté du nom de la carte. Auparavant aucun ne marquait le plateau : le seul moyen d\'apprendre ' +
|
'ce qu\'elle fait** : elle indiquait "envoyer la voiture chargée de la case rouge vers la gare de ' +
|
||||||
'qu\'une carte était protégée — ce qui décide si un second train peut y rouler sans risque — était ' +
|
'triage", vrai pour les jetons et absurde comme phrase. Elle dit maintenant que les voyageurs ' +
|
||||||
'de la survoler. **L\'Agent de Fret dit ce qu\'il a réellement fait.** La ligne indiquait "un wagon ' +
|
'quittent la gare et que la voiture repart à vide. **Le salon n\'est plus une impasse.** Quitter ' +
|
||||||
'déplacé vers ou depuis une industrie" même quand rien n\'avait bougé, puis se taisait. Ne rien ' +
|
'une partie en cours ramenait à un salon n\'affichant que vos propres parties, sans moyen d\'en ' +
|
||||||
'faire est un choix légitime — les règles n\'exigent aucune action, et un bot préfère s\'abstenir ' +
|
'rejoindre une autre ni d\'en créer une — les deux portes étaient là depuis le début, masquées. ' +
|
||||||
'plutôt que d\'éventrer une case qui fonctionne — alors il le dit désormais, et explique pourquoi ' +
|
'**Les boutons du salon ressemblent à des boutons**, avec la même bordure ambre qui signifie « ' +
|
||||||
'; et quand il y a du travail, il nomme le wagon, l\'industrie par son nom plutôt qu\'une ' +
|
'vous pouvez faire ceci » partout ailleurs. **Prendre la dernière carte d\'un Département le ' +
|
||||||
'coordonnée, et le sens du mouvement. **Tout le guide est accessible depuis une partie en ' +
|
'réapprovisionne** — c\'est la règle et l\'a toujours été, mais elle n\'était écrite nulle part et a ' +
|
||||||
'cours**, dans la carte Cette Partie : le Démarrage rapide, les Règles complètes, toutes les ' +
|
'surpris un joueur ; elle figure désormais dans les Règles et la référence du deck. **La gestion ' +
|
||||||
'cartes, les deux références de decks et la liste des Composants, chacune dans un nouvel onglet ' +
|
'd\'une partie dit son âge** : la liste donnait le code et la position, rien sur le dernier coup, ' +
|
||||||
'pour ne pas perdre la partie. La version précédente ne publiait que le Démarrage rapide, et les ' +
|
'si bien que quatre parties se ressemblaient. **Mineur :** dans l\'historique, une Amélioration ' +
|
||||||
'liens en bas de page ne menaient nulle part. Ils sont servis en texte brut pour l\'instant, leurs ' +
|
'nomme la carte de Grande Ligne où elle a été posée — l\'emplacement et le type, car deux ' +
|
||||||
'tableaux sortent donc en rangées de barres. **Mineur :** la liste d\'actions et l\'historique ' +
|
'identiques peuvent sortir — et par son nom imprimé.',
|
||||||
'écrivaient la même case dans deux ordres différents, et concordent désormais.',
|
|
||||||
},
|
},
|
||||||
migrations: {
|
migrations: {
|
||||||
/**
|
/**
|
||||||
|
|||||||
+1
-1
Submodule station-master updated: b90c0413d2...517238a727
Reference in New Issue
Block a user