38typedef struct gamemode_info_s
54{
GAME_NORMAL,
GAME_NORMAL,
"",
"-quake",
"DarkPlaces-Quake",
"DarkPlaces-Quake",
"id1",
NULL,
"dp",
"darkplaces" },
55{
GAME_HIPNOTIC,
GAME_NORMAL,
"hipnotic",
"-hipnotic",
"Darkplaces-Hipnotic",
"Darkplaces-Hipnotic",
"id1",
"hipnotic",
"dp",
"darkplaces" },
56{
GAME_ROGUE,
GAME_NORMAL,
"rogue",
"-rogue",
"Darkplaces-Rogue",
"Darkplaces-Rogue",
"id1",
"rogue",
"dp",
"darkplaces" },
57{
GAME_NEHAHRA,
GAME_NORMAL,
"nehahra",
"-nehahra",
"DarkPlaces-Nehahra",
"DarkPlaces-Nehahra",
"id1",
"nehahra",
"dp",
"darkplaces" },
58{
GAME_QUOTH,
GAME_NORMAL,
"quoth",
"-quoth",
"Darkplaces-Quoth",
"Darkplaces-Quoth",
"id1",
"quoth",
"dp",
"darkplaces" },
59{
GAME_NEXUIZ,
GAME_NEXUIZ,
"nexuiz",
"-nexuiz",
"Nexuiz",
"Nexuiz",
"data",
NULL,
"nexuiz",
"nexuiz" },
60{
GAME_XONOTIC,
GAME_XONOTIC,
"xonotic",
"-xonotic",
"Xonotic",
"Xonotic",
"data",
NULL,
"xonotic",
"xonotic" },
61{
GAME_TRANSFUSION,
GAME_TRANSFUSION,
"transfusion",
"-transfusion",
"Transfusion",
"Transfusion",
"basetf",
NULL,
"transfusion",
"transfusion" },
62{
GAME_GOODVSBAD2,
GAME_GOODVSBAD2,
"gvb2",
"-goodvsbad2",
"GoodVs.Bad2",
"GoodVs.Bad2",
"rts",
NULL,
"gvb2",
"gvb2" },
63{
GAME_TEU,
GAME_TEU,
"teu",
"-teu",
"TheEvilUnleashed",
"TheEvilUnleashed",
"baseteu",
NULL,
"teu",
"teu" },
64{
GAME_BATTLEMECH,
GAME_BATTLEMECH,
"battlemech",
"-battlemech",
"Battlemech",
"Battlemech",
"base",
NULL,
"battlemech",
"battlemech" },
65{
GAME_ZYMOTIC,
GAME_ZYMOTIC,
"zymotic",
"-zymotic",
"Zymotic",
"Zymotic",
"basezym",
NULL,
"zymotic",
"zymotic" },
66{
GAME_SETHERAL,
GAME_SETHERAL,
"setheral",
"-setheral",
"Setheral",
"Setheral",
"data",
NULL,
"setheral",
"setheral" },
67{
GAME_TENEBRAE,
GAME_NORMAL,
"tenebrae",
"-tenebrae",
"DarkPlaces-Tenebrae",
"DarkPlaces-Tenebrae",
"id1",
"tenebrae",
"dp",
"darkplaces" },
68{
GAME_NEOTERIC,
GAME_NORMAL,
"neoteric",
"-neoteric",
"Neoteric",
"Neoteric",
"id1",
"neobase",
"neo",
"darkplaces" },
69{
GAME_OPENQUARTZ,
GAME_NORMAL,
"openquartz",
"-openquartz",
"OpenQuartz",
"OpenQuartz",
"id1",
NULL,
"openquartz",
"darkplaces" },
70{
GAME_PRYDON,
GAME_NORMAL,
"prydon",
"-prydon",
"PrydonGate",
"PrydonGate",
"id1",
"prydon",
"prydon",
"darkplaces" },
71{
GAME_DELUXEQUAKE,
GAME_DELUXEQUAKE,
"dq",
"-dq",
"Deluxe Quake",
"Deluxe_Quake",
"basedq",
"extradq",
"basedq",
"dq" },
72{
GAME_THEHUNTED,
GAME_THEHUNTED,
"thehunted",
"-thehunted",
"The Hunted",
"The_Hunted",
"thdata",
NULL,
"th",
"thehunted" },
73{
GAME_DEFEATINDETAIL2,
GAME_DEFEATINDETAIL2,
"did2",
"-did2",
"Defeat In Detail 2",
"Defeat_In_Detail_2",
"data",
NULL,
"did2_",
"did2" },
74{
GAME_DARSANA,
GAME_DARSANA,
"darsana",
"-darsana",
"Darsana",
"Darsana",
"ddata",
NULL,
"darsana",
"darsana" },
75{
GAME_CONTAGIONTHEORY,
GAME_CONTAGIONTHEORY,
"contagiontheory",
"-contagiontheory",
"Contagion Theory",
"Contagion_Theory",
"ctdata",
NULL,
"ct",
"contagiontheory" },
76{
GAME_EDU2P,
GAME_EDU2P,
"edu2p",
"-edu2p",
"EDU2 Prototype",
"EDU2_Prototype",
"id1",
"edu2",
"edu2_p",
"edu2prototype" },
77{
GAME_PROPHECY,
GAME_PROPHECY,
"prophecy",
"-prophecy",
"Prophecy",
"Prophecy",
"gamedata",
NULL,
"phcy",
"prophecy" },
78{
GAME_BLOODOMNICIDE,
GAME_BLOODOMNICIDE,
"omnicide",
"-omnicide",
"Blood Omnicide",
"Blood_Omnicide",
"kain",
NULL,
"omnicide",
"omnicide" },
79{
GAME_STEELSTORM,
GAME_STEELSTORM,
"steelstorm",
"-steelstorm",
"Steel-Storm",
"Steel-Storm",
"gamedata",
NULL,
"ss",
"steelstorm" },
80{
GAME_STEELSTORM2,
GAME_STEELSTORM2,
"steelstorm2",
"-steelstorm2",
"Steel Storm 2",
"Steel_Storm_2",
"gamedata",
NULL,
"ss2",
"steelstorm2" },
81{
GAME_SSAMMO,
GAME_SSAMMO,
"steelstorm-ammo",
"-steelstormammo",
"Steel Storm A.M.M.O.",
"Steel_Storm_A.M.M.O.",
"gamedata",
NULL,
"ssammo",
"steelstorm-ammo" },
82{
GAME_STEELSTORMREVENANTS,
GAME_STEELSTORMREVENANTS,
"steelstorm-revenants",
"-steelstormrev",
"Steel Storm: Revenants",
"Steel_Storm_Revenants",
"base",
NULL,
"ssrev",
"steelstorm-revenants" },
83{
GAME_TOMESOFMEPHISTOPHELES,
GAME_TOMESOFMEPHISTOPHELES,
"tomesofmephistopheles",
"-tomesofmephistopheles",
"Tomes of Mephistopheles",
"Tomes_of_Mephistopheles",
"gamedata",
NULL,
"tom",
"tomesofmephistopheles" },
84{
GAME_STRAPBOMB,
GAME_STRAPBOMB,
"strapbomb",
"-strapbomb",
"Strap-on-bomb Car",
"Strap-on-bomb_Car",
"id1",
NULL,
"strap",
"strapbomb" },
85{
GAME_MOONHELM,
GAME_MOONHELM,
"moonhelm",
"-moonhelm",
"MoonHelm",
"MoonHelm",
"data",
NULL,
"mh",
"moonhelm" },
86{
GAME_VORETOURNAMENT,
GAME_VORETOURNAMENT,
"voretournament",
"-voretournament",
"Vore Tournament",
"Vore_Tournament",
"data",
NULL,
"voretournament",
"voretournament" },
87{
GAME_DOOMBRINGER,
GAME_DOOMBRINGER,
"doombringer",
"-doombringer",
"DOOMBRINGER",
"DOOMBRINGER",
"dbdata",
NULL,
"doombringer",
"doombringer" },
88{
GAME_BATTLEMETAL,
GAME_NORMAL,
"battlemetal",
"-battlemetal",
"battlemetal",
"battlemetal",
"metaldata",
NULL,
"battlemetal",
"battlemetal" },
89{
GAME_QUAKE15,
GAME_NORMAL,
"quake15",
"-quake15",
"Quake 1.5",
"Quake_1.5",
"id1",
"quake15",
"quake15",
"darkplaces" },
90{
GAME_AD,
GAME_NORMAL,
"ad",
"-ad",
"Arcane Dimensions",
"Arcane_Dimensions",
"id1",
"ad",
"ad",
"darkplaces" },
91{
GAME_CTSJ2,
GAME_NORMAL,
"ctsj2",
"-ctsj2",
"Coppertone Summer Jam 2",
"Coppertone_Summer_Jam_2",
"id1",
"ctsj2",
"ctsj2",
"darkplaces" },
130 for (
i = 0;
i < gamemode_count;
i++)
139 Sys_Error(
"BUG: failed to find the base game!");
146 for (
i = 0;
i < gamemode_count;
i++)
158 for (j = numgamedirs - 1; j >= 0; --j)
160 for (
i = 0;
i < gamemode_count;
i++)
193 static char gamenetworkfilternamebuffer[64];
229 while ((s = strchr(gamenetworkfilternamebuffer,
' ')) !=
NULL)
char com_modname[MAX_OSPATH]
const char * gamescreenshotname
const char * gamedirname2
void COM_InitGameType(void)
const char * gameuserdirname
const char * gamedirname1
const char * gamenetworkfiltername
static const gamemode_info_t gamemode_info[GAME_COUNT]
int COM_ChangeGameTypeForGameDirs(unsigned numgamedirs, const char *gamedirs[], qbool failmissing, qbool init)
static void COM_SetGameType(int index)
gamemode_t com_startupgamegroup
gamemode_t com_startupgamemode
@ GAME_BATTLEMETAL
added by Cloudwalk for Subject9x
@ GAME_STEELSTORMREVENANTS
added by motorsep 07/19/2015
@ GAME_DOOMBRINGER
added by Cloudwalk for kristus
@ GAME_STEELSTORM
added by motorsep
@ GAME_STEELSTORM2
added by motorsep
@ GAME_OPENQUARTZ
this game sucks
@ GAME_QUAKE15
added by bones_was_here as it depends on an old bug and a workaround
@ GAME_TOMESOFMEPHISTOPHELES
added by motorsep
@ GAME_STRAPBOMB
added by motorsep for Urre
@ GAME_CTSJ2
added by bones_was_here as it has a race condition that requires a workaound
@ GAME_TENEBRAE
full of evil hackery
@ GAME_AD
added by bones_was_here as it depends on old DP behaviour or csqc_lowres
@ GAME_SSAMMO
added by motorsep
size_t COM_ToLowerString(const char *in, char *out, size_t size_out)
Returns the number of bytes written to *out excluding the \0 terminator.
#define dp_strlcpy(dst, src, dsize)
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
addgamedirs_t FS_SetGameDirs(int numgamedirs, const char *gamedirs[], qbool failmissing, qbool abortonfail)
char fs_gamedirs[MAX_GAMEDIRS][MAX_QPATH]
const char * FS_FileWithoutPath(const char *in)
static int(ZEXPORT *qz_inflate)(z_stream *strm
void FS_StripExtension(const char *in, char *out, size_t size_out)
void Host_UpdateVersion(void)
#define MAX_OSPATH
max length of a filesystem pathname
const char * gamename
not null
const char * gameuserdirname
not null
gamemode_t group
different games with same group can switch automatically when gamedirs change
const char * gamedirname1
not null
const char * gamedirname2
may be null
gamemode_t mode
this gamemode
const char * gamenetworkfiltername
not null
const char * cmdline
not null
const char * prog_name
not null
const char * gamescreenshotname
not null
void Sys_Error(const char *error,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
Causes the entire program to exit ASAP.
int Sys_CheckParm(const char *parm)