0.8.0.13:0 — bundle Station Master v0.8.0.13
Nine fixes from the Day 1-2 playtest of 0.8.0.12, almost all of them about what the table can see. The one that mattered moved a car: the Division Yard chips stayed clickable while a player's board was catching up on other people's turns, so a click submitted a real intent against a position several moves stale. They obey the catch-up queue now, and the yard counts beside them are read from the board on screen rather than the live game. The district picker gained a button for your own seat and is ordered west to east as the map draws it; the Fedora passing is announced and logged; a collision names whose district it was and who loses the 5 Revenue; and a Depot that cannot stock another passenger says which car it is short of instead of the action silently vanishing. Packaging is the submodule pin, the version and the words. No action, route, file model or interface changed — the whole release is inside the bundled game. GAMES IN PROGRESS RESUME NORMALLY, measured rather than assumed: `git diff v0.8.0.12..v0.8.0.13 -- src/engine/` is two ADDED lines — a superintendentChanged variant on the GameEvent union, and the events.push that emits it beside the actorChanged already there. Nothing was removed or edited: check(), legal.ts and every predicate are untouched, so no once-legal move became illegal, and events are derived by replaying a save rather than stored in one, so widening the union cannot invalidate anything on disk. README, instructions.md and the release notes in all five locales say so. Two files come along that this release did not otherwise touch: `prettier --write startos` reflowed a call in restoreSeat.ts and a return type in serverApi.ts, formatting drift left by the 0.8.0.12 commit. The 0.8.0.12 release it follows was deployed and verified at a table: a seat was recovered end to end from a one-time claim code minted by the StartOS action, which is what the previous commit said had not yet been exercised. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DmdqqCNoiqE7GBo6wthBnR
This commit is contained in:
@@ -13,18 +13,24 @@ 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.12.** A player who has lost their browser storage can be put back in their
|
**Bundled version: 0.8.0.13.** Nine fixes from a live playtest of 0.8.0.12, almost all of them about
|
||||||
seat, through the new **Restore a Seat** action — see Actions below. The session token is the only
|
what a player can see. The one that mattered moved a car: the Division Yard chips stayed clickable
|
||||||
identity the game has and it lives in one browser's `localStorage`, so a cleared profile, a private
|
while a player's board was catching up on other people's turns, so a click submitted a real intent
|
||||||
window or a different browser locks a player out of a game that is still running with their session
|
against a position several moves stale — they now obey the catch-up queue like every other control,
|
||||||
still on disk. v0.8.0.11 before it was sixteen playtest fixes, including the New Train panel saying what
|
and the yard counts beside them are read from the board on screen rather than the live game. The
|
||||||
a consist still needs; v0.8.0.10 corrected when the Superintendent is asked to rule.
|
district picker gained a button for your own seat and is ordered west to east as the map draws it;
|
||||||
|
the Fedora passing is announced and logged; a collision names whose district it was and who loses the
|
||||||
|
5 Revenue; and a Depot that cannot take another passenger says which car it is short of instead of
|
||||||
|
the action vanishing from the menu. v0.8.0.12 before it added the **Restore a Seat** action — see
|
||||||
|
Actions below — for a player whose browser has lost the token that is their only identity.
|
||||||
|
|
||||||
**Games in progress resume normally on this one**, and it was checked the narrow way rather than
|
**Games in progress resume normally on this one**, and it was checked the narrow way rather than
|
||||||
assumed: `git diff v0.8.0.11..v0.8.0.12 -- src/engine/` is **empty**. The release is the server's HTTP
|
assumed: `git diff v0.8.0.12..v0.8.0.13 -- src/engine/` is **two added lines** — a
|
||||||
surface, the browser client and the docs — no predicate was edited, so no once-legal move became
|
`superintendentChanged` variant on the `GameEvent` union, and the `events.push` that emits it. Both
|
||||||
illegal. (0.8.0.10 was the exception: it corrected a ruling and deliberately stranded games holding
|
are additive. `check()`, `legal.ts` and every predicate are untouched, so no once-legal move became
|
||||||
one. That warning does not apply here.)
|
illegal, and events are derived by replaying a save rather than stored in one, so widening the union
|
||||||
|
cannot invalidate anything on disk. (0.8.0.10 was the exception: it corrected a ruling and
|
||||||
|
deliberately stranded games holding one. That warning does not apply here.)
|
||||||
|
|
||||||
The paragraphs below were written for the 0.7.9.8 bump and still describe how a bump is checked.
|
The paragraphs below were written for the 0.7.9.8 bump and still describe how a bump is checked.
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,38 @@ 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.0.13. Games already running on this server are not affected** — they resume
|
||||||
|
normally; no rule changed.
|
||||||
|
|
||||||
|
**A car in the Division Yard can no longer be clicked while your board is behind.** When other players
|
||||||
|
have moved and your board is still catching up, the game hides the action list, because choosing
|
||||||
|
against a position that has already moved on is choosing blind. The cars in the Division Yard were
|
||||||
|
the one thing left out of that: a click during somebody else's turn sent a real move against a board
|
||||||
|
several turns stale, and a car left the yard. They now wait like everything else, and the car counts
|
||||||
|
beside the yards show the board you are looking at rather than the one the game has already reached.
|
||||||
|
|
||||||
|
**There is a button for your own district.** The row for looking at another player's Office Area had
|
||||||
|
one for everybody except you, so the player with nothing to do but wait was the only one who could
|
||||||
|
not look at their own board. The buttons are also in map order now — west to east along the Division
|
||||||
|
— rather than the order people joined, and they follow the seating when it rotates between Days.
|
||||||
|
|
||||||
|
**You are told when the Fedora passes.** The Superintendent changes at the end of Stages 3, 6, 9 and
|
||||||
|
12. It is announced on screen and written into the history now, the same as a train completing its
|
||||||
|
run.
|
||||||
|
|
||||||
|
**A collision says whose district it happened in and who paid for it.** The 5 Revenue penalty was a
|
||||||
|
separate line further down the log, and the wreck itself never named the district.
|
||||||
|
|
||||||
|
**A Depot that cannot take another passenger explains itself.** Stocking one takes a loaded coach out
|
||||||
|
of the Division Yard, and when there is not one there, the option used to vanish from the menu with
|
||||||
|
nothing said. The shortage stays — running out is part of the game — but the panel now tells you how
|
||||||
|
much room is left, that the Division Yard has no loaded coach, and how many are waiting in the
|
||||||
|
Classification Yard for it to run bare.
|
||||||
|
|
||||||
|
**Smaller.** The make-up panel and the New Train tip say "working eastward" rather than "working
|
||||||
|
left", which is the same rule described by the map instead of by a table nobody is looking at. The
|
||||||
|
history panel keeps 90 lines instead of 60, in the same space.
|
||||||
|
|
||||||
**What changed in 0.8.0.12. Games already running on this server are not affected** — they resume
|
**What changed in 0.8.0.12. Games already running on this server are not affected** — they resume
|
||||||
normally; no rule changed.
|
normally; no rule changed.
|
||||||
|
|
||||||
|
|||||||
@@ -96,7 +96,10 @@ export const restoreSeat = sdk.Action.withInput(
|
|||||||
const host = await sdk.host.getOwn(effects, 'ui-multi').once()
|
const host = await sdk.host.getOwn(effects, 'ui-multi').once()
|
||||||
const addresses = host?.bindings[uiPort]?.interfaces['ui']?.addressInfo
|
const addresses = host?.bindings[uiPort]?.interfaces['ui']?.addressInfo
|
||||||
const urls = addresses
|
const urls = addresses
|
||||||
? [...addresses.public.format('urlstring'), ...addresses.nonLocal.format('urlstring')]
|
? [
|
||||||
|
...addresses.public.format('urlstring'),
|
||||||
|
...addresses.nonLocal.format('urlstring'),
|
||||||
|
]
|
||||||
: []
|
: []
|
||||||
const base = urls[0]
|
const base = urls[0]
|
||||||
// No address to hand? Return the path anyway: the administrator knows the address they use, and
|
// No address to hand? Return the path anyway: the administrator knows the address they use, and
|
||||||
|
|||||||
@@ -118,7 +118,13 @@ export async function mintClaim(
|
|||||||
effects: T.Effects,
|
effects: T.Effects,
|
||||||
gameId: string,
|
gameId: string,
|
||||||
player: number,
|
player: number,
|
||||||
): Promise<{ code: string; expiresAt: number; player: number; displayName: string; gameCode: string | null }> {
|
): Promise<{
|
||||||
|
code: string
|
||||||
|
expiresAt: number
|
||||||
|
player: number
|
||||||
|
displayName: string
|
||||||
|
gameCode: string | null
|
||||||
|
}> {
|
||||||
const res = await adminFetch(effects, `/api/games/${gameId}/claim`, {
|
const res = await adminFetch(effects, `/api/games/${gameId}/claim`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
|||||||
+147
-72
@@ -10,84 +10,140 @@ 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.12:0',
|
version: '0.8.0.13:0',
|
||||||
releaseNotes: {
|
releaseNotes: {
|
||||||
en_US:
|
en_US:
|
||||||
'Bundles Station Master v0.8.0.12 — a player who has lost their browser storage can be put ' +
|
'Bundles Station Master v0.8.0.13 — nine fixes from a live playtest, almost all of them about ' +
|
||||||
'back in their seat. **Games already running on this server resume normally**: no rule ' +
|
'what the table can see. **Games already running on this server resume normally**: no rule ' +
|
||||||
'changed. **The problem this fixes.** The only proof of who you are is kept by your own ' +
|
'changed. **The one that moved a car.** While your board is catching up on turns taken by ' +
|
||||||
'browser, so clearing your browsing data, returning in a private window, or sitting down at a ' +
|
'other players the game hides the action list, because a move made against a position that ' +
|
||||||
'different browser leaves you looking like a stranger — an empty lobby, no game code, no name ' +
|
'has already moved on is a move made blind — but the cars in the Division Yard stayed ' +
|
||||||
'— while the game is still running on the server and your seat is still yours. It happened at ' +
|
'clickable. One click during a bot’s turn sent a real move against a board several turns ' +
|
||||||
'a real table: of two players in one game, one reloaded straight back in and the other could ' +
|
'stale, and a coach left the yard. The yard follows the same rule as every other control now, ' +
|
||||||
'not get in at all. **The fix is a new Restore a Seat action.** Pick the player from a list of ' +
|
'and the car counts beside it show the board you are looking at rather than the one the game ' +
|
||||||
'whoever is actually holding a seat, and it hands you a link. Send it to them, and opening it ' +
|
'has already raced ahead to. **You can look at your own district again.** The row of buttons ' +
|
||||||
'in their own browser puts them straight back where they were. The link works once and expires ' +
|
'for looking at another player’s Office Area had one for everybody except you, so the player ' +
|
||||||
'after 30 minutes, and whoever opens it takes that seat — so send it to that person rather ' +
|
'with nothing to do but wait was the one player who could not look at their own board. Your ' +
|
||||||
'than posting it somewhere public. If it expires first, just run the action again. The link ' +
|
'seat is in the row now, and the buttons are in map order — west to east along the Division — ' +
|
||||||
'carries a one-time code and never the seat itself, so a link left in a chat window is worth ' +
|
'instead of the order people joined. **The Fedora is announced when it passes.** The ' +
|
||||||
'nothing once it has been used.',
|
'Superintendent changes hands at the end of Stages 3, 6, 9 and 12, and nothing said so out ' +
|
||||||
|
'loud; now it is announced on screen and written into the history, the same as a completed ' +
|
||||||
|
'run. **A collision says whose district it was and who paid for it.** The line named the ' +
|
||||||
|
'wreck and the reason and stopped there, leaving the 5 Revenue penalty in a separate entry ' +
|
||||||
|
'further down the log. **A Depot that cannot take another passenger says why.** It needs a ' +
|
||||||
|
'loaded coach waiting in the Division Yard, and when there is none the option simply vanished ' +
|
||||||
|
'from the menu with no explanation. The shortage itself stays — running out is part of the ' +
|
||||||
|
'game — but the panel now says how much room is left, what is missing, and how many loaded ' +
|
||||||
|
'coaches are waiting in the Classification Yard. **Smaller:** the train make-up panel says ' +
|
||||||
|
'“working eastward” rather than “working left” — the same rule, but the map runs west to east ' +
|
||||||
|
'and the table is not everybody’s left; and the history panel keeps 90 lines instead of 60, ' +
|
||||||
|
'in the same amount of screen.',
|
||||||
es_ES:
|
es_ES:
|
||||||
'Incluye Station Master v0.8.0.12 — un jugador que haya perdido los datos de su navegador ' +
|
'Incluye Station Master v0.8.0.13 — nueve correcciones surgidas de una partida de prueba, ' +
|
||||||
'puede volver a su asiento. **Las partidas en curso en este servidor se reanudan con ' +
|
'casi todas sobre lo que la mesa alcanza a ver. **Las partidas en curso en este servidor se ' +
|
||||||
'normalidad**: no ha cambiado ninguna regla. **El problema que corrige.** La única prueba de ' +
|
'reanudan con normalidad**: no ha cambiado ninguna regla. **La que movió un vagón.** Mientras ' +
|
||||||
'quién eres la guarda tu propio navegador: si borras los datos de navegación, vuelves en una ' +
|
'tu tablero se pone al día con los turnos de los demás, el juego oculta la lista de acciones, ' +
|
||||||
'ventana privada o te sientas ante otro navegador, apareces como un desconocido — una sala ' +
|
'porque decidir sobre una posición que ya ha cambiado es decidir a ciegas; pero los vagones ' +
|
||||||
'vacía, sin código de partida ni nombre — aunque la partida siga en el servidor y el asiento ' +
|
'del Patio de División seguían siendo pulsables. Un clic durante el turno de un bot envió una ' +
|
||||||
'siga siendo tuyo. Ocurrió en una mesa real: de dos jugadores, uno volvió sin problemas y el ' +
|
'jugada real contra un tablero atrasado varios turnos, y un coche salió del patio. Ahora el ' +
|
||||||
'otro no pudo entrar. **La solución es la nueva acción Restaurar un asiento.** Elige al ' +
|
'patio sigue la misma regla que los demás controles, y los recuentos de vagones muestran el ' +
|
||||||
'jugador de la lista de quienes ocupan un asiento y se te entrega un enlace. Envíaselo y, al ' +
|
'tablero que estás viendo, no aquel al que la partida ya se ha adelantado. **Puedes volver a ' +
|
||||||
'abrirlo en su propio navegador, volverá justo donde estaba. El enlace funciona una sola vez y ' +
|
'mirar tu propio distrito.** La fila de botones para ver el Área de Oficinas de otro jugador ' +
|
||||||
'caduca a los 30 minutos, y quien lo abra ocupará ese asiento: envíaselo a esa persona en ' +
|
'tenía uno para cada cual menos para ti, así que el jugador que solo podía esperar era el ' +
|
||||||
'lugar de publicarlo. Si caduca antes, ejecuta la acción de nuevo. El enlace lleva un código ' +
|
'único que no podía mirar su propio tablero. Tu asiento ya está en la fila, y los botones ' +
|
||||||
'de un solo uso y nunca el asiento en sí, así que un enlace olvidado en un chat no sirve de ' +
|
'siguen el orden del mapa — de oeste a este a lo largo de la División — en vez del orden de ' +
|
||||||
'nada una vez usado.',
|
'llegada. **El sombrero se anuncia al pasar.** El Superintendente cambia al final de las ' +
|
||||||
|
'Etapas 3, 6, 9 y 12, y nada lo decía en voz alta; ahora se anuncia en pantalla y queda ' +
|
||||||
|
'escrito en el historial, igual que un recorrido completado. **Una colisión dice en qué ' +
|
||||||
|
'distrito fue y quién la paga.** La línea nombraba el accidente y la causa y ahí se detenía, ' +
|
||||||
|
'dejando la penalización de 5 de Ingresos en otra entrada más abajo. **Un Depósito que no ' +
|
||||||
|
'puede recibir otro pasajero explica por qué.** Necesita un coche cargado esperando en el ' +
|
||||||
|
'Patio de División, y cuando no lo hay la opción simplemente desaparecía del menú sin ' +
|
||||||
|
'explicación. La escasez se mantiene — quedarse sin material es parte del juego — pero ahora ' +
|
||||||
|
'el panel indica cuánto sitio queda, qué falta y cuántos coches cargados esperan en el Patio ' +
|
||||||
|
'de Clasificación. **Menores:** el panel de formación de trenes dice «trabajando hacia el ' +
|
||||||
|
'este» en lugar de «trabajando hacia la izquierda» — la misma regla, pero el mapa va de oeste ' +
|
||||||
|
'a este y la mesa no tiene una izquierda común; y el historial guarda 90 líneas en vez de 60, ' +
|
||||||
|
'en el mismo espacio.',
|
||||||
de_DE:
|
de_DE:
|
||||||
'Enthält Station Master v0.8.0.12 — wer die Daten seines Browsers verloren hat, kann wieder ' +
|
'Enthält Station Master v0.8.0.13 — neun Korrekturen aus einer echten Testpartie, fast alle ' +
|
||||||
'auf seinen Platz gesetzt werden. **Laufende Spiele auf diesem Server werden normal ' +
|
'davon darüber, was der Tisch sehen kann. **Laufende Spiele auf diesem Server werden normal ' +
|
||||||
'fortgesetzt**: keine Regel wurde geändert. **Das behobene Problem.** Der einzige Nachweis, ' +
|
'fortgesetzt**: keine Regel wurde geändert. **Die eine, die einen Wagen bewegt hat.** Während ' +
|
||||||
'wer Sie sind, liegt in Ihrem eigenen Browser. Browserdaten gelöscht, im privaten Fenster ' +
|
'Ihr Brett die Züge der anderen nachholt, verbirgt das Spiel die Aktionsliste — ein Zug gegen ' +
|
||||||
'zurückgekehrt oder an einem anderen Browser gesessen — und Sie erscheinen als Fremder: leere ' +
|
'eine Stellung, die längst weiter ist, ist ein Zug im Blindflug —, doch die Wagen im ' +
|
||||||
'Lobby, kein Spielcode, kein Name, obwohl das Spiel weiterläuft und der Platz Ihnen gehört. An ' +
|
'Bezirksbahnhof blieben anklickbar. Ein Klick während des Zuges eines Bots schickte einen ' +
|
||||||
'einem echten Tisch geschehen: von zwei Spielern kam einer sofort zurück, der andere gar ' +
|
'echten Zug gegen ein mehrere Züge altes Brett, und ein Wagen verließ den Bahnhof. Der ' +
|
||||||
'nicht. **Die Lösung ist die neue Aktion „Einen Platz wiederherstellen".** Wählen Sie den ' +
|
'Bahnhof folgt jetzt derselben Regel wie jedes andere Bedienelement, und die Wagenzahlen ' +
|
||||||
'Spieler aus der Liste der tatsächlich besetzten Plätze, und Sie erhalten einen Link. ' +
|
'daneben zeigen das Brett, das Sie sehen, statt jenes, dem das Spiel schon vorausgeeilt ist. ' +
|
||||||
'Schicken Sie ihn; wird er im eigenen Browser geöffnet, sitzt der Spieler wieder genau dort, ' +
|
'**Sie können wieder auf Ihren eigenen Bezirk schauen.** Die Knopfreihe zum Betrachten ' +
|
||||||
'wo er war. Der Link funktioniert einmal und verfällt nach 30 Minuten, und wer ihn öffnet, ' +
|
'fremder Bürobereiche hatte einen Knopf für jeden außer für Sie — ausgerechnet der Spieler, ' +
|
||||||
'nimmt diesen Platz ein — schicken Sie ihn also dieser Person und posten Sie ihn nicht ' +
|
'der nur warten konnte, kam nicht an sein eigenes Brett. Ihr Platz ist jetzt in der Reihe, ' +
|
||||||
'öffentlich. Verfällt er vorher, führen Sie die Aktion einfach erneut aus. Der Link enthält ' +
|
'und die Knöpfe stehen in Kartenreihenfolge — von West nach Ost entlang der Division — statt ' +
|
||||||
'einen Einmal-Code und niemals den Platz selbst; ein Link in einem Chatfenster ist nach dem ' +
|
'in der Beitrittsreihenfolge. **Der Hut wird angesagt, wenn er weitergegeben wird.** Der ' +
|
||||||
'Einlösen wertlos.',
|
'Superintendent wechselt am Ende der Etappen 3, 6, 9 und 12, und nichts sagte es laut; jetzt ' +
|
||||||
|
'wird es auf dem Bildschirm angesagt und in den Verlauf geschrieben, wie eine abgeschlossene ' +
|
||||||
|
'Fahrt. **Eine Kollision nennt den Bezirk und den, der dafür zahlt.** Die Zeile nannte das ' +
|
||||||
|
'Wrack und den Grund und hörte dort auf; die 5 Einnahmen Strafe stand in einem eigenen ' +
|
||||||
|
'Eintrag weiter unten. **Ein Depot, das keinen weiteren Fahrgast aufnehmen kann, sagt ' +
|
||||||
|
'warum.** Es braucht einen beladenen Personenwagen im Bezirksbahnhof, und fehlte er, ' +
|
||||||
|
'verschwand die Option kommentarlos aus dem Menü. Der Mangel bleibt — auszugehen gehört zum ' +
|
||||||
|
'Spiel —, aber die Anzeige nennt jetzt den freien Platz, das Fehlende und die Zahl der ' +
|
||||||
|
'beladenen Wagen, die im Rangierbahnhof warten. **Kleineres:** die Zugbildungsanzeige sagt ' +
|
||||||
|
'„ostwärts arbeitend“ statt „nach links arbeitend“ — dieselbe Regel, aber die Karte läuft von ' +
|
||||||
|
'West nach Ost, und der Tisch hat kein gemeinsames Links; und der Verlauf behält 90 Zeilen ' +
|
||||||
|
'statt 60, auf gleichem Raum.',
|
||||||
pl_PL:
|
pl_PL:
|
||||||
'Zawiera Station Master v0.8.0.12 — gracz, który stracił dane swojej przeglądarki, może ' +
|
'Zawiera Station Master v0.8.0.13 — dziewięć poprawek z prawdziwej partii testowej, niemal ' +
|
||||||
'wrócić na swoje miejsce. **Gry w toku na tym serwerze wznawiają się normalnie**: żadna zasada ' +
|
'wszystkie o tym, co widzi stół. **Gry w toku na tym serwerze wznawiają się normalnie**: ' +
|
||||||
'się nie zmieniła. **Naprawiony problem.** Jedynym dowodem tożsamości jest to, co trzyma twoja ' +
|
'żadna zasada się nie zmieniła. **Ta, która przestawiła wagon.** Kiedy twoja plansza nadrabia ' +
|
||||||
'przeglądarka. Wyczyść dane, wróć w oknie prywatnym albo usiądź przy innej przeglądarce, a ' +
|
'ruchy pozostałych graczy, gra chowa listę akcji, bo ruch wykonany wobec pozycji, która już ' +
|
||||||
'wyglądasz jak ktoś obcy — pusta poczekalnia, brak kodu gry i nazwy — chociaż gra nadal działa ' +
|
'się zmieniła, to ruch na ślepo — ale wagony na Stacji Rejonowej wciąż dawały się kliknąć. ' +
|
||||||
'na serwerze, a miejsce wciąż należy do ciebie. Zdarzyło się to przy prawdziwym stole: z ' +
|
'Jedno kliknięcie w czasie tury bota wysłało prawdziwy ruch wobec planszy sprzed kilku tur i ' +
|
||||||
'dwóch graczy jeden wrócił od razu, a drugi w ogóle nie mógł wejść. **Rozwiązaniem jest nowa ' +
|
'wagon opuścił stację. Teraz stacja podlega tej samej regule co każdy inny element, a ' +
|
||||||
'akcja „Przywróć miejsce".** Wybierz gracza z listy osób faktycznie zajmujących miejsca, a ' +
|
'liczniki wagonów obok pokazują planszę, którą widzisz, a nie tę, do której gra już pobiegła ' +
|
||||||
'otrzymasz link. Wyślij mu go — po otwarciu we własnej przeglądarce wróci dokładnie tam, gdzie ' +
|
'naprzód. **Znów możesz zajrzeć do własnego okręgu.** W rzędzie przycisków do podglądania ' +
|
||||||
'był. Link działa raz i wygasa po 30 minutach, a kto go otworzy, zajmie to miejsce — wyślij ' +
|
'Biura innego gracza był przycisk dla każdego prócz ciebie, więc gracz, który tylko czekał, ' +
|
||||||
'go więc tej osobie, zamiast publikować. Jeśli wygaśnie, po prostu uruchom akcję ponownie. ' +
|
'jako jedyny nie mógł spojrzeć na własną planszę. Twoje miejsce jest już w rzędzie, a ' +
|
||||||
'Link zawiera jednorazowy kod, a nigdy samo miejsce, więc link zostawiony na czacie po ' +
|
'przyciski są w kolejności mapy — z zachodu na wschód wzdłuż Dywizji — zamiast w kolejności ' +
|
||||||
'wykorzystaniu jest bezwartościowy.',
|
'dołączania. **Przekazanie kapelusza jest ogłaszane.** Superintendent zmienia się na koniec ' +
|
||||||
|
'Etapów 3, 6, 9 i 12, a nic nie mówiło tego na głos; teraz jest ogłaszane na ekranie i ' +
|
||||||
|
'zapisywane w historii, tak jak ukończony przejazd. **Kolizja mówi, czyj to okręg i kto za ' +
|
||||||
|
'nią płaci.** Wiersz podawał wrak i przyczynę, i na tym kończył — kara 5 Przychodu trafiała ' +
|
||||||
|
'do osobnego wpisu niżej. **Dworzec, który nie może przyjąć kolejnego pasażera, mówi ' +
|
||||||
|
'dlaczego.** Potrzebny jest załadowany wagon osobowy czekający na Stacji Rejonowej, a gdy go ' +
|
||||||
|
'nie było, opcja po prostu znikała z menu bez wyjaśnienia. Sam niedobór zostaje — kończące ' +
|
||||||
|
'się zasoby to część gry — ale panel podaje teraz, ile zostało miejsca, czego brakuje i ile ' +
|
||||||
|
'załadowanych wagonów czeka na Stacji Rozrządowej. **Drobniejsze:** panel formowania składu ' +
|
||||||
|
'mówi „pracując na wschód” zamiast „pracując w lewo” — ta sama zasada, ale mapa biegnie z ' +
|
||||||
|
'zachodu na wschód, a stół nie ma wspólnej lewej strony; historia zaś zachowuje 90 wierszy ' +
|
||||||
|
'zamiast 60, na tym samym miejscu.',
|
||||||
fr_FR:
|
fr_FR:
|
||||||
'Inclut Station Master v0.8.0.12 — un joueur qui a perdu les données de son navigateur peut ' +
|
'Inclut Station Master v0.8.0.13 — neuf corrections issues d’une vraie partie de test, ' +
|
||||||
'être remis à sa place. **Les parties en cours sur ce serveur reprennent normalement** : ' +
|
'presque toutes sur ce que la table peut voir. **Les parties en cours sur ce serveur ' +
|
||||||
'aucune règle n’a changé. **Le problème corrigé.** La seule preuve de votre identité est ' +
|
'reprennent normalement** : aucune règle n’a changé. **Celle qui a déplacé un wagon.** ' +
|
||||||
'conservée par votre propre navigateur : effacez vos données, revenez dans une fenêtre privée ' +
|
'Pendant que votre plateau rattrape les tours des autres, le jeu masque la liste des actions, ' +
|
||||||
'ou installez-vous devant un autre navigateur, et vous apparaissez comme un inconnu — salle ' +
|
'car jouer contre une position qui a déjà avancé, c’est jouer à l’aveugle — mais les wagons ' +
|
||||||
'vide, ni code de partie ni nom — alors que la partie tourne toujours et que la place est ' +
|
'de la Gare de Division restaient cliquables. Un clic pendant le tour d’un bot a envoyé un ' +
|
||||||
'toujours la vôtre. C’est arrivé à une vraie table : de deux joueurs, l’un est revenu ' +
|
'vrai coup contre un plateau vieux de plusieurs tours, et une voiture a quitté la gare. La ' +
|
||||||
'directement, l’autre n’a pas pu entrer. **La solution est la nouvelle action « Restaurer une ' +
|
'gare suit désormais la même règle que les autres commandes, et les comptes de wagons à côté ' +
|
||||||
'place ».** Choisissez le joueur dans la liste de ceux qui occupent réellement une place, et ' +
|
'affichent le plateau que vous regardez, et non celui où la partie a déjà filé. **Vous pouvez ' +
|
||||||
'vous obtenez un lien. Envoyez-le-lui : ouvert dans son propre navigateur, il le remet ' +
|
'de nouveau regarder votre propre district.** La rangée de boutons permettant de consulter ' +
|
||||||
'exactement où il était. Le lien fonctionne une seule fois et expire au bout de 30 minutes, et ' +
|
'l’Espace Bureaux d’un autre joueur en avait un pour tout le monde sauf vous : le joueur qui ' +
|
||||||
'quiconque l’ouvre prend cette place — envoyez-le donc à cette personne plutôt que de le ' +
|
'n’avait qu’à attendre était le seul à ne pas pouvoir regarder son propre plateau. Votre ' +
|
||||||
'publier. S’il expire avant, relancez simplement l’action. Le lien porte un code à usage ' +
|
'place y figure désormais, et les boutons suivent l’ordre de la carte — d’ouest en est le ' +
|
||||||
'unique et jamais la place elle-même : un lien laissé dans une conversation ne vaut plus rien ' +
|
'long de la Division — plutôt que l’ordre d’arrivée. **Le chapeau est annoncé quand il ' +
|
||||||
'une fois utilisé.',
|
'passe.** Le Superintendant change à la fin des Étapes 3, 6, 9 et 12, et rien ne le disait à ' +
|
||||||
|
'voix haute ; c’est maintenant annoncé à l’écran et inscrit dans l’historique, comme un ' +
|
||||||
|
'parcours achevé. **Une collision indique le district et celui qui paie.** La ligne nommait ' +
|
||||||
|
'l’accident et la cause puis s’arrêtait, laissant la pénalité de 5 Revenus dans une entrée ' +
|
||||||
|
'séparée plus bas. **Un Dépôt qui ne peut pas prendre un passager de plus dit pourquoi.** Il ' +
|
||||||
|
'lui faut une voiture chargée en attente à la Gare de Division, et faute de quoi l’option ' +
|
||||||
|
'disparaissait du menu sans explication. La pénurie demeure — manquer de matériel fait partie ' +
|
||||||
|
'du jeu — mais le panneau indique désormais la place restante, ce qui manque, et combien de ' +
|
||||||
|
'voitures chargées attendent à la Gare de Triage. **Plus petit :** le panneau de formation ' +
|
||||||
|
'des trains dit « en travaillant vers l’est » plutôt que « en travaillant vers la gauche » — ' +
|
||||||
|
'même règle, mais la carte va d’ouest en est et la table n’a pas de gauche commune ; et ' +
|
||||||
|
'l’historique conserve 90 lignes au lieu de 60, dans la même place.',
|
||||||
},
|
},
|
||||||
migrations: {
|
migrations: {
|
||||||
/**
|
/**
|
||||||
@@ -213,6 +269,25 @@ export const current = VersionInfo.of({
|
|||||||
* new is written to the volume, no predicate was edited, and `check()` and `legal.ts` are
|
* new is written to the volume, no predicate was edited, and `check()` and `legal.ts` are
|
||||||
* untouched, so no once-legal move became illegal. Games in progress resume, and the release
|
* untouched, so no once-legal move became illegal. Games in progress resume, and the release
|
||||||
* notes say so in all five locales.
|
* notes say so in all five locales.
|
||||||
|
*
|
||||||
|
* v0.8.0.13 TOUCHES THE ENGINE AGAIN, AND THE WHOLE DIFF IS TWO LINES.
|
||||||
|
* `git diff v0.8.0.12..v0.8.0.13 -- src/engine/` adds a `superintendentChanged` variant to the
|
||||||
|
* `GameEvent` union (`events.ts`) and the one `events.push` in `advance.ts` that emits it beside
|
||||||
|
* the `actorChanged` that was already there — §5's handover of the Fedora, which the log had been
|
||||||
|
* dropping as turn bookkeeping. Nothing was removed and nothing was edited: `check()`, `legal.ts`
|
||||||
|
* and every predicate are untouched, so no once-legal move became illegal, and a widened event
|
||||||
|
* cannot invalidate anything on disk because events are DERIVED by replaying a `SavedGame` rather
|
||||||
|
* than stored in one — the same argument the v0.8.0.1 and v0.8.0.11 entries above make for
|
||||||
|
* theirs. Games in progress resume, and the release notes say so in all five locales.
|
||||||
|
*
|
||||||
|
* THE REST IS THE SCREEN AND THE LOG, none of it on disk: the Division Yard chips now obey the
|
||||||
|
* catch-up queue (they did not, and a click during it submitted a real intent against a stale
|
||||||
|
* board), the yard counts are read from the shown board rather than the live game, the district
|
||||||
|
* picker gained your own seat and is ordered by seat rather than by player index, collisions name
|
||||||
|
* the district's owner and the 5 Revenue they lose, a Depot that cannot stock an outbound
|
||||||
|
* passenger explains which car it is short of, and the history panel keeps 90 lines. The
|
||||||
|
* passenger case is a RULING rather than a fix — §6.3 wants a loaded coach in the Division Yard,
|
||||||
|
* and Jesse kept the shortage (Gitea#2's ruling) while ending the silence about it.
|
||||||
*/
|
*/
|
||||||
up: async ({ effects }) => {},
|
up: async ({ effects }) => {},
|
||||||
down: IMPOSSIBLE,
|
down: IMPOSSIBLE,
|
||||||
|
|||||||
+1
-1
Submodule station-master updated: 7c9ef8797d...ad277fb994
Reference in New Issue
Block a user