Files
station-master-startos/instructions.md
T
JesseandClaude Opus 5 ea8e9dbcb8 0.7.1:0 — bundle Station Master v0.7.1
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
2026-08-25 10:58:14 -04:00

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.