Files
RP412/docs/STEAM-3-MACHINE-TEST.md
T
CydandClaude Opus 5 51be84e89c Back on Spacewar until our own AppID is cleared
5108000 is Red Planet's and it works - dropped into a dist it runs
exactly as 480 does, the client just names Red Planet on the friends list
instead of Spacewar. The permissions on it are not settled with Steam
yet, so the packaged builds go back to Valve's public 480 in the
meantime.

The number now sits in one variable in pack-dist.ps1 with the real one
beside it in a comment, because nothing in the code knows it - the whole
mechanism is a text file next to the exe - and this will be flipped back
the moment Steam is happy.

The docs that name it follow: the handbook, the environ.ini template, the
README, and the three-machine test doc, whose Steam Input instruction
points at a library entry named after the AppID and so says Spacewar
again.

The Steamworks 1.65 upgrade is unaffected and stays.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 15:58:31 -05:00

4.2 KiB

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. Start with start-windowed.bat as usual.

The packed dist already contains steam_appid.txt (480 — Valve's public Spacewar) and ships RP412STEAM=1 in environ.ini. If a machine has an older dist, check both before blaming the network: a missing appid file makes SteamAPI_Init fail and the game quietly falls back to TCP.

Red Planet's own AppID, 5108000, is parked until its Steam permissions are sorted out. It does work — dropped into a dist it runs exactly as 480 does, the client simply names Red Planet on the friends list instead of Spacewar — so the switch, when it comes, changes nothing a tester has to do. pack-dist.ps1 carries the number in one variable.

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.

Controllers: disable Steam Input (once per machine)

Steam Input intercepts Xbox controllers the moment the game initializes SteamAPI, hiding them from XInput entirely - the pad works everywhere else and is invisible only in-game (reproduced A/B on the dev box). Nothing about it is specific to the AppID, but the entry to click is named after it. Fix, either scope:

  • Per game: Steam Library -> Spacewar -> Properties -> Controller -> Override: Disable Steam Input.
  • Global: Steam -> Settings -> Controller -> uncheck Enable Steam Input for Xbox controllers.

PadRIO re-probes every 3 seconds, so the pad hot-connects the moment Steam releases it - no restart needed. (Our own AppID will configure this server-side; test machines need the client setting.)

The abort key

Alt+Q aborts your mission deliberately - score banked, back to the lobby room. If the host presses it, the race ends for everyone.

(History: the legacy abort was the '&' character, and the Win32 key channel made the UP ARROW - the hat look key! - collide with it. That was every mystery abort in rounds five and six. Plain arrow keys are now safe; debug keys like wireframe/frame-dump need RP412DEVKEYS=1.)

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.