diff --git a/docs/STEAM-3-MACHINE-TEST.md b/docs/STEAM-3-MACHINE-TEST.md new file mode 100644 index 0000000..14d1551 --- /dev/null +++ b/docs/STEAM-3-MACHINE-TEST.md @@ -0,0 +1,62 @@ +# Steam multiplayer — three-machine test procedure + +The full end-to-end: three machines, three Steam accounts, one lobby, +one marshaled race over Steam Datagram Relay. Written 2026-07-12 for +the first live test. + +## Per machine (all three) + +1. Steam client installed, logged in (different account per machine), + and RUNNING. +2. Copy the `dist\` folder onto the machine. +3. In the dist folder, create `steam_appid.txt` containing exactly: + `480` + (Spacewar, Valve's public dev AppID — replaced by the real AppID + once the store page exists.) +4. Add to `environ.ini`: + `RP412STEAM=1` +5. Start with `start-windowed.bat` as usual. + +Sanity check per machine: `rpl4.log` should show +`SteamNetTransport: up as 169.254.x.y (fake ports N console, M game)`. +If it says "staying on TCP", Steam isn't running / not logged in / the +appid file is missing. + +## The test + +1. **Machine A (host):** pick a track, vehicle, color, pilot name on + the setup menu, then click **HOST STEAM RACE**. The lobby room + appears with A listed as `[HOST]`. +2. **Machines B and C:** click **JOIN STEAM RACE** on the setup menu. + (It joins the first open RP412 lobby it finds — pick loadouts on the + menu BEFORE joining; the lobby publishes them.) +3. When all three names show bright in A's room (bright = FakeIP + published), A clicks **L A U N C H R A C E**. +4. All three pods leave the room and boot the mission. Expect in logs: + - every pod: `SteamNetTransport: peer registered` x3 + - members: `SteamNetTransport: listening on engine port 1501/1502` + - A: `LocalConsole: connecting to pod 169.254...` then + `egg sent`, `EGG ACK (mesh complete)` per member + - everyone: `All connections completed!` then the race +5. The race runs for the length A picked; A's console stops everyone; + A gets the results screen with all three personas and scores. +6. Everyone lands back in the lobby room. A can launch again — + different track, same lobby, no restarts. + +## Notes and knowns + +- All pods use engine ports 1501/1502 by convention under Steam; the + transport maps them to the Steam-assigned fake ports per peer. +- FakeIPs are allocated per session — they are exchanged live through + lobby member data, never configured by hand. +- Same-LAN machines may get a direct route from SDR; different + networks relay. Both are fine. +- Two instances under ONE Steam account cannot mesh (one identity per + account) — hence three machines. +- If a member joins after A already launched once, it will answer the + NEXT launch only (launch signals are nonced). + +## What to collect if something breaks + +`rpl4.log` from each machine (each dist folder), plus which step of +the sequence above diverged.