Picking Live Cam and then hosting still showed the host in the room with a VTV and a colour, because the room row draws whatever loadout the member published and nothing on the wire said the host had given up its grid slot. The lobby now publishes a cam key with the rest of the member data, carries it in MemberInfo, and the owner's row reads LIVE CAM where a loadout would go. The loadout itself still goes out unchanged. Live Cam is a role, not a vehicle, so vh/cl/bd keep carrying what was picked and switching back to Racer finds it all still there. Only the owner's row shows it. The host is the one that writes the egg, so the host's pick is the only one acted on; a member who set Live Cam is still going to race, and its row goes on saying so. Painting every cam=1 row as LIVE CAM would have the room screen lying about the grid. Letting members spectate too is a real feature - the same hostType=1 on their egg entry, plus a guard that one racer is left - but it is not this change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
153 lines
5.0 KiB
C
153 lines
5.0 KiB
C
#pragma once
|
|
|
|
#include "..\munga\style.h"
|
|
|
|
//########################################################################
|
|
//############################ RPL4 Front End ############################
|
|
//########################################################################
|
|
//
|
|
// The in-game race setup: shown when the game starts with no egg, no
|
|
// network, and no mission-review mode. Presents the Death Race catalog
|
|
// (track / vehicle / color / badge / time / weather / length + pilot
|
|
// name), builds the mission egg locally - the same NotationFile text
|
|
// TeslaConsole generated, including the pre-rendered plasma name
|
|
// bitmaps - and hands its path back for the standard egg-load path.
|
|
//
|
|
// Returns True with egg_path_out filled when the player launches;
|
|
// False if they close the window instead.
|
|
//
|
|
Logical
|
|
RPL4FrontEnd_Run(
|
|
HINSTANCE instance,
|
|
HWND main_window,
|
|
char *egg_path_out,
|
|
int egg_path_size
|
|
);
|
|
|
|
// The race length (seconds; 0 = endless) selected at the last
|
|
// successful launch - the local console marshals the mission with it.
|
|
int
|
|
RPL4FrontEnd_LastMissionSeconds();
|
|
|
|
// [pilots]-order pilot names of the last launched race (owner first),
|
|
// comma separated - labels for the network console's results intake.
|
|
const char *
|
|
RPL4FrontEnd_LastPilotNames();
|
|
|
|
// How the last Run() ended: a plain race, hosting a network race (the
|
|
// console marshals the other pods), or entering one as a member pod
|
|
// (the lobby owner's console marshals us; no local egg, no console).
|
|
enum FELaunchMode
|
|
{
|
|
FELaunchSingle = 0,
|
|
FELaunchHost,
|
|
FELaunchMember
|
|
};
|
|
int
|
|
RPL4FrontEnd_LastLaunchMode();
|
|
|
|
// The player's persisted loadout (lobby member data). Buffers: 24/16/24.
|
|
void
|
|
RPL4FrontEnd_GetLoadout(char *vehicle, char *color, char *badge);
|
|
|
|
//---------------------------------------------------------------
|
|
// This player's mission setup as display names. Only the host's
|
|
// picks decide the mission, so the lobby owner publishes these for
|
|
// everyone else to read - names rather than keys, because the map
|
|
// catalog differs between race and football and resolving it here
|
|
// saves the room from knowing which table a key belongs to.
|
|
//---------------------------------------------------------------
|
|
const char *
|
|
RPL4FrontEnd_SelectedMapName();
|
|
const char *
|
|
RPL4FrontEnd_SelectedTimeName();
|
|
const char *
|
|
RPL4FrontEnd_SelectedWeatherName();
|
|
const char *
|
|
RPL4FrontEnd_SelectedLengthName();
|
|
|
|
//---------------------------------------------------------------
|
|
// Catalog key -> display name, for the keys that travel as lobby
|
|
// member data. Unknown keys come back unchanged rather than blank.
|
|
//---------------------------------------------------------------
|
|
const char *
|
|
RPL4FrontEnd_VehicleNameForKey(const char *key);
|
|
const char *
|
|
RPL4FrontEnd_PositionNameForKey(const char *key);
|
|
const char *
|
|
RPL4FrontEnd_TeamNameForKey(const char *key);
|
|
|
|
//---------------------------------------------------------------
|
|
// Football team / position: the catalogs, and this player's picks.
|
|
// The lobby publishes the picks as member data and lets members
|
|
// cycle them in the room; the host's egg builder honors them.
|
|
//---------------------------------------------------------------
|
|
int
|
|
RPL4FrontEnd_TeamCount();
|
|
const char *
|
|
RPL4FrontEnd_TeamName(int index);
|
|
const char *
|
|
RPL4FrontEnd_TeamKey(int index);
|
|
|
|
int
|
|
RPL4FrontEnd_PositionCount();
|
|
const char *
|
|
RPL4FrontEnd_PositionName(int index);
|
|
const char *
|
|
RPL4FrontEnd_PositionKey(int index);
|
|
|
|
int
|
|
RPL4FrontEnd_GetTeamIndex();
|
|
void
|
|
RPL4FrontEnd_SetTeamIndex(int index);
|
|
int
|
|
RPL4FrontEnd_GetPositionIndex();
|
|
void
|
|
RPL4FrontEnd_SetPositionIndex(int index);
|
|
|
|
// True when this player's setup menu has Football selected (the host's
|
|
// pick decides the mission; members use it to know what to show).
|
|
Logical
|
|
RPL4FrontEnd_IsFootballSelected();
|
|
|
|
//
|
|
// True when this player's setup menu has YOUR ROLE on Live Cam. Only the
|
|
// HOST's pick is acted on - the host is the one that writes the egg - so
|
|
// the lobby publishes this and then shows it against the owner's row
|
|
// only. A member who picked it still races, which is what their row goes
|
|
// on saying.
|
|
//
|
|
Logical
|
|
RPL4FrontEnd_IsCameraRole();
|
|
|
|
// Hosted-race pilots fed by the Steam lobby: overrides the
|
|
// RP412HOSTPODS parsing with real personas and loadouts. owner_address
|
|
// is this pod's mesh IP (the FakeIP); count 0 clears the override.
|
|
struct FEHostedPilot
|
|
{
|
|
char address[64]; // mesh (game port) address for [pilots]
|
|
char name[32];
|
|
char vehicle[24];
|
|
char color[16];
|
|
char badge[24];
|
|
// football: the member's own picks, empty = assign one for them
|
|
char team[32]; // team key ("Red/Pink", ...)
|
|
char position[16]; // "runner" / "crusher" / "blocker"
|
|
};
|
|
void
|
|
RPL4FrontEnd_SetHostedPilots(
|
|
const char *owner_address,
|
|
const FEHostedPilot *pilots,
|
|
int count
|
|
);
|
|
|
|
// The between-races results screen: shows the last mission's final
|
|
// scores (from the local console) with a CONTINUE button. Returns
|
|
// immediately when there are no results (first boot). False only if
|
|
// the player closed the window instead of continuing.
|
|
Logical
|
|
RPL4FrontEnd_ShowResults(
|
|
HINSTANCE instance,
|
|
HWND main_window
|
|
);
|