From: Cloudwalk <cloudwalk009@gmail.com>
Date: Tue, 25 Aug 2020 14:48:35 +0000 (-0400)
Subject: Merge branch 'master' into Mario/wrath-darkplaces_extra
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=4b2e33816c2cdf97f81f7621e5d972fff73b6d33;p=xonotic%2Fdarkplaces.git

Merge branch 'master' into Mario/wrath-darkplaces_extra
---

4b2e33816c2cdf97f81f7621e5d972fff73b6d33
diff --cc com_game.c
index 00000000,a40f5c40..a8e7dfca
mode 000000,100644..100644
--- a/com_game.c
+++ b/com_game.c
@@@ -1,0 -1,206 +1,207 @@@
+ /*
+ Copyright (C) 1996-1997 Id Software, Inc.
+ Copyright (C) 2000-2020 Ashley Rose "LadyHavoc" Hale
+ Copyright (C) 2020 David "Cloudwalk" Knapp
+ Copyright (C) 2020 Kristus <kristustf@gmail.com>
+ 
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+ 
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ 
+ See the GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ 
+ */
+ 
+ #include "quakedef.h"
+ 
+ // Game mods
+ 
+ gamemode_t gamemode;
+ const char *gamename;
+ const char *gamenetworkfiltername; // same as gamename currently but with _ in place of spaces so that "getservers" packets parse correctly (this also means the 
+ const char *gamedirname1;
+ const char *gamedirname2;
+ const char *gamescreenshotname;
+ const char *gameuserdirname;
+ char com_modname[MAX_OSPATH] = "";
+ 
+ gamemode_t com_startupgamemode;
+ gamemode_t com_startupgamegroup;
+ 
+ typedef struct gamemode_info_s
+ {
+ 	gamemode_t mode; // this gamemode
+ 	gamemode_t group; // different games with same group can switch automatically when gamedirs change
+ 	const char* prog_name; // not null
+ 	const char* cmdline; // not null
+ 	const char* gamename; // not null
+ 	const char*	gamenetworkfiltername; // not null
+ 	const char* gamedirname1; // not null
+ 	const char* gamedirname2; // null
+ 	const char* gamescreenshotname; // not nul
+ 	const char* gameuserdirname; // not null
+ } gamemode_info_t;
+ 
+ static const gamemode_info_t gamemode_info [GAME_COUNT] =
+ {// game						basegame					prog_name				cmdline						gamename					gamenetworkfilername		basegame	modgame			screenshot			userdir					   // commandline option
+ { GAME_NORMAL,					GAME_NORMAL,				"",						"-quake",					"DarkPlaces-Quake",			"DarkPlaces-Quake",			"id1",		NULL,			"dp",				"darkplaces"			}, // COMMANDLINEOPTION: Game: -quake runs the game Quake (default)
+ { GAME_HIPNOTIC,				GAME_NORMAL,				"hipnotic",				"-hipnotic",				"Darkplaces-Hipnotic",		"Darkplaces-Hipnotic",		"id1",		"hipnotic",		"dp",				"darkplaces"			}, // COMMANDLINEOPTION: Game: -hipnotic runs Quake mission pack 1: The Scourge of Armagon
+ { GAME_ROGUE,					GAME_NORMAL,				"rogue",				"-rogue",					"Darkplaces-Rogue",			"Darkplaces-Rogue",			"id1",		"rogue",		"dp",				"darkplaces"			}, // COMMANDLINEOPTION: Game: -rogue runs Quake mission pack 2: The Dissolution of Eternity
+ { GAME_NEHAHRA,					GAME_NORMAL,				"nehahra",				"-nehahra",					"DarkPlaces-Nehahra",		"DarkPlaces-Nehahra",		"id1",		"nehahra",		"dp",				"darkplaces"			}, // COMMANDLINEOPTION: Game: -nehahra runs The Seal of Nehahra movie and game
+ { GAME_QUOTH,					GAME_NORMAL,				"quoth",				"-quoth",					"Darkplaces-Quoth",			"Darkplaces-Quoth",			"id1",		"quoth",		"dp",				"darkplaces"			}, // COMMANDLINEOPTION: Game: -quoth runs the Quoth mod for playing community maps made for it
+ { GAME_NEXUIZ,					GAME_NEXUIZ,				"nexuiz",				"-nexuiz",					"Nexuiz",					"Nexuiz",					"data",		NULL,			"nexuiz",			"nexuiz"				}, // COMMANDLINEOPTION: Game: -nexuiz runs the multiplayer game Nexuiz
+ { GAME_XONOTIC,					GAME_XONOTIC,				"xonotic",				"-xonotic",					"Xonotic",					"Xonotic",					"data",		NULL,			"xonotic",			"xonotic"				}, // COMMANDLINEOPTION: Game: -xonotic runs the multiplayer game Xonotic
+ { GAME_TRANSFUSION,				GAME_TRANSFUSION,			"transfusion",			"-transfusion",				"Transfusion",				"Transfusion",				"basetf",	NULL,			"transfusion",		"transfusion"			}, // COMMANDLINEOPTION: Game: -transfusion runs Transfusion (the recreation of Blood in Quake)
+ { GAME_GOODVSBAD2,				GAME_GOODVSBAD2,			"gvb2",					"-goodvsbad2",				"GoodVs.Bad2",				"GoodVs.Bad2",				"rts",		NULL,			"gvb2",				"gvb2"					}, // COMMANDLINEOPTION: Game: -goodvsbad2 runs the psychadelic RTS FPS game Good Vs Bad 2
+ { GAME_TEU,						GAME_TEU,					"teu",					"-teu",						"TheEvilUnleashed",			"TheEvilUnleashed",			"baseteu",	NULL,			"teu",				"teu"					}, // COMMANDLINEOPTION: Game: -teu runs The Evil Unleashed (this option is obsolete as they are not using darkplaces)
+ { GAME_BATTLEMECH,				GAME_BATTLEMECH,			"battlemech",			"-battlemech",				"Battlemech",				"Battlemech",				"base",		NULL,			"battlemech",		"battlemech"			}, // COMMANDLINEOPTION: Game: -battlemech runs the multiplayer topdown deathmatch game BattleMech
+ { GAME_ZYMOTIC,					GAME_ZYMOTIC,				"zymotic",				"-zymotic",					"Zymotic",					"Zymotic",					"basezym",	NULL,			"zymotic",			"zymotic"				}, // COMMANDLINEOPTION: Game: -zymotic runs the singleplayer game Zymotic
+ { GAME_SETHERAL,				GAME_SETHERAL,				"setheral",				"-setheral",				"Setheral",					"Setheral",					"data",		NULL,			"setheral",			"setheral"				}, // COMMANDLINEOPTION: Game: -setheral runs the multiplayer game Setheral
+ { GAME_TENEBRAE,				GAME_NORMAL,				"tenebrae",				"-tenebrae",				"DarkPlaces-Tenebrae",		"DarkPlaces-Tenebrae",		"id1",		"tenebrae",		"dp",				"darkplaces"			}, // COMMANDLINEOPTION: Game: -tenebrae runs the graphics test mod known as Tenebrae (some features not implemented)
+ { GAME_NEOTERIC,				GAME_NORMAL,				"neoteric",				"-neoteric",				"Neoteric",					"Neoteric",					"id1",		"neobase",		"neo",				"darkplaces"			}, // COMMANDLINEOPTION: Game: -neoteric runs the game Neoteric
+ { GAME_OPENQUARTZ,				GAME_NORMAL,				"openquartz",			"-openquartz",				"OpenQuartz",				"OpenQuartz",				"id1",		NULL,			"openquartz",		"darkplaces"			}, // COMMANDLINEOPTION: Game: -openquartz runs the game OpenQuartz, a standalone GPL replacement of the quake content
+ { GAME_PRYDON,					GAME_NORMAL,				"prydon",				"-prydon",					"PrydonGate",				"PrydonGate",				"id1",		"prydon",		"prydon",			"darkplaces"			}, // COMMANDLINEOPTION: Game: -prydon runs the topdown point and click action-RPG Prydon Gate
+ { GAME_DELUXEQUAKE,				GAME_DELUXEQUAKE,			"dq",					"-dq",						"Deluxe Quake",				"Deluxe_Quake",				"basedq",	"extradq",		"basedq",			"dq"					}, // COMMANDLINEOPTION: Game: -dq runs the game Deluxe Quake
+ { GAME_THEHUNTED,				GAME_THEHUNTED,				"thehunted",			"-thehunted",				"The Hunted",				"The_Hunted",				"thdata",	NULL, 			"th",				"thehunted"				}, // COMMANDLINEOPTION: Game: -thehunted runs the game The Hunted
+ { GAME_DEFEATINDETAIL2,			GAME_DEFEATINDETAIL2,		"did2",					"-did2",					"Defeat In Detail 2",		"Defeat_In_Detail_2",		"data",		NULL, 			"did2_",			"did2"					}, // COMMANDLINEOPTION: Game: -did2 runs the game Defeat In Detail 2
+ { GAME_DARSANA,					GAME_DARSANA,				"darsana",				"-darsana",					"Darsana",					"Darsana",					"ddata",	NULL, 			"darsana",			"darsana"				}, // COMMANDLINEOPTION: Game: -darsana runs the game Darsana
+ { GAME_CONTAGIONTHEORY,			GAME_CONTAGIONTHEORY,		"contagiontheory",		"-contagiontheory",			"Contagion Theory",			"Contagion_Theory",			"ctdata",	NULL, 			"ct",				"contagiontheory"		}, // COMMANDLINEOPTION: Game: -contagiontheory runs the game Contagion Theory
+ { GAME_EDU2P,					GAME_EDU2P,					"edu2p",				"-edu2p",					"EDU2 Prototype",			"EDU2_Prototype",			"id1",		"edu2",			"edu2_p",			"edu2prototype"			}, // COMMANDLINEOPTION: Game: -edu2p runs the game Edu2 prototype
+ { GAME_PROPHECY,				GAME_PROPHECY,				"prophecy",				"-prophecy",				"Prophecy",					"Prophecy",					"gamedata",	NULL,			"phcy",				"prophecy"				}, // COMMANDLINEOPTION: Game: -prophecy runs the game Prophecy
+ { GAME_BLOODOMNICIDE,			GAME_BLOODOMNICIDE,			"omnicide",				"-omnicide",				"Blood Omnicide",			"Blood_Omnicide",			"kain",		NULL,			"omnicide",			"omnicide"				}, // COMMANDLINEOPTION: Game: -omnicide runs the game Blood Omnicide
+ { GAME_STEELSTORM,				GAME_STEELSTORM,			"steelstorm",			"-steelstorm",				"Steel-Storm",				"Steel-Storm",				"gamedata",	NULL,			"ss",				"steelstorm"			}, // COMMANDLINEOPTION: Game: -steelstorm runs the game Steel Storm
+ { GAME_STEELSTORM2,				GAME_STEELSTORM2,			"steelstorm2",			"-steelstorm2",				"Steel Storm 2",			"Steel_Storm_2",			"gamedata",	NULL,			"ss2",				"steelstorm2"			}, // COMMANDLINEOPTION: Game: -steelstorm2 runs the game Steel Storm 2
+ { GAME_SSAMMO,					GAME_SSAMMO,				"steelstorm-ammo",		"-steelstormammo",			"Steel Storm A.M.M.O.",		"Steel_Storm_A.M.M.O.",		"gamedata", NULL,			"ssammo",			"steelstorm-ammo"		}, // COMMANDLINEOPTION: Game: -steelstormammo runs the game Steel Storm A.M.M.O.
+ { GAME_STEELSTORMREVENANTS,		GAME_STEELSTORMREVENANTS,	"steelstorm-revenants", "-steelstormrev",			"Steel Storm: Revenants",	"Steel_Storm_Revenants",	"base", NULL,				"ssrev",			"steelstorm-revenants"	}, // COMMANDLINEOPTION: Game: -steelstormrev runs the game Steel Storm: Revenants
+ { GAME_TOMESOFMEPHISTOPHELES,	GAME_TOMESOFMEPHISTOPHELES,	"tomesofmephistopheles","-tomesofmephistopheles",	"Tomes of Mephistopheles",	"Tomes_of_Mephistopheles",	"gamedata",	NULL,			"tom",				"tomesofmephistopheles"	}, // COMMANDLINEOPTION: Game: -tomesofmephistopheles runs the game Tomes of Mephistopheles
+ { GAME_STRAPBOMB,				GAME_STRAPBOMB,				"strapbomb",			"-strapbomb",				"Strap-on-bomb Car",		"Strap-on-bomb_Car",		"id1",		NULL,			"strap",			"strapbomb"				}, // COMMANDLINEOPTION: Game: -strapbomb runs the game Strap-on-bomb Car
+ { GAME_MOONHELM,				GAME_MOONHELM,				"moonhelm",				"-moonhelm",				"MoonHelm",					"MoonHelm",					"data",		NULL,			"mh",				"moonhelm"				}, // COMMANDLINEOPTION: Game: -moonhelm runs the game MoonHelm
+ { GAME_VORETOURNAMENT,			GAME_VORETOURNAMENT,		"voretournament",		"-voretournament",			"Vore Tournament",			"Vore_Tournament",			"data",		NULL,			"voretournament",	"voretournament"		}, // COMMANDLINEOPTION: Game: -voretournament runs the multiplayer game Vore Tournament
+ { GAME_DOOMBRINGER,				GAME_DOOMBRINGER,			"doombringer",			"-doombringer",				"DOOMBRINGER",				"DOOMBRINGER",				"dbdata",	NULL,			"doombringer",		"doombringer"			}, // COMMANDLINEOPTION: Game: -doombringer runs the game DOOMBRINGER
++{ GAME_WRATH,					GAME_WRATH,					"wrath",				"-wrath",					"WRATH",					"WRATH",					"kp1",		NULL,			"wrath",			"WRATH"					}, // COMMANDLINEOPTION: Game: -wrath runs WRATH
+ };
+ 
+ static void COM_SetGameType(int index);
+ void COM_InitGameType (void)
+ {
+ 	char name [MAX_OSPATH];
+ 	int i;
+ 	int index = 0;
+ 
+ #ifdef FORCEGAME
+ 	COM_ToLowerString(FORCEGAME, name, sizeof (name));
+ #else
+ 	// check executable filename for keywords, but do it SMARTLY - only check the last path element
+ 	FS_StripExtension(FS_FileWithoutPath(sys.argv[0]), name, sizeof (name));
+ 	COM_ToLowerString(name, name, sizeof (name));
+ #endif
+ 	for (i = 1;i < (int)(sizeof (gamemode_info) / sizeof (gamemode_info[0]));i++)
+ 		if (gamemode_info[i].prog_name && gamemode_info[i].prog_name[0] && strstr (name, gamemode_info[i].prog_name))
+ 			index = i;
+ 
+ 	// check commandline options for keywords
+ 	for (i = 0;i < (int)(sizeof (gamemode_info) / sizeof (gamemode_info[0]));i++)
+ 		if (COM_CheckParm (gamemode_info[i].cmdline))
+ 			index = i;
+ 
+ 	com_startupgamemode = gamemode_info[index].mode;
+ 	com_startupgamegroup = gamemode_info[index].group;
+ 	COM_SetGameType(index);
+ }
+ 
+ void COM_ChangeGameTypeForGameDirs(void)
+ {
+ 	int i;
+ 	int index = -1;
+ 	// this will not not change the gamegroup
+ 	// first check if a base game (single gamedir) matches
+ 	for (i = 0;i < (int)(sizeof (gamemode_info) / sizeof (gamemode_info[0]));i++)
+ 	{
+ 		if (gamemode_info[i].group == com_startupgamegroup && !(gamemode_info[i].gamedirname2 && gamemode_info[i].gamedirname2[0]))
+ 		{
+ 			index = i;
+ 			break;
+ 		}
+ 	}
+ 	// now that we have a base game, see if there is a matching derivative game (two gamedirs)
+ 	if (fs_numgamedirs)
+ 	{
+ 		for (i = 0;i < (int)(sizeof (gamemode_info) / sizeof (gamemode_info[0]));i++)
+ 		{
+ 			if (gamemode_info[i].group == com_startupgamegroup && (gamemode_info[i].gamedirname2 && gamemode_info[i].gamedirname2[0]) && !strcasecmp(fs_gamedirs[0], gamemode_info[i].gamedirname2))
+ 			{
+ 				index = i;
+ 				break;
+ 			}
+ 		}
+ 	}
+ 	// we now have a good guess at which game this is meant to be...
+ 	if (index >= 0 && gamemode != gamemode_info[index].mode)
+ 		COM_SetGameType(index);
+ }
+ 
+ static void COM_SetGameType(int index)
+ {
+ 	static char gamenetworkfilternamebuffer[64];
+ 	int i, t;
+ 	if (index < 0 || index >= (int)(sizeof (gamemode_info) / sizeof (gamemode_info[0])))
+ 		index = 0;
+ 	gamemode = gamemode_info[index].mode;
+ 	gamename = gamemode_info[index].gamename;
+ 	gamenetworkfiltername = gamemode_info[index].gamenetworkfiltername;
+ 	gamedirname1 = gamemode_info[index].gamedirname1;
+ 	gamedirname2 = gamemode_info[index].gamedirname2;
+ 	gamescreenshotname = gamemode_info[index].gamescreenshotname;
+ 	gameuserdirname = gamemode_info[index].gameuserdirname;
+ 
+ 	if (gamemode == com_startupgamemode)
+ 	{
+ 		if((t = COM_CheckParm("-customgamename")) && t + 1 < sys.argc)
+ 			gamename = gamenetworkfiltername = sys.argv[t+1];
+ 		if((t = COM_CheckParm("-customgamenetworkfiltername")) && t + 1 < sys.argc)
+ 			gamenetworkfiltername = sys.argv[t+1];
+ 		if((t = COM_CheckParm("-customgamedirname1")) && t + 1 < sys.argc)
+ 			gamedirname1 = sys.argv[t+1];
+ 		if((t = COM_CheckParm("-customgamedirname2")) && t + 1 < sys.argc)
+ 			gamedirname2 = *sys.argv[t+1] ? sys.argv[t+1] : NULL;
+ 		if((t = COM_CheckParm("-customgamescreenshotname")) && t + 1 < sys.argc)
+ 			gamescreenshotname = sys.argv[t+1];
+ 		if((t = COM_CheckParm("-customgameuserdirname")) && t + 1 < sys.argc)
+ 			gameuserdirname = sys.argv[t+1];
+ 	}
+ 
+ 	if (gamedirname2 && gamedirname2[0])
+ 		Con_Printf("Game is %s using base gamedirs %s %s", gamename, gamedirname1, gamedirname2);
+ 	else
+ 		Con_Printf("Game is %s using base gamedir %s", gamename, gamedirname1);
+ 	for (i = 0;i < fs_numgamedirs;i++)
+ 	{
+ 		if (i == 0)
+ 			Con_Printf(", with mod gamedirs");
+ 		Con_Printf(" %s", fs_gamedirs[i]);
+ 	}
+ 	Con_Printf("\n");
+ 
+ 	if (strchr(gamenetworkfiltername, ' '))
+ 	{
+ 		char *s;
+ 		// if there are spaces in the game's network filter name it would
+ 		// cause parse errors in getservers in dpmaster, so we need to replace
+ 		// them with _ characters
+ 		strlcpy(gamenetworkfilternamebuffer, gamenetworkfiltername, sizeof(gamenetworkfilternamebuffer));
+ 		while ((s = strchr(gamenetworkfilternamebuffer, ' ')) != NULL)
+ 			*s = '_';
+ 		gamenetworkfiltername = gamenetworkfilternamebuffer;
+ 	}
+ 
+ 	Con_Printf("gamename for server filtering: %s\n", gamenetworkfiltername);
+ }
diff --cc common.h
index 44f49a1f,15ca90d0..b1e35796
--- a/common.h
+++ b/common.h
@@@ -298,7 -293,7 +293,8 @@@ typedef enum gamemode_
  	GAME_STRAPBOMB, // added by motorsep for Urre
  	GAME_MOONHELM,
  	GAME_VORETOURNAMENT,
+ 	GAME_DOOMBRINGER, // added by Cloudwalk for kristus
 +	GAME_WRATH,
  	GAME_COUNT
  }
  gamemode_t;
diff --cc gl_rmain.c
index a6aac386,6a69bdd6..c393f69b
--- a/gl_rmain.c
+++ b/gl_rmain.c
@@@ -3186,8 -3097,9 +3137,10 @@@ static void gl_main_start(void
  	R_BuildBlankTextures();
  	R_BuildNoTexture();
  	R_BuildWhiteCube();
+ #ifndef USE_GLES2
  	R_BuildNormalizationCube();
+ #endif //USE_GLES2
 +	R_BuildDefaultLUT();
  	r_texture_fogattenuation = NULL;
  	r_texture_fogheighttexture = NULL;
  	r_texture_gammaramps = NULL;
diff --cc svvm_cmds.c
index 011bfcdf,871e7386..09369190
--- a/svvm_cmds.c
+++ b/svvm_cmds.c
@@@ -9,230 -8,230 +9,232 @@@
  
  
  
- const char *vm_sv_extensions =
- "BX_WAL_SUPPORT "
- "DP_BUTTONCHAT "
- "DP_BUTTONUSE "
- "DP_CL_LOADSKY "
- "DP_CON_ALIASPARAMETERS "
- "DP_CON_BESTWEAPON "
- "DP_CON_EXPANDCVAR "
- "DP_CON_SET "
- "DP_CON_SETA "
- "DP_CON_STARTMAP "
- "DP_COVERAGE "
- "DP_CRYPTO "
- "DP_CSQC_BINDMAPS "
- "DP_CSQC_ENTITYWORLDOBJECT "
- "DP_CSQC_ENTITYMODELLIGHT "
- "DP_CSQC_ENTITYTRANSPARENTSORTING_OFFSET "
- "DP_CSQC_MAINVIEW "
- "DP_CSQC_MINFPS_QUALITY "
- "DP_CSQC_MULTIFRAME_INTERPOLATION "
- "DP_CSQC_BOXPARTICLES "
- "DP_CSQC_SPAWNPARTICLE "
- "DP_CSQC_QUERYRENDERENTITY "
- "DP_CSQC_ROTATEMOVES "
- "DP_CSQC_SETPAUSE "
- "DP_CSQC_V_CALCREFDEF_WIP1 "
- "DP_CSQC_V_CALCREFDEF_WIP2 "
- "DP_EF_ADDITIVE "
- "DP_EF_BLUE "
- "DP_EF_DOUBLESIDED "
- "DP_EF_DYNAMICMODELLIGHT "
- "DP_EF_FLAME "
- "DP_EF_FULLBRIGHT "
- "DP_EF_NODEPTHTEST "
- "DP_EF_NODRAW "
- "DP_EF_NOGUNBOB "
- "DP_EF_NOSELFSHADOW "
- "DP_EF_NOSHADOW "
- "DP_EF_RED "
- "DP_EF_RESTARTANIM_BIT "
- "DP_EF_STARDUST "
- "DP_EF_TELEPORT_BIT "
- "DP_ENT_ALPHA "
- "DP_ENT_COLORMOD "
- "DP_ENT_CUSTOMCOLORMAP "
- "DP_ENT_EXTERIORMODELTOCLIENT "
- "DP_ENT_GLOW "
- "DP_ENT_GLOWMOD "
- "DP_ENT_LOWPRECISION "
- "DP_ENT_SCALE "
- "DP_ENT_TRAILEFFECTNUM "
- "DP_ENT_VIEWMODEL "
- "DP_GFX_EXTERNALTEXTURES "
- "DP_GFX_EXTERNALTEXTURES_PERMAP "
- "DP_GFX_FOG "
- "DP_GFX_MODEL_INTERPOLATION "
- "DP_GFX_QUAKE3MODELTAGS "
- "DP_GFX_SKINFILES "
- "DP_GFX_SKYBOX "
- "DP_GFX_FONTS "
- "DP_GFX_FONTS_FREETYPE "
- "DP_UTF8 "
- "DP_FONT_VARIABLEWIDTH "
- "DP_HALFLIFE_MAP "
- "DP_HALFLIFE_MAP_CVAR "
- "DP_HALFLIFE_SPRITE "
- "DP_INPUTBUTTONS "
- "DP_LIGHTSTYLE_STATICVALUE "
- "DP_LITSPRITES "
- "DP_LITSUPPORT "
- "DP_MONSTERWALK "
- "DP_MOVETYPEBOUNCEMISSILE "
- "DP_MOVETYPEFLYWORLDONLY "
- "DP_MOVETYPEFOLLOW "
- "DP_NULL_MODEL "
- "DP_QC_ASINACOSATANATAN2TAN "
- "DP_QC_AUTOCVARS "
- "DP_QC_CHANGEPITCH "
- "DP_QC_CMD "
- "DP_QC_COPYENTITY "
- "DP_QC_CRC16 "
- "DP_QC_CVAR_DEFSTRING "
- "DP_QC_CVAR_DESCRIPTION "
- "DP_QC_CVAR_STRING "
- "DP_QC_CVAR_TYPE "
- "DP_QC_DIGEST "
- "DP_QC_DIGEST_SHA256 "
- "DP_QC_EDICT_NUM "
- "DP_QC_ENTITYDATA "
- "DP_QC_ENTITYSTRING "
- "DP_QC_ETOS "
- "DP_QC_EXTRESPONSEPACKET "
- "DP_QC_FINDCHAIN "
- "DP_QC_FINDCHAINFLAGS "
- "DP_QC_FINDCHAINFLOAT "
- "DP_QC_FINDCHAIN_TOFIELD "
- "DP_QC_FINDFLAGS "
- "DP_QC_FINDFLOAT "
- "DP_QC_FS_SEARCH "
- "DP_QC_GETLIGHT "
- "DP_QC_GETSURFACE "
- "DP_QC_GETSURFACETRIANGLE "
- "DP_QC_GETSURFACEPOINTATTRIBUTE "
- "DP_QC_GETTAGINFO "
- "DP_QC_GETTAGINFO_BONEPROPERTIES "
- "DP_QC_GETTIME "
- "DP_QC_GETTIME_CDTRACK "
- "DP_QC_I18N "
- "DP_QC_LOG "
- "DP_QC_MINMAXBOUND "
- "DP_QC_MULTIPLETEMPSTRINGS "
- "DP_QC_NUM_FOR_EDICT "
- "DP_QC_RANDOMVEC "
- "DP_QC_SINCOSSQRTPOW "
- "DP_QC_SPRINTF "
- "DP_QC_STRFTIME "
- "DP_QC_STRINGBUFFERS "
- "DP_QC_STRINGBUFFERS_CVARLIST "
- "DP_QC_STRINGBUFFERS_EXT_WIP "
- "DP_QC_STRINGCOLORFUNCTIONS "
- "DP_QC_STRING_CASE_FUNCTIONS "
- "DP_QC_STRREPLACE "
- "DP_QC_TOKENIZEBYSEPARATOR "
- "DP_QC_TOKENIZE_CONSOLE "
- "DP_QC_TRACEBOX "
- "DP_QC_TRACETOSS "
- "DP_QC_TRACE_MOVETYPE_HITMODEL "
- "DP_QC_TRACE_MOVETYPE_WORLDONLY "
- "DP_QC_UNLIMITEDTEMPSTRINGS "
- "DP_QC_URI_ESCAPE "
- "DP_QC_URI_GET "
- "DP_QC_URI_POST "
- "DP_QC_VECTOANGLES_WITH_ROLL "
- "DP_QC_VECTORVECTORS "
- "DP_QC_WHICHPACK "
- "DP_QUAKE2_MODEL "
- "DP_QUAKE2_SPRITE "
- "DP_QUAKE3_MAP "
- "DP_QUAKE3_MODEL "
- "DP_REGISTERCVAR "
- "DP_SKELETONOBJECTS "
- "DP_SND_DIRECTIONLESSATTNNONE "
- "DP_SND_FAKETRACKS "
- "DP_SND_SOUND7_WIP1 "
- "DP_SND_SOUND7_WIP2 "
- "DP_SND_OGGVORBIS "
- "DP_SND_SETPARAMS "
- "DP_SND_STEREOWAV "
- "DP_SND_GETSOUNDTIME "
- "DP_VIDEO_DPV "
- "DP_VIDEO_SUBTITLES "
- "DP_SOLIDCORPSE "
- "DP_SPRITE32 "
- "DP_SV_BOTCLIENT "
- "DP_SV_BOUNCEFACTOR "
- "DP_SV_CLIENTCAMERA "
- "DP_SV_CLIENTCOLORS "
- "DP_SV_CLIENTNAME "
- "DP_SV_CMD "
- "DP_SV_CUSTOMIZEENTITYFORCLIENT "
- "DP_SV_DISABLECLIENTPREDICTION "
- "DP_SV_DISCARDABLEDEMO "
- "DP_SV_DRAWONLYTOCLIENT "
- "DP_SV_DROPCLIENT "
- "DP_SV_EFFECT "
- "DP_SV_ENTITYCONTENTSTRANSITION "
- "DP_SV_MODELFLAGS_AS_EFFECTS "
- "DP_SV_MOVETYPESTEP_LANDEVENT "
- "DP_SV_NETADDRESS "
- "DP_SV_NODRAWTOCLIENT "
- "DP_SV_ONENTITYNOSPAWNFUNCTION "
- "DP_SV_ONENTITYPREPOSTSPAWNFUNCTION "
- "DP_SV_PING "
- "DP_SV_PING_PACKETLOSS "
- "DP_SV_PLAYERPHYSICS "
- "DP_PHYSICS_ODE "
- "DP_SV_POINTPARTICLES "
- "DP_SV_POINTSOUND "
- "DP_SV_PRECACHEANYTIME "
- "DP_SV_PRINT "
- "DP_SV_PUNCHVECTOR "
- "DP_SV_QCSTATUS "
- "DP_SV_ROTATINGBMODEL "
- "DP_SV_SETCOLOR "
- "DP_SV_SHUTDOWN "
- "DP_SV_SLOWMO "
- "DP_SV_SPAWNFUNC_PREFIX "
- "DP_SV_WRITEPICTURE "
- "DP_SV_WRITEUNTERMINATEDSTRING "
- "DP_TE_BLOOD "
- "DP_TE_BLOODSHOWER "
- "DP_TE_CUSTOMFLASH "
- "DP_TE_EXPLOSIONRGB "
- "DP_TE_FLAMEJET "
- "DP_TE_PARTICLECUBE "
- "DP_TE_PARTICLERAIN "
- "DP_TE_PARTICLESNOW "
- "DP_TE_PLASMABURN "
- "DP_TE_QUADEFFECTS1 "
- "DP_TE_SMALLFLASH "
- "DP_TE_SPARK "
- "DP_TE_STANDARDEFFECTBUILTINS "
- "DP_TRACE_HITCONTENTSMASK_SURFACEINFO "
- "DP_USERMOVETYPES "
- "DP_VIEWZOOM "
- "EXT_BITSHIFT "
- "FRIK_FILE "
- "FTE_CSQC_SKELETONOBJECTS "
- "FTE_QC_CHECKPVS "
- "FTE_STRINGS "
- "KRIMZON_SV_PARSECLIENTCOMMAND "
- "NEH_CMD_PLAY2 "
- "NEH_RESTOREGAME "
- "NEXUIZ_PLAYERMODEL "
- "NXQ_GFX_LETTERBOX "
- "PRYDON_CLIENTCURSOR "
- "TENEBRAE_GFX_DLIGHTS "
- "TW_SV_STEPCONTROL "
- "ZQ_PAUSE "
- "EXT_WRATH "
- "EXT_NODEGRAPH "
- "DP_RM_CLIPGROUP "
- //"EXT_CSQC " // not ready yet
- ;
+ const char *vm_sv_extensions[] = {
+ "BX_WAL_SUPPORT",
+ "DP_BUTTONCHAT",
+ "DP_BUTTONUSE",
+ "DP_CL_LOADSKY",
+ "DP_CON_ALIASPARAMETERS",
+ "DP_CON_BESTWEAPON",
+ "DP_CON_EXPANDCVAR",
+ "DP_CON_SET",
+ "DP_CON_SETA",
+ "DP_CON_STARTMAP",
+ "DP_COVERAGE",
+ "DP_CRYPTO",
+ "DP_CSQC_BINDMAPS",
+ "DP_CSQC_ENTITYWORLDOBJECT",
+ "DP_CSQC_ENTITYMODELLIGHT",
+ "DP_CSQC_ENTITYTRANSPARENTSORTING_OFFSET",
+ "DP_CSQC_MAINVIEW",
+ "DP_CSQC_MINFPS_QUALITY",
+ "DP_CSQC_MULTIFRAME_INTERPOLATION",
+ "DP_CSQC_BOXPARTICLES",
+ "DP_CSQC_SPAWNPARTICLE",
+ "DP_CSQC_QUERYRENDERENTITY",
+ "DP_CSQC_ROTATEMOVES",
+ "DP_CSQC_SETPAUSE",
+ "DP_CSQC_V_CALCREFDEF_WIP1",
+ "DP_CSQC_V_CALCREFDEF_WIP2",
+ "DP_EF_ADDITIVE",
+ "DP_EF_BLUE",
+ "DP_EF_DOUBLESIDED",
+ "DP_EF_DYNAMICMODELLIGHT",
+ "DP_EF_FLAME",
+ "DP_EF_FULLBRIGHT",
+ "DP_EF_NODEPTHTEST",
+ "DP_EF_NODRAW",
+ "DP_EF_NOGUNBOB",
+ "DP_EF_NOSELFSHADOW",
+ "DP_EF_NOSHADOW",
+ "DP_EF_RED",
+ "DP_EF_RESTARTANIM_BIT",
+ "DP_EF_STARDUST",
+ "DP_EF_TELEPORT_BIT",
+ "DP_ENT_ALPHA",
+ "DP_ENT_COLORMOD",
+ "DP_ENT_CUSTOMCOLORMAP",
+ "DP_ENT_EXTERIORMODELTOCLIENT",
+ "DP_ENT_GLOW",
+ "DP_ENT_GLOWMOD",
+ "DP_ENT_LOWPRECISION",
+ "DP_ENT_SCALE",
+ "DP_ENT_TRAILEFFECTNUM",
+ "DP_ENT_VIEWMODEL",
+ "DP_GFX_EXTERNALTEXTURES",
+ "DP_GFX_EXTERNALTEXTURES_PERMAP",
+ "DP_GFX_FOG",
+ "DP_GFX_MODEL_INTERPOLATION",
+ "DP_GFX_QUAKE3MODELTAGS",
+ "DP_GFX_SKINFILES",
+ "DP_GFX_SKYBOX",
+ "DP_GFX_FONTS",
+ "DP_GFX_FONTS_FREETYPE",
+ "DP_UTF8",
+ "DP_FONT_VARIABLEWIDTH",
+ "DP_HALFLIFE_MAP",
+ "DP_HALFLIFE_MAP_CVAR",
+ "DP_HALFLIFE_SPRITE",
+ "DP_INPUTBUTTONS",
+ "DP_LIGHTSTYLE_STATICVALUE",
+ "DP_LITSPRITES",
+ "DP_LITSUPPORT",
+ "DP_MONSTERWALK",
+ "DP_MOVETYPEBOUNCEMISSILE",
+ "DP_MOVETYPEFLYWORLDONLY",
+ "DP_MOVETYPEFOLLOW",
+ "DP_NULL_MODEL",
+ "DP_QC_ASINACOSATANATAN2TAN",
+ "DP_QC_AUTOCVARS",
+ "DP_QC_CHANGEPITCH",
+ "DP_QC_CMD",
+ "DP_QC_COPYENTITY",
+ "DP_QC_CRC16",
+ "DP_QC_CVAR_DEFSTRING",
+ "DP_QC_CVAR_DESCRIPTION",
+ "DP_QC_CVAR_STRING",
+ "DP_QC_CVAR_TYPE",
+ "DP_QC_DIGEST",
+ "DP_QC_DIGEST_SHA256",
+ "DP_QC_EDICT_NUM",
+ "DP_QC_ENTITYDATA",
+ "DP_QC_ENTITYSTRING",
+ "DP_QC_ETOS",
+ "DP_QC_EXTRESPONSEPACKET",
+ "DP_QC_FINDCHAIN",
+ "DP_QC_FINDCHAINFLAGS",
+ "DP_QC_FINDCHAINFLOAT",
+ "DP_QC_FINDCHAIN_TOFIELD",
+ "DP_QC_FINDFLAGS",
+ "DP_QC_FINDFLOAT",
+ "DP_QC_FS_SEARCH",
+ "DP_QC_GETLIGHT",
+ "DP_QC_GETSURFACE",
+ "DP_QC_GETSURFACETRIANGLE",
+ "DP_QC_GETSURFACEPOINTATTRIBUTE",
+ "DP_QC_GETTAGINFO",
+ "DP_QC_GETTAGINFO_BONEPROPERTIES",
+ "DP_QC_GETTIME",
+ "DP_QC_GETTIME_CDTRACK",
+ "DP_QC_I18N",
+ "DP_QC_LOG",
+ "DP_QC_MINMAXBOUND",
+ "DP_QC_MULTIPLETEMPSTRINGS",
+ "DP_QC_NUM_FOR_EDICT",
+ "DP_QC_RANDOMVEC",
+ "DP_QC_SINCOSSQRTPOW",
+ "DP_QC_SPRINTF",
+ "DP_QC_STRFTIME",
+ "DP_QC_STRINGBUFFERS",
+ "DP_QC_STRINGBUFFERS_CVARLIST",
+ "DP_QC_STRINGBUFFERS_EXT_WIP",
+ "DP_QC_STRINGCOLORFUNCTIONS",
+ "DP_QC_STRING_CASE_FUNCTIONS",
+ "DP_QC_STRREPLACE",
+ "DP_QC_TOKENIZEBYSEPARATOR",
+ "DP_QC_TOKENIZE_CONSOLE",
+ "DP_QC_TRACEBOX",
+ "DP_QC_TRACETOSS",
+ "DP_QC_TRACE_MOVETYPE_HITMODEL",
+ "DP_QC_TRACE_MOVETYPE_WORLDONLY",
+ "DP_QC_UNLIMITEDTEMPSTRINGS",
+ "DP_QC_URI_ESCAPE",
+ "DP_QC_URI_GET",
+ "DP_QC_URI_POST",
+ "DP_QC_VECTOANGLES_WITH_ROLL",
+ "DP_QC_VECTORVECTORS",
+ "DP_QC_WHICHPACK",
+ "DP_QUAKE2_MODEL",
+ "DP_QUAKE2_SPRITE",
+ "DP_QUAKE3_MAP",
+ "DP_QUAKE3_MODEL",
+ "DP_REGISTERCVAR",
+ "DP_SKELETONOBJECTS",
+ "DP_SND_DIRECTIONLESSATTNNONE",
+ "DP_SND_FAKETRACKS",
+ "DP_SND_SOUND7_WIP1",
+ "DP_SND_SOUND7_WIP2",
+ "DP_SND_OGGVORBIS",
+ "DP_SND_SETPARAMS",
+ "DP_SND_STEREOWAV",
+ "DP_SND_GETSOUNDTIME",
+ "DP_VIDEO_DPV",
+ "DP_VIDEO_SUBTITLES",
+ "DP_SOLIDCORPSE",
+ "DP_SPRITE32",
+ "DP_SV_BOTCLIENT",
+ "DP_SV_BOUNCEFACTOR",
+ "DP_SV_CLIENTCAMERA",
+ "DP_SV_CLIENTCOLORS",
+ "DP_SV_CLIENTNAME",
+ "DP_SV_CMD",
+ "DP_SV_CUSTOMIZEENTITYFORCLIENT",
+ "DP_SV_DISABLECLIENTPREDICTION",
+ "DP_SV_DISCARDABLEDEMO",
+ "DP_SV_DRAWONLYTOCLIENT",
+ "DP_SV_DROPCLIENT",
+ "DP_SV_EFFECT",
+ "DP_SV_ENTITYCONTENTSTRANSITION",
+ "DP_SV_MODELFLAGS_AS_EFFECTS",
+ "DP_SV_MOVETYPESTEP_LANDEVENT",
+ "DP_SV_NETADDRESS",
+ "DP_SV_NODRAWTOCLIENT",
+ "DP_SV_ONENTITYNOSPAWNFUNCTION",
+ "DP_SV_ONENTITYPREPOSTSPAWNFUNCTION",
+ "DP_SV_PING",
+ "DP_SV_PING_PACKETLOSS",
+ "DP_SV_PLAYERPHYSICS",
+ "DP_PHYSICS_ODE",
+ "DP_SV_POINTPARTICLES",
+ "DP_SV_POINTSOUND",
+ "DP_SV_PRECACHEANYTIME",
+ "DP_SV_PRINT",
+ "DP_SV_PUNCHVECTOR",
+ "DP_SV_QCSTATUS",
+ "DP_SV_ROTATINGBMODEL",
+ "DP_SV_SETCOLOR",
+ "DP_SV_SHUTDOWN",
+ "DP_SV_SLOWMO",
+ "DP_SV_SPAWNFUNC_PREFIX",
+ "DP_SV_WRITEPICTURE",
+ "DP_SV_WRITEUNTERMINATEDSTRING",
+ "DP_TE_BLOOD",
+ "DP_TE_BLOODSHOWER",
+ "DP_TE_CUSTOMFLASH",
+ "DP_TE_EXPLOSIONRGB",
+ "DP_TE_FLAMEJET",
+ "DP_TE_PARTICLECUBE",
+ "DP_TE_PARTICLERAIN",
+ "DP_TE_PARTICLESNOW",
+ "DP_TE_PLASMABURN",
+ "DP_TE_QUADEFFECTS1",
+ "DP_TE_SMALLFLASH",
+ "DP_TE_SPARK",
+ "DP_TE_STANDARDEFFECTBUILTINS",
+ "DP_TRACE_HITCONTENTSMASK_SURFACEINFO"
+ "DP_USERMOVETYPES",
+ "DP_VIEWZOOM",
+ "EXT_BITSHIFT",
+ "FRIK_FILE",
+ "FTE_CSQC_SKELETONOBJECTS",
+ "FTE_QC_CHECKPVS",
+ "FTE_STRINGS",
+ "KRIMZON_SV_PARSECLIENTCOMMAND",
+ "NEH_CMD_PLAY2",
+ "NEH_RESTOREGAME",
+ "NEXUIZ_PLAYERMODEL",
+ "NXQ_GFX_LETTERBOX",
+ "PRYDON_CLIENTCURSOR",
+ "TENEBRAE_GFX_DLIGHTS",
+ "TW_SV_STEPCONTROL",
+ "ZQ_PAUSE",
++"EXT_WRATH",
++"EXT_NODEGRAPH",
+ "DP_RM_CLIPGROUP",
+ "DP_QC_FS_SEARCH_PACKFILE",
+ NULL
+ //"EXT_CSQC" // not ready yet
+ };
  
  /*
  =================