SteamNetTransport: the Steam wire is implemented and live
Steamworks SDK 1.64 vendored at extern/steamworks_sdk_164 (headers + win32 redistributables only; .gitignore trims the rest). Both projects build with RP412_STEAM; activation stays behind the RP412STEAM=1 environment switch, so plain desktop runs never touch Steam. L4STEAMTRANSPORT.cpp implements NetTransport on ISteamNetworkingSockets with FakeIP: SteamNetTransport_Install brings up SteamAPI, relay network access, and a two-port FakeIP identity (fake port 0 = console channel, 1 = game mesh), then swaps the process wire; any failure logs the reason and the game carries on over TCP. Addressing keeps the engine untouched: all pods share the -net port convention, eggs carry fakeip:engineport, and the transport alone translates engine ports to Steam fake ports via the lobby-fed peer table (RegisterPeer). Connect mirrors the TCP retry-while-refused loop; Receive normalizes message lanes back into the stream semantics CheckBuffers expects. Runtime verified on this box: RP412STEAM=1 under AppID 480 came up as 169.254.59.52 (fake ports 32256/32257); without Steam credentials it falls back to TCP cleanly; default boot logs no Steam lines at all. steam_api.dll ships in the dist. Next: the lobby layer (ISteamMatchmaking member data -> RegisterPeer + egg build + RPL4CONSOLE marshal), which needs a second account to test. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -115,6 +115,26 @@ raced the same 60s mission, StopMission(0) ended it, and both pods
|
||||
returned EndMission final scores. The feeder is exactly the marshal the
|
||||
Steam lobby owner will run in-process.
|
||||
|
||||
**SteamNetTransport implemented (2026-07-12, SDK 1.64 vendored at
|
||||
`extern/steamworks_sdk_164`):** `L4STEAMTRANSPORT.cpp` is the full
|
||||
FakeIP implementation — `SteamNetTransport_Install()` (SteamAPI init,
|
||||
relay access, `BeginAsyncRequestFakeIP(2)`: fake port 0 = console
|
||||
channel, 1 = game mesh) swaps the process wire when `RP412STEAM=1`;
|
||||
any failure logs and stays on TCP. Addressing convention: all pods
|
||||
launch with the same `-net` port, eggs carry `<fakeip>:<engine port>`,
|
||||
and only the transport maps engine ports ↔ Steam fake ports (peers fed
|
||||
by `SteamNetTransport_RegisterPeer`). Runtime-verified on this box:
|
||||
`SteamNetTransport: up as 169.254.59.52 (fake ports 32256 console,
|
||||
32257 game)` under AppID 480, graceful TCP fallback without Steam,
|
||||
default boot untouched. `steam_api.dll` ships in the dist.
|
||||
|
||||
Remaining for Steam multiplayer: the lobby (front-end UI +
|
||||
`ISteamMatchmaking`): owner collects each member's FakeIP + fake game
|
||||
port + loadout via lobby member data, feeds `RegisterPeer` on every
|
||||
pod, builds/distributes the canonical egg over a reliable channel, and
|
||||
runs the RPL4CONSOLE marshal. Needs a second Steam account/machine to
|
||||
test end to end.
|
||||
|
||||
## 4. Implementation options (decide here)
|
||||
|
||||
**A. In-engine front end (recommended).** Port the egg builder (~300 lines:
|
||||
|
||||
Reference in New Issue
Block a user