Files
RP412/docs/STEAM-3-MACHINE-TEST.md
T
CydandClaude Opus 5 49d6d93414 The new AppID changes the name on the friends list, nothing else
The AppID commit claimed the switch off Spacewar meant a Steam account
now had to have Red Planet on it, and that an account without it would
drop to the TCP fallback. That is wrong, and it was never tested - it was
reasoned from how AppIDs work in general and written down as fact, in the
handbook, the environ.ini template, the README and the three-machine test
doc.

Cyd checked it the direct way: put 5108000 into an older dist and ran it.
It behaved exactly as it had under 480. SteamAPI_Init does not check
entitlement; steam_appid.txt only tells the API which app it is. The one
real difference is that the Steam client now names Red Planet instead of
Spacewar.

So all four places now say that, and say nothing about entitlement. The
part that was always true is kept: a copy started from its own folder
needs the file, and without it Steam networking cannot start and the game
falls back to TCP.

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

96 lines
4.2 KiB
Markdown

# 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` (5108000 — Red
Planet's own AppID; builds before that ran under Spacewar, 480) 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.
The switch off Spacewar changes what Steam thinks you are playing and
nothing else: the client now names Red Planet on the friends list.
`SteamAPI_Init` does not check entitlement, so a machine behaves exactly
as it did under 480 — confirmed by dropping the new number into an older
dist, which ran unchanged.
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, under
Spacewar; nothing about it was specific to that AppID). Fix, either
scope:
- Per game: Steam Library -> Red Planet -> 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.