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:
@@ -76,4 +76,24 @@ int BTFrontEnd_LastMissionSeconds();
|
||||
// Show the post-mission scoreboard (marshal snapshot) until dismissed.
|
||||
void BTFrontEnd_ShowResults();
|
||||
|
||||
//---------------------------------------------------------------------------//
|
||||
// Steam lobby glue (used by btl4lobby): the local pilot's loadout the lobby
|
||||
// publishes as member data, and the hosted-pilot override the lobby feeds so
|
||||
// the owner's egg carries every member as a pilot.
|
||||
//---------------------------------------------------------------------------//
|
||||
struct FEHostedPilot
|
||||
{
|
||||
char address[64]; // mesh (game-port) address for [pilots]
|
||||
char name[32];
|
||||
char vehicle[24];
|
||||
char color[16];
|
||||
char badge[24];
|
||||
};
|
||||
void BTFrontEnd_GetLoadout(char *vehicle, char *color, char *badge);
|
||||
void BTFrontEnd_SetHostedPilots(const char *owner_address,
|
||||
const FEHostedPilot *pilots, int count);
|
||||
|
||||
// The last LAUNCH's mode: 0 single-player, 1 lobby host, 2 lobby member.
|
||||
int BTFrontEnd_LastLaunchMode();
|
||||
|
||||
#endif // BTL4FE_HPP
|
||||
|
||||
Reference in New Issue
Block a user