Files
BT411/game/glass/btl4lobby.hpp
T

72 lines
2.7 KiB
C++

#pragma once
//###########################################################################
//
// btl4lobby -- the Steam lobby (BT_STEAM only): an ISteamMatchmaking room
// replacing the arcade Site-Management screen for internet MP testing.
//
// The MENU process runs the lobby (the Steam transport is installed there
// first, so each member's FakeIP is known): members publish their fake
// address/ports + pilot identity as lobby member data; the host's room
// screen lists members and its ENTER writes the GO signal; everyone then
// relaunches into the mission -- the host with the marshal armed against
// the members' fake CONSOLE addresses, members as plain -net pods with
// BT_STEAM_NET=1 waiting to be fed over the Steam wire.
//
// Known limitation (documented): the lobby object does not survive the
// per-mission process relaunch -- after a mission everyone re-joins from
// the menu. FakeIP stability across the immediate relaunch is assumed
// (Valve persists assignments per app+account); the live 2-account test
// is the step's exit criterion (docs/STEAM_TEST.md).
//
//###########################################################################
struct BTLobbyMember
{
char name[32];
char fakeAddress[48]; // the minted roster TOKEN ip
int consolePort; // token console port (1501)
int gamePort; // token game port (1502)
char vehicle[16];
char color[16];
char experience[16]; // #116: per-player by design (sysop-set
// in the pod; mixed matches legal) --
// without it on the wire, the host's
// egg authored every JOINER as the
// WriteEgg "veteran" fallback
char badge[16]; // #38: same class as experience --
char patch[16]; // absent on the wire, every joiner
// spawned VGL-badged with a Red patch
int isSelf;
unsigned long long steamID;
};
struct BTLobbyRoster
{
int memberCount;
BTLobbyMember members[8];
};
//
// Host: create the lobby, run the room screen, on ENTER write GO and fill
// the roster (self first). Returns 0 = launch, nonzero = cancelled.
//
int
BTLobby_HostAndRoom(
const char *pilot_name, const char *vehicle, const char *color,
const char *experience, const char *badge, const char *patch,
BTLobbyRoster *roster_out,
char *my_token_out, int my_token_capacity,
char *steam_map_out, int steam_map_capacity);
//
// Member: find + join a lobby, run the room screen, return when the host
// signals GO. Returns 0 = launch, nonzero = cancelled / none found.
//
int
BTLobby_JoinAndWait(
const char *pilot_name, const char *vehicle, const char *color,
const char *experience, const char *badge, const char *patch,
char *my_token_out, int my_token_capacity,
char *steam_map_out, int steam_map_capacity);