Net: Steam lobby (btl4lobby) + launch-mode wiring (Workstream C.2)
Port RP412's RPL4LOBBY to BT: an ISteamMatchmaking room stands in for the arcade Site-Management screen. Compiled both gates -- stubs without BT412_STEAM, the full room under it (both configs build + link clean). Lobby (game/reconstructed/btl4lobby.*): - Room screen (green-on-black, like the menu), owner = console. - Member data: FakeIP + fake console/game ports + persona + mech/color/badge (ip/cp/gp/nm/vh/cl/bd keys). - Nonced "go" launch roster -> SteamNetTransport_RegisterPeer for every peer. - Push/PullRaceResults over lobby data rebuild the shared score sheet. Front end (btl4fe.*): HOST/JOIN buttons when BTLobby_Available() (Steam transport up); the menu loop exits on a steam action and BTFrontEnd_Run routes the lobby outcome -- host builds the egg with every member as a [pilots] mesh entry (BTFrontEnd_SetHostedPilots), member returns launch mode 2. Results screen prefers the marshal's collated result names. Marshal (btl4console.*): add GetResultName / ClearResults / InjectResult so the lobby owner can refill the sheet from the collated wire scores; Result gains a name field. WinMain (btl4main.cpp): install the Steam transport on BT412STEAM env (before the front end, so the lobby is offered); branch on BTFrontEnd_LastLaunchMode() -- host owns the marshal clock + joins the mesh, member enters as a network pod on :1501 (SetNetworkCommonFlatAddress + gConsoleLossEndsMission); Push (host) / Pull (member) results, then relaunch. CMake: btl4lobby.cpp joins bt410_l4; that lib gets BT412_STEAM + the Steamworks include under the gate. build-steam/ gitignored. Deferred (untestable here -- needs Steam + multiple machines): the host->member wire egg-feed marshal (InstallNetworkRace); a member currently waits for a console connection nothing supplies, so a live host+member race is blocked on it. The lobby object does not survive the per-mission relaunch. docs/STEAM-3-MACHINE-TEST.md for BT not yet authored. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+29
-9
@@ -151,15 +151,19 @@ identical-to-baseline → take RP412's file verbatim, diverged → hand-apply th
|
||||
fresh menu; `-egg DEV.EGG` stays unmarshaled (dev shortcut); btconsole.py external
|
||||
feed still works; marshaled 2-instance loopback collects both score lines.
|
||||
|
||||
> **Status (2026-07-14): FOUNDATION DONE (5a egg builder); 5b/5c/5d remain.** The local
|
||||
> egg builder (`game/reconstructed/btl4fe.*`) + front-end mode ship: a zero-argument
|
||||
> launch builds `frontend.egg` from the default loadout (verified structurally identical
|
||||
> to MP.EGG, GDI-rendered plasma name bitmaps) and boots a playable mission. Remaining:
|
||||
> the interactive on-screen catalog menu, the in-process LocalConsole marshal (mission
|
||||
> clock + StopMission at expiry + single-binary loop), and the score-intake/results
|
||||
> screen — the last is NEW work (BT has no mission-end flow: msgID 0x18 is a stub,
|
||||
> `scoreAward=0`; collect kills/deaths from the live Comm-MFD `pilotList` at stop).
|
||||
> Details in `context/steamification.md`.
|
||||
> **Status (2026-07-16): DONE (5a–5d).** The zero-argument launch shows the interactive
|
||||
> green-on-black catalog menu (`game/reconstructed/btl4fe.*`: map/mech/color/time/weather/
|
||||
> length + pilot name), builds `frontend.egg` (verified structurally identical to MP.EGG,
|
||||
> GDI-rendered plasma name bitmaps), and boots a playable mission. The in-process
|
||||
> LocalConsole marshal (`game/reconstructed/btl4console.*`) owns the mission clock off the
|
||||
> engine per-frame hook (`gPerFrameHook`, added to `APPMGR`) and dispatches
|
||||
> `Application::StopMissionMessage` at the chosen length; it snapshots per-pilot
|
||||
> kills/deaths at the stop (BT's own score model — msgID 0x18 stays a stub). The
|
||||
> single-binary loop is a RELAUNCH per mission (`CreateProcessW`; avoids the stale
|
||||
> `gBT*`-global re-init crash), showing a GDI "MISSION COMPLETE" scoreboard between races.
|
||||
> WinMain (`game/btl4main.cpp`) wires front-end-mode detection, the marshal arm, the
|
||||
> results screen + relaunch, and the launch-mode branch (solo/host/member). Details in
|
||||
> `context/steamification.md`.
|
||||
|
||||
## Phase 6 — Steam lobby (Workstream C.2)
|
||||
|
||||
@@ -174,6 +178,22 @@ identical-to-baseline → take RP412's file verbatim, diverged → hand-apply th
|
||||
kills/deaths → stop → results everywhere → rematch. Known MP fidelity gaps (peer
|
||||
warp spheres, missile clusters, PNAME/PLACE billboards) do not block.
|
||||
|
||||
> **Status (2026-07-16): CODE LANDED; live 3-machine test DEFERRED (no Steam + multi-machine
|
||||
> here).** `game/reconstructed/btl4lobby.*` ships (compiled both gates: stubs without
|
||||
> `BT412_STEAM`, full ISteamMatchmaking room under it). Built: the room screen (green-on-black,
|
||||
> like the menu), member data exchange (FakeIP + fake console/game ports + persona +
|
||||
> mech/color/badge), the nonced "go" launch roster → `SteamNetTransport_RegisterPeer` all peers,
|
||||
> and Push/PullRaceResults over lobby data. The menu shows HOST/JOIN when `BTLobby_Available()`
|
||||
> (Steam transport up); a launch routes through `BTFrontEnd_LastLaunchMode()`: **host** builds the
|
||||
> egg with every member as a `[pilots]` entry + owns the marshal clock, **member** enters as a
|
||||
> network pod on `:1501` (`SetNetworkCommonFlatAddress` + `gConsoleLossEndsMission`). WinMain
|
||||
> installs the Steam transport on `BT412STEAM` env. **Remaining / deferred:** the host→member
|
||||
> **wire egg-feed marshal** (`InstallNetworkRace` — the owner streaming eggs to remote pods) is
|
||||
> NOT built; a member currently waits for a console connection that only that marshal provides, so
|
||||
> a live host+member race needs it. The lobby OBJECT does not survive the per-mission relaunch
|
||||
> (documented single-binary limitation — everyone lands on a fresh menu, not back in the room).
|
||||
> `docs/STEAM-3-MACHINE-TEST.md` for BT is not yet authored. Details in `context/steamification.md`.
|
||||
|
||||
## Phase 7 — Polish, packaging, release
|
||||
|
||||
- KeyLight RGB mirror: `L4KEYLIGHT.*` verbatim (C++/WinRT TU — per-file C++17 props),
|
||||
|
||||
Reference in New Issue
Block a user