diff options
Diffstat (limited to 'code/game')
| -rw-r--r-- | code/game/ai_chat.c | 18 | ||||
| -rw-r--r-- | code/game/ai_cmd.c | 18 | ||||
| -rw-r--r-- | code/game/ai_dmnet.c | 20 | ||||
| -rw-r--r-- | code/game/ai_dmq3.c | 18 | ||||
| -rw-r--r-- | code/game/ai_main.c | 20 | ||||
| -rw-r--r-- | code/game/ai_team.c | 18 | ||||
| -rw-r--r-- | code/game/ai_vcmd.c | 18 | ||||
| -rw-r--r-- | code/game/be_aas.h | 221 | ||||
| -rw-r--r-- | code/game/be_ai_char.h | 48 | ||||
| -rw-r--r-- | code/game/be_ai_chat.h | 113 | ||||
| -rw-r--r-- | code/game/be_ai_gen.h | 33 | ||||
| -rw-r--r-- | code/game/be_ai_goal.h | 118 | ||||
| -rw-r--r-- | code/game/be_ai_move.h | 144 | ||||
| -rw-r--r-- | code/game/be_ai_weap.h | 104 | ||||
| -rw-r--r-- | code/game/be_ea.h | 66 | ||||
| -rw-r--r-- | code/game/bg_lib.c | 2 | ||||
| -rw-r--r-- | code/game/bg_misc.c | 2 | ||||
| -rw-r--r-- | code/game/bg_pmove.c | 2 | ||||
| -rw-r--r-- | code/game/bg_slidemove.c | 2 | ||||
| -rw-r--r-- | code/game/botlib.h | 516 | ||||
| -rw-r--r-- | code/game/g_local.h | 2 | ||||
| -rw-r--r-- | code/game/q_math.c | 1307 | ||||
| -rw-r--r-- | code/game/q_shared.c | 1252 | ||||
| -rw-r--r-- | code/game/q_shared.h | 1456 | ||||
| -rw-r--r-- | code/game/surfaceflags.h | 80 | 
25 files changed, 70 insertions, 5528 deletions
diff --git a/code/game/ai_chat.c b/code/game/ai_chat.c index ae2554e..7dc7fc3 100644 --- a/code/game/ai_chat.c +++ b/code/game/ai_chat.c @@ -31,15 +31,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   *****************************************************************************/  #include "g_local.h" -#include "botlib.h" -#include "be_aas.h" -#include "be_ea.h" -#include "be_ai_char.h" -#include "be_ai_chat.h" -#include "be_ai_gen.h" -#include "be_ai_goal.h" -#include "be_ai_move.h" -#include "be_ai_weap.h" +#include "../botlib/botlib.h" +#include "../botlib/be_aas.h" +#include "../botlib/be_ea.h" +#include "../botlib/be_ai_char.h" +#include "../botlib/be_ai_chat.h" +#include "../botlib/be_ai_gen.h" +#include "../botlib/be_ai_goal.h" +#include "../botlib/be_ai_move.h" +#include "../botlib/be_ai_weap.h"  //  #include "ai_main.h"  #include "ai_dmq3.h" diff --git a/code/game/ai_cmd.c b/code/game/ai_cmd.c index fadf07f..2b89a1d 100644 --- a/code/game/ai_cmd.c +++ b/code/game/ai_cmd.c @@ -31,15 +31,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   *****************************************************************************/  #include "g_local.h" -#include "botlib.h" -#include "be_aas.h" -#include "be_ea.h" -#include "be_ai_char.h" -#include "be_ai_chat.h" -#include "be_ai_gen.h" -#include "be_ai_goal.h" -#include "be_ai_move.h" -#include "be_ai_weap.h" +#include "../botlib/botlib.h" +#include "../botlib/be_aas.h" +#include "../botlib/be_ea.h" +#include "../botlib/be_ai_char.h" +#include "../botlib/be_ai_chat.h" +#include "../botlib/be_ai_gen.h" +#include "../botlib/be_ai_goal.h" +#include "../botlib/be_ai_move.h" +#include "../botlib/be_ai_weap.h"  //  #include "ai_main.h"  #include "ai_dmq3.h" diff --git a/code/game/ai_dmnet.c b/code/game/ai_dmnet.c index a791edd..7230676 100644 --- a/code/game/ai_dmnet.c +++ b/code/game/ai_dmnet.c @@ -31,15 +31,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   *****************************************************************************/  #include "g_local.h" -#include "botlib.h" -#include "be_aas.h" -#include "be_ea.h" -#include "be_ai_char.h" -#include "be_ai_chat.h" -#include "be_ai_gen.h" -#include "be_ai_goal.h" -#include "be_ai_move.h" -#include "be_ai_weap.h" +#include "../botlib/botlib.h" +#include "../botlib/be_aas.h" +#include "../botlib/be_ea.h" +#include "../botlib/be_ai_char.h" +#include "../botlib/be_ai_chat.h" +#include "../botlib/be_ai_gen.h" +#include "../botlib/be_ai_goal.h" +#include "../botlib/be_ai_move.h" +#include "../botlib/be_ai_weap.h"  //  #include "ai_main.h"  #include "ai_dmq3.h" @@ -56,7 +56,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  // for the voice chats  #include "../../ui/menudef.h" -//goal flag, see be_ai_goal.h for the other GFL_* +//goal flag, see ../botlib/be_ai_goal.h for the other GFL_*  #define GFL_AIR			128  int numnodeswitches; diff --git a/code/game/ai_dmq3.c b/code/game/ai_dmq3.c index c373df8..b02d67c 100644 --- a/code/game/ai_dmq3.c +++ b/code/game/ai_dmq3.c @@ -32,15 +32,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  #include "g_local.h" -#include "botlib.h" -#include "be_aas.h" -#include "be_ea.h" -#include "be_ai_char.h" -#include "be_ai_chat.h" -#include "be_ai_gen.h" -#include "be_ai_goal.h" -#include "be_ai_move.h" -#include "be_ai_weap.h" +#include "../botlib/botlib.h" +#include "../botlib/be_aas.h" +#include "../botlib/be_ea.h" +#include "../botlib/be_ai_char.h" +#include "../botlib/be_ai_chat.h" +#include "../botlib/be_ai_gen.h" +#include "../botlib/be_ai_goal.h" +#include "../botlib/be_ai_move.h" +#include "../botlib/be_ai_weap.h"  //  #include "ai_main.h"  #include "ai_dmq3.h" diff --git a/code/game/ai_main.c b/code/game/ai_main.c index 63de0ce..b88d96f 100644 --- a/code/game/ai_main.c +++ b/code/game/ai_main.c @@ -32,16 +32,16 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  #include "g_local.h" -#include "q_shared.h" -#include "botlib.h"		//bot lib interface -#include "be_aas.h" -#include "be_ea.h" -#include "be_ai_char.h" -#include "be_ai_chat.h" -#include "be_ai_gen.h" -#include "be_ai_goal.h" -#include "be_ai_move.h" -#include "be_ai_weap.h" +#include "../qcommon/q_shared.h" +#include "../botlib/botlib.h"		//bot lib interface +#include "../botlib/be_aas.h" +#include "../botlib/be_ea.h" +#include "../botlib/be_ai_char.h" +#include "../botlib/be_ai_chat.h" +#include "../botlib/be_ai_gen.h" +#include "../botlib/be_ai_goal.h" +#include "../botlib/be_ai_move.h" +#include "../botlib/be_ai_weap.h"  //  #include "ai_main.h"  #include "ai_dmq3.h" diff --git a/code/game/ai_team.c b/code/game/ai_team.c index 44250d8..742c24f 100644 --- a/code/game/ai_team.c +++ b/code/game/ai_team.c @@ -31,15 +31,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   *****************************************************************************/  #include "g_local.h" -#include "botlib.h" -#include "be_aas.h" -#include "be_ea.h" -#include "be_ai_char.h" -#include "be_ai_chat.h" -#include "be_ai_gen.h" -#include "be_ai_goal.h" -#include "be_ai_move.h" -#include "be_ai_weap.h" +#include "../botlib/botlib.h" +#include "../botlib/be_aas.h" +#include "../botlib/be_ea.h" +#include "../botlib/be_ai_char.h" +#include "../botlib/be_ai_chat.h" +#include "../botlib/be_ai_gen.h" +#include "../botlib/be_ai_goal.h" +#include "../botlib/be_ai_move.h" +#include "../botlib/be_ai_weap.h"  //  #include "ai_main.h"  #include "ai_dmq3.h" diff --git a/code/game/ai_vcmd.c b/code/game/ai_vcmd.c index 026bbf0..c99d2c3 100644 --- a/code/game/ai_vcmd.c +++ b/code/game/ai_vcmd.c @@ -31,15 +31,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   *****************************************************************************/  #include "g_local.h" -#include "botlib.h" -#include "be_aas.h" -#include "be_ea.h" -#include "be_ai_char.h" -#include "be_ai_chat.h" -#include "be_ai_gen.h" -#include "be_ai_goal.h" -#include "be_ai_move.h" -#include "be_ai_weap.h" +#include "../botlib/botlib.h" +#include "../botlib/be_aas.h" +#include "../botlib/be_ea.h" +#include "../botlib/be_ai_char.h" +#include "../botlib/be_ai_chat.h" +#include "../botlib/be_ai_gen.h" +#include "../botlib/be_ai_goal.h" +#include "../botlib/be_ai_move.h" +#include "../botlib/be_ai_weap.h"  //  #include "ai_main.h"  #include "ai_dmq3.h" diff --git a/code/game/be_aas.h b/code/game/be_aas.h deleted file mode 100644 index 4a98a8e..0000000 --- a/code/game/be_aas.h +++ /dev/null @@ -1,221 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// - -/***************************************************************************** - * name:		be_aas.h - * - * desc:		Area Awareness System, stuff exported to the AI - * - * $Archive: /source/code/botlib/be_aas.h $ - * - *****************************************************************************/ - -#ifndef MAX_STRINGFIELD -#define MAX_STRINGFIELD				80 -#endif - -//travel flags -#define TFL_INVALID				0x00000001	//traveling temporary not possible -#define TFL_WALK				0x00000002	//walking -#define TFL_CROUCH				0x00000004	//crouching -#define TFL_BARRIERJUMP			0x00000008	//jumping onto a barrier -#define TFL_JUMP				0x00000010	//jumping -#define TFL_LADDER				0x00000020	//climbing a ladder -#define TFL_WALKOFFLEDGE		0x00000080	//walking of a ledge -#define TFL_SWIM				0x00000100	//swimming -#define TFL_WATERJUMP			0x00000200	//jumping out of the water -#define TFL_TELEPORT			0x00000400	//teleporting -#define TFL_ELEVATOR			0x00000800	//elevator -#define TFL_ROCKETJUMP			0x00001000	//rocket jumping -#define TFL_BFGJUMP				0x00002000	//bfg jumping -#define TFL_GRAPPLEHOOK			0x00004000	//grappling hook -#define TFL_DOUBLEJUMP			0x00008000	//double jump -#define TFL_RAMPJUMP			0x00010000	//ramp jump -#define TFL_STRAFEJUMP			0x00020000	//strafe jump -#define TFL_JUMPPAD				0x00040000	//jump pad -#define TFL_AIR					0x00080000	//travel through air -#define TFL_WATER				0x00100000	//travel through water -#define TFL_SLIME				0x00200000	//travel through slime -#define TFL_LAVA				0x00400000	//travel through lava -#define TFL_DONOTENTER			0x00800000	//travel through donotenter area -#define TFL_FUNCBOB				0x01000000	//func bobbing -#define TFL_FLIGHT				0x02000000	//flight -#define TFL_BRIDGE				0x04000000	//move over a bridge -// -#define TFL_NOTTEAM1			0x08000000	//not team 1 -#define TFL_NOTTEAM2			0x10000000	//not team 2 - -//default travel flags -#define TFL_DEFAULT	TFL_WALK|TFL_CROUCH|TFL_BARRIERJUMP|\ -	TFL_JUMP|TFL_LADDER|\ -	TFL_WALKOFFLEDGE|TFL_SWIM|TFL_WATERJUMP|\ -	TFL_TELEPORT|TFL_ELEVATOR|\ -	TFL_AIR|TFL_WATER|TFL_JUMPPAD|TFL_FUNCBOB - -typedef enum -{ -	SOLID_NOT,			// no interaction with other objects -	SOLID_TRIGGER,		// only touch when inside, after moving -	SOLID_BBOX,			// touch on edge -	SOLID_BSP			// bsp clip, touch on edge -} solid_t; - -//a trace is returned when a box is swept through the AAS world -typedef struct aas_trace_s -{ -	qboolean	startsolid;	// if true, the initial point was in a solid area -	float		fraction;	// time completed, 1.0 = didn't hit anything -	vec3_t		endpos;		// final position -	int			ent;		// entity blocking the trace -	int			lastarea;	// last area the trace was in (zero if none) -	int			area;		// area blocking the trace (zero if none) -	int			planenum;	// number of the plane that was hit -} aas_trace_t; - -/* Defined in botlib.h - -//bsp_trace_t hit surface -typedef struct bsp_surface_s -{ -	char name[16]; -	int flags; -	int value; -} bsp_surface_t; - -//a trace is returned when a box is swept through the BSP world -typedef struct bsp_trace_s -{ -	qboolean		allsolid;	// if true, plane is not valid -	qboolean		startsolid;	// if true, the initial point was in a solid area -	float			fraction;	// time completed, 1.0 = didn't hit anything -	vec3_t			endpos;		// final position -	cplane_t		plane;		// surface normal at impact -	float			exp_dist;	// expanded plane distance -	int				sidenum;	// number of the brush side hit -	bsp_surface_t	surface;	// hit surface -	int				contents;	// contents on other side of surface hit -	int				ent;		// number of entity hit -} bsp_trace_t; -// -*/ - -//entity info -typedef struct aas_entityinfo_s -{ -	int		valid;			// true if updated this frame -	int		type;			// entity type -	int		flags;			// entity flags -	float	ltime;			// local time -	float	update_time;	// time between last and current update -	int		number;			// number of the entity -	vec3_t	origin;			// origin of the entity -	vec3_t	angles;			// angles of the model -	vec3_t	old_origin;		// for lerping -	vec3_t	lastvisorigin;	// last visible origin -	vec3_t	mins;			// bounding box minimums -	vec3_t	maxs;			// bounding box maximums -	int		groundent;		// ground entity -	int		solid;			// solid type -	int		modelindex;		// model used -	int		modelindex2;	// weapons, CTF flags, etc -	int		frame;			// model frame number -	int		event;			// impulse events -- muzzle flashes, footsteps, etc -	int		eventParm;		// even parameter -	int		powerups;		// bit flags -	int		weapon;			// determines weapon and flash model, etc -	int		legsAnim;		// mask off ANIM_TOGGLEBIT -	int		torsoAnim;		// mask off ANIM_TOGGLEBIT -} aas_entityinfo_t; - -// area info -typedef struct aas_areainfo_s -{ -	int contents; -	int flags; -	int presencetype; -	int cluster; -	vec3_t mins; -	vec3_t maxs; -	vec3_t center; -} aas_areainfo_t; - -// client movement prediction stop events, stop as soon as: -#define SE_NONE					0 -#define SE_HITGROUND			1		// the ground is hit -#define SE_LEAVEGROUND			2		// there's no ground -#define SE_ENTERWATER			4		// water is entered -#define SE_ENTERSLIME			8		// slime is entered -#define SE_ENTERLAVA			16		// lava is entered -#define SE_HITGROUNDDAMAGE		32		// the ground is hit with damage -#define SE_GAP					64		// there's a gap -#define SE_TOUCHJUMPPAD			128		// touching a jump pad area -#define SE_TOUCHTELEPORTER		256		// touching teleporter -#define SE_ENTERAREA			512		// the given stoparea is entered -#define SE_HITGROUNDAREA		1024	// a ground face in the area is hit -#define SE_HITBOUNDINGBOX		2048	// hit the specified bounding box -#define SE_TOUCHCLUSTERPORTAL	4096	// touching a cluster portal - -typedef struct aas_clientmove_s -{ -	vec3_t endpos;			//position at the end of movement prediction -	int endarea;			//area at end of movement prediction -	vec3_t velocity;		//velocity at the end of movement prediction -	aas_trace_t trace;		//last trace -	int presencetype;		//presence type at end of movement prediction -	int stopevent;			//event that made the prediction stop -	int endcontents;		//contents at the end of movement prediction -	float time;				//time predicted ahead -	int frames;				//number of frames predicted ahead -} aas_clientmove_t; - -// alternate route goals -#define ALTROUTEGOAL_ALL				1 -#define ALTROUTEGOAL_CLUSTERPORTALS		2 -#define ALTROUTEGOAL_VIEWPORTALS		4 - -typedef struct aas_altroutegoal_s -{ -	vec3_t origin; -	int areanum; -	unsigned short starttraveltime; -	unsigned short goaltraveltime; -	unsigned short extratraveltime; -} aas_altroutegoal_t; - -// route prediction stop events -#define RSE_NONE				0 -#define RSE_NOROUTE				1	//no route to goal -#define RSE_USETRAVELTYPE		2	//stop as soon as on of the given travel types is used -#define RSE_ENTERCONTENTS		4	//stop when entering the given contents -#define RSE_ENTERAREA			8	//stop when entering the given area - -typedef struct aas_predictroute_s -{ -	vec3_t endpos;			//position at the end of movement prediction -	int endarea;			//area at end of movement prediction -	int stopevent;			//event that made the prediction stop -	int endcontents;		//contents at the end of movement prediction -	int endtravelflags;		//end travel flags -	int numareas;			//number of areas predicted ahead -	int time;				//time predicted ahead (in hundreth of a sec) -} aas_predictroute_t; diff --git a/code/game/be_ai_char.h b/code/game/be_ai_char.h deleted file mode 100644 index 573fa1d..0000000 --- a/code/game/be_ai_char.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// - -/***************************************************************************** - * name:		be_ai_char.h - * - * desc:		bot characters - * - * $Archive: /source/code/botlib/be_ai_char.h $ - * - *****************************************************************************/ - -//loads a bot character from a file -int BotLoadCharacter(char *charfile, float skill); -//frees a bot character -void BotFreeCharacter(int character); -//returns a float characteristic -float Characteristic_Float(int character, int index); -//returns a bounded float characteristic -float Characteristic_BFloat(int character, int index, float min, float max); -//returns an integer characteristic -int Characteristic_Integer(int character, int index); -//returns a bounded integer characteristic -int Characteristic_BInteger(int character, int index, int min, int max); -//returns a string characteristic -void Characteristic_String(int character, int index, char *buf, int size); -//free cached bot characters -void BotShutdownCharacters(void); diff --git a/code/game/be_ai_chat.h b/code/game/be_ai_chat.h deleted file mode 100644 index 67a38ed..0000000 --- a/code/game/be_ai_chat.h +++ /dev/null @@ -1,113 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// -/***************************************************************************** - * name:		be_ai_chat.h - * - * desc:		char AI - * - * $Archive: /source/code/botlib/be_ai_chat.h $ - * - *****************************************************************************/ - -#define MAX_MESSAGE_SIZE		256 -#define MAX_CHATTYPE_NAME		32 -#define MAX_MATCHVARIABLES		8 - -#define CHAT_GENDERLESS			0 -#define CHAT_GENDERFEMALE		1 -#define CHAT_GENDERMALE			2 - -#define CHAT_ALL					0 -#define CHAT_TEAM					1 -#define CHAT_TELL					2 - -//a console message -typedef struct bot_consolemessage_s -{ -	int handle; -	float time;									//message time -	int type;									//message type -	char message[MAX_MESSAGE_SIZE];				//message -	struct bot_consolemessage_s *prev, *next;	//prev and next in list -} bot_consolemessage_t; - -//match variable -typedef struct bot_matchvariable_s -{ -	char offset; -	int length; -} bot_matchvariable_t; -//returned to AI when a match is found -typedef struct bot_match_s -{ -	char string[MAX_MESSAGE_SIZE]; -	int type; -	int subtype; -	bot_matchvariable_t variables[MAX_MATCHVARIABLES]; -} bot_match_t; - -//setup the chat AI -int BotSetupChatAI(void); -//shutdown the chat AI -void BotShutdownChatAI(void); -//returns the handle to a newly allocated chat state -int BotAllocChatState(void); -//frees the chatstate -void BotFreeChatState(int handle); -//adds a console message to the chat state -void BotQueueConsoleMessage(int chatstate, int type, char *message); -//removes the console message from the chat state -void BotRemoveConsoleMessage(int chatstate, int handle); -//returns the next console message from the state -int BotNextConsoleMessage(int chatstate, bot_consolemessage_t *cm); -//returns the number of console messages currently stored in the state -int BotNumConsoleMessages(int chatstate); -//selects a chat message of the given type -void BotInitialChat(int chatstate, char *type, int mcontext, char *var0, char *var1, char *var2, char *var3, char *var4, char *var5, char *var6, char *var7); -//returns the number of initial chat messages of the given type -int BotNumInitialChats(int chatstate, char *type); -//find and select a reply for the given message -int BotReplyChat(int chatstate, char *message, int mcontext, int vcontext, char *var0, char *var1, char *var2, char *var3, char *var4, char *var5, char *var6, char *var7); -//returns the length of the currently selected chat message -int BotChatLength(int chatstate); -//enters the selected chat message -void BotEnterChat(int chatstate, int clientto, int sendto); -//get the chat message ready to be output -void BotGetChatMessage(int chatstate, char *buf, int size); -//checks if the first string contains the second one, returns index into first string or -1 if not found -int StringContains(char *str1, char *str2, int casesensitive); -//finds a match for the given string using the match templates -int BotFindMatch(char *str, bot_match_t *match, unsigned long int context); -//returns a variable from a match -void BotMatchVariable(bot_match_t *match, int variable, char *buf, int size); -//unify all the white spaces in the string -void UnifyWhiteSpaces(char *string); -//replace all the context related synonyms in the string -void BotReplaceSynonyms(char *string, unsigned long int context); -//loads a chat file for the chat state -int BotLoadChatFile(int chatstate, char *chatfile, char *chatname); -//store the gender of the bot in the chat state -void BotSetChatGender(int chatstate, int gender); -//store the bot name in the chat state -void BotSetChatName(int chatstate, char *name, int client); - diff --git a/code/game/be_ai_gen.h b/code/game/be_ai_gen.h deleted file mode 100644 index 2a4b53d..0000000 --- a/code/game/be_ai_gen.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// - -/***************************************************************************** - * name:		be_ai_gen.h - * - * desc:		genetic selection - * - * $Archive: /source/code/botlib/be_ai_gen.h $ - * - *****************************************************************************/ - -int GeneticParentsAndChildSelection(int numranks, float *ranks, int *parent1, int *parent2, int *child); diff --git a/code/game/be_ai_goal.h b/code/game/be_ai_goal.h deleted file mode 100644 index 354609d..0000000 --- a/code/game/be_ai_goal.h +++ /dev/null @@ -1,118 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// -/***************************************************************************** - * name:		be_ai_goal.h - * - * desc:		goal AI - * - * $Archive: /source/code/botlib/be_ai_goal.h $ - * - *****************************************************************************/ - -#define MAX_AVOIDGOALS			256 -#define MAX_GOALSTACK			8 - -#define GFL_NONE				0 -#define GFL_ITEM				1 -#define GFL_ROAM				2 -#define GFL_DROPPED				4 - -//a bot goal -typedef struct bot_goal_s -{ -	vec3_t origin;				//origin of the goal -	int areanum;				//area number of the goal -	vec3_t mins, maxs;			//mins and maxs of the goal -	int entitynum;				//number of the goal entity -	int number;					//goal number -	int flags;					//goal flags -	int iteminfo;				//item information -} bot_goal_t; - -//reset the whole goal state, but keep the item weights -void BotResetGoalState(int goalstate); -//reset avoid goals -void BotResetAvoidGoals(int goalstate); -//remove the goal with the given number from the avoid goals -void BotRemoveFromAvoidGoals(int goalstate, int number); -//push a goal onto the goal stack -void BotPushGoal(int goalstate, bot_goal_t *goal); -//pop a goal from the goal stack -void BotPopGoal(int goalstate); -//empty the bot's goal stack -void BotEmptyGoalStack(int goalstate); -//dump the avoid goals -void BotDumpAvoidGoals(int goalstate); -//dump the goal stack -void BotDumpGoalStack(int goalstate); -//get the name name of the goal with the given number -void BotGoalName(int number, char *name, int size); -//get the top goal from the stack -int BotGetTopGoal(int goalstate, bot_goal_t *goal); -//get the second goal on the stack -int BotGetSecondGoal(int goalstate, bot_goal_t *goal); -//choose the best long term goal item for the bot -int BotChooseLTGItem(int goalstate, vec3_t origin, int *inventory, int travelflags); -//choose the best nearby goal item for the bot -//the item may not be further away from the current bot position than maxtime -//also the travel time from the nearby goal towards the long term goal may not -//be larger than the travel time towards the long term goal from the current bot position -int BotChooseNBGItem(int goalstate, vec3_t origin, int *inventory, int travelflags, -							bot_goal_t *ltg, float maxtime); -//returns true if the bot touches the goal -int BotTouchingGoal(vec3_t origin, bot_goal_t *goal); -//returns true if the goal should be visible but isn't -int BotItemGoalInVisButNotVisible(int viewer, vec3_t eye, vec3_t viewangles, bot_goal_t *goal); -//search for a goal for the given classname, the index can be used -//as a start point for the search when multiple goals are available with that same classname -int BotGetLevelItemGoal(int index, char *classname, bot_goal_t *goal); -//get the next camp spot in the map -int BotGetNextCampSpotGoal(int num, bot_goal_t *goal); -//get the map location with the given name -int BotGetMapLocationGoal(char *name, bot_goal_t *goal); -//returns the avoid goal time -float BotAvoidGoalTime(int goalstate, int number); -//set the avoid goal time -void BotSetAvoidGoalTime(int goalstate, int number, float avoidtime); -//initializes the items in the level -void BotInitLevelItems(void); -//regularly update dynamic entity items (dropped weapons, flags etc.) -void BotUpdateEntityItems(void); -//interbreed the goal fuzzy logic -void BotInterbreedGoalFuzzyLogic(int parent1, int parent2, int child); -//save the goal fuzzy logic to disk -void BotSaveGoalFuzzyLogic(int goalstate, char *filename); -//mutate the goal fuzzy logic -void BotMutateGoalFuzzyLogic(int goalstate, float range); -//loads item weights for the bot -int BotLoadItemWeights(int goalstate, char *filename); -//frees the item weights of the bot -void BotFreeItemWeights(int goalstate); -//returns the handle of a newly allocated goal state -int BotAllocGoalState(int client); -//free the given goal state -void BotFreeGoalState(int handle); -//setup the goal AI -int BotSetupGoalAI(void); -//shut down the goal AI -void BotShutdownGoalAI(void); diff --git a/code/game/be_ai_move.h b/code/game/be_ai_move.h deleted file mode 100644 index 0aed6d7..0000000 --- a/code/game/be_ai_move.h +++ /dev/null @@ -1,144 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// - -/***************************************************************************** - * name:		be_ai_move.h - * - * desc:		movement AI - * - * $Archive: /source/code/botlib/be_ai_move.h $ - * - *****************************************************************************/ - -//movement types -#define MOVE_WALK						1 -#define MOVE_CROUCH						2 -#define MOVE_JUMP						4 -#define MOVE_GRAPPLE					8 -#define MOVE_ROCKETJUMP					16 -#define MOVE_BFGJUMP					32 -//move flags -#define MFL_BARRIERJUMP					1		//bot is performing a barrier jump -#define MFL_ONGROUND					2		//bot is in the ground -#define MFL_SWIMMING					4		//bot is swimming -#define MFL_AGAINSTLADDER				8		//bot is against a ladder -#define MFL_WATERJUMP					16		//bot is waterjumping -#define MFL_TELEPORTED					32		//bot is being teleported -#define MFL_GRAPPLEPULL					64		//bot is being pulled by the grapple -#define MFL_ACTIVEGRAPPLE				128		//bot is using the grapple hook -#define MFL_GRAPPLERESET				256		//bot has reset the grapple -#define MFL_WALK						512		//bot should walk slowly -// move result flags -#define MOVERESULT_MOVEMENTVIEW			1		//bot uses view for movement -#define MOVERESULT_SWIMVIEW				2		//bot uses view for swimming -#define MOVERESULT_WAITING				4		//bot is waiting for something -#define MOVERESULT_MOVEMENTVIEWSET		8		//bot has set the view in movement code -#define MOVERESULT_MOVEMENTWEAPON		16		//bot uses weapon for movement -#define MOVERESULT_ONTOPOFOBSTACLE		32		//bot is ontop of obstacle -#define MOVERESULT_ONTOPOF_FUNCBOB		64		//bot is ontop of a func_bobbing -#define MOVERESULT_ONTOPOF_ELEVATOR		128		//bot is ontop of an elevator (func_plat) -#define MOVERESULT_BLOCKEDBYAVOIDSPOT	256		//bot is blocked by an avoid spot -// -#define MAX_AVOIDREACH					1 -#define MAX_AVOIDSPOTS					32 -// avoid spot types -#define AVOID_CLEAR						0		//clear all avoid spots -#define AVOID_ALWAYS					1		//avoid always -#define AVOID_DONTBLOCK					2		//never totally block -// restult types -#define RESULTTYPE_ELEVATORUP			1		//elevator is up -#define RESULTTYPE_WAITFORFUNCBOBBING	2		//waiting for func bobbing to arrive -#define RESULTTYPE_BADGRAPPLEPATH		4		//grapple path is obstructed -#define RESULTTYPE_INSOLIDAREA			8		//stuck in solid area, this is bad - -//structure used to initialize the movement state -//the or_moveflags MFL_ONGROUND, MFL_TELEPORTED and MFL_WATERJUMP come from the playerstate -typedef struct bot_initmove_s -{ -	vec3_t origin;				//origin of the bot -	vec3_t velocity;			//velocity of the bot -	vec3_t viewoffset;			//view offset -	int entitynum;				//entity number of the bot -	int client;					//client number of the bot -	float thinktime;			//time the bot thinks -	int presencetype;			//presencetype of the bot -	vec3_t viewangles;			//view angles of the bot -	int or_moveflags;			//values ored to the movement flags -} bot_initmove_t; - -//NOTE: the ideal_viewangles are only valid if MFL_MOVEMENTVIEW is set -typedef struct bot_moveresult_s -{ -	int failure;				//true if movement failed all together -	int type;					//failure or blocked type -	int blocked;				//true if blocked by an entity -	int blockentity;			//entity blocking the bot -	int traveltype;				//last executed travel type -	int flags;					//result flags -	int weapon;					//weapon used for movement -	vec3_t movedir;				//movement direction -	vec3_t ideal_viewangles;	//ideal viewangles for the movement -} bot_moveresult_t; - -#define bot_moveresult_t_cleared(x) bot_moveresult_t (x) = {0, 0, 0, 0, 0, 0, 0, {0, 0, 0}, {0, 0, 0}} - -// bk001204: from code/botlib/be_ai_move.c -// TTimo 04/12/2001 was moved here to avoid dup defines -typedef struct bot_avoidspot_s -{ -	vec3_t origin; -	float radius; -	int type; -} bot_avoidspot_t; - -//resets the whole move state -void BotResetMoveState(int movestate); -//moves the bot to the given goal -void BotMoveToGoal(bot_moveresult_t *result, int movestate, bot_goal_t *goal, int travelflags); -//moves the bot in the specified direction using the specified type of movement -int BotMoveInDirection(int movestate, vec3_t dir, float speed, int type); -//reset avoid reachability -void BotResetAvoidReach(int movestate); -//resets the last avoid reachability -void BotResetLastAvoidReach(int movestate); -//returns a reachability area if the origin is in one -int BotReachabilityArea(vec3_t origin, int client); -//view target based on movement -int BotMovementViewTarget(int movestate, bot_goal_t *goal, int travelflags, float lookahead, vec3_t target); -//predict the position of a player based on movement towards a goal -int BotPredictVisiblePosition(vec3_t origin, int areanum, bot_goal_t *goal, int travelflags, vec3_t target); -//returns the handle of a newly allocated movestate -int BotAllocMoveState(void); -//frees the movestate with the given handle -void BotFreeMoveState(int handle); -//initialize movement state before performing any movement -void BotInitMoveState(int handle, bot_initmove_t *initmove); -//add a spot to avoid (if type == AVOID_CLEAR all spots are removed) -void BotAddAvoidSpot(int movestate, vec3_t origin, float radius, int type); -//must be called every map change -void BotSetBrushModelTypes(void); -//setup movement AI -int BotSetupMoveAI(void); -//shutdown movement AI -void BotShutdownMoveAI(void); - diff --git a/code/game/be_ai_weap.h b/code/game/be_ai_weap.h deleted file mode 100644 index b78ad68..0000000 --- a/code/game/be_ai_weap.h +++ /dev/null @@ -1,104 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// - -/***************************************************************************** - * name:		be_ai_weap.h - * - * desc:		weapon AI - * - * $Archive: /source/code/botlib/be_ai_weap.h $ - * - *****************************************************************************/ - -//projectile flags -#define PFL_WINDOWDAMAGE			1		//projectile damages through window -#define PFL_RETURN					2		//set when projectile returns to owner -//weapon flags -#define WFL_FIRERELEASED			1		//set when projectile is fired with key-up event -//damage types -#define DAMAGETYPE_IMPACT			1		//damage on impact -#define DAMAGETYPE_RADIAL			2		//radial damage -#define DAMAGETYPE_VISIBLE			4		//damage to all entities visible to the projectile - -typedef struct projectileinfo_s -{ -	char name[MAX_STRINGFIELD]; -	char model[MAX_STRINGFIELD]; -	int flags; -	float gravity; -	int damage; -	float radius; -	int visdamage; -	int damagetype; -	int healthinc; -	float push; -	float detonation; -	float bounce; -	float bouncefric; -	float bouncestop; -} projectileinfo_t; - -typedef struct weaponinfo_s -{ -	int valid;					//true if the weapon info is valid -	int number;									//number of the weapon -	char name[MAX_STRINGFIELD]; -	char model[MAX_STRINGFIELD]; -	int level; -	int weaponindex; -	int flags; -	char projectile[MAX_STRINGFIELD]; -	int numprojectiles; -	float hspread; -	float vspread; -	float speed; -	float acceleration; -	vec3_t recoil; -	vec3_t offset; -	vec3_t angleoffset; -	float extrazvelocity; -	int ammoamount; -	int ammoindex; -	float activate; -	float reload; -	float spinup; -	float spindown; -	projectileinfo_t proj;						//pointer to the used projectile -} weaponinfo_t; - -//setup the weapon AI -int BotSetupWeaponAI(void); -//shut down the weapon AI -void BotShutdownWeaponAI(void); -//returns the best weapon to fight with -int BotChooseBestFightWeapon(int weaponstate, int *inventory); -//returns the information of the current weapon -void BotGetWeaponInfo(int weaponstate, int weapon, weaponinfo_t *weaponinfo); -//loads the weapon weights -int BotLoadWeaponWeights(int weaponstate, char *filename); -//returns a handle to a newly allocated weapon state -int BotAllocWeaponState(void); -//frees the weapon state -void BotFreeWeaponState(int weaponstate); -//resets the whole weapon state -void BotResetWeaponState(int weaponstate); diff --git a/code/game/be_ea.h b/code/game/be_ea.h deleted file mode 100644 index 1bc436b..0000000 --- a/code/game/be_ea.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// - -/***************************************************************************** - * name:		be_ea.h - * - * desc:		elementary actions - * - * $Archive: /source/code/botlib/be_ea.h $ - * - *****************************************************************************/ - -//ClientCommand elementary actions -void EA_Say(int client, char *str); -void EA_SayTeam(int client, char *str); -void EA_Command(int client, char *command ); - -void EA_Action(int client, int action); -void EA_Crouch(int client); -void EA_Walk(int client); -void EA_MoveUp(int client); -void EA_MoveDown(int client); -void EA_MoveForward(int client); -void EA_MoveBack(int client); -void EA_MoveLeft(int client); -void EA_MoveRight(int client); -void EA_Attack(int client); -void EA_Respawn(int client); -void EA_Talk(int client); -void EA_Gesture(int client); -void EA_Use(int client); - -//regular elementary actions -void EA_SelectWeapon(int client, int weapon); -void EA_Jump(int client); -void EA_DelayedJump(int client); -void EA_Move(int client, vec3_t dir, float speed); -void EA_View(int client, vec3_t viewangles); - -//send regular input to the server -void EA_EndRegular(int client, float thinktime); -void EA_GetInput(int client, float thinktime, bot_input_t *input); -void EA_ResetInput(int client); -//setup and shutdown routines -int EA_Setup(void); -void EA_Shutdown(void); diff --git a/code/game/bg_lib.c b/code/game/bg_lib.c index 140d18a..b198f72 100644 --- a/code/game/bg_lib.c +++ b/code/game/bg_lib.c @@ -3,7 +3,7 @@  // bg_lib,c -- standard C library replacement routines used by code  // compiled for the virtual machine -#include "q_shared.h" +#include "../qcommon/q_shared.h"  /*-   * Copyright (c) 1992, 1993 diff --git a/code/game/bg_misc.c b/code/game/bg_misc.c index 2ff7770..a2049a9 100644 --- a/code/game/bg_misc.c +++ b/code/game/bg_misc.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  //  // bg_misc.c -- both games misc functions, all completely stateless -#include "q_shared.h" +#include "../qcommon/q_shared.h"  #include "bg_public.h"  /*QUAKED item_***** ( 0 0 0 ) (-16 -16 -16) (16 16 16) suspended diff --git a/code/game/bg_pmove.c b/code/game/bg_pmove.c index f5f5c68..9fa3887 100644 --- a/code/game/bg_pmove.c +++ b/code/game/bg_pmove.c @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  // bg_pmove.c -- both games player movement code  // takes a playerstate and a usercmd as input and returns a modifed playerstate -#include "q_shared.h" +#include "../qcommon/q_shared.h"  #include "bg_public.h"  #include "bg_local.h" diff --git a/code/game/bg_slidemove.c b/code/game/bg_slidemove.c index 6c957a5..183d6e5 100644 --- a/code/game/bg_slidemove.c +++ b/code/game/bg_slidemove.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  //  // bg_slidemove.c -- part of bg_pmove functionality -#include "q_shared.h" +#include "../qcommon/q_shared.h"  #include "bg_public.h"  #include "bg_local.h" diff --git a/code/game/botlib.h b/code/game/botlib.h deleted file mode 100644 index 687affe..0000000 --- a/code/game/botlib.h +++ /dev/null @@ -1,516 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// -/***************************************************************************** - * name:		botlib.h - * - * desc:		bot AI library - * - * $Archive: /source/code/game/botai.h $ - * - *****************************************************************************/ - -#define	BOTLIB_API_VERSION		2 - -struct aas_clientmove_s; -struct aas_entityinfo_s; -struct aas_areainfo_s; -struct aas_altroutegoal_s; -struct aas_predictroute_s; -struct bot_consolemessage_s; -struct bot_match_s; -struct bot_goal_s; -struct bot_moveresult_s; -struct bot_initmove_s; -struct weaponinfo_s; - -#define BOTFILESBASEFOLDER		"botfiles" -//debug line colors -#define LINECOLOR_NONE			-1 -#define LINECOLOR_RED			1//0xf2f2f0f0L -#define LINECOLOR_GREEN			2//0xd0d1d2d3L -#define LINECOLOR_BLUE			3//0xf3f3f1f1L -#define LINECOLOR_YELLOW		4//0xdcdddedfL -#define LINECOLOR_ORANGE		5//0xe0e1e2e3L - -//Print types -#define PRT_MESSAGE				1 -#define PRT_WARNING				2 -#define PRT_ERROR				3 -#define PRT_FATAL				4 -#define PRT_EXIT				5 - -//console message types -#define CMS_NORMAL				0 -#define CMS_CHAT				1 - -//botlib error codes -#define BLERR_NOERROR					0	//no error -#define BLERR_LIBRARYNOTSETUP			1	//library not setup -#define BLERR_INVALIDENTITYNUMBER		2	//invalid entity number -#define BLERR_NOAASFILE					3	//no AAS file available -#define BLERR_CANNOTOPENAASFILE			4	//cannot open AAS file -#define BLERR_WRONGAASFILEID			5	//incorrect AAS file id -#define BLERR_WRONGAASFILEVERSION		6	//incorrect AAS file version -#define BLERR_CANNOTREADAASLUMP			7	//cannot read AAS file lump -#define BLERR_CANNOTLOADICHAT			8	//cannot load initial chats -#define BLERR_CANNOTLOADITEMWEIGHTS		9	//cannot load item weights -#define BLERR_CANNOTLOADITEMCONFIG		10	//cannot load item config -#define BLERR_CANNOTLOADWEAPONWEIGHTS	11	//cannot load weapon weights -#define BLERR_CANNOTLOADWEAPONCONFIG	12	//cannot load weapon config - -//action flags -#define ACTION_ATTACK			0x0000001 -#define ACTION_USE				0x0000002 -#define ACTION_RESPAWN			0x0000008 -#define ACTION_JUMP				0x0000010 -#define ACTION_MOVEUP			0x0000020 -#define ACTION_CROUCH			0x0000080 -#define ACTION_MOVEDOWN			0x0000100 -#define ACTION_MOVEFORWARD		0x0000200 -#define ACTION_MOVEBACK			0x0000800 -#define ACTION_MOVELEFT			0x0001000 -#define ACTION_MOVERIGHT		0x0002000 -#define ACTION_DELAYEDJUMP		0x0008000 -#define ACTION_TALK				0x0010000 -#define ACTION_GESTURE			0x0020000 -#define ACTION_WALK				0x0080000 -#define ACTION_AFFIRMATIVE		0x0100000 -#define ACTION_NEGATIVE			0x0200000 -#define ACTION_GETFLAG			0x0800000 -#define ACTION_GUARDBASE		0x1000000 -#define ACTION_PATROL			0x2000000 -#define ACTION_FOLLOWME			0x8000000 - -//the bot input, will be converted to an usercmd_t -typedef struct bot_input_s -{ -	float thinktime;		//time since last output (in seconds) -	vec3_t dir;				//movement direction -	float speed;			//speed in the range [0, 400] -	vec3_t viewangles;		//the view angles -	int actionflags;		//one of the ACTION_? flags -	int weapon;				//weapon to use -} bot_input_t; - -#ifndef BSPTRACE - -#define BSPTRACE - -//bsp_trace_t hit surface -typedef struct bsp_surface_s -{ -	char name[16]; -	int flags; -	int value; -} bsp_surface_t; - -//remove the bsp_trace_s structure definition l8r on -//a trace is returned when a box is swept through the world -typedef struct bsp_trace_s -{ -	qboolean		allsolid;	// if true, plane is not valid -	qboolean		startsolid;	// if true, the initial point was in a solid area -	float			fraction;	// time completed, 1.0 = didn't hit anything -	vec3_t			endpos;		// final position -	cplane_t		plane;		// surface normal at impact -	float			exp_dist;	// expanded plane distance -	int				sidenum;	// number of the brush side hit -	bsp_surface_t	surface;	// the hit point surface -	int				contents;	// contents on other side of surface hit -	int				ent;		// number of entity hit -} bsp_trace_t; - -#endif	// BSPTRACE - -//entity state -typedef struct bot_entitystate_s -{ -	int		type;			// entity type -	int		flags;			// entity flags -	vec3_t	origin;			// origin of the entity -	vec3_t	angles;			// angles of the model -	vec3_t	old_origin;		// for lerping -	vec3_t	mins;			// bounding box minimums -	vec3_t	maxs;			// bounding box maximums -	int		groundent;		// ground entity -	int		solid;			// solid type -	int		modelindex;		// model used -	int		modelindex2;	// weapons, CTF flags, etc -	int		frame;			// model frame number -	int		event;			// impulse events -- muzzle flashes, footsteps, etc -	int		eventParm;		// even parameter -	int		powerups;		// bit flags -	int		weapon;			// determines weapon and flash model, etc -	int		legsAnim;		// mask off ANIM_TOGGLEBIT -	int		torsoAnim;		// mask off ANIM_TOGGLEBIT -} bot_entitystate_t; - -//bot AI library exported functions -typedef struct botlib_import_s -{ -	//print messages from the bot library -	void		(QDECL *Print)(int type, char *fmt, ...); -	//trace a bbox through the world -	void		(*Trace)(bsp_trace_t *trace, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int passent, int contentmask); -	//trace a bbox against a specific entity -	void		(*EntityTrace)(bsp_trace_t *trace, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int entnum, int contentmask); -	//retrieve the contents at the given point -	int			(*PointContents)(vec3_t point); -	//check if the point is in potential visible sight -	int			(*inPVS)(vec3_t p1, vec3_t p2); -	//retrieve the BSP entity data lump -	char		*(*BSPEntityData)(void); -	// -	void		(*BSPModelMinsMaxsOrigin)(int modelnum, vec3_t angles, vec3_t mins, vec3_t maxs, vec3_t origin); -	//send a bot client command -	void		(*BotClientCommand)(int client, char *command); -	//memory allocation -	void		*(*GetMemory)(int size);		// allocate from Zone -	void		(*FreeMemory)(void *ptr);		// free memory from Zone -	int			(*AvailableMemory)(void);		// available Zone memory -	void		*(*HunkAlloc)(int size);		// allocate from hunk -	//file system access -	int			(*FS_FOpenFile)( const char *qpath, fileHandle_t *file, fsMode_t mode ); -	int			(*FS_Read)( void *buffer, int len, fileHandle_t f ); -	int			(*FS_Write)( const void *buffer, int len, fileHandle_t f ); -	void		(*FS_FCloseFile)( fileHandle_t f ); -	int			(*FS_Seek)( fileHandle_t f, long offset, int origin ); -	//debug visualisation stuff -	int			(*DebugLineCreate)(void); -	void		(*DebugLineDelete)(int line); -	void		(*DebugLineShow)(int line, vec3_t start, vec3_t end, int color); -	// -	int			(*DebugPolygonCreate)(int color, int numPoints, vec3_t *points); -	void		(*DebugPolygonDelete)(int id); -} botlib_import_t; - -typedef struct aas_export_s -{ -	//----------------------------------- -	// be_aas_entity.h -	//----------------------------------- -	void		(*AAS_EntityInfo)(int entnum, struct aas_entityinfo_s *info); -	//----------------------------------- -	// be_aas_main.h -	//----------------------------------- -	int			(*AAS_Initialized)(void); -	void		(*AAS_PresenceTypeBoundingBox)(int presencetype, vec3_t mins, vec3_t maxs); -	float		(*AAS_Time)(void); -	//-------------------------------------------- -	// be_aas_sample.c -	//-------------------------------------------- -	int			(*AAS_PointAreaNum)(vec3_t point); -	int			(*AAS_PointReachabilityAreaIndex)( vec3_t point ); -	int			(*AAS_TraceAreas)(vec3_t start, vec3_t end, int *areas, vec3_t *points, int maxareas); -	int			(*AAS_BBoxAreas)(vec3_t absmins, vec3_t absmaxs, int *areas, int maxareas); -	int			(*AAS_AreaInfo)( int areanum, struct aas_areainfo_s *info ); -	//-------------------------------------------- -	// be_aas_bspq3.c -	//-------------------------------------------- -	int			(*AAS_PointContents)(vec3_t point); -	int			(*AAS_NextBSPEntity)(int ent); -	int			(*AAS_ValueForBSPEpairKey)(int ent, char *key, char *value, int size); -	int			(*AAS_VectorForBSPEpairKey)(int ent, char *key, vec3_t v); -	int			(*AAS_FloatForBSPEpairKey)(int ent, char *key, float *value); -	int			(*AAS_IntForBSPEpairKey)(int ent, char *key, int *value); -	//-------------------------------------------- -	// be_aas_reach.c -	//-------------------------------------------- -	int			(*AAS_AreaReachability)(int areanum); -	//-------------------------------------------- -	// be_aas_route.c -	//-------------------------------------------- -	int			(*AAS_AreaTravelTimeToGoalArea)(int areanum, vec3_t origin, int goalareanum, int travelflags); -	int			(*AAS_EnableRoutingArea)(int areanum, int enable); -	int			(*AAS_PredictRoute)(struct aas_predictroute_s *route, int areanum, vec3_t origin, -							int goalareanum, int travelflags, int maxareas, int maxtime, -							int stopevent, int stopcontents, int stoptfl, int stopareanum); -	//-------------------------------------------- -	// be_aas_altroute.c -	//-------------------------------------------- -	int			(*AAS_AlternativeRouteGoals)(vec3_t start, int startareanum, vec3_t goal, int goalareanum, int travelflags, -										struct aas_altroutegoal_s *altroutegoals, int maxaltroutegoals, -										int type); -	//-------------------------------------------- -	// be_aas_move.c -	//-------------------------------------------- -	int			(*AAS_Swimming)(vec3_t origin); -	int			(*AAS_PredictClientMovement)(struct aas_clientmove_s *move, -											int entnum, vec3_t origin, -											int presencetype, int onground, -											vec3_t velocity, vec3_t cmdmove, -											int cmdframes, -											int maxframes, float frametime, -											int stopevent, int stopareanum, int visualize); -} aas_export_t; - -typedef struct ea_export_s -{ -	//ClientCommand elementary actions -	void	(*EA_Command)(int client, char *command ); -	void	(*EA_Say)(int client, char *str); -	void	(*EA_SayTeam)(int client, char *str); -	// -	void	(*EA_Action)(int client, int action); -	void	(*EA_Gesture)(int client); -	void	(*EA_Talk)(int client); -	void	(*EA_Attack)(int client); -	void	(*EA_Use)(int client); -	void	(*EA_Respawn)(int client); -	void	(*EA_MoveUp)(int client); -	void	(*EA_MoveDown)(int client); -	void	(*EA_MoveForward)(int client); -	void	(*EA_MoveBack)(int client); -	void	(*EA_MoveLeft)(int client); -	void	(*EA_MoveRight)(int client); -	void	(*EA_Crouch)(int client); - -	void	(*EA_SelectWeapon)(int client, int weapon); -	void	(*EA_Jump)(int client); -	void	(*EA_DelayedJump)(int client); -	void	(*EA_Move)(int client, vec3_t dir, float speed); -	void	(*EA_View)(int client, vec3_t viewangles); -	//send regular input to the server -	void	(*EA_EndRegular)(int client, float thinktime); -	void	(*EA_GetInput)(int client, float thinktime, bot_input_t *input); -	void	(*EA_ResetInput)(int client); -} ea_export_t; - -typedef struct ai_export_s -{ -	//----------------------------------- -	// be_ai_char.h -	//----------------------------------- -	int		(*BotLoadCharacter)(char *charfile, float skill); -	void	(*BotFreeCharacter)(int character); -	float	(*Characteristic_Float)(int character, int index); -	float	(*Characteristic_BFloat)(int character, int index, float min, float max); -	int		(*Characteristic_Integer)(int character, int index); -	int		(*Characteristic_BInteger)(int character, int index, int min, int max); -	void	(*Characteristic_String)(int character, int index, char *buf, int size); -	//----------------------------------- -	// be_ai_chat.h -	//----------------------------------- -	int		(*BotAllocChatState)(void); -	void	(*BotFreeChatState)(int handle); -	void	(*BotQueueConsoleMessage)(int chatstate, int type, char *message); -	void	(*BotRemoveConsoleMessage)(int chatstate, int handle); -	int		(*BotNextConsoleMessage)(int chatstate, struct bot_consolemessage_s *cm); -	int		(*BotNumConsoleMessages)(int chatstate); -	void	(*BotInitialChat)(int chatstate, char *type, int mcontext, char *var0, char *var1, char *var2, char *var3, char *var4, char *var5, char *var6, char *var7); -	int		(*BotNumInitialChats)(int chatstate, char *type); -	int		(*BotReplyChat)(int chatstate, char *message, int mcontext, int vcontext, char *var0, char *var1, char *var2, char *var3, char *var4, char *var5, char *var6, char *var7); -	int		(*BotChatLength)(int chatstate); -	void	(*BotEnterChat)(int chatstate, int client, int sendto); -	void	(*BotGetChatMessage)(int chatstate, char *buf, int size); -	int		(*StringContains)(char *str1, char *str2, int casesensitive); -	int		(*BotFindMatch)(char *str, struct bot_match_s *match, unsigned long int context); -	void	(*BotMatchVariable)(struct bot_match_s *match, int variable, char *buf, int size); -	void	(*UnifyWhiteSpaces)(char *string); -	void	(*BotReplaceSynonyms)(char *string, unsigned long int context); -	int		(*BotLoadChatFile)(int chatstate, char *chatfile, char *chatname); -	void	(*BotSetChatGender)(int chatstate, int gender); -	void	(*BotSetChatName)(int chatstate, char *name, int client); -	//----------------------------------- -	// be_ai_goal.h -	//----------------------------------- -	void	(*BotResetGoalState)(int goalstate); -	void	(*BotResetAvoidGoals)(int goalstate); -	void	(*BotRemoveFromAvoidGoals)(int goalstate, int number); -	void	(*BotPushGoal)(int goalstate, struct bot_goal_s *goal); -	void	(*BotPopGoal)(int goalstate); -	void	(*BotEmptyGoalStack)(int goalstate); -	void	(*BotDumpAvoidGoals)(int goalstate); -	void	(*BotDumpGoalStack)(int goalstate); -	void	(*BotGoalName)(int number, char *name, int size); -	int		(*BotGetTopGoal)(int goalstate, struct bot_goal_s *goal); -	int		(*BotGetSecondGoal)(int goalstate, struct bot_goal_s *goal); -	int		(*BotChooseLTGItem)(int goalstate, vec3_t origin, int *inventory, int travelflags); -	int		(*BotChooseNBGItem)(int goalstate, vec3_t origin, int *inventory, int travelflags, -								struct bot_goal_s *ltg, float maxtime); -	int		(*BotTouchingGoal)(vec3_t origin, struct bot_goal_s *goal); -	int		(*BotItemGoalInVisButNotVisible)(int viewer, vec3_t eye, vec3_t viewangles, struct bot_goal_s *goal); -	int		(*BotGetLevelItemGoal)(int index, char *classname, struct bot_goal_s *goal); -	int		(*BotGetNextCampSpotGoal)(int num, struct bot_goal_s *goal); -	int		(*BotGetMapLocationGoal)(char *name, struct bot_goal_s *goal); -	float	(*BotAvoidGoalTime)(int goalstate, int number); -	void	(*BotSetAvoidGoalTime)(int goalstate, int number, float avoidtime); -	void	(*BotInitLevelItems)(void); -	void	(*BotUpdateEntityItems)(void); -	int		(*BotLoadItemWeights)(int goalstate, char *filename); -	void	(*BotFreeItemWeights)(int goalstate); -	void	(*BotInterbreedGoalFuzzyLogic)(int parent1, int parent2, int child); -	void	(*BotSaveGoalFuzzyLogic)(int goalstate, char *filename); -	void	(*BotMutateGoalFuzzyLogic)(int goalstate, float range); -	int		(*BotAllocGoalState)(int client); -	void	(*BotFreeGoalState)(int handle); -	//----------------------------------- -	// be_ai_move.h -	//----------------------------------- -	void	(*BotResetMoveState)(int movestate); -	void	(*BotMoveToGoal)(struct bot_moveresult_s *result, int movestate, struct bot_goal_s *goal, int travelflags); -	int		(*BotMoveInDirection)(int movestate, vec3_t dir, float speed, int type); -	void	(*BotResetAvoidReach)(int movestate); -	void	(*BotResetLastAvoidReach)(int movestate); -	int		(*BotReachabilityArea)(vec3_t origin, int testground); -	int		(*BotMovementViewTarget)(int movestate, struct bot_goal_s *goal, int travelflags, float lookahead, vec3_t target); -	int		(*BotPredictVisiblePosition)(vec3_t origin, int areanum, struct bot_goal_s *goal, int travelflags, vec3_t target); -	int		(*BotAllocMoveState)(void); -	void	(*BotFreeMoveState)(int handle); -	void	(*BotInitMoveState)(int handle, struct bot_initmove_s *initmove); -	void	(*BotAddAvoidSpot)(int movestate, vec3_t origin, float radius, int type); -	//----------------------------------- -	// be_ai_weap.h -	//----------------------------------- -	int		(*BotChooseBestFightWeapon)(int weaponstate, int *inventory); -	void	(*BotGetWeaponInfo)(int weaponstate, int weapon, struct weaponinfo_s *weaponinfo); -	int		(*BotLoadWeaponWeights)(int weaponstate, char *filename); -	int		(*BotAllocWeaponState)(void); -	void	(*BotFreeWeaponState)(int weaponstate); -	void	(*BotResetWeaponState)(int weaponstate); -	//----------------------------------- -	// be_ai_gen.h -	//----------------------------------- -	int		(*GeneticParentsAndChildSelection)(int numranks, float *ranks, int *parent1, int *parent2, int *child); -} ai_export_t; - -//bot AI library imported functions -typedef struct botlib_export_s -{ -	//Area Awareness System functions -	aas_export_t aas; -	//Elementary Action functions -	ea_export_t ea; -	//AI functions -	ai_export_t ai; -	//setup the bot library, returns BLERR_ -	int (*BotLibSetup)(void); -	//shutdown the bot library, returns BLERR_ -	int (*BotLibShutdown)(void); -	//sets a library variable returns BLERR_ -	int (*BotLibVarSet)(char *var_name, char *value); -	//gets a library variable returns BLERR_ -	int (*BotLibVarGet)(char *var_name, char *value, int size); - -	//sets a C-like define returns BLERR_ -	int (*PC_AddGlobalDefine)(char *string); -	int (*PC_LoadSourceHandle)(const char *filename); -	int (*PC_FreeSourceHandle)(int handle); -	int (*PC_ReadTokenHandle)(int handle, pc_token_t *pc_token); -	int (*PC_SourceFileAndLine)(int handle, char *filename, int *line); - -	//start a frame in the bot library -	int (*BotLibStartFrame)(float time); -	//load a new map in the bot library -	int (*BotLibLoadMap)(const char *mapname); -	//entity updates -	int (*BotLibUpdateEntity)(int ent, bot_entitystate_t *state); -	//just for testing -	int (*Test)(int parm0, char *parm1, vec3_t parm2, vec3_t parm3); -} botlib_export_t; - -//linking of bot library -botlib_export_t *GetBotLibAPI( int apiVersion, botlib_import_t *import ); - -/* Library variables: - -name:						default:			module(s):			description: - -"basedir"					""					l_utils.c			base directory -"gamedir"					""					l_utils.c			game directory -"cddir"						""					l_utils.c			CD directory - -"log"						"0"					l_log.c				enable/disable creating a log file -"maxclients"				"4"					be_interface.c		maximum number of clients -"maxentities"				"1024"				be_interface.c		maximum number of entities -"bot_developer"				"0"					be_interface.c		bot developer mode - -"phys_friction"				"6"					be_aas_move.c		ground friction -"phys_stopspeed"			"100"				be_aas_move.c		stop speed -"phys_gravity"				"800"				be_aas_move.c		gravity value -"phys_waterfriction"		"1"					be_aas_move.c		water friction -"phys_watergravity"			"400"				be_aas_move.c		gravity in water -"phys_maxvelocity"			"320"				be_aas_move.c		maximum velocity -"phys_maxwalkvelocity"		"320"				be_aas_move.c		maximum walk velocity -"phys_maxcrouchvelocity"	"100"				be_aas_move.c		maximum crouch velocity -"phys_maxswimvelocity"		"150"				be_aas_move.c		maximum swim velocity -"phys_walkaccelerate"		"10"				be_aas_move.c		walk acceleration -"phys_airaccelerate"		"1"					be_aas_move.c		air acceleration -"phys_swimaccelerate"		"4"					be_aas_move.c		swim acceleration -"phys_maxstep"				"18"				be_aas_move.c		maximum step height -"phys_maxsteepness"			"0.7"				be_aas_move.c		maximum floor steepness -"phys_maxbarrier"			"32"				be_aas_move.c		maximum barrier height -"phys_maxwaterjump"			"19"				be_aas_move.c		maximum waterjump height -"phys_jumpvel"				"270"				be_aas_move.c		jump z velocity -"phys_falldelta5"			"40"				be_aas_move.c -"phys_falldelta10"			"60"				be_aas_move.c -"rs_waterjump"				"400"				be_aas_move.c -"rs_teleport"				"50"				be_aas_move.c -"rs_barrierjump"			"100"				be_aas_move.c -"rs_startcrouch"			"300"				be_aas_move.c -"rs_startgrapple"			"500"				be_aas_move.c -"rs_startwalkoffledge"		"70"				be_aas_move.c -"rs_startjump"				"300"				be_aas_move.c -"rs_rocketjump"				"500"				be_aas_move.c -"rs_bfgjump"				"500"				be_aas_move.c -"rs_jumppad"				"250"				be_aas_move.c -"rs_aircontrolledjumppad"	"300"				be_aas_move.c -"rs_funcbob"				"300"				be_aas_move.c -"rs_startelevator"			"50"				be_aas_move.c -"rs_falldamage5"			"300"				be_aas_move.c -"rs_falldamage10"			"500"				be_aas_move.c -"rs_maxjumpfallheight"		"450"				be_aas_move.c - -"max_aaslinks"				"4096"				be_aas_sample.c		maximum links in the AAS -"max_routingcache"			"4096"				be_aas_route.c		maximum routing cache size in KB -"forceclustering"			"0"					be_aas_main.c		force recalculation of clusters -"forcereachability"			"0"					be_aas_main.c		force recalculation of reachabilities -"forcewrite"				"0"					be_aas_main.c		force writing of aas file -"aasoptimize"				"0"					be_aas_main.c		enable aas optimization -"sv_mapChecksum"			"0"					be_aas_main.c		BSP file checksum -"bot_visualizejumppads"		"0"					be_aas_reach.c		visualize jump pads - -"bot_reloadcharacters"		"0"					-					reload bot character files -"ai_gametype"				"0"					be_ai_goal.c		game type -"droppedweight"				"1000"				be_ai_goal.c		additional dropped item weight -"weapindex_rocketlauncher"	"5"					be_ai_move.c		rl weapon index for rocket jumping -"weapindex_bfg10k"			"9"					be_ai_move.c		bfg weapon index for bfg jumping -"weapindex_grapple"			"10"				be_ai_move.c		grapple weapon index for grappling -"entitytypemissile"			"3"					be_ai_move.c		ET_MISSILE -"offhandgrapple"			"0"					be_ai_move.c		enable off hand grapple hook -"cmd_grappleon"				"grappleon"			be_ai_move.c		command to activate off hand grapple -"cmd_grappleoff"			"grappleoff"		be_ai_move.c		command to deactivate off hand grapple -"itemconfig"				"items.c"			be_ai_goal.c		item configuration file -"weaponconfig"				"weapons.c"			be_ai_weap.c		weapon configuration file -"synfile"					"syn.c"				be_ai_chat.c		file with synonyms -"rndfile"					"rnd.c"				be_ai_chat.c		file with random strings -"matchfile"					"match.c"			be_ai_chat.c		file with match strings -"nochat"					"0"					be_ai_chat.c		disable chats -"max_messages"				"1024"				be_ai_chat.c		console message heap size -"max_weaponinfo"			"32"				be_ai_weap.c		maximum number of weapon info -"max_projectileinfo"		"32"				be_ai_weap.c		maximum number of projectile info -"max_iteminfo"				"256"				be_ai_goal.c		maximum number of item info -"max_levelitems"			"256"				be_ai_goal.c		maximum number of level items - -*/ - diff --git a/code/game/g_local.h b/code/game/g_local.h index 4ae76fc..7e20d36 100644 --- a/code/game/g_local.h +++ b/code/game/g_local.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  //  // g_local.h -- local definitions for game module -#include "q_shared.h" +#include "../qcommon/q_shared.h"  #include "bg_public.h"  #include "g_public.h" diff --git a/code/game/q_math.c b/code/game/q_math.c deleted file mode 100644 index fd835df..0000000 --- a/code/game/q_math.c +++ /dev/null @@ -1,1307 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// -// q_math.c -- stateless support routines that are included in each code module -#include "q_shared.h" - - -vec3_t	vec3_origin = {0,0,0}; -vec3_t	axisDefault[3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }; - - -vec4_t		colorBlack	= {0, 0, 0, 1}; -vec4_t		colorRed	= {1, 0, 0, 1}; -vec4_t		colorGreen	= {0, 1, 0, 1}; -vec4_t		colorBlue	= {0, 0, 1, 1}; -vec4_t		colorYellow	= {1, 1, 0, 1}; -vec4_t		colorMagenta= {1, 0, 1, 1}; -vec4_t		colorCyan	= {0, 1, 1, 1}; -vec4_t		colorWhite	= {1, 1, 1, 1}; -vec4_t		colorLtGrey	= {0.75, 0.75, 0.75, 1}; -vec4_t		colorMdGrey	= {0.5, 0.5, 0.5, 1}; -vec4_t		colorDkGrey	= {0.25, 0.25, 0.25, 1}; - -vec4_t	g_color_table[8] = -	{ -	{0.0, 0.0, 0.0, 1.0}, -	{1.0, 0.0, 0.0, 1.0}, -	{0.0, 1.0, 0.0, 1.0}, -	{1.0, 1.0, 0.0, 1.0}, -	{0.0, 0.0, 1.0, 1.0}, -	{0.0, 1.0, 1.0, 1.0}, -	{1.0, 0.0, 1.0, 1.0}, -	{1.0, 1.0, 1.0, 1.0}, -	}; - - -vec3_t	bytedirs[NUMVERTEXNORMALS] = -{ -{-0.525731f, 0.000000f, 0.850651f}, {-0.442863f, 0.238856f, 0.864188f},  -{-0.295242f, 0.000000f, 0.955423f}, {-0.309017f, 0.500000f, 0.809017f},  -{-0.162460f, 0.262866f, 0.951056f}, {0.000000f, 0.000000f, 1.000000f},  -{0.000000f, 0.850651f, 0.525731f}, {-0.147621f, 0.716567f, 0.681718f},  -{0.147621f, 0.716567f, 0.681718f}, {0.000000f, 0.525731f, 0.850651f},  -{0.309017f, 0.500000f, 0.809017f}, {0.525731f, 0.000000f, 0.850651f},  -{0.295242f, 0.000000f, 0.955423f}, {0.442863f, 0.238856f, 0.864188f},  -{0.162460f, 0.262866f, 0.951056f}, {-0.681718f, 0.147621f, 0.716567f},  -{-0.809017f, 0.309017f, 0.500000f},{-0.587785f, 0.425325f, 0.688191f},  -{-0.850651f, 0.525731f, 0.000000f},{-0.864188f, 0.442863f, 0.238856f},  -{-0.716567f, 0.681718f, 0.147621f},{-0.688191f, 0.587785f, 0.425325f},  -{-0.500000f, 0.809017f, 0.309017f}, {-0.238856f, 0.864188f, 0.442863f},  -{-0.425325f, 0.688191f, 0.587785f}, {-0.716567f, 0.681718f, -0.147621f},  -{-0.500000f, 0.809017f, -0.309017f}, {-0.525731f, 0.850651f, 0.000000f},  -{0.000000f, 0.850651f, -0.525731f}, {-0.238856f, 0.864188f, -0.442863f},  -{0.000000f, 0.955423f, -0.295242f}, {-0.262866f, 0.951056f, -0.162460f},  -{0.000000f, 1.000000f, 0.000000f}, {0.000000f, 0.955423f, 0.295242f},  -{-0.262866f, 0.951056f, 0.162460f}, {0.238856f, 0.864188f, 0.442863f},  -{0.262866f, 0.951056f, 0.162460f}, {0.500000f, 0.809017f, 0.309017f},  -{0.238856f, 0.864188f, -0.442863f},{0.262866f, 0.951056f, -0.162460f},  -{0.500000f, 0.809017f, -0.309017f},{0.850651f, 0.525731f, 0.000000f},  -{0.716567f, 0.681718f, 0.147621f}, {0.716567f, 0.681718f, -0.147621f},  -{0.525731f, 0.850651f, 0.000000f}, {0.425325f, 0.688191f, 0.587785f},  -{0.864188f, 0.442863f, 0.238856f}, {0.688191f, 0.587785f, 0.425325f},  -{0.809017f, 0.309017f, 0.500000f}, {0.681718f, 0.147621f, 0.716567f},  -{0.587785f, 0.425325f, 0.688191f}, {0.955423f, 0.295242f, 0.000000f},  -{1.000000f, 0.000000f, 0.000000f}, {0.951056f, 0.162460f, 0.262866f},  -{0.850651f, -0.525731f, 0.000000f},{0.955423f, -0.295242f, 0.000000f},  -{0.864188f, -0.442863f, 0.238856f}, {0.951056f, -0.162460f, 0.262866f},  -{0.809017f, -0.309017f, 0.500000f}, {0.681718f, -0.147621f, 0.716567f},  -{0.850651f, 0.000000f, 0.525731f}, {0.864188f, 0.442863f, -0.238856f},  -{0.809017f, 0.309017f, -0.500000f}, {0.951056f, 0.162460f, -0.262866f},  -{0.525731f, 0.000000f, -0.850651f}, {0.681718f, 0.147621f, -0.716567f},  -{0.681718f, -0.147621f, -0.716567f},{0.850651f, 0.000000f, -0.525731f},  -{0.809017f, -0.309017f, -0.500000f}, {0.864188f, -0.442863f, -0.238856f},  -{0.951056f, -0.162460f, -0.262866f}, {0.147621f, 0.716567f, -0.681718f},  -{0.309017f, 0.500000f, -0.809017f}, {0.425325f, 0.688191f, -0.587785f},  -{0.442863f, 0.238856f, -0.864188f}, {0.587785f, 0.425325f, -0.688191f},  -{0.688191f, 0.587785f, -0.425325f}, {-0.147621f, 0.716567f, -0.681718f},  -{-0.309017f, 0.500000f, -0.809017f}, {0.000000f, 0.525731f, -0.850651f},  -{-0.525731f, 0.000000f, -0.850651f}, {-0.442863f, 0.238856f, -0.864188f},  -{-0.295242f, 0.000000f, -0.955423f}, {-0.162460f, 0.262866f, -0.951056f},  -{0.000000f, 0.000000f, -1.000000f}, {0.295242f, 0.000000f, -0.955423f},  -{0.162460f, 0.262866f, -0.951056f}, {-0.442863f, -0.238856f, -0.864188f},  -{-0.309017f, -0.500000f, -0.809017f}, {-0.162460f, -0.262866f, -0.951056f},  -{0.000000f, -0.850651f, -0.525731f}, {-0.147621f, -0.716567f, -0.681718f},  -{0.147621f, -0.716567f, -0.681718f}, {0.000000f, -0.525731f, -0.850651f},  -{0.309017f, -0.500000f, -0.809017f}, {0.442863f, -0.238856f, -0.864188f},  -{0.162460f, -0.262866f, -0.951056f}, {0.238856f, -0.864188f, -0.442863f},  -{0.500000f, -0.809017f, -0.309017f}, {0.425325f, -0.688191f, -0.587785f},  -{0.716567f, -0.681718f, -0.147621f}, {0.688191f, -0.587785f, -0.425325f},  -{0.587785f, -0.425325f, -0.688191f}, {0.000000f, -0.955423f, -0.295242f},  -{0.000000f, -1.000000f, 0.000000f}, {0.262866f, -0.951056f, -0.162460f},  -{0.000000f, -0.850651f, 0.525731f}, {0.000000f, -0.955423f, 0.295242f},  -{0.238856f, -0.864188f, 0.442863f}, {0.262866f, -0.951056f, 0.162460f},  -{0.500000f, -0.809017f, 0.309017f}, {0.716567f, -0.681718f, 0.147621f},  -{0.525731f, -0.850651f, 0.000000f}, {-0.238856f, -0.864188f, -0.442863f},  -{-0.500000f, -0.809017f, -0.309017f}, {-0.262866f, -0.951056f, -0.162460f},  -{-0.850651f, -0.525731f, 0.000000f}, {-0.716567f, -0.681718f, -0.147621f},  -{-0.716567f, -0.681718f, 0.147621f}, {-0.525731f, -0.850651f, 0.000000f},  -{-0.500000f, -0.809017f, 0.309017f}, {-0.238856f, -0.864188f, 0.442863f},  -{-0.262866f, -0.951056f, 0.162460f}, {-0.864188f, -0.442863f, 0.238856f},  -{-0.809017f, -0.309017f, 0.500000f}, {-0.688191f, -0.587785f, 0.425325f},  -{-0.681718f, -0.147621f, 0.716567f}, {-0.442863f, -0.238856f, 0.864188f},  -{-0.587785f, -0.425325f, 0.688191f}, {-0.309017f, -0.500000f, 0.809017f},  -{-0.147621f, -0.716567f, 0.681718f}, {-0.425325f, -0.688191f, 0.587785f},  -{-0.162460f, -0.262866f, 0.951056f}, {0.442863f, -0.238856f, 0.864188f},  -{0.162460f, -0.262866f, 0.951056f}, {0.309017f, -0.500000f, 0.809017f},  -{0.147621f, -0.716567f, 0.681718f}, {0.000000f, -0.525731f, 0.850651f},  -{0.425325f, -0.688191f, 0.587785f}, {0.587785f, -0.425325f, 0.688191f},  -{0.688191f, -0.587785f, 0.425325f}, {-0.955423f, 0.295242f, 0.000000f},  -{-0.951056f, 0.162460f, 0.262866f}, {-1.000000f, 0.000000f, 0.000000f},  -{-0.850651f, 0.000000f, 0.525731f}, {-0.955423f, -0.295242f, 0.000000f},  -{-0.951056f, -0.162460f, 0.262866f}, {-0.864188f, 0.442863f, -0.238856f},  -{-0.951056f, 0.162460f, -0.262866f}, {-0.809017f, 0.309017f, -0.500000f},  -{-0.864188f, -0.442863f, -0.238856f}, {-0.951056f, -0.162460f, -0.262866f},  -{-0.809017f, -0.309017f, -0.500000f}, {-0.681718f, 0.147621f, -0.716567f},  -{-0.681718f, -0.147621f, -0.716567f}, {-0.850651f, 0.000000f, -0.525731f},  -{-0.688191f, 0.587785f, -0.425325f}, {-0.587785f, 0.425325f, -0.688191f},  -{-0.425325f, 0.688191f, -0.587785f}, {-0.425325f, -0.688191f, -0.587785f},  -{-0.587785f, -0.425325f, -0.688191f}, {-0.688191f, -0.587785f, -0.425325f} -}; - -//============================================================== - -int		Q_rand( int *seed ) { -	*seed = (69069 * *seed + 1); -	return *seed; -} - -float	Q_random( int *seed ) { -	return ( Q_rand( seed ) & 0xffff ) / (float)0x10000; -} - -float	Q_crandom( int *seed ) { -	return 2.0 * ( Q_random( seed ) - 0.5 ); -} - -#ifdef __LCC__ - -int VectorCompare( const vec3_t v1, const vec3_t v2 ) { -	if (v1[0] != v2[0] || v1[1] != v2[1] || v1[2] != v2[2]) { -		return 0; -	}			 -	return 1; -} - -vec_t VectorLength( const vec3_t v ) { -	return (vec_t)sqrt (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); -} - -vec_t VectorLengthSquared( const vec3_t v ) { -	return (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); -} - -vec_t Distance( const vec3_t p1, const vec3_t p2 ) { -	vec3_t	v; - -	VectorSubtract (p2, p1, v); -	return VectorLength( v ); -} - -vec_t DistanceSquared( const vec3_t p1, const vec3_t p2 ) { -	vec3_t	v; - -	VectorSubtract (p2, p1, v); -	return v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; -} - -// fast vector normalize routine that does not check to make sure -// that length != 0, nor does it return length, uses rsqrt approximation -void VectorNormalizeFast( vec3_t v ) -{ -	float ilength; - -	ilength = Q_rsqrt( DotProduct( v, v ) ); - -	v[0] *= ilength; -	v[1] *= ilength; -	v[2] *= ilength; -} - -void VectorInverse( vec3_t v ){ -	v[0] = -v[0]; -	v[1] = -v[1]; -	v[2] = -v[2]; -} - -void CrossProduct( const vec3_t v1, const vec3_t v2, vec3_t cross ) { -	cross[0] = v1[1]*v2[2] - v1[2]*v2[1]; -	cross[1] = v1[2]*v2[0] - v1[0]*v2[2]; -	cross[2] = v1[0]*v2[1] - v1[1]*v2[0]; -} -#endif - -//======================================================= - -signed char ClampChar( int i ) { -	if ( i < -128 ) { -		return -128; -	} -	if ( i > 127 ) { -		return 127; -	} -	return i; -} - -signed short ClampShort( int i ) { -	if ( i < -32768 ) { -		return -32768; -	} -	if ( i > 0x7fff ) { -		return 0x7fff; -	} -	return i; -} - - -// this isn't a real cheap function to call! -int DirToByte( vec3_t dir ) { -	int		i, best; -	float	d, bestd; - -	if ( !dir ) { -		return 0; -	} - -	bestd = 0; -	best = 0; -	for (i=0 ; i<NUMVERTEXNORMALS ; i++) -	{ -		d = DotProduct (dir, bytedirs[i]); -		if (d > bestd) -		{ -			bestd = d; -			best = i; -		} -	} - -	return best; -} - -void ByteToDir( int b, vec3_t dir ) { -	if ( b < 0 || b >= NUMVERTEXNORMALS ) { -		VectorCopy( vec3_origin, dir ); -		return; -	} -	VectorCopy (bytedirs[b], dir); -} - - -unsigned ColorBytes3 (float r, float g, float b) { -	unsigned	i; - -	( (byte *)&i )[0] = r * 255; -	( (byte *)&i )[1] = g * 255; -	( (byte *)&i )[2] = b * 255; - -	return i; -} - -unsigned ColorBytes4 (float r, float g, float b, float a) { -	unsigned	i; - -	( (byte *)&i )[0] = r * 255; -	( (byte *)&i )[1] = g * 255; -	( (byte *)&i )[2] = b * 255; -	( (byte *)&i )[3] = a * 255; - -	return i; -} - -float NormalizeColor( const vec3_t in, vec3_t out ) { -	float	max; -	 -	max = in[0]; -	if ( in[1] > max ) { -		max = in[1]; -	} -	if ( in[2] > max ) { -		max = in[2]; -	} - -	if ( !max ) { -		VectorClear( out ); -	} else { -		out[0] = in[0] / max; -		out[1] = in[1] / max; -		out[2] = in[2] / max; -	} -	return max; -} - - -/* -===================== -PlaneFromPoints - -Returns false if the triangle is degenrate. -The normal will point out of the clock for clockwise ordered points -===================== -*/ -qboolean PlaneFromPoints( vec4_t plane, const vec3_t a, const vec3_t b, const vec3_t c ) { -	vec3_t	d1, d2; - -	VectorSubtract( b, a, d1 ); -	VectorSubtract( c, a, d2 ); -	CrossProduct( d2, d1, plane ); -	if ( VectorNormalize( plane ) == 0 ) { -		return qfalse; -	} - -	plane[3] = DotProduct( a, plane ); -	return qtrue; -} - -/* -=============== -RotatePointAroundVector - -This is not implemented very well... -=============== -*/ -void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, -							 float degrees ) { -	float	m[3][3]; -	float	im[3][3]; -	float	zrot[3][3]; -	float	tmpmat[3][3]; -	float	rot[3][3]; -	int	i; -	vec3_t vr, vup, vf; -	float	rad; - -	vf[0] = dir[0]; -	vf[1] = dir[1]; -	vf[2] = dir[2]; - -	PerpendicularVector( vr, dir ); -	CrossProduct( vr, vf, vup ); - -	m[0][0] = vr[0]; -	m[1][0] = vr[1]; -	m[2][0] = vr[2]; - -	m[0][1] = vup[0]; -	m[1][1] = vup[1]; -	m[2][1] = vup[2]; - -	m[0][2] = vf[0]; -	m[1][2] = vf[1]; -	m[2][2] = vf[2]; - -	memcpy( im, m, sizeof( im ) ); - -	im[0][1] = m[1][0]; -	im[0][2] = m[2][0]; -	im[1][0] = m[0][1]; -	im[1][2] = m[2][1]; -	im[2][0] = m[0][2]; -	im[2][1] = m[1][2]; - -	memset( zrot, 0, sizeof( zrot ) ); -	zrot[0][0] = zrot[1][1] = zrot[2][2] = 1.0F; - -	rad = DEG2RAD( degrees ); -	zrot[0][0] = cos( rad ); -	zrot[0][1] = sin( rad ); -	zrot[1][0] = -sin( rad ); -	zrot[1][1] = cos( rad ); - -	MatrixMultiply( m, zrot, tmpmat ); -	MatrixMultiply( tmpmat, im, rot ); - -	for ( i = 0; i < 3; i++ ) { -		dst[i] = rot[i][0] * point[0] + rot[i][1] * point[1] + rot[i][2] * point[2]; -	} -} - -/* -=============== -RotateAroundDirection -=============== -*/ -void RotateAroundDirection( vec3_t axis[3], float yaw ) { - -	// create an arbitrary axis[1]  -	PerpendicularVector( axis[1], axis[0] ); - -	// rotate it around axis[0] by yaw -	if ( yaw ) { -		vec3_t	temp; - -		VectorCopy( axis[1], temp ); -		RotatePointAroundVector( axis[1], axis[0], temp, yaw ); -	} - -	// cross to get axis[2] -	CrossProduct( axis[0], axis[1], axis[2] ); -} - - - -void vectoangles( const vec3_t value1, vec3_t angles ) { -	float	forward; -	float	yaw, pitch; -	 -	if ( value1[1] == 0 && value1[0] == 0 ) { -		yaw = 0; -		if ( value1[2] > 0 ) { -			pitch = 90; -		} -		else { -			pitch = 270; -		} -	} -	else { -		if ( value1[0] ) { -			yaw = ( atan2 ( value1[1], value1[0] ) * 180 / M_PI ); -		} -		else if ( value1[1] > 0 ) { -			yaw = 90; -		} -		else { -			yaw = 270; -		} -		if ( yaw < 0 ) { -			yaw += 360; -		} - -		forward = sqrt ( value1[0]*value1[0] + value1[1]*value1[1] ); -		pitch = ( atan2(value1[2], forward) * 180 / M_PI ); -		if ( pitch < 0 ) { -			pitch += 360; -		} -	} - -	angles[PITCH] = -pitch; -	angles[YAW] = yaw; -	angles[ROLL] = 0; -} - - -/* -================= -AnglesToAxis -================= -*/ -void AnglesToAxis( const vec3_t angles, vec3_t axis[3] ) { -	vec3_t	right; - -	// angle vectors returns "right" instead of "y axis" -	AngleVectors( angles, axis[0], right, axis[2] ); -	VectorSubtract( vec3_origin, right, axis[1] ); -} - -void AxisClear( vec3_t axis[3] ) { -	axis[0][0] = 1; -	axis[0][1] = 0; -	axis[0][2] = 0; -	axis[1][0] = 0; -	axis[1][1] = 1; -	axis[1][2] = 0; -	axis[2][0] = 0; -	axis[2][1] = 0; -	axis[2][2] = 1; -} - -void AxisCopy( vec3_t in[3], vec3_t out[3] ) { -	VectorCopy( in[0], out[0] ); -	VectorCopy( in[1], out[1] ); -	VectorCopy( in[2], out[2] ); -} - -void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal ) -{ -	float d; -	vec3_t n; -	float inv_denom; - -	inv_denom =  DotProduct( normal, normal ); -#ifndef Q3_VM -	assert( Q_fabs(inv_denom) != 0.0f ); // bk010122 - zero vectors get here -#endif -	inv_denom = 1.0f / inv_denom; - -	d = DotProduct( normal, p ) * inv_denom; - -	n[0] = normal[0] * inv_denom; -	n[1] = normal[1] * inv_denom; -	n[2] = normal[2] * inv_denom; - -	dst[0] = p[0] - d * n[0]; -	dst[1] = p[1] - d * n[1]; -	dst[2] = p[2] - d * n[2]; -} - -/* -================ -MakeNormalVectors - -Given a normalized forward vector, create two -other perpendicular vectors -================ -*/ -void MakeNormalVectors( const vec3_t forward, vec3_t right, vec3_t up) { -	float		d; - -	// this rotate and negate guarantees a vector -	// not colinear with the original -	right[1] = -forward[0]; -	right[2] = forward[1]; -	right[0] = forward[2]; - -	d = DotProduct (right, forward); -	VectorMA (right, -d, forward, right); -	VectorNormalize (right); -	CrossProduct (right, forward, up); -} - - -void VectorRotate( vec3_t in, vec3_t matrix[3], vec3_t out ) -{ -	out[0] = DotProduct( in, matrix[0] ); -	out[1] = DotProduct( in, matrix[1] ); -	out[2] = DotProduct( in, matrix[2] ); -} - -//============================================================================ - -#if !idppc -/* -** float q_rsqrt( float number ) -*/ -float Q_rsqrt( float number ) -{ -	union { -		float f; -		int i; -	} t; -	float x2, y; -	const float threehalfs = 1.5F; - -	x2 = number * 0.5F; -	t.f  = number; -	t.i  = 0x5f3759df - ( t.i >> 1 );               // what the fuck? -	y  = t.f; -	y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration -//	y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed - -	//assert( !isnan(y) ); // bk010122 - FPE? -	return y; -} - -float Q_fabs( float f ) { -	int tmp = * ( int * ) &f; -	tmp &= 0x7FFFFFFF; -	return * ( float * ) &tmp; -} -#endif - -//============================================================ - -/* -=============== -LerpAngle - -=============== -*/ -float LerpAngle (float from, float to, float frac) { -	float	a; - -	if ( to - from > 180 ) { -		to -= 360; -	} -	if ( to - from < -180 ) { -		to += 360; -	} -	a = from + frac * (to - from); - -	return a; -} - - -/* -================= -AngleSubtract - -Always returns a value from -180 to 180 -================= -*/ -float	AngleSubtract( float a1, float a2 ) { -	float	a; - -	a = a1 - a2; -	while ( a > 180 ) { -		a -= 360; -	} -	while ( a < -180 ) { -		a += 360; -	} -	return a; -} - - -void AnglesSubtract( vec3_t v1, vec3_t v2, vec3_t v3 ) { -	v3[0] = AngleSubtract( v1[0], v2[0] ); -	v3[1] = AngleSubtract( v1[1], v2[1] ); -	v3[2] = AngleSubtract( v1[2], v2[2] ); -} - - -float	AngleMod(float a) { -	a = (360.0/65536) * ((int)(a*(65536/360.0)) & 65535); -	return a; -} - - -/* -================= -AngleNormalize360 - -returns angle normalized to the range [0 <= angle < 360] -================= -*/ -float AngleNormalize360 ( float angle ) { -	return (360.0 / 65536) * ((int)(angle * (65536 / 360.0)) & 65535); -} - - -/* -================= -AngleNormalize180 - -returns angle normalized to the range [-180 < angle <= 180] -================= -*/ -float AngleNormalize180 ( float angle ) { -	angle = AngleNormalize360( angle ); -	if ( angle > 180.0 ) { -		angle -= 360.0; -	} -	return angle; -} - - -/* -================= -AngleDelta - -returns the normalized delta from angle1 to angle2 -================= -*/ -float AngleDelta ( float angle1, float angle2 ) { -	return AngleNormalize180( angle1 - angle2 ); -} - - -//============================================================ - - -/* -================= -SetPlaneSignbits -================= -*/ -void SetPlaneSignbits (cplane_t *out) { -	int	bits, j; - -	// for fast box on planeside test -	bits = 0; -	for (j=0 ; j<3 ; j++) { -		if (out->normal[j] < 0) { -			bits |= 1<<j; -		} -	} -	out->signbits = bits; -} - - -/* -================== -BoxOnPlaneSide - -Returns 1, 2, or 1 + 2 - -// this is the slow, general version -int BoxOnPlaneSide2 (vec3_t emins, vec3_t emaxs, struct cplane_s *p) -{ -	int		i; -	float	dist1, dist2; -	int		sides; -	vec3_t	corners[2]; - -	for (i=0 ; i<3 ; i++) -	{ -		if (p->normal[i] < 0) -		{ -			corners[0][i] = emins[i]; -			corners[1][i] = emaxs[i]; -		} -		else -		{ -			corners[1][i] = emins[i]; -			corners[0][i] = emaxs[i]; -		} -	} -	dist1 = DotProduct (p->normal, corners[0]) - p->dist; -	dist2 = DotProduct (p->normal, corners[1]) - p->dist; -	sides = 0; -	if (dist1 >= 0) -		sides = 1; -	if (dist2 < 0) -		sides |= 2; - -	return sides; -} - -================== -*/ - -// if not GNU x86 and configured to use asm -#if !( (defined __GNUC__) && (defined __i386__) && (!defined C_ONLY)) - -#if defined __LCC__ || defined C_ONLY || !id386 || defined __VECTORC - -int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p) -{ -	float	dist1, dist2; -	int		sides; - -// fast axial cases -	if (p->type < 3) -	{ -		if (p->dist <= emins[p->type]) -			return 1; -		if (p->dist >= emaxs[p->type]) -			return 2; -		return 3; -	} - -// general case -	switch (p->signbits) -	{ -	case 0: -		dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -		dist2 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -		break; -	case 1: -		dist1 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -		dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -		break; -	case 2: -		dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -		dist2 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -		break; -	case 3: -		dist1 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -		dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -		break; -	case 4: -		dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -		dist2 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -		break; -	case 5: -		dist1 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -		dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -		break; -	case 6: -		dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -		dist2 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -		break; -	case 7: -		dist1 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -		dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -		break; -	default: -		dist1 = dist2 = 0;		// shut up compiler -		break; -	} - -	sides = 0; -	if (dist1 >= p->dist) -		sides = 1; -	if (dist2 < p->dist) -		sides |= 2; - -	return sides; -} -#else -#pragma warning( disable: 4035 ) - -__declspec( naked ) int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p) -{ -	static int bops_initialized; -	static int Ljmptab[8]; - -	__asm { - -		push ebx -			 -		cmp bops_initialized, 1 -		je  initialized -		mov bops_initialized, 1 -		 -		mov Ljmptab[0*4], offset Lcase0 -		mov Ljmptab[1*4], offset Lcase1 -		mov Ljmptab[2*4], offset Lcase2 -		mov Ljmptab[3*4], offset Lcase3 -		mov Ljmptab[4*4], offset Lcase4 -		mov Ljmptab[5*4], offset Lcase5 -		mov Ljmptab[6*4], offset Lcase6 -		mov Ljmptab[7*4], offset Lcase7 -			 -initialized: - -		mov edx,dword ptr[4+12+esp] -		mov ecx,dword ptr[4+4+esp] -		xor eax,eax -		mov ebx,dword ptr[4+8+esp] -		mov al,byte ptr[17+edx] -		cmp al,8 -		jge Lerror -		fld dword ptr[0+edx] -		fld st(0) -		jmp dword ptr[Ljmptab+eax*4] -Lcase0: -		fmul dword ptr[ebx] -		fld dword ptr[0+4+edx] -		fxch st(2) -		fmul dword ptr[ecx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[4+ebx] -		fld dword ptr[0+8+edx] -		fxch st(2) -		fmul dword ptr[4+ecx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[8+ebx] -		fxch st(5) -		faddp st(3),st(0) -		fmul dword ptr[8+ecx] -		fxch st(1) -		faddp st(3),st(0) -		fxch st(3) -		faddp st(2),st(0) -		jmp LSetSides -Lcase1: -		fmul dword ptr[ecx] -		fld dword ptr[0+4+edx] -		fxch st(2) -		fmul dword ptr[ebx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[4+ebx] -		fld dword ptr[0+8+edx] -		fxch st(2) -		fmul dword ptr[4+ecx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[8+ebx] -		fxch st(5) -		faddp st(3),st(0) -		fmul dword ptr[8+ecx] -		fxch st(1) -		faddp st(3),st(0) -		fxch st(3) -		faddp st(2),st(0) -		jmp LSetSides -Lcase2: -		fmul dword ptr[ebx] -		fld dword ptr[0+4+edx] -		fxch st(2) -		fmul dword ptr[ecx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[4+ecx] -		fld dword ptr[0+8+edx] -		fxch st(2) -		fmul dword ptr[4+ebx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[8+ebx] -		fxch st(5) -		faddp st(3),st(0) -		fmul dword ptr[8+ecx] -		fxch st(1) -		faddp st(3),st(0) -		fxch st(3) -		faddp st(2),st(0) -		jmp LSetSides -Lcase3: -		fmul dword ptr[ecx] -		fld dword ptr[0+4+edx] -		fxch st(2) -		fmul dword ptr[ebx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[4+ecx] -		fld dword ptr[0+8+edx] -		fxch st(2) -		fmul dword ptr[4+ebx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[8+ebx] -		fxch st(5) -		faddp st(3),st(0) -		fmul dword ptr[8+ecx] -		fxch st(1) -		faddp st(3),st(0) -		fxch st(3) -		faddp st(2),st(0) -		jmp LSetSides -Lcase4: -		fmul dword ptr[ebx] -		fld dword ptr[0+4+edx] -		fxch st(2) -		fmul dword ptr[ecx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[4+ebx] -		fld dword ptr[0+8+edx] -		fxch st(2) -		fmul dword ptr[4+ecx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[8+ecx] -		fxch st(5) -		faddp st(3),st(0) -		fmul dword ptr[8+ebx] -		fxch st(1) -		faddp st(3),st(0) -		fxch st(3) -		faddp st(2),st(0) -		jmp LSetSides -Lcase5: -		fmul dword ptr[ecx] -		fld dword ptr[0+4+edx] -		fxch st(2) -		fmul dword ptr[ebx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[4+ebx] -		fld dword ptr[0+8+edx] -		fxch st(2) -		fmul dword ptr[4+ecx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[8+ecx] -		fxch st(5) -		faddp st(3),st(0) -		fmul dword ptr[8+ebx] -		fxch st(1) -		faddp st(3),st(0) -		fxch st(3) -		faddp st(2),st(0) -		jmp LSetSides -Lcase6: -		fmul dword ptr[ebx] -		fld dword ptr[0+4+edx] -		fxch st(2) -		fmul dword ptr[ecx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[4+ecx] -		fld dword ptr[0+8+edx] -		fxch st(2) -		fmul dword ptr[4+ebx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[8+ecx] -		fxch st(5) -		faddp st(3),st(0) -		fmul dword ptr[8+ebx] -		fxch st(1) -		faddp st(3),st(0) -		fxch st(3) -		faddp st(2),st(0) -		jmp LSetSides -Lcase7: -		fmul dword ptr[ecx] -		fld dword ptr[0+4+edx] -		fxch st(2) -		fmul dword ptr[ebx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[4+ecx] -		fld dword ptr[0+8+edx] -		fxch st(2) -		fmul dword ptr[4+ebx] -		fxch st(2) -		fld st(0) -		fmul dword ptr[8+ecx] -		fxch st(5) -		faddp st(3),st(0) -		fmul dword ptr[8+ebx] -		fxch st(1) -		faddp st(3),st(0) -		fxch st(3) -		faddp st(2),st(0) -LSetSides: -		faddp st(2),st(0) -		fcomp dword ptr[12+edx] -		xor ecx,ecx -		fnstsw ax -		fcomp dword ptr[12+edx] -		and ah,1 -		xor ah,1 -		add cl,ah -		fnstsw ax -		and ah,1 -		add ah,ah -		add cl,ah -		pop ebx -		mov eax,ecx -		ret -Lerror: -		int 3 -	} -} -#pragma warning( default: 4035 ) - -#endif -#endif - -/* -================= -RadiusFromBounds -================= -*/ -float RadiusFromBounds( const vec3_t mins, const vec3_t maxs ) { -	int		i; -	vec3_t	corner; -	float	a, b; - -	for (i=0 ; i<3 ; i++) { -		a = fabs( mins[i] ); -		b = fabs( maxs[i] ); -		corner[i] = a > b ? a : b; -	} - -	return VectorLength (corner); -} - - -void ClearBounds( vec3_t mins, vec3_t maxs ) { -	mins[0] = mins[1] = mins[2] = 99999; -	maxs[0] = maxs[1] = maxs[2] = -99999; -} - -void AddPointToBounds( const vec3_t v, vec3_t mins, vec3_t maxs ) { -	if ( v[0] < mins[0] ) { -		mins[0] = v[0]; -	} -	if ( v[0] > maxs[0]) { -		maxs[0] = v[0]; -	} - -	if ( v[1] < mins[1] ) { -		mins[1] = v[1]; -	} -	if ( v[1] > maxs[1]) { -		maxs[1] = v[1]; -	} - -	if ( v[2] < mins[2] ) { -		mins[2] = v[2]; -	} -	if ( v[2] > maxs[2]) { -		maxs[2] = v[2]; -	} -} - - -vec_t VectorNormalize( vec3_t v ) { -	// NOTE: TTimo - Apple G4 altivec source uses double? -	float	length, ilength; - -	length = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; -	length = sqrt (length); - -	if ( length ) { -		ilength = 1/length; -		v[0] *= ilength; -		v[1] *= ilength; -		v[2] *= ilength; -	} -		 -	return length; -} - -vec_t VectorNormalize2( const vec3_t v, vec3_t out) { -	float	length, ilength; - -	length = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; -	length = sqrt (length); - -	if (length) -	{ -#ifndef Q3_VM // bk0101022 - FPE related -//	  assert( ((Q_fabs(v[0])!=0.0f) || (Q_fabs(v[1])!=0.0f) || (Q_fabs(v[2])!=0.0f)) ); -#endif -		ilength = 1/length; -		out[0] = v[0]*ilength; -		out[1] = v[1]*ilength; -		out[2] = v[2]*ilength; -	} else { -#ifndef Q3_VM // bk0101022 - FPE related -//	  assert( ((Q_fabs(v[0])==0.0f) && (Q_fabs(v[1])==0.0f) && (Q_fabs(v[2])==0.0f)) ); -#endif -		VectorClear( out ); -	} -		 -	return length; - -} - -void _VectorMA( const vec3_t veca, float scale, const vec3_t vecb, vec3_t vecc) { -	vecc[0] = veca[0] + scale*vecb[0]; -	vecc[1] = veca[1] + scale*vecb[1]; -	vecc[2] = veca[2] + scale*vecb[2]; -} - - -vec_t _DotProduct( const vec3_t v1, const vec3_t v2 ) { -	return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; -} - -void _VectorSubtract( const vec3_t veca, const vec3_t vecb, vec3_t out ) { -	out[0] = veca[0]-vecb[0]; -	out[1] = veca[1]-vecb[1]; -	out[2] = veca[2]-vecb[2]; -} - -void _VectorAdd( const vec3_t veca, const vec3_t vecb, vec3_t out ) { -	out[0] = veca[0]+vecb[0]; -	out[1] = veca[1]+vecb[1]; -	out[2] = veca[2]+vecb[2]; -} - -void _VectorCopy( const vec3_t in, vec3_t out ) { -	out[0] = in[0]; -	out[1] = in[1]; -	out[2] = in[2]; -} - -void _VectorScale( const vec3_t in, vec_t scale, vec3_t out ) { -	out[0] = in[0]*scale; -	out[1] = in[1]*scale; -	out[2] = in[2]*scale; -} - -void Vector4Scale( const vec4_t in, vec_t scale, vec4_t out ) { -	out[0] = in[0]*scale; -	out[1] = in[1]*scale; -	out[2] = in[2]*scale; -	out[3] = in[3]*scale; -} - - -int Q_log2( int val ) { -	int answer; - -	answer = 0; -	while ( ( val>>=1 ) != 0 ) { -		answer++; -	} -	return answer; -} - - - -/* -================= -PlaneTypeForNormal -================= -*/ -/* -int	PlaneTypeForNormal (vec3_t normal) { -	if ( normal[0] == 1.0 ) -		return PLANE_X; -	if ( normal[1] == 1.0 ) -		return PLANE_Y; -	if ( normal[2] == 1.0 ) -		return PLANE_Z; -	 -	return PLANE_NON_AXIAL; -} -*/ - - -/* -================ -MatrixMultiply -================ -*/ -void MatrixMultiply(float in1[3][3], float in2[3][3], float out[3][3]) { -	out[0][0] = in1[0][0] * in2[0][0] + in1[0][1] * in2[1][0] + -				in1[0][2] * in2[2][0]; -	out[0][1] = in1[0][0] * in2[0][1] + in1[0][1] * in2[1][1] + -				in1[0][2] * in2[2][1]; -	out[0][2] = in1[0][0] * in2[0][2] + in1[0][1] * in2[1][2] + -				in1[0][2] * in2[2][2]; -	out[1][0] = in1[1][0] * in2[0][0] + in1[1][1] * in2[1][0] + -				in1[1][2] * in2[2][0]; -	out[1][1] = in1[1][0] * in2[0][1] + in1[1][1] * in2[1][1] + -				in1[1][2] * in2[2][1]; -	out[1][2] = in1[1][0] * in2[0][2] + in1[1][1] * in2[1][2] + -				in1[1][2] * in2[2][2]; -	out[2][0] = in1[2][0] * in2[0][0] + in1[2][1] * in2[1][0] + -				in1[2][2] * in2[2][0]; -	out[2][1] = in1[2][0] * in2[0][1] + in1[2][1] * in2[1][1] + -				in1[2][2] * in2[2][1]; -	out[2][2] = in1[2][0] * in2[0][2] + in1[2][1] * in2[1][2] + -				in1[2][2] * in2[2][2]; -} - - -void AngleVectors( const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up) { -	float		angle; -	static float		sr, sp, sy, cr, cp, cy; -	// static to help MS compiler fp bugs - -	angle = angles[YAW] * (M_PI*2 / 360); -	sy = sin(angle); -	cy = cos(angle); -	angle = angles[PITCH] * (M_PI*2 / 360); -	sp = sin(angle); -	cp = cos(angle); -	angle = angles[ROLL] * (M_PI*2 / 360); -	sr = sin(angle); -	cr = cos(angle); - -	if (forward) -	{ -		forward[0] = cp*cy; -		forward[1] = cp*sy; -		forward[2] = -sp; -	} -	if (right) -	{ -		right[0] = (-1*sr*sp*cy+-1*cr*-sy); -		right[1] = (-1*sr*sp*sy+-1*cr*cy); -		right[2] = -1*sr*cp; -	} -	if (up) -	{ -		up[0] = (cr*sp*cy+-sr*-sy); -		up[1] = (cr*sp*sy+-sr*cy); -		up[2] = cr*cp; -	} -} - -/* -** assumes "src" is normalized -*/ -void PerpendicularVector( vec3_t dst, const vec3_t src ) -{ -	int	pos; -	int i; -	float minelem = 1.0F; -	vec3_t tempvec; - -	/* -	** find the smallest magnitude axially aligned vector -	*/ -	for ( pos = 0, i = 0; i < 3; i++ ) -	{ -		if ( fabs( src[i] ) < minelem ) -		{ -			pos = i; -			minelem = fabs( src[i] ); -		} -	} -	tempvec[0] = tempvec[1] = tempvec[2] = 0.0F; -	tempvec[pos] = 1.0F; - -	/* -	** project the point onto the plane defined by src -	*/ -	ProjectPointOnPlane( dst, tempvec, src ); - -	/* -	** normalize the result -	*/ -	VectorNormalize( dst ); -} - - diff --git a/code/game/q_shared.c b/code/game/q_shared.c deleted file mode 100644 index bd8daa5..0000000 --- a/code/game/q_shared.c +++ /dev/null @@ -1,1252 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// -// q_shared.c -- stateless support routines that are included in each code dll -#include "q_shared.h" - -float Com_Clamp( float min, float max, float value ) { -	if ( value < min ) { -		return min; -	} -	if ( value > max ) { -		return max; -	} -	return value; -} - - -/* -============ -COM_SkipPath -============ -*/ -char *COM_SkipPath (char *pathname) -{ -	char	*last; -	 -	last = pathname; -	while (*pathname) -	{ -		if (*pathname=='/') -			last = pathname+1; -		pathname++; -	} -	return last; -} - -/* -============ -COM_StripExtension -============ -*/ -void COM_StripExtension( const char *in, char *out ) { -	while ( *in && *in != '.' ) { -		*out++ = *in++; -	} -	*out = 0; -} - - -/* -================== -COM_DefaultExtension -================== -*/ -void COM_DefaultExtension (char *path, int maxSize, const char *extension ) { -	char	oldPath[MAX_QPATH]; -	char    *src; - -// -// if path doesn't have a .EXT, append extension -// (extension should include the .) -// -	src = path + strlen(path) - 1; - -	while (*src != '/' && src != path) { -		if ( *src == '.' ) { -			return;                 // it has an extension -		} -		src--; -	} - -	Q_strncpyz( oldPath, path, sizeof( oldPath ) ); -	Com_sprintf( path, maxSize, "%s%s", oldPath, extension ); -} - -/* -============================================================================ - -					BYTE ORDER FUNCTIONS - -============================================================================ -*/ -/* -// can't just use function pointers, or dll linkage can -// mess up when qcommon is included in multiple places -static short	(*_BigShort) (short l); -static short	(*_LittleShort) (short l); -static int		(*_BigLong) (int l); -static int		(*_LittleLong) (int l); -static qint64	(*_BigLong64) (qint64 l); -static qint64	(*_LittleLong64) (qint64 l); -static float	(*_BigFloat) (const float *l); -static float	(*_LittleFloat) (const float *l); - -short	BigShort(short l){return _BigShort(l);} -short	LittleShort(short l) {return _LittleShort(l);} -int		BigLong (int l) {return _BigLong(l);} -int		LittleLong (int l) {return _LittleLong(l);} -qint64 	BigLong64 (qint64 l) {return _BigLong64(l);} -qint64 	LittleLong64 (qint64 l) {return _LittleLong64(l);} -float	BigFloat (const float *l) {return _BigFloat(l);} -float	LittleFloat (const float *l) {return _LittleFloat(l);} -*/ - -short   ShortSwap (short l) -{ -	byte    b1,b2; - -	b1 = l&255; -	b2 = (l>>8)&255; - -	return (b1<<8) + b2; -} - -short	ShortNoSwap (short l) -{ -	return l; -} - -int    LongSwap (int l) -{ -	byte    b1,b2,b3,b4; - -	b1 = l&255; -	b2 = (l>>8)&255; -	b3 = (l>>16)&255; -	b4 = (l>>24)&255; - -	return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; -} - -int	LongNoSwap (int l) -{ -	return l; -} - -qint64 Long64Swap (qint64 ll) -{ -	qint64	result; - -	result.b0 = ll.b7; -	result.b1 = ll.b6; -	result.b2 = ll.b5; -	result.b3 = ll.b4; -	result.b4 = ll.b3; -	result.b5 = ll.b2; -	result.b6 = ll.b1; -	result.b7 = ll.b0; - -	return result; -} - -qint64 Long64NoSwap (qint64 ll) -{ -	return ll; -} - -typedef union { -    float	f; -    unsigned int i; -} _FloatByteUnion; - -float FloatSwap (const float *f) { -	_FloatByteUnion out; - -	out.f = *f; -	out.i = LongSwap(out.i); - -	return out.f; -} - -float FloatNoSwap (const float *f) -{ -	return *f; -} - -/* -================ -Swap_Init -================ -*/ -/* -void Swap_Init (void) -{ -	byte	swaptest[2] = {1,0}; - -// set the byte swapping variables in a portable manner	 -	if ( *(short *)swaptest == 1) -	{ -		_BigShort = ShortSwap; -		_LittleShort = ShortNoSwap; -		_BigLong = LongSwap; -		_LittleLong = LongNoSwap; -		_BigLong64 = Long64Swap; -		_LittleLong64 = Long64NoSwap; -		_BigFloat = FloatSwap; -		_LittleFloat = FloatNoSwap; -	} -	else -	{ -		_BigShort = ShortNoSwap; -		_LittleShort = ShortSwap; -		_BigLong = LongNoSwap; -		_LittleLong = LongSwap; -		_BigLong64 = Long64NoSwap; -		_LittleLong64 = Long64Swap; -		_BigFloat = FloatNoSwap; -		_LittleFloat = FloatSwap; -	} - -} -*/ - -/* -============================================================================ - -PARSING - -============================================================================ -*/ - -static	char	com_token[MAX_TOKEN_CHARS]; -static	char	com_parsename[MAX_TOKEN_CHARS]; -static	int		com_lines; - -void COM_BeginParseSession( const char *name ) -{ -	com_lines = 0; -	Com_sprintf(com_parsename, sizeof(com_parsename), "%s", name); -} - -int COM_GetCurrentParseLine( void ) -{ -	return com_lines; -} - -char *COM_Parse( char **data_p ) -{ -	return COM_ParseExt( data_p, qtrue ); -} - -void COM_ParseError( char *format, ... ) -{ -	va_list argptr; -	static char string[4096]; - -	va_start (argptr, format); -	vsprintf (string, format, argptr); -	va_end (argptr); - -	Com_Printf("ERROR: %s, line %d: %s\n", com_parsename, com_lines, string); -} - -void COM_ParseWarning( char *format, ... ) -{ -	va_list argptr; -	static char string[4096]; - -	va_start (argptr, format); -	vsprintf (string, format, argptr); -	va_end (argptr); - -	Com_Printf("WARNING: %s, line %d: %s\n", com_parsename, com_lines, string); -} - -/* -============== -COM_Parse - -Parse a token out of a string -Will never return NULL, just empty strings - -If "allowLineBreaks" is qtrue then an empty -string will be returned if the next token is -a newline. -============== -*/ -static char *SkipWhitespace( char *data, qboolean *hasNewLines ) { -	int c; - -	while( (c = *data) <= ' ') { -		if( !c ) { -			return NULL; -		} -		if( c == '\n' ) { -			com_lines++; -			*hasNewLines = qtrue; -		} -		data++; -	} - -	return data; -} - -int COM_Compress( char *data_p ) { -	char *in, *out; -	int c; -	qboolean newline = qfalse, whitespace = qfalse; - -	in = out = data_p; -	if (in) { -		while ((c = *in) != 0) { -			// skip double slash comments -			if ( c == '/' && in[1] == '/' ) { -				while (*in && *in != '\n') { -					in++; -				} -			// skip /* */ comments -			} else if ( c == '/' && in[1] == '*' ) { -				while ( *in && ( *in != '*' || in[1] != '/' ) )  -					in++; -				if ( *in )  -					in += 2; -                        // record when we hit a newline -                        } else if ( c == '\n' || c == '\r' ) { -                            newline = qtrue; -                            in++; -                        // record when we hit whitespace -                        } else if ( c == ' ' || c == '\t') { -                            whitespace = qtrue; -                            in++; -                        // an actual token -			} else { -                            // if we have a pending newline, emit it (and it counts as whitespace) -                            if (newline) { -                                *out++ = '\n'; -                                newline = qfalse; -                                whitespace = qfalse; -                            } if (whitespace) { -                                *out++ = ' '; -                                whitespace = qfalse; -                            } -                             -                            // copy quoted strings unmolested -                            if (c == '"') { -                                    *out++ = c; -                                    in++; -                                    while (1) { -                                        c = *in; -                                        if (c && c != '"') { -                                            *out++ = c; -                                            in++; -                                        } else { -                                            break; -                                        } -                                    } -                                    if (c == '"') { -                                        *out++ = c; -                                        in++; -                                    } -                            } else { -                                *out = c; -                                out++; -                                in++; -                            } -			} -		} -	} -	*out = 0; -	return out - data_p; -} - -char *COM_ParseExt( char **data_p, qboolean allowLineBreaks ) -{ -	int c = 0, len; -	qboolean hasNewLines = qfalse; -	char *data; - -	data = *data_p; -	len = 0; -	com_token[0] = 0; - -	// make sure incoming data is valid -	if ( !data ) -	{ -		*data_p = NULL; -		return com_token; -	} - -	while ( 1 ) -	{ -		// skip whitespace -		data = SkipWhitespace( data, &hasNewLines ); -		if ( !data ) -		{ -			*data_p = NULL; -			return com_token; -		} -		if ( hasNewLines && !allowLineBreaks ) -		{ -			*data_p = data; -			return com_token; -		} - -		c = *data; - -		// skip double slash comments -		if ( c == '/' && data[1] == '/' ) -		{ -			data += 2; -			while (*data && *data != '\n') { -				data++; -			} -		} -		// skip /* */ comments -		else if ( c=='/' && data[1] == '*' )  -		{ -			data += 2; -			while ( *data && ( *data != '*' || data[1] != '/' ) )  -			{ -				data++; -			} -			if ( *data )  -			{ -				data += 2; -			} -		} -		else -		{ -			break; -		} -	} - -	// handle quoted strings -	if (c == '\"') -	{ -		data++; -		while (1) -		{ -			c = *data++; -			if (c=='\"' || !c) -			{ -				com_token[len] = 0; -				*data_p = ( char * ) data; -				return com_token; -			} -			if (len < MAX_TOKEN_CHARS - 1) -			{ -				com_token[len] = c; -				len++; -			} -		} -	} - -	// parse a regular word -	do -	{ -		if (len < MAX_TOKEN_CHARS - 1) -		{ -			com_token[len] = c; -			len++; -		} -		data++; -		c = *data; -		if ( c == '\n' ) -			com_lines++; -	} while (c>32); - -	com_token[len] = 0; - -	*data_p = ( char * ) data; -	return com_token; -} - - -#if 0 -// no longer used -/* -=============== -COM_ParseInfos -=============== -*/ -int COM_ParseInfos( char *buf, int max, char infos[][MAX_INFO_STRING] ) { -	char	*token; -	int		count; -	char	key[MAX_TOKEN_CHARS]; - -	count = 0; - -	while ( 1 ) { -		token = COM_Parse( &buf ); -		if ( !token[0] ) { -			break; -		} -		if ( strcmp( token, "{" ) ) { -			Com_Printf( "Missing { in info file\n" ); -			break; -		} - -		if ( count == max ) { -			Com_Printf( "Max infos exceeded\n" ); -			break; -		} - -		infos[count][0] = 0; -		while ( 1 ) { -			token = COM_ParseExt( &buf, qtrue ); -			if ( !token[0] ) { -				Com_Printf( "Unexpected end of info file\n" ); -				break; -			} -			if ( !strcmp( token, "}" ) ) { -				break; -			} -			Q_strncpyz( key, token, sizeof( key ) ); - -			token = COM_ParseExt( &buf, qfalse ); -			if ( !token[0] ) { -				strcpy( token, "<NULL>" ); -			} -			Info_SetValueForKey( infos[count], key, token ); -		} -		count++; -	} - -	return count; -} -#endif - - -/* -================== -COM_MatchToken -================== -*/ -void COM_MatchToken( char **buf_p, char *match ) { -	char	*token; - -	token = COM_Parse( buf_p ); -	if ( strcmp( token, match ) ) { -		Com_Error( ERR_DROP, "MatchToken: %s != %s", token, match ); -	} -} - - -/* -================= -SkipBracedSection - -The next token should be an open brace. -Skips until a matching close brace is found. -Internal brace depths are properly skipped. -================= -*/ -void SkipBracedSection (char **program) { -	char			*token; -	int				depth; - -	depth = 0; -	do { -		token = COM_ParseExt( program, qtrue ); -		if( token[1] == 0 ) { -			if( token[0] == '{' ) { -				depth++; -			} -			else if( token[0] == '}' ) { -				depth--; -			} -		} -	} while( depth && *program ); -} - -/* -================= -SkipRestOfLine -================= -*/ -void SkipRestOfLine ( char **data ) { -	char	*p; -	int		c; - -	p = *data; -	while ( (c = *p++) != 0 ) { -		if ( c == '\n' ) { -			com_lines++; -			break; -		} -	} - -	*data = p; -} - - -void Parse1DMatrix (char **buf_p, int x, float *m) { -	char	*token; -	int		i; - -	COM_MatchToken( buf_p, "(" ); - -	for (i = 0 ; i < x ; i++) { -		token = COM_Parse(buf_p); -		m[i] = atof(token); -	} - -	COM_MatchToken( buf_p, ")" ); -} - -void Parse2DMatrix (char **buf_p, int y, int x, float *m) { -	int		i; - -	COM_MatchToken( buf_p, "(" ); - -	for (i = 0 ; i < y ; i++) { -		Parse1DMatrix (buf_p, x, m + i * x); -	} - -	COM_MatchToken( buf_p, ")" ); -} - -void Parse3DMatrix (char **buf_p, int z, int y, int x, float *m) { -	int		i; - -	COM_MatchToken( buf_p, "(" ); - -	for (i = 0 ; i < z ; i++) { -		Parse2DMatrix (buf_p, y, x, m + i * x*y); -	} - -	COM_MatchToken( buf_p, ")" ); -} - - -/* -============================================================================ - -					LIBRARY REPLACEMENT FUNCTIONS - -============================================================================ -*/ - -int Q_isprint( int c ) -{ -	if ( c >= 0x20 && c <= 0x7E ) -		return ( 1 ); -	return ( 0 ); -} - -int Q_islower( int c ) -{ -	if (c >= 'a' && c <= 'z') -		return ( 1 ); -	return ( 0 ); -} - -int Q_isupper( int c ) -{ -	if (c >= 'A' && c <= 'Z') -		return ( 1 ); -	return ( 0 ); -} - -int Q_isalpha( int c ) -{ -	if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) -		return ( 1 ); -	return ( 0 ); -} - -char* Q_strrchr( const char* string, int c ) -{ -	char cc = c; -	char *s; -	char *sp=(char *)0; - -	s = (char*)string; - -	while (*s) -	{ -		if (*s == cc) -			sp = s; -		s++; -	} -	if (cc == 0) -		sp = s; - -	return sp; -} - -/* -============= -Q_strncpyz -  -Safe strncpy that ensures a trailing zero -============= -*/ -void Q_strncpyz( char *dest, const char *src, int destsize ) { -  // bk001129 - also NULL dest -  if ( !dest ) { -    Com_Error( ERR_FATAL, "Q_strncpyz: NULL dest" ); -  } -	if ( !src ) { -		Com_Error( ERR_FATAL, "Q_strncpyz: NULL src" ); -	} -	if ( destsize < 1 ) { -		Com_Error(ERR_FATAL,"Q_strncpyz: destsize < 1" );  -	} - -	strncpy( dest, src, destsize-1 ); -  dest[destsize-1] = 0; -} -                  -int Q_stricmpn (const char *s1, const char *s2, int n) { -	int		c1, c2; - -	// bk001129 - moved in 1.17 fix not in id codebase -        if ( s1 == NULL ) { -           if ( s2 == NULL ) -             return 0; -           else -             return -1; -        } -        else if ( s2==NULL ) -          return 1; - - -	 -	do { -		c1 = *s1++; -		c2 = *s2++; - -		if (!n--) { -			return 0;		// strings are equal until end point -		} -		 -		if (c1 != c2) { -			if (c1 >= 'a' && c1 <= 'z') { -				c1 -= ('a' - 'A'); -			} -			if (c2 >= 'a' && c2 <= 'z') { -				c2 -= ('a' - 'A'); -			} -			if (c1 != c2) { -				return c1 < c2 ? -1 : 1; -			} -		} -	} while (c1); -	 -	return 0;		// strings are equal -} - -int Q_strncmp (const char *s1, const char *s2, int n) { -	int		c1, c2; -	 -	do { -		c1 = *s1++; -		c2 = *s2++; - -		if (!n--) { -			return 0;		// strings are equal until end point -		} -		 -		if (c1 != c2) { -			return c1 < c2 ? -1 : 1; -		} -	} while (c1); -	 -	return 0;		// strings are equal -} - -int Q_stricmp (const char *s1, const char *s2) { -	return (s1 && s2) ? Q_stricmpn (s1, s2, 99999) : -1; -} - - -char *Q_strlwr( char *s1 ) { -    char	*s; - -    s = s1; -	while ( *s ) { -		*s = tolower(*s); -		s++; -	} -    return s1; -} - -char *Q_strupr( char *s1 ) { -    char	*s; - -    s = s1; -	while ( *s ) { -		*s = toupper(*s); -		s++; -	} -    return s1; -} - - -// never goes past bounds or leaves without a terminating 0 -void Q_strcat( char *dest, int size, const char *src ) { -	int		l1; - -	l1 = strlen( dest ); -	if ( l1 >= size ) { -		Com_Error( ERR_FATAL, "Q_strcat: already overflowed" ); -	} -	Q_strncpyz( dest + l1, src, size - l1 ); -} - - -int Q_PrintStrlen( const char *string ) { -	int			len; -	const char	*p; - -	if( !string ) { -		return 0; -	} - -	len = 0; -	p = string; -	while( *p ) { -		if( Q_IsColorString( p ) ) { -			p += 2; -			continue; -		} -		p++; -		len++; -	} - -	return len; -} - - -char *Q_CleanStr( char *string ) { -	char*	d; -	char*	s; -	int		c; - -	s = string; -	d = string; -	while ((c = *s) != 0 ) { -		if ( Q_IsColorString( s ) ) { -			s++; -		}		 -		else if ( c >= 0x20 && c <= 0x7E ) { -			*d++ = c; -		} -		s++; -	} -	*d = '\0'; - -	return string; -} - - -void QDECL Com_sprintf( char *dest, int size, const char *fmt, ...) { -	int		len; -	va_list		argptr; -	char	bigbuffer[32000];	// big, but small enough to fit in PPC stack - -	va_start (argptr,fmt); -	len = vsprintf (bigbuffer,fmt,argptr); -	va_end (argptr); -	if ( len >= sizeof( bigbuffer ) ) { -		Com_Error( ERR_FATAL, "Com_sprintf: overflowed bigbuffer" ); -	} -	if (len >= size) { -		Com_Printf ("Com_sprintf: overflow of %i in %i\n", len, size); -#ifdef	_DEBUG -		__asm { -			int 3; -		} -#endif -	} -	Q_strncpyz (dest, bigbuffer, size ); -} - - -/* -============ -va - -does a varargs printf into a temp buffer, so I don't need to have -varargs versions of all text functions. -FIXME: make this buffer size safe someday -============ -*/ -char	* QDECL va( char *format, ... ) { -	va_list		argptr; -	static char		string[2][32000];	// in case va is called by nested functions -	static int		index = 0; -	char	*buf; - -	buf = string[index & 1]; -	index++; - -	va_start (argptr, format); -	vsprintf (buf, format,argptr); -	va_end (argptr); - -	return buf; -} - - -/* -===================================================================== - -  INFO STRINGS - -===================================================================== -*/ - -/* -=============== -Info_ValueForKey - -Searches the string for the given -key and returns the associated value, or an empty string. -FIXME: overflow check? -=============== -*/ -char *Info_ValueForKey( const char *s, const char *key ) { -	char	pkey[BIG_INFO_KEY]; -	static	char value[2][BIG_INFO_VALUE];	// use two buffers so compares -											// work without stomping on each other -	static	int	valueindex = 0; -	char	*o; -	 -	if ( !s || !key ) { -		return ""; -	} - -	if ( strlen( s ) >= BIG_INFO_STRING ) { -		Com_Error( ERR_DROP, "Info_ValueForKey: oversize infostring" ); -	} - -	valueindex ^= 1; -	if (*s == '\\') -		s++; -	while (1) -	{ -		o = pkey; -		while (*s != '\\') -		{ -			if (!*s) -				return ""; -			*o++ = *s++; -		} -		*o = 0; -		s++; - -		o = value[valueindex]; - -		while (*s != '\\' && *s) -		{ -			*o++ = *s++; -		} -		*o = 0; - -		if (!Q_stricmp (key, pkey) ) -			return value[valueindex]; - -		if (!*s) -			break; -		s++; -	} - -	return ""; -} - - -/* -=================== -Info_NextPair - -Used to itterate through all the key/value pairs in an info string -=================== -*/ -void Info_NextPair( const char **head, char *key, char *value ) { -	char	*o; -	const char	*s; - -	s = *head; - -	if ( *s == '\\' ) { -		s++; -	} -	key[0] = 0; -	value[0] = 0; - -	o = key; -	while ( *s != '\\' ) { -		if ( !*s ) { -			*o = 0; -			*head = s; -			return; -		} -		*o++ = *s++; -	} -	*o = 0; -	s++; - -	o = value; -	while ( *s != '\\' && *s ) { -		*o++ = *s++; -	} -	*o = 0; - -	*head = s; -} - - -/* -=================== -Info_RemoveKey -=================== -*/ -void Info_RemoveKey( char *s, const char *key ) { -	char	*start; -	char	pkey[MAX_INFO_KEY]; -	char	value[MAX_INFO_VALUE]; -	char	*o; - -	if ( strlen( s ) >= MAX_INFO_STRING ) { -		Com_Error( ERR_DROP, "Info_RemoveKey: oversize infostring" ); -	} - -	if (strchr (key, '\\')) { -		return; -	} - -	while (1) -	{ -		start = s; -		if (*s == '\\') -			s++; -		o = pkey; -		while (*s != '\\') -		{ -			if (!*s) -				return; -			*o++ = *s++; -		} -		*o = 0; -		s++; - -		o = value; -		while (*s != '\\' && *s) -		{ -			if (!*s) -				return; -			*o++ = *s++; -		} -		*o = 0; - -		if (!strcmp (key, pkey) ) -		{ -			strcpy (start, s);	// remove this part -			return; -		} - -		if (!*s) -			return; -	} - -} - -/* -=================== -Info_RemoveKey_Big -=================== -*/ -void Info_RemoveKey_Big( char *s, const char *key ) { -	char	*start; -	char	pkey[BIG_INFO_KEY]; -	char	value[BIG_INFO_VALUE]; -	char	*o; - -	if ( strlen( s ) >= BIG_INFO_STRING ) { -		Com_Error( ERR_DROP, "Info_RemoveKey_Big: oversize infostring" ); -	} - -	if (strchr (key, '\\')) { -		return; -	} - -	while (1) -	{ -		start = s; -		if (*s == '\\') -			s++; -		o = pkey; -		while (*s != '\\') -		{ -			if (!*s) -				return; -			*o++ = *s++; -		} -		*o = 0; -		s++; - -		o = value; -		while (*s != '\\' && *s) -		{ -			if (!*s) -				return; -			*o++ = *s++; -		} -		*o = 0; - -		if (!strcmp (key, pkey) ) -		{ -			strcpy (start, s);	// remove this part -			return; -		} - -		if (!*s) -			return; -	} - -} - - - - -/* -================== -Info_Validate - -Some characters are illegal in info strings because they -can mess up the server's parsing -================== -*/ -qboolean Info_Validate( const char *s ) { -	if ( strchr( s, '\"' ) ) { -		return qfalse; -	} -	if ( strchr( s, ';' ) ) { -		return qfalse; -	} -	return qtrue; -} - -/* -================== -Info_SetValueForKey - -Changes or adds a key/value pair -================== -*/ -void Info_SetValueForKey( char *s, const char *key, const char *value ) { -	char	newi[MAX_INFO_STRING]; - -	if ( strlen( s ) >= MAX_INFO_STRING ) { -		Com_Error( ERR_DROP, "Info_SetValueForKey: oversize infostring" ); -	} - -	if (strchr (key, '\\') || strchr (value, '\\')) -	{ -		Com_Printf ("Can't use keys or values with a \\\n"); -		return; -	} - -	if (strchr (key, ';') || strchr (value, ';')) -	{ -		Com_Printf ("Can't use keys or values with a semicolon\n"); -		return; -	} - -	if (strchr (key, '\"') || strchr (value, '\"')) -	{ -		Com_Printf ("Can't use keys or values with a \"\n"); -		return; -	} - -	Info_RemoveKey (s, key); -	if (!value || !strlen(value)) -		return; - -	Com_sprintf (newi, sizeof(newi), "\\%s\\%s", key, value); - -	if (strlen(newi) + strlen(s) >= MAX_INFO_STRING) -	{ -		Com_Printf ("Info string length exceeded\n"); -		return; -	} - -	strcat (newi, s); -	strcpy (s, newi); -} - -/* -================== -Info_SetValueForKey_Big - -Changes or adds a key/value pair -================== -*/ -void Info_SetValueForKey_Big( char *s, const char *key, const char *value ) { -	char	newi[BIG_INFO_STRING]; - -	if ( strlen( s ) >= BIG_INFO_STRING ) { -		Com_Error( ERR_DROP, "Info_SetValueForKey: oversize infostring" ); -	} - -	if (strchr (key, '\\') || strchr (value, '\\')) -	{ -		Com_Printf ("Can't use keys or values with a \\\n"); -		return; -	} - -	if (strchr (key, ';') || strchr (value, ';')) -	{ -		Com_Printf ("Can't use keys or values with a semicolon\n"); -		return; -	} - -	if (strchr (key, '\"') || strchr (value, '\"')) -	{ -		Com_Printf ("Can't use keys or values with a \"\n"); -		return; -	} - -	Info_RemoveKey_Big (s, key); -	if (!value || !strlen(value)) -		return; - -	Com_sprintf (newi, sizeof(newi), "\\%s\\%s", key, value); - -	if (strlen(newi) + strlen(s) >= BIG_INFO_STRING) -	{ -		Com_Printf ("BIG Info string length exceeded\n"); -		return; -	} - -	strcat (s, newi); -} - - - - -//==================================================================== - - diff --git a/code/game/q_shared.h b/code/game/q_shared.h deleted file mode 100644 index 212e04c..0000000 --- a/code/game/q_shared.h +++ /dev/null @@ -1,1456 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// -#ifndef __Q_SHARED_H -#define __Q_SHARED_H - -// q_shared.h -- included first by ALL program modules. -// A user mod should never modify this file - -#define	Q3_VERSION		"ioQ3 1.33" -// 1.32 released 7-10-2002 - -#define MAX_TEAMNAME 32 - -#ifdef _MSC_VER - -#pragma warning(disable : 4018)     // signed/unsigned mismatch -#pragma warning(disable : 4032) -#pragma warning(disable : 4051) -#pragma warning(disable : 4057)		// slightly different base types -#pragma warning(disable : 4100)		// unreferenced formal parameter -#pragma warning(disable : 4115) -#pragma warning(disable : 4125)		// decimal digit terminates octal escape sequence -#pragma warning(disable : 4127)		// conditional expression is constant -#pragma warning(disable : 4136) -#pragma warning(disable : 4152)		// nonstandard extension, function/data pointer conversion in expression -//#pragma warning(disable : 4201) -//#pragma warning(disable : 4214) -#pragma warning(disable : 4244) -#pragma warning(disable : 4142)		// benign redefinition -//#pragma warning(disable : 4305)		// truncation from const double to float -//#pragma warning(disable : 4310)		// cast truncates constant value -//#pragma warning(disable:  4505) 	// unreferenced local function has been removed -#pragma warning(disable : 4514) -#pragma warning(disable : 4702)		// unreachable code -#pragma warning(disable : 4711)		// selected for automatic inline expansion -#pragma warning(disable : 4220)		// varargs matches remaining parameters -#endif - -/********************************************************************** -  VM Considerations - -  The VM can not use the standard system headers because we aren't really -  using the compiler they were meant for.  We use bg_lib.h which contains -  prototypes for the functions we define for our own use in bg_lib.c. - -  When writing mods, please add needed headers HERE, do not start including -  stuff like <stdio.h> in the various .c files that make up each of the VMs -  since you will be including system headers files can will have issues. - -  Remember, if you use a C library function that is not defined in bg_lib.c, -  you will have to add your own version for support in the VM. - - **********************************************************************/ - -#ifdef Q3_VM - -#include "bg_lib.h" - -#else - -#include <assert.h> -#include <math.h> -#include <stdio.h> -#include <stdarg.h> -#include <string.h> -#include <stdlib.h> -#include <time.h> -#include <ctype.h> -#include <limits.h> - -#endif - -#ifdef _MSC_VER - -//#pragma intrinsic( memset, memcpy ) - -#endif - - -// this is the define for determining if we have an asm version of a C function -#if (defined _M_IX86 || defined __i386__) && !defined __sun__  && !defined __LCC__ -#define id386	1 -#else -#define id386	0 -#endif - -#if (defined(powerc) || defined(powerpc) || defined(ppc) || defined(__ppc) || defined(__ppc__)) && !defined(C_ONLY) -#define idppc	1 -#if defined(__VEC__) -#define idppc_altivec 1 -#else -#define idppc_altivec 0 -#endif -#else -#define idppc	0 -#define idppc_altivec 0 -#endif - -// for windows fastcall option - -#define	QDECL - -short   ShortSwap (short l); -int		LongSwap (int l); -float	FloatSwap (const float *f); - -//======================= WIN32 DEFINES ================================= - -#ifdef WIN32 - -#define	MAC_STATIC - -#undef QDECL -#define	QDECL	__cdecl - -// buildstring will be incorporated into the version string -#ifdef _MSC_VER -#ifdef NDEBUG -#ifdef _M_IX86 -#define	CPUSTRING	"win-x86" -#elif defined _M_ALPHA -#define	CPUSTRING	"win-AXP" -#endif -#else -#ifdef _M_IX86 -#define	CPUSTRING	"win-x86-debug" -#elif defined _M_ALPHA -#define	CPUSTRING	"win-AXP-debug" -#endif -#endif -#elif defined __MINGW32__ -#ifdef NDEBUG -#ifdef __i386__ -#define	CPUSTRING	"mingw-x86" -#endif -#else -#ifdef __i386__ -#define	CPUSTRING	"mingw-x86-debug" -#endif -#endif -#endif - -#define ID_INLINE __inline  - -static ID_INLINE short BigShort( short l) { return ShortSwap(l); } -#define LittleShort -static ID_INLINE int BigLong(int l) { return LongSwap(l); } -#define LittleLong -static ID_INLINE float BigFloat(const float l) { return FloatSwap(&l); } -#define LittleFloat - -#define	PATH_SEP '\\' - -#endif - -//======================= MAC OS X DEFINES ===================== - -#if defined(MACOS_X) - -#define MAC_STATIC -#define __cdecl -#define __declspec(x) -#define stricmp strcasecmp -#define ID_INLINE inline  - -#ifdef __ppc__ -#define CPUSTRING	"MacOSX-ppc" -#elif defined __i386__ -#define CPUSTRING	"MacOSX-i386" -#else -#define CPUSTRING	"MacOSX-other" -#endif - -#define	PATH_SEP	'/' - -#define __rlwimi(out, in, shift, maskBegin, maskEnd) asm("rlwimi %0,%1,%2,%3,%4" : "=r" (out) : "r" (in), "i" (shift), "i" (maskBegin), "i" (maskEnd)) -#define __dcbt(addr, offset) asm("dcbt %0,%1" : : "b" (addr), "r" (offset)) - -static inline unsigned int __lwbrx(register void *addr, register int offset) { -    register unsigned int word; -     -    asm("lwbrx %0,%2,%1" : "=r" (word) : "r" (addr), "b" (offset)); -    return word; -} - -static inline unsigned short __lhbrx(register void *addr, register int offset) { -    register unsigned short halfword; -     -    asm("lhbrx %0,%2,%1" : "=r" (halfword) : "r" (addr), "b" (offset)); -    return halfword; -} - -static inline float __fctiw(register float f) { -    register float fi; -     -    asm("fctiw %0,%1" : "=f" (fi) : "f" (f)); - -    return fi; -} - -#define BigShort -static inline short LittleShort(short l) { return ShortSwap(l); } -#define BigLong -static inline int LittleLong (int l) { return LongSwap(l); } -#define BigFloat -static inline float LittleFloat (const float l) { return FloatSwap(&l); } - -#endif - -//======================= MAC DEFINES ================================= - -#ifdef __MACOS__ - -#include <MacTypes.h> -#define	MAC_STATIC -#define ID_INLINE inline  - -#define	CPUSTRING	"MacOS-PPC" - -#define	PATH_SEP ':' - -void Sys_PumpEvents( void ); - -#define BigShort -static inline short LittleShort(short l) { return ShortSwap(l); } -#define BigLong -static inline int LittleLong (int l) { return LongSwap(l); } -#define BigFloat -static inline float LittleFloat (const float l) { return FloatSwap(&l); } - -#endif - -//======================= LINUX DEFINES ================================= - -// the mac compiler can't handle >32k of locals, so we -// just waste space and make big arrays static... -#ifdef __linux__ - -// bk001205 - from Makefile -#define stricmp strcasecmp - -#define	MAC_STATIC // bk: FIXME -#define ID_INLINE inline  - -#ifdef __i386__ -#define	CPUSTRING	"linux-i386" -#elif defined __axp__ -#define	CPUSTRING	"linux-alpha" -#elif defined __x86_64__ -#define	CPUSTRING	"linux-x86_64" -#elif defined __powerpc64__ -#define	CPUSTRING	"linux-ppc64" -#elif defined __powerpc__ -#define	CPUSTRING	"linux-ppc" -#elif defined __s390__ -#define	CPUSTRING	"linux-s390" -#elif defined __s390x__ -#define	CPUSTRING	"linux-s390x" -#elif defined __ia64__ -#define	CPUSTRING	"linux-ia64" -#else -#define	CPUSTRING	"linux-other" -#endif - -#define	PATH_SEP '/' - -// bk001205 - try -#ifdef Q3_STATIC -#define	GAME_HARD_LINKED -#define	CGAME_HARD_LINKED -#define	UI_HARD_LINKED -#define	BOTLIB_HARD_LINKED -#endif - -#if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN -inline static short BigShort( short l) { return ShortSwap(l); } -#define LittleShort -inline static int BigLong(int l) { return LongSwap(l); } -#define LittleLong -inline static float BigFloat(const float l) { return FloatSwap(&l); } -#define LittleFloat -#else -#define BigShort -inline static short LittleShort(short l) { return ShortSwap(l); } -#define BigLong -inline static int LittleLong (int l) { return LongSwap(l); } -#define BigFloat -inline static float LittleFloat (const float l) { return FloatSwap(&l); } -#endif - -#endif - -//======================= FreeBSD DEFINES ===================== -#ifdef __FreeBSD__ // rb010123 - -#define stricmp strcasecmp - -#define MAC_STATIC -#define ID_INLINE inline  - -#ifdef __i386__ -#define CPUSTRING       "freebsd-i386" -#elif defined __axp__ -#define CPUSTRING       "freebsd-alpha" -#else -#define CPUSTRING       "freebsd-other" -#endif - -#define	PATH_SEP '/' - -// bk010116 - omitted Q3STATIC (see Linux above), broken target - -#if !idppc -static short BigShort( short l) { return ShortSwap(l); } -#define LittleShort -static int BigLong(int l) { return LongSwap(l); } -#define LittleLong -static float BigFloat(const float l) { return FloatSwap(&l); } -#define LittleFloat -#else -#define BigShort -static short LittleShort(short l) { return ShortSwap(l); } -#define BigLong -static int LittleLong (int l) { return LongSwap(l); } -#define BigFloat -static float LittleFloat (const float l) { return FloatSwap(&l); } -#endif - -#endif - -//============================================================= - -typedef unsigned char 		byte; - -typedef enum {qfalse, qtrue}	qboolean; - -typedef int		qhandle_t; -typedef int		sfxHandle_t; -typedef int		fileHandle_t; -typedef int		clipHandle_t; - - -#ifndef NULL -#define NULL ((void *)0) -#endif - -#define	MAX_QINT			0x7fffffff -#define	MIN_QINT			(-MAX_QINT-1) - - -// angle indexes -#define	PITCH				0		// up / down -#define	YAW					1		// left / right -#define	ROLL				2		// fall over - -// the game guarantees that no string from the network will ever -// exceed MAX_STRING_CHARS -#define	MAX_STRING_CHARS	1024	// max length of a string passed to Cmd_TokenizeString -#define	MAX_STRING_TOKENS	1024	// max tokens resulting from Cmd_TokenizeString -#define	MAX_TOKEN_CHARS		1024	// max length of an individual token - -#define	MAX_INFO_STRING		1024 -#define	MAX_INFO_KEY		  1024 -#define	MAX_INFO_VALUE		1024 - -#define	BIG_INFO_STRING		8192  // used for system info key only -#define	BIG_INFO_KEY		  8192 -#define	BIG_INFO_VALUE		8192 - - -#define	MAX_QPATH			64		// max length of a quake game pathname -#ifdef PATH_MAX -#define MAX_OSPATH			PATH_MAX -#else -#define	MAX_OSPATH			256		// max length of a filesystem pathname -#endif - -#define	MAX_NAME_LENGTH		32		// max length of a client name - -#define	MAX_SAY_TEXT	150 - -// paramters for command buffer stuffing -typedef enum { -	EXEC_NOW,			// don't return until completed, a VM should NEVER use this, -						// because some commands might cause the VM to be unloaded... -	EXEC_INSERT,		// insert at current position, but don't run yet -	EXEC_APPEND			// add to end of the command buffer (normal case) -} cbufExec_t; - - -// -// these aren't needed by any of the VMs.  put in another header? -// -#define	MAX_MAP_AREA_BYTES		32		// bit vector of area visibility - - -// print levels from renderer (FIXME: set up for game / cgame?) -typedef enum { -	PRINT_ALL, -	PRINT_DEVELOPER,		// only print when "developer 1" -	PRINT_WARNING, -	PRINT_ERROR -} printParm_t; - - -#ifdef ERR_FATAL -#undef ERR_FATAL			// this is be defined in malloc.h -#endif - -// parameters to the main Error routine -typedef enum { -	ERR_FATAL,					// exit the entire game with a popup window -	ERR_DROP,					// print to console and disconnect from game -	ERR_SERVERDISCONNECT,		// don't kill server -	ERR_DISCONNECT,				// client disconnected from the server -	ERR_NEED_CD					// pop up the need-cd dialog -} errorParm_t; - - -// font rendering values used by ui and cgame - -#define PROP_GAP_WIDTH			3 -#define PROP_SPACE_WIDTH		8 -#define PROP_HEIGHT				27 -#define PROP_SMALL_SIZE_SCALE	0.75 - -#define BLINK_DIVISOR			200 -#define PULSE_DIVISOR			75 - -#define UI_LEFT			0x00000000	// default -#define UI_CENTER		0x00000001 -#define UI_RIGHT		0x00000002 -#define UI_FORMATMASK	0x00000007 -#define UI_SMALLFONT	0x00000010 -#define UI_BIGFONT		0x00000020	// default -#define UI_GIANTFONT	0x00000040 -#define UI_DROPSHADOW	0x00000800 -#define UI_BLINK		0x00001000 -#define UI_INVERSE		0x00002000 -#define UI_PULSE		0x00004000 - -#if defined(_DEBUG) && !defined(BSPC) -	#define HUNK_DEBUG -#endif - -typedef enum { -	h_high, -	h_low, -	h_dontcare -} ha_pref; - -#ifdef HUNK_DEBUG -#define Hunk_Alloc( size, preference )				Hunk_AllocDebug(size, preference, #size, __FILE__, __LINE__) -void *Hunk_AllocDebug( int size, ha_pref preference, char *label, char *file, int line ); -#else -void *Hunk_Alloc( int size, ha_pref preference ); -#endif - -#if defined(__GNUC__) && !defined(__MINGW32__) && !defined(MACOS_X) -// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=371 -// custom Snd_Memset implementation for glibc memset bug workaround -void Snd_Memset (void* dest, const int val, const size_t count); -#else -#define Snd_Memset Com_Memset -#endif - -#if !( defined __VECTORC ) -void Com_Memset (void* dest, const int val, const size_t count); -void Com_Memcpy (void* dest, const void* src, const size_t count); -#else -#define Com_Memset memset -#define Com_Memcpy memcpy -#endif - -#define CIN_system	1 -#define CIN_loop	2 -#define	CIN_hold	4 -#define CIN_silent	8 -#define CIN_shader	16 - -/* -============================================================== - -MATHLIB - -============================================================== -*/ - - -typedef float vec_t; -typedef vec_t vec2_t[2]; -typedef vec_t vec3_t[3]; -typedef vec_t vec4_t[4]; -typedef vec_t vec5_t[5]; - -typedef	int	fixed4_t; -typedef	int	fixed8_t; -typedef	int	fixed16_t; - -#ifndef M_PI -#define M_PI		3.14159265358979323846f	// matches value in gcc v2 math.h -#endif - -#define NUMVERTEXNORMALS	162 -extern	vec3_t	bytedirs[NUMVERTEXNORMALS]; - -// all drawing is done to a 640*480 virtual screen size -// and will be automatically scaled to the real resolution -#define	SCREEN_WIDTH		640 -#define	SCREEN_HEIGHT		480 - -#define TINYCHAR_WIDTH		(SMALLCHAR_WIDTH) -#define TINYCHAR_HEIGHT		(SMALLCHAR_HEIGHT/2) - -#define SMALLCHAR_WIDTH		8 -#define SMALLCHAR_HEIGHT	16 - -#define BIGCHAR_WIDTH		16 -#define BIGCHAR_HEIGHT		16 - -#define	GIANTCHAR_WIDTH		32 -#define	GIANTCHAR_HEIGHT	48 - -extern	vec4_t		colorBlack; -extern	vec4_t		colorRed; -extern	vec4_t		colorGreen; -extern	vec4_t		colorBlue; -extern	vec4_t		colorYellow; -extern	vec4_t		colorMagenta; -extern	vec4_t		colorCyan; -extern	vec4_t		colorWhite; -extern	vec4_t		colorLtGrey; -extern	vec4_t		colorMdGrey; -extern	vec4_t		colorDkGrey; - -#define Q_COLOR_ESCAPE	'^' -#define Q_IsColorString(p)	( p && *(p) == Q_COLOR_ESCAPE && *((p)+1) && *((p)+1) != Q_COLOR_ESCAPE ) - -#define COLOR_BLACK		'0' -#define COLOR_RED		'1' -#define COLOR_GREEN		'2' -#define COLOR_YELLOW	'3' -#define COLOR_BLUE		'4' -#define COLOR_CYAN		'5' -#define COLOR_MAGENTA	'6' -#define COLOR_WHITE		'7' -#define ColorIndex(c)	( ( (c) - '0' ) & 7 ) - -#define S_COLOR_BLACK	"^0" -#define S_COLOR_RED		"^1" -#define S_COLOR_GREEN	"^2" -#define S_COLOR_YELLOW	"^3" -#define S_COLOR_BLUE	"^4" -#define S_COLOR_CYAN	"^5" -#define S_COLOR_MAGENTA	"^6" -#define S_COLOR_WHITE	"^7" - -extern vec4_t	g_color_table[8]; - -#define	MAKERGB( v, r, g, b ) v[0]=r;v[1]=g;v[2]=b -#define	MAKERGBA( v, r, g, b, a ) v[0]=r;v[1]=g;v[2]=b;v[3]=a - -#define DEG2RAD( a ) ( ( (a) * M_PI ) / 180.0F ) -#define RAD2DEG( a ) ( ( (a) * 180.0f ) / M_PI ) - -struct cplane_s; - -extern	vec3_t	vec3_origin; -extern	vec3_t	axisDefault[3]; - -#define	nanmask (255<<23) - -#define	IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask) - -#if idppc - -static inline float Q_rsqrt( float number ) { -		float x = 0.5f * number; -                float y; -#ifdef __GNUC__             -                asm("frsqrte %0,%1" : "=f" (y) : "f" (number)); -#else -		y = __frsqrte( number ); -#endif -		return y * (1.5f - (x * y * y)); -	} - -#ifdef __GNUC__             -static inline float Q_fabs(float x) { -    float abs_x; -     -    asm("fabs %0,%1" : "=f" (abs_x) : "f" (x)); -    return abs_x; -} -#else -#define Q_fabs __fabsf -#endif - -#else -float Q_fabs( float f ); -float Q_rsqrt( float f );		// reciprocal square root -#endif - -#define SQRTFAST( x ) ( (x) * Q_rsqrt( x ) ) - -signed char ClampChar( int i ); -signed short ClampShort( int i ); - -// this isn't a real cheap function to call! -int DirToByte( vec3_t dir ); -void ByteToDir( int b, vec3_t dir ); - -#if	1 - -#define DotProduct(x,y)			((x)[0]*(y)[0]+(x)[1]*(y)[1]+(x)[2]*(y)[2]) -#define VectorSubtract(a,b,c)	((c)[0]=(a)[0]-(b)[0],(c)[1]=(a)[1]-(b)[1],(c)[2]=(a)[2]-(b)[2]) -#define VectorAdd(a,b,c)		((c)[0]=(a)[0]+(b)[0],(c)[1]=(a)[1]+(b)[1],(c)[2]=(a)[2]+(b)[2]) -#define VectorCopy(a,b)			((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2]) -#define	VectorScale(v, s, o)	((o)[0]=(v)[0]*(s),(o)[1]=(v)[1]*(s),(o)[2]=(v)[2]*(s)) -#define	VectorMA(v, s, b, o)	((o)[0]=(v)[0]+(b)[0]*(s),(o)[1]=(v)[1]+(b)[1]*(s),(o)[2]=(v)[2]+(b)[2]*(s)) - -#else - -#define DotProduct(x,y)			_DotProduct(x,y) -#define VectorSubtract(a,b,c)	_VectorSubtract(a,b,c) -#define VectorAdd(a,b,c)		_VectorAdd(a,b,c) -#define VectorCopy(a,b)			_VectorCopy(a,b) -#define	VectorScale(v, s, o)	_VectorScale(v,s,o) -#define	VectorMA(v, s, b, o)	_VectorMA(v,s,b,o) - -#endif - -#ifdef __LCC__ -#ifdef VectorCopy -#undef VectorCopy -// this is a little hack to get more efficient copies in our interpreter -typedef struct { -	float	v[3]; -} vec3struct_t; -#define VectorCopy(a,b)	(*(vec3struct_t *)b=*(vec3struct_t *)a) -#define ID_INLINE static -#endif -#endif - -#define VectorClear(a)			((a)[0]=(a)[1]=(a)[2]=0) -#define VectorNegate(a,b)		((b)[0]=-(a)[0],(b)[1]=-(a)[1],(b)[2]=-(a)[2]) -#define VectorSet(v, x, y, z)	((v)[0]=(x), (v)[1]=(y), (v)[2]=(z)) -#define Vector4Copy(a,b)		((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3]) - -#define	SnapVector(v) {v[0]=((int)(v[0]));v[1]=((int)(v[1]));v[2]=((int)(v[2]));} -// just in case you do't want to use the macros -vec_t _DotProduct( const vec3_t v1, const vec3_t v2 ); -void _VectorSubtract( const vec3_t veca, const vec3_t vecb, vec3_t out ); -void _VectorAdd( const vec3_t veca, const vec3_t vecb, vec3_t out ); -void _VectorCopy( const vec3_t in, vec3_t out ); -void _VectorScale( const vec3_t in, float scale, vec3_t out ); -void _VectorMA( const vec3_t veca, float scale, const vec3_t vecb, vec3_t vecc ); - -unsigned ColorBytes3 (float r, float g, float b); -unsigned ColorBytes4 (float r, float g, float b, float a); - -float NormalizeColor( const vec3_t in, vec3_t out ); - -float RadiusFromBounds( const vec3_t mins, const vec3_t maxs ); -void ClearBounds( vec3_t mins, vec3_t maxs ); -void AddPointToBounds( const vec3_t v, vec3_t mins, vec3_t maxs ); - -#ifndef __LCC__ -static ID_INLINE int VectorCompare( const vec3_t v1, const vec3_t v2 ) { -	if (v1[0] != v2[0] || v1[1] != v2[1] || v1[2] != v2[2]) { -		return 0; -	}			 -	return 1; -} - -static ID_INLINE vec_t VectorLength( const vec3_t v ) { -	return (vec_t)sqrt (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); -} - -static ID_INLINE vec_t VectorLengthSquared( const vec3_t v ) { -	return (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); -} - -static ID_INLINE vec_t Distance( const vec3_t p1, const vec3_t p2 ) { -	vec3_t	v; - -	VectorSubtract (p2, p1, v); -	return VectorLength( v ); -} - -static ID_INLINE vec_t DistanceSquared( const vec3_t p1, const vec3_t p2 ) { -	vec3_t	v; - -	VectorSubtract (p2, p1, v); -	return v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; -} - -// fast vector normalize routine that does not check to make sure -// that length != 0, nor does it return length, uses rsqrt approximation -static ID_INLINE void VectorNormalizeFast( vec3_t v ) -{ -	float ilength; - -	ilength = Q_rsqrt( DotProduct( v, v ) ); - -	v[0] *= ilength; -	v[1] *= ilength; -	v[2] *= ilength; -} - -static ID_INLINE void VectorInverse( vec3_t v ){ -	v[0] = -v[0]; -	v[1] = -v[1]; -	v[2] = -v[2]; -} - -static ID_INLINE void CrossProduct( const vec3_t v1, const vec3_t v2, vec3_t cross ) { -	cross[0] = v1[1]*v2[2] - v1[2]*v2[1]; -	cross[1] = v1[2]*v2[0] - v1[0]*v2[2]; -	cross[2] = v1[0]*v2[1] - v1[1]*v2[0]; -} - -#else -int VectorCompare( const vec3_t v1, const vec3_t v2 ); - -vec_t VectorLength( const vec3_t v ); - -vec_t VectorLengthSquared( const vec3_t v ); - -vec_t Distance( const vec3_t p1, const vec3_t p2 ); - -vec_t DistanceSquared( const vec3_t p1, const vec3_t p2 ); -  -void VectorNormalizeFast( vec3_t v ); - -void VectorInverse( vec3_t v ); - -void CrossProduct( const vec3_t v1, const vec3_t v2, vec3_t cross ); - -#endif - -vec_t VectorNormalize (vec3_t v);		// returns vector length -vec_t VectorNormalize2( const vec3_t v, vec3_t out ); -void Vector4Scale( const vec4_t in, vec_t scale, vec4_t out ); -void VectorRotate( vec3_t in, vec3_t matrix[3], vec3_t out ); -int Q_log2(int val); - -float Q_acos(float c); - -int		Q_rand( int *seed ); -float	Q_random( int *seed ); -float	Q_crandom( int *seed ); - -#define random()	((rand () & 0x7fff) / ((float)0x7fff)) -#define crandom()	(2.0 * (random() - 0.5)) - -void vectoangles( const vec3_t value1, vec3_t angles); -void AnglesToAxis( const vec3_t angles, vec3_t axis[3] ); - -void AxisClear( vec3_t axis[3] ); -void AxisCopy( vec3_t in[3], vec3_t out[3] ); - -void SetPlaneSignbits( struct cplane_s *out ); -int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *plane); - -float	AngleMod(float a); -float	LerpAngle (float from, float to, float frac); -float	AngleSubtract( float a1, float a2 ); -void	AnglesSubtract( vec3_t v1, vec3_t v2, vec3_t v3 ); - -float AngleNormalize360 ( float angle ); -float AngleNormalize180 ( float angle ); -float AngleDelta ( float angle1, float angle2 ); - -qboolean PlaneFromPoints( vec4_t plane, const vec3_t a, const vec3_t b, const vec3_t c ); -void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal ); -void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, float degrees ); -void RotateAroundDirection( vec3_t axis[3], float yaw ); -void MakeNormalVectors( const vec3_t forward, vec3_t right, vec3_t up ); -// perpendicular vector could be replaced by this - -//int	PlaneTypeForNormal (vec3_t normal); - -void MatrixMultiply(float in1[3][3], float in2[3][3], float out[3][3]); -void AngleVectors( const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up); -void PerpendicularVector( vec3_t dst, const vec3_t src ); - - -//============================================= - -float Com_Clamp( float min, float max, float value ); - -char	*COM_SkipPath( char *pathname ); -void	COM_StripExtension( const char *in, char *out ); -void	COM_DefaultExtension( char *path, int maxSize, const char *extension ); - -void	COM_BeginParseSession( const char *name ); -int		COM_GetCurrentParseLine( void ); -char	*COM_Parse( char **data_p ); -char	*COM_ParseExt( char **data_p, qboolean allowLineBreak ); -int		COM_Compress( char *data_p ); -void	COM_ParseError( char *format, ... ); -void	COM_ParseWarning( char *format, ... ); -//int		COM_ParseInfos( char *buf, int max, char infos[][MAX_INFO_STRING] ); - -#define MAX_TOKENLENGTH		1024 - -#ifndef TT_STRING -//token types -#define TT_STRING					1			// string -#define TT_LITERAL					2			// literal -#define TT_NUMBER					3			// number -#define TT_NAME						4			// name -#define TT_PUNCTUATION				5			// punctuation -#endif - -typedef struct pc_token_s -{ -	int type; -	int subtype; -	int intvalue; -	float floatvalue; -	char string[MAX_TOKENLENGTH]; -} pc_token_t; - -// data is an in/out parm, returns a parsed out token - -void	COM_MatchToken( char**buf_p, char *match ); - -void SkipBracedSection (char **program); -void SkipRestOfLine ( char **data ); - -void Parse1DMatrix (char **buf_p, int x, float *m); -void Parse2DMatrix (char **buf_p, int y, int x, float *m); -void Parse3DMatrix (char **buf_p, int z, int y, int x, float *m); - -void	QDECL Com_sprintf (char *dest, int size, const char *fmt, ...); - - -// mode parm for FS_FOpenFile -typedef enum { -	FS_READ, -	FS_WRITE, -	FS_APPEND, -	FS_APPEND_SYNC -} fsMode_t; - -typedef enum { -	FS_SEEK_CUR, -	FS_SEEK_END, -	FS_SEEK_SET -} fsOrigin_t; - -//============================================= - -int Q_isprint( int c ); -int Q_islower( int c ); -int Q_isupper( int c ); -int Q_isalpha( int c ); - -// portable case insensitive compare -int		Q_stricmp (const char *s1, const char *s2); -int		Q_strncmp (const char *s1, const char *s2, int n); -int		Q_stricmpn (const char *s1, const char *s2, int n); -char	*Q_strlwr( char *s1 ); -char	*Q_strupr( char *s1 ); -char	*Q_strrchr( const char* string, int c ); - -// buffer size safe library replacements -void	Q_strncpyz( char *dest, const char *src, int destsize ); -void	Q_strcat( char *dest, int size, const char *src ); - -// strlen that discounts Quake color sequences -int Q_PrintStrlen( const char *string ); -// removes color sequences from string -char *Q_CleanStr( char *string ); - -//============================================= - -// 64-bit integers for global rankings interface -// implemented as a struct for qvm compatibility -typedef struct -{ -	byte	b0; -	byte	b1; -	byte	b2; -	byte	b3; -	byte	b4; -	byte	b5; -	byte	b6; -	byte	b7; -} qint64; - -//============================================= -/* -short	BigShort(short l); -short	LittleShort(short l); -int		BigLong (int l); -int		LittleLong (int l); -qint64  BigLong64 (qint64 l); -qint64  LittleLong64 (qint64 l); -float	BigFloat (const float *l); -float	LittleFloat (const float *l); - -void	Swap_Init (void); -*/ -char	* QDECL va(char *format, ...); - -//============================================= - -// -// key / value info strings -// -char *Info_ValueForKey( const char *s, const char *key ); -void Info_RemoveKey( char *s, const char *key ); -void Info_RemoveKey_big( char *s, const char *key ); -void Info_SetValueForKey( char *s, const char *key, const char *value ); -void Info_SetValueForKey_Big( char *s, const char *key, const char *value ); -qboolean Info_Validate( const char *s ); -void Info_NextPair( const char **s, char *key, char *value ); - -// this is only here so the functions in q_shared.c and bg_*.c can link -void	QDECL Com_Error( int level, const char *error, ... ); -void	QDECL Com_Printf( const char *msg, ... ); - - -/* -========================================================== - -CVARS (console variables) - -Many variables can be used for cheating purposes, so when -cheats is zero, force all unspecified variables to their -default values. -========================================================== -*/ - -#define	CVAR_ARCHIVE		1	// set to cause it to be saved to vars.rc -								// used for system variables, not for player -								// specific configurations -#define	CVAR_USERINFO		2	// sent to server on connect or change -#define	CVAR_SERVERINFO		4	// sent in response to front end requests -#define	CVAR_SYSTEMINFO		8	// these cvars will be duplicated on all clients -#define	CVAR_INIT			16	// don't allow change from console at all, -								// but can be set from the command line -#define	CVAR_LATCH			32	// will only change when C code next does -								// a Cvar_Get(), so it can't be changed -								// without proper initialization.  modified -								// will be set, even though the value hasn't -								// changed yet -#define	CVAR_ROM			64	// display only, cannot be set by user at all -#define	CVAR_USER_CREATED	128	// created by a set command -#define	CVAR_TEMP			256	// can be set even when cheats are disabled, but is not archived -#define CVAR_CHEAT			512	// can not be changed if cheats are disabled -#define CVAR_NORESTART		1024	// do not clear when a cvar_restart is issued - -// nothing outside the Cvar_*() functions should modify these fields! -typedef struct cvar_s { -	char		*name; -	char		*string; -	char		*resetString;		// cvar_restart will reset to this value -	char		*latchedString;		// for CVAR_LATCH vars -	int			flags; -	qboolean	modified;			// set each time the cvar is changed -	int			modificationCount;	// incremented each time the cvar is changed -	float		value;				// atof( string ) -	int			integer;			// atoi( string ) -	struct cvar_s *next; -	struct cvar_s *hashNext; -} cvar_t; - -#define	MAX_CVAR_VALUE_STRING	256 - -typedef int	cvarHandle_t; - -// the modules that run in the virtual machine can't access the cvar_t directly, -// so they must ask for structured updates -typedef struct { -	cvarHandle_t	handle; -	int			modificationCount; -	float		value; -	int			integer; -	char		string[MAX_CVAR_VALUE_STRING]; -} vmCvar_t; - -/* -============================================================== - -COLLISION DETECTION - -============================================================== -*/ - -#include "surfaceflags.h"			// shared with the q3map utility - -// plane types are used to speed some tests -// 0-2 are axial planes -#define	PLANE_X			0 -#define	PLANE_Y			1 -#define	PLANE_Z			2 -#define	PLANE_NON_AXIAL	3 - - -/* -================= -PlaneTypeForNormal -================= -*/ - -#define PlaneTypeForNormal(x) (x[0] == 1.0 ? PLANE_X : (x[1] == 1.0 ? PLANE_Y : (x[2] == 1.0 ? PLANE_Z : PLANE_NON_AXIAL) ) ) - -// plane_t structure -// !!! if this is changed, it must be changed in asm code too !!! -typedef struct cplane_s { -	vec3_t	normal; -	float	dist; -	byte	type;			// for fast side tests: 0,1,2 = axial, 3 = nonaxial -	byte	signbits;		// signx + (signy<<1) + (signz<<2), used as lookup during collision -	byte	pad[2]; -} cplane_t; - - -// a trace is returned when a box is swept through the world -typedef struct { -	qboolean	allsolid;	// if true, plane is not valid -	qboolean	startsolid;	// if true, the initial point was in a solid area -	float		fraction;	// time completed, 1.0 = didn't hit anything -	vec3_t		endpos;		// final position -	cplane_t	plane;		// surface normal at impact, transformed to world space -	int			surfaceFlags;	// surface hit -	int			contents;	// contents on other side of surface hit -	int			entityNum;	// entity the contacted sirface is a part of -} trace_t; - -// trace->entityNum can also be 0 to (MAX_GENTITIES-1) -// or ENTITYNUM_NONE, ENTITYNUM_WORLD - - -// markfragments are returned by CM_MarkFragments() -typedef struct { -	int		firstPoint; -	int		numPoints; -} markFragment_t; - - - -typedef struct { -	vec3_t		origin; -	vec3_t		axis[3]; -} orientation_t; - -//===================================================================== - - -// in order from highest priority to lowest -// if none of the catchers are active, bound key strings will be executed -#define KEYCATCH_CONSOLE		0x0001 -#define	KEYCATCH_UI					0x0002 -#define	KEYCATCH_MESSAGE		0x0004 -#define	KEYCATCH_CGAME			0x0008 - - -// sound channels -// channel 0 never willingly overrides -// other channels will allways override a playing sound on that channel -typedef enum { -	CHAN_AUTO, -	CHAN_LOCAL,		// menu sounds, etc -	CHAN_WEAPON, -	CHAN_VOICE, -	CHAN_ITEM, -	CHAN_BODY, -	CHAN_LOCAL_SOUND,	// chat messages, etc -	CHAN_ANNOUNCER		// announcer voices, etc -} soundChannel_t; - - -/* -======================================================================== - -  ELEMENTS COMMUNICATED ACROSS THE NET - -======================================================================== -*/ - -#define	ANGLE2SHORT(x)	((int)((x)*65536/360) & 65535) -#define	SHORT2ANGLE(x)	((x)*(360.0/65536)) - -#define	SNAPFLAG_RATE_DELAYED	1 -#define	SNAPFLAG_NOT_ACTIVE		2	// snapshot used during connection and for zombies -#define SNAPFLAG_SERVERCOUNT	4	// toggled every map_restart so transitions can be detected - -// -// per-level limits -// -#define	MAX_CLIENTS			64		// absolute limit -#define MAX_LOCATIONS		64 - -#define	GENTITYNUM_BITS		10		// don't need to send any more -#define	MAX_GENTITIES		(1<<GENTITYNUM_BITS) - -// entitynums are communicated with GENTITY_BITS, so any reserved -// values that are going to be communcated over the net need to -// also be in this range -#define	ENTITYNUM_NONE		(MAX_GENTITIES-1) -#define	ENTITYNUM_WORLD		(MAX_GENTITIES-2) -#define	ENTITYNUM_MAX_NORMAL	(MAX_GENTITIES-2) - - -#define	MAX_MODELS			256		// these are sent over the net as 8 bits -#define	MAX_SOUNDS			256		// so they cannot be blindly increased - - -#define	MAX_CONFIGSTRINGS	1024 - -// these are the only configstrings that the system reserves, all the -// other ones are strictly for servergame to clientgame communication -#define	CS_SERVERINFO		0		// an info string with all the serverinfo cvars -#define	CS_SYSTEMINFO		1		// an info string for server system to client system configuration (timescale, etc) - -#define	RESERVED_CONFIGSTRINGS	2	// game can't modify below this, only the system can - -#define	MAX_GAMESTATE_CHARS	16000 -typedef struct { -	int			stringOffsets[MAX_CONFIGSTRINGS]; -	char		stringData[MAX_GAMESTATE_CHARS]; -	int			dataCount; -} gameState_t; - -//========================================================= - -// bit field limits -#define	MAX_STATS				16 -#define	MAX_PERSISTANT			16 -#define	MAX_POWERUPS			16 -#define	MAX_WEAPONS				16		 - -#define	MAX_PS_EVENTS			2 - -#define PS_PMOVEFRAMECOUNTBITS	6 - -// playerState_t is the information needed by both the client and server -// to predict player motion and actions -// nothing outside of pmove should modify these, or some degree of prediction error -// will occur - -// you can't add anything to this without modifying the code in msg.c - -// playerState_t is a full superset of entityState_t as it is used by players, -// so if a playerState_t is transmitted, the entityState_t can be fully derived -// from it. -typedef struct playerState_s { -	int			commandTime;	// cmd->serverTime of last executed command -	int			pm_type; -	int			bobCycle;		// for view bobbing and footstep generation -	int			pm_flags;		// ducked, jump_held, etc -	int			pm_time; - -	vec3_t		origin; -	vec3_t		velocity; -	int			weaponTime; -	int			gravity; -	int			speed; -	int			delta_angles[3];	// add to command angles to get view direction -									// changed by spawns, rotating objects, and teleporters - -	int			groundEntityNum;// ENTITYNUM_NONE = in air - -	int			legsTimer;		// don't change low priority animations until this runs out -	int			legsAnim;		// mask off ANIM_TOGGLEBIT - -	int			torsoTimer;		// don't change low priority animations until this runs out -	int			torsoAnim;		// mask off ANIM_TOGGLEBIT - -	int			movementDir;	// a number 0 to 7 that represents the reletive angle -								// of movement to the view angle (axial and diagonals) -								// when at rest, the value will remain unchanged -								// used to twist the legs during strafing - -	vec3_t		grapplePoint;	// location of grapple to pull towards if PMF_GRAPPLE_PULL - -	int			eFlags;			// copied to entityState_t->eFlags - -	int			eventSequence;	// pmove generated events -	int			events[MAX_PS_EVENTS]; -	int			eventParms[MAX_PS_EVENTS]; - -	int			externalEvent;	// events set on player from another source -	int			externalEventParm; -	int			externalEventTime; - -	int			clientNum;		// ranges from 0 to MAX_CLIENTS-1 -	int			weapon;			// copied to entityState_t->weapon -	int			weaponstate; - -	vec3_t		viewangles;		// for fixed views -	int			viewheight; - -	// damage feedback -	int			damageEvent;	// when it changes, latch the other parms -	int			damageYaw; -	int			damagePitch; -	int			damageCount; - -	int			stats[MAX_STATS]; -	int			persistant[MAX_PERSISTANT];	// stats that aren't cleared on death -	int			powerups[MAX_POWERUPS];	// level.time that the powerup runs out -	int			ammo[MAX_WEAPONS]; - -	int			generic1; -	int			loopSound; -	int			jumppad_ent;	// jumppad entity hit this frame - -	// not communicated over the net at all -	int			ping;			// server to game info for scoreboard -	int			pmove_framecount;	// FIXME: don't transmit over the network -	int			jumppad_frame; -	int			entityEventSequence; -} playerState_t; - - -//==================================================================== - - -// -// usercmd_t->button bits, many of which are generated by the client system, -// so they aren't game/cgame only definitions -// -#define	BUTTON_ATTACK		1 -#define	BUTTON_TALK			2			// displays talk balloon and disables actions -#define	BUTTON_USE_HOLDABLE	4 -#define	BUTTON_GESTURE		8 -#define	BUTTON_WALKING		16			// walking can't just be infered from MOVE_RUN -										// because a key pressed late in the frame will -										// only generate a small move value for that frame -										// walking will use different animations and -										// won't generate footsteps -#define BUTTON_AFFIRMATIVE	32 -#define	BUTTON_NEGATIVE		64 - -#define BUTTON_GETFLAG		128 -#define BUTTON_GUARDBASE	256 -#define BUTTON_PATROL		512 -#define BUTTON_FOLLOWME		1024 - -#define	BUTTON_ANY			2048			// any key whatsoever - -#define	MOVE_RUN			120			// if forwardmove or rightmove are >= MOVE_RUN, -										// then BUTTON_WALKING should be set - -// usercmd_t is sent to the server each client frame -typedef struct usercmd_s { -	int				serverTime; -	int				angles[3]; -	int 			buttons; -	byte			weapon;           // weapon  -	signed char	forwardmove, rightmove, upmove; -} usercmd_t; - -//=================================================================== - -// if entityState->solid == SOLID_BMODEL, modelindex is an inline model number -#define	SOLID_BMODEL	0xffffff - -typedef enum { -	TR_STATIONARY, -	TR_INTERPOLATE,				// non-parametric, but interpolate between snapshots -	TR_LINEAR, -	TR_LINEAR_STOP, -	TR_SINE,					// value = base + sin( time / duration ) * delta -	TR_GRAVITY -} trType_t; - -typedef struct { -	trType_t	trType; -	int		trTime; -	int		trDuration;			// if non 0, trTime + trDuration = stop time -	vec3_t	trBase; -	vec3_t	trDelta;			// velocity, etc -} trajectory_t; - -// entityState_t is the information conveyed from the server -// in an update message about entities that the client will -// need to render in some way -// Different eTypes may use the information in different ways -// The messages are delta compressed, so it doesn't really matter if -// the structure size is fairly large - -typedef struct entityState_s { -	int		number;			// entity index -	int		eType;			// entityType_t -	int		eFlags; - -	trajectory_t	pos;	// for calculating position -	trajectory_t	apos;	// for calculating angles - -	int		time; -	int		time2; - -	vec3_t	origin; -	vec3_t	origin2; - -	vec3_t	angles; -	vec3_t	angles2; - -	int		otherEntityNum;	// shotgun sources, etc -	int		otherEntityNum2; - -	int		groundEntityNum;	// -1 = in air - -	int		constantLight;	// r + (g<<8) + (b<<16) + (intensity<<24) -	int		loopSound;		// constantly loop this sound - -	int		modelindex; -	int		modelindex2; -	int		clientNum;		// 0 to (MAX_CLIENTS - 1), for players and corpses -	int		frame; - -	int		solid;			// for client side prediction, trap_linkentity sets this properly - -	int		event;			// impulse events -- muzzle flashes, footsteps, etc -	int		eventParm; - -	// for players -	int		powerups;		// bit flags -	int		weapon;			// determines weapon and flash model, etc -	int		legsAnim;		// mask off ANIM_TOGGLEBIT -	int		torsoAnim;		// mask off ANIM_TOGGLEBIT - -	int		generic1; -} entityState_t; - -typedef enum { -	CA_UNINITIALIZED, -	CA_DISCONNECTED, 	// not talking to a server -	CA_AUTHORIZING,		// not used any more, was checking cd key  -	CA_CONNECTING,		// sending request packets to the server -	CA_CHALLENGING,		// sending challenge packets to the server -	CA_CONNECTED,		// netchan_t established, getting gamestate -	CA_LOADING,			// only during cgame initialization, never during main loop -	CA_PRIMED,			// got gamestate, waiting for first frame -	CA_ACTIVE,			// game views should be displayed -	CA_CINEMATIC		// playing a cinematic or a static pic, not connected to a server -} connstate_t; - -// font support  - -#define GLYPH_START 0 -#define GLYPH_END 255 -#define GLYPH_CHARSTART 32 -#define GLYPH_CHAREND 127 -#define GLYPHS_PER_FONT GLYPH_END - GLYPH_START + 1 -typedef struct { -  int height;       // number of scan lines -  int top;          // top of glyph in buffer -  int bottom;       // bottom of glyph in buffer -  int pitch;        // width for copying -  int xSkip;        // x adjustment -  int imageWidth;   // width of actual image -  int imageHeight;  // height of actual image -  float s;          // x offset in image where glyph starts -  float t;          // y offset in image where glyph starts -  float s2; -  float t2; -  qhandle_t glyph;  // handle to the shader with the glyph -  char shaderName[32]; -} glyphInfo_t; - -typedef struct { -  glyphInfo_t glyphs [GLYPHS_PER_FONT]; -  float glyphScale; -  char name[MAX_QPATH]; -} fontInfo_t; - -#define Square(x) ((x)*(x)) - -// real time -//============================================= - - -typedef struct qtime_s { -	int tm_sec;     /* seconds after the minute - [0,59] */ -	int tm_min;     /* minutes after the hour - [0,59] */ -	int tm_hour;    /* hours since midnight - [0,23] */ -	int tm_mday;    /* day of the month - [1,31] */ -	int tm_mon;     /* months since January - [0,11] */ -	int tm_year;    /* years since 1900 */ -	int tm_wday;    /* days since Sunday - [0,6] */ -	int tm_yday;    /* days since January 1 - [0,365] */ -	int tm_isdst;   /* daylight savings time flag */ -} qtime_t; - - -// server browser sources -// TTimo: AS_MPLAYER is no longer used -#define AS_LOCAL			0 -#define AS_MPLAYER		1 -#define AS_GLOBAL			2 -#define AS_FAVORITES	3 - - -// cinematic states -typedef enum { -	FMV_IDLE, -	FMV_PLAY,		// play -	FMV_EOF,		// all other conditions, i.e. stop/EOF/abort -	FMV_ID_BLT, -	FMV_ID_IDLE, -	FMV_LOOPED, -	FMV_ID_WAIT -} e_status; - -typedef enum _flag_status { -	FLAG_ATBASE = 0, -	FLAG_TAKEN,			// CTF -	FLAG_TAKEN_RED,		// One Flag CTF -	FLAG_TAKEN_BLUE,	// One Flag CTF -	FLAG_DROPPED -} flagStatus_t; - - - -#define	MAX_GLOBAL_SERVERS				4096 -#define	MAX_OTHER_SERVERS					128 -#define MAX_PINGREQUESTS					32 -#define MAX_SERVERSTATUSREQUESTS	16 - -#define SAY_ALL		0 -#define SAY_TEAM	1 -#define SAY_TELL	2 - -#define CDKEY_LEN 16 -#define CDCHKSUM_LEN 2 - - -#endif	// __Q_SHARED_H diff --git a/code/game/surfaceflags.h b/code/game/surfaceflags.h deleted file mode 100644 index 92e28d2..0000000 --- a/code/game/surfaceflags.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code 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. - -Quake III Arena source code 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 Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ -// -// This file must be identical in the quake and utils directories - -// contents flags are seperate bits -// a given brush can contribute multiple content bits - -// these definitions also need to be in q_shared.h! - -#define	CONTENTS_SOLID			1		// an eye is never valid in a solid -#define	CONTENTS_LAVA			8 -#define	CONTENTS_SLIME			16 -#define	CONTENTS_WATER			32 -#define	CONTENTS_FOG			64 - -#define CONTENTS_NOTTEAM1		0x0080 -#define CONTENTS_NOTTEAM2		0x0100 -#define CONTENTS_NOBOTCLIP		0x0200 - -#define	CONTENTS_AREAPORTAL		0x8000 - -#define	CONTENTS_PLAYERCLIP		0x10000 -#define	CONTENTS_MONSTERCLIP	0x20000 -//bot specific contents types -#define	CONTENTS_TELEPORTER		0x40000 -#define	CONTENTS_JUMPPAD		0x80000 -#define CONTENTS_CLUSTERPORTAL	0x100000 -#define CONTENTS_DONOTENTER		0x200000 -#define CONTENTS_BOTCLIP		0x400000 -#define CONTENTS_MOVER			0x800000 - -#define	CONTENTS_ORIGIN			0x1000000	// removed before bsping an entity - -#define	CONTENTS_BODY			0x2000000	// should never be on a brush, only in game -#define	CONTENTS_CORPSE			0x4000000 -#define	CONTENTS_DETAIL			0x8000000	// brushes not used for the bsp -#define	CONTENTS_STRUCTURAL		0x10000000	// brushes used for the bsp -#define	CONTENTS_TRANSLUCENT	0x20000000	// don't consume surface fragments inside -#define	CONTENTS_TRIGGER		0x40000000 -#define	CONTENTS_NODROP			0x80000000	// don't leave bodies or items (death fog, lava) - -#define	SURF_NODAMAGE			0x1		// never give falling damage -#define	SURF_SLICK				0x2		// effects game physics -#define	SURF_SKY				0x4		// lighting from environment map -#define	SURF_LADDER				0x8 -#define	SURF_NOIMPACT			0x10	// don't make missile explosions -#define	SURF_NOMARKS			0x20	// don't leave missile marks -#define	SURF_FLESH				0x40	// make flesh sounds and effects -#define	SURF_NODRAW				0x80	// don't generate a drawsurface at all -#define	SURF_HINT				0x100	// make a primary bsp splitter -#define	SURF_SKIP				0x200	// completely ignore, allowing non-closed brushes -#define	SURF_NOLIGHTMAP			0x400	// surface doesn't need a lightmap -#define	SURF_POINTLIGHT			0x800	// generate lighting info at vertexes -#define	SURF_METALSTEPS			0x1000	// clanking footsteps -#define	SURF_NOSTEPS			0x2000	// no footstep sounds -#define	SURF_NONSOLID			0x4000	// don't collide against curves with this set -#define	SURF_LIGHTFILTER		0x8000	// act as a light filter during q3map -light -#define	SURF_ALPHASHADOW		0x10000	// do per-pixel light shadow casting in q3map -#define	SURF_NODLIGHT			0x20000	// don't dlight even if solid (solid lava, skies) -#define SURF_DUST				0x40000 // leave a dust trail when walking on this surface  | 
