Four playtest fixes off the Gitea tracker. The submodule pin moves to v0.7.1 and the version follows it; the downstream digit resets to :0, since v0.7.0 only ended on :3 because three test packs were played before it was released. - An empties-only train may couple a caboose again — a caboose carries the crew, not freight. - The end of a Day is a modal carrying the standings, the Days left and the combined target, instead of passing between one click and the next inside the automatic phases. - A Timetabled train may be discarded to a Department pile for a rival to pick up, governed by a new discardTimetabled setting that appears in both the New Game dialog and the lobby, on by default. An Extra never may. - A blocked passenger platform now gives its reason, including the coach shortage and what ends it. No new version file and no migration: current.ts's migrations.up is empty and nothing is carried from 0.7.0. GAMES IN PROGRESS SURVIVE THIS UPDATE — all three engine-visible changes only widen what is legal, so every intent a 0.7.0 game recorded still replays, and the server resumes a save by replaying it rather than by comparing version strings (src/server/index.ts in the game repo). README.md and instructions.md both named 0.7.0 and carry the three user-visible changes now. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FLnYR4XtXQNamYJXGYT8oC
95 lines
5.6 KiB
Markdown
95 lines
5.6 KiB
Markdown
# Station Master
|
|
|
|
## Documentation
|
|
|
|
- [Rules and design docs](https://draco.local:53871/Jesse.Markowitz/station-master/src/branch/main/docs)
|
|
— the rulebook implications, the multiplayer design, and the game's architecture.
|
|
|
|
## What you get on StartOS
|
|
|
|
This service runs the multiplayer server: a lobby, and a table for 2 to 4 players to play a
|
|
competitive or cooperative game together from their own browsers. Everything a player needs — the
|
|
game itself, the lobby, and the connection back to this server — is served from the single web
|
|
interface below; there is nothing else to install or configure on a player's side.
|
|
|
|
## Getting set up
|
|
|
|
1. Run the **Get Join Secret** action from this service's Actions menu, and copy the value it
|
|
returns.
|
|
2. Share that secret, and this service's address, with everyone you want to play with. Anyone
|
|
holding the secret can create a new game or join one that hasn't started yet.
|
|
3. Open this service's **Multiplayer Table** interface. You'll land on the front page, which
|
|
offers three ways in: solitaire, the replay viewer, and multiplayer.
|
|
4. Click **Play multiplayer**, then **Create Game** (or **Join Game** with a game code someone
|
|
else created), and enter the join secret when asked.
|
|
|
|
## Using Station Master
|
|
|
|
### Multiplayer Table
|
|
|
|
The front page offers solitaire, the replay viewer, and multiplayer. **Play multiplayer** takes you
|
|
to the lobby: create or join a game, seat players (including filling empty seats with a bot), and
|
|
start. Once a game is underway, this same interface is where every player plays their turns and
|
|
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
|
|
exactly as it does on the public Station Master site.
|
|
|
|
**Setting a game up (new in 0.7.0).** The lobby opens on **Join a game**: type the code you were
|
|
given and you will see the whole rule set — the opening hand, what the work pays, every way the game
|
|
can end — *before* you take a seat. Creating a game instead starts from a **game type**: Co-op,
|
|
Competitive or Cutthroat. A type just fills in the rules; every one of them is yours to change, and
|
|
changing any of them marks the game **Custom**, which keeps the scoring of the type you started
|
|
from. The seed, the number of players and the number of Days sit above the type and do not make a
|
|
game Custom — the targets re-derive from them.
|
|
|
|
**What changed in 0.7.1.** Three things you will see at the table. The **end of a Day now stops and
|
|
says so** — a dialog with the standings, how many Days are left and the combined target, because a
|
|
Day used to turn over inside the phases that run themselves and pass between one click and the next.
|
|
A **Timetabled train may now be thrown away**: toss it face-up to a Department slot and a rival may
|
|
pick it up. That is a New Game setting (*A Timetabled train may be discarded*, on by default) — turn
|
|
it off and a train card can only ever be played onto the timetable. An **Extra is never discardable**
|
|
either way. And a **platform where nothing can be worked now tells you why** — no train for the
|
|
passengers waiting, a train whose card bars Porters, coaches already full, the same-district rule, or
|
|
the Division Yard being out of coaches, in which case it says how many are stranded in the
|
|
Classification Yard and what brings them back. Running out of coaches is part of the game, not a
|
|
fault; what was missing was the explanation.
|
|
|
|
**Leaving, and coming back.** Anyone may leave a lobby, and the host can clear a chair, so a
|
|
mis-join or somebody who wanders off no longer blocks a table that cannot start until every seat is
|
|
taken. A **Leave game** button appears once a game is running: it keeps your seat and the table
|
|
waits for you, and the lobby lists every game this browser is in so you can rejoin it — or join a
|
|
different one without losing the first. **Forget** on that list is the one thing that cannot be
|
|
undone: the token kept in your browser is the only proof of who you are, so a forgotten game cannot
|
|
be rejoined from that browser.
|
|
|
|
### Get Join Secret
|
|
|
|
Run this whenever you need the current join secret again, or want to shut out anyone still
|
|
holding an old one. Every run replaces the secret and immediately puts the new one into effect —
|
|
players already seated in a game are unaffected, but the old secret stops working for creating or
|
|
joining games from that point on.
|
|
|
|
### Games in Progress
|
|
|
|
Shows every game on the server: who is playing, which Day and Stage they have reached, and whose
|
|
turn it is. It changes nothing, so run it whenever you are curious. It is also how you spot a game
|
|
nobody is coming back to — one whose last move was days ago, still waiting on a particular player.
|
|
|
|
### Manage Game
|
|
|
|
Pick a game, then either save a copy of it or end it.
|
|
|
|
**Export** hands you the whole game as text and leaves it running. Save that text as a `.json`
|
|
file and you can open it in the replay viewer later to watch the game back.
|
|
|
|
**End the game** deletes it and disconnects anyone still watching. This is the only way to clear
|
|
a game that will never be finished — otherwise it sits there, and comes back every time the
|
|
service restarts. It cannot be undone, so the game's save is handed back to you when it happens:
|
|
that text is the only copy left, so keep it if the game was worth watching.
|
|
|
|
> **Games in progress normally survive an update of this service.** When the update changes the
|
|
> rules of the game itself, a half-played game cannot be resumed under rules it was not played by,
|
|
> and that game is set aside rather than continued — you would see it disappear from the lobby.
|
|
> Nothing is ever deleted, so going back to the previous version makes it playable again.
|