39 cgi->UI_ExecuteConfunc(
"multiplayer_setTeamplay %i", isTeamPlay);
40 cgi->UI_InitStack(
"multiplayer_wait",
nullptr);
49 cgi->HUD_InitUI(
"missionoptions");
57 if (
cgi->CL_GetPlayerNum() == playerNum) {
60 const char* playerName =
cgi->CL_PlayerGetName(playerNum);
64 cgi->HUD_DisplayMessage(
buf);
73 if (!
cgi->Cvar_GetInteger(
"sv_dedicated") &&
cgi->GAME_IsTeamEmpty())
74 cgi->GAME_AutoTeam(
"multiplayer_initial",
cgi->GAME_GetCharacterArraySize());
76 if (
cgi->Cvar_GetInteger(
"sv_teamplay")
78 cgi->UI_Popup(
_(
"Settings doesn't make sense"),
_(
"Set soldiers per player lower than soldiers per team"));
82 const mapDef_t* md =
cgi->GAME_GetCurrentSelectedMap();
88 cgi->Cvar_Set(
"rm_drop",
"%s",
"");
89 cgi->Cvar_Set(
"rm_ufo",
"%s",
"");
90 cgi->Cvar_Set(
"sv_hurtaliens",
"0");
96 cgi->Cvar_Set(
"rm_ufo",
"%s",
97 cgi->Com_GetRandomMapAssemblyNameForCraft((
const char*)ufos->
data));
99 cgi->Cvar_Set(
"rm_drop",
"%s",
100 cgi->Com_GetRandomMapAssemblyNameForCraft((
const char*)crafts->
data));
104 cgi->Cvar_SetValue(
"sv_maxteams", md->
teams);
106 cgi->Cvar_SetValue(
"sv_maxteams", 2);
108 cgi->Cmd_ExecuteString(
"map %s %s %s",
cgi->Cvar_GetInteger(
"mn_serverday") ?
"day" :
"night", md->
mapTheme, md->
params ? (
const char*)
cgi->LIST_GetRandom(md->
params) :
"");
110 cgi->UI_InitStack(
"multiplayer_wait",
"missionoptions");
128 cgi->UI_InitStack(
"main",
"");
131 int enemiesKilled = 0, enemiesStunned = 0;
132 const int team =
cgi->GAME_GetCurrentTeam();
137 enemiesKilled += numKilled[team][
i];
138 enemiesStunned += numStunned[team][
i];
141 cgi->LIST_AddString(&list,
va(
_(
"Enemies killed:\t%i"), enemiesKilled + enemiesStunned));
142 cgi->LIST_AddString(&list,
va(
_(
"Team survivors:\t%i"), numAlive[team]));
144 if (winner == team) {
145 cgi->UI_PushWindow(
"won");
147 cgi->UI_PushWindow(
"lost");
154 const char* gameType =
cgi->Cvar_GetString(
"sv_gametype");
160 const mapDef_t* md =
cgi->GAME_GetCurrentSelectedMap();
164 cgi->GAME_SwitchCurrentSelectedMap(step ? step : 1);
168 for (
int j = 0; j <
cgi->csi->numGTs; j++) {
171 cgi->LIST_AddString(&gameNames,
_(gt->
name));
175 cgi->Cvar_SetValue(
"ai_singleplayeraliens", md->
maxAliens);
180 cgi->Com_Printf(
"no multiplayer map found for the current selected gametype: '%s'", gameType);
189 const int numGTs =
cgi->csi->numGTs;
194 cgi->Com_SetGameType();
196 const char* gameType =
cgi->Cvar_GetString(
"sv_gametype");
197 const mapDef_t* md =
cgi->GAME_GetCurrentSelectedMap();
216 const char* msg =
Com_Trim(message);
218 cgi->HUD_DisplayMessage(msg);
220 cgi->UI_TextScrollEnd(
"hud_chat.allchats.chatscreen.chat");
236 {
nullptr,
nullptr,
nullptr}
240 cgi->Cvar_ForceSet(
"sv_maxclients",
"2");
242 cgi->Cvar_Set(
"cl_equip",
"multiplayer_initial");
255 cgi->SV_Shutdown(
"Game mode shutdown",
false);
268 cgi->UI_ExecuteConfunc(
"multiplayer_admin_panel 0");
270 cgi->UI_ExecuteConfunc(
"multiplayer_admin_panel 1");
276 if (!cvars[
i]->modified) {
280 if (!
cgi->Com_ServerState()) {
286#ifndef HARD_LINKED_CGAME
296 e.
name =
"Multiplayer mode";
297 e.
menu =
"multiplayer";
Shared game type headers.
#define CGAME_HARD_LINKED_FUNCTIONS
static void GAME_MP_Results(dbuffer *msg, int winner, int *numSpawned, int *numAlive, int numKilled[][MAX_TEAMS], int numStunned[][MAX_TEAMS], bool nextmap)
After a mission was finished this function is called.
static void GAME_MP_UpdateGametype_f(void)
Update the map according to the gametype.
static CGAME_HARD_LINKED_FUNCTIONS void GAME_MP_StartBattlescape(bool isTeamPlay)
static void GAME_MP_NotifyEvent(event_t eventType)
static void GAME_MP_StartServer_f(void)
Starts a server and checks if the server loads a team unless he is a dedicated server admin.
static void GAME_MP_InitStartup(void)
static void GAME_MP_AddChatMessage(const char *text)
Displays a chat on the hud and add it to the chat buffer.
static linkedList_t * mp_chatMessageStack
static const mapDef_t * GAME_MP_MapInfo(int step)
static const cmdList_t multiplayerCmds[]
static void GAME_MP_RunFrame(float secondsSinceLastFrame)
static void GAME_MP_EndRoundAnnounce(int playerNum, int team)
const cgame_export_t * GetCGameAPI(const cgame_import_t *import)
static void GAME_MP_Shutdown(void)
static bool GAME_MP_HandleServerCommand(const char *command, dbuffer *msg)
Multiplayer game type headers.
Share stuff between the different cgame implementations.
const cgame_import_t * cgi
void GAME_MP_CallbacksInit(const cgame_import_t *import)
void GAME_MP_CallbacksShutdown(void)
cvar_t * cl_roundtimelimit
cvar_t * rcon_client_password
cvar_t * cl_maxsoldiersperteam
cvar_t * cl_maxsoldiersperplayer
Serverlist menu callbacks headers for multiplayer.
void GAME_MP_ServerListShutdown(void)
void GAME_MP_ParseTeamInfoMessage(dbuffer *msg)
Team selection text.
void GAME_MP_ServerListInit(const cgame_import_t *import)
Serverlist management headers for multiplayer.
event_t
Possible event values.
QGL_EXTERN GLuint GLsizei GLsizei GLint GLenum GLchar * name
bool Q_strnull(const char *string)
void Q_strncpyz(char *dest, const char *src, size_t destsize)
Safe strncpy that ensures a trailing zero.
char * Com_Trim(char *s)
Removed leading and trailing whitespaces.
bool Com_sprintf(char *dest, size_t size, const char *fmt,...)
copies formatted string with buffer-size checking
const char * va(const char *format,...)
does a varargs printf into a temp buffer, so I don't need to have varargs versions of all text functi...
const mapDef_t *EXPORT * MapInfo(int step)
This is a cvar definition. Cvars can be user modified and used in our menus e.g.
Data and interface to share data.