Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

be_aas.h (8040B)


      1 /*
      2 ===========================================================================
      3 Copyright (C) 1999-2005 Id Software, Inc.
      4 
      5 This file is part of Quake III Arena source code.
      6 
      7 Quake III Arena source code is free software; you can redistribute it
      8 and/or modify it under the terms of the GNU General Public License as
      9 published by the Free Software Foundation; either version 2 of the License,
     10 or (at your option) any later version.
     11 
     12 Quake III Arena source code is distributed in the hope that it will be
     13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 GNU General Public License for more details.
     16 
     17 You should have received a copy of the GNU General Public License
     18 along with Foobar; if not, write to the Free Software
     19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     20 ===========================================================================
     21 */
     22 //
     23 
     24 /*****************************************************************************
     25  * name:		be_aas.h
     26  *
     27  * desc:		Area Awareness System, stuff exported to the AI
     28  *
     29  * $Archive: /source/code/botlib/be_aas.h $
     30  *
     31  *****************************************************************************/
     32 
     33 #ifndef MAX_STRINGFIELD
     34 #define MAX_STRINGFIELD				80
     35 #endif
     36 
     37 //travel flags
     38 #define TFL_INVALID				0x00000001	//traveling temporary not possible
     39 #define TFL_WALK				0x00000002	//walking
     40 #define TFL_CROUCH				0x00000004	//crouching
     41 #define TFL_BARRIERJUMP			0x00000008	//jumping onto a barrier
     42 #define TFL_JUMP				0x00000010	//jumping
     43 #define TFL_LADDER				0x00000020	//climbing a ladder
     44 #define TFL_WALKOFFLEDGE		0x00000080	//walking of a ledge
     45 #define TFL_SWIM				0x00000100	//swimming
     46 #define TFL_WATERJUMP			0x00000200	//jumping out of the water
     47 #define TFL_TELEPORT			0x00000400	//teleporting
     48 #define TFL_ELEVATOR			0x00000800	//elevator
     49 #define TFL_ROCKETJUMP			0x00001000	//rocket jumping
     50 #define TFL_BFGJUMP				0x00002000	//bfg jumping
     51 #define TFL_GRAPPLEHOOK			0x00004000	//grappling hook
     52 #define TFL_DOUBLEJUMP			0x00008000	//double jump
     53 #define TFL_RAMPJUMP			0x00010000	//ramp jump
     54 #define TFL_STRAFEJUMP			0x00020000	//strafe jump
     55 #define TFL_JUMPPAD				0x00040000	//jump pad
     56 #define TFL_AIR					0x00080000	//travel through air
     57 #define TFL_WATER				0x00100000	//travel through water
     58 #define TFL_SLIME				0x00200000	//travel through slime
     59 #define TFL_LAVA				0x00400000	//travel through lava
     60 #define TFL_DONOTENTER			0x00800000	//travel through donotenter area
     61 #define TFL_FUNCBOB				0x01000000	//func bobbing
     62 #define TFL_FLIGHT				0x02000000	//flight
     63 #define TFL_BRIDGE				0x04000000	//move over a bridge
     64 //
     65 #define TFL_NOTTEAM1			0x08000000	//not team 1
     66 #define TFL_NOTTEAM2			0x10000000	//not team 2
     67 
     68 //default travel flags
     69 #define TFL_DEFAULT	TFL_WALK|TFL_CROUCH|TFL_BARRIERJUMP|\
     70 	TFL_JUMP|TFL_LADDER|\
     71 	TFL_WALKOFFLEDGE|TFL_SWIM|TFL_WATERJUMP|\
     72 	TFL_TELEPORT|TFL_ELEVATOR|\
     73 	TFL_AIR|TFL_WATER|TFL_JUMPPAD|TFL_FUNCBOB
     74 
     75 typedef enum
     76 {
     77 	SOLID_NOT,			// no interaction with other objects
     78 	SOLID_TRIGGER,		// only touch when inside, after moving
     79 	SOLID_BBOX,			// touch on edge
     80 	SOLID_BSP			// bsp clip, touch on edge
     81 } solid_t;
     82 
     83 //a trace is returned when a box is swept through the AAS world
     84 typedef struct aas_trace_s
     85 {
     86 	qboolean	startsolid;	// if true, the initial point was in a solid area
     87 	float		fraction;	// time completed, 1.0 = didn't hit anything
     88 	vec3_t		endpos;		// final position
     89 	int			ent;		// entity blocking the trace
     90 	int			lastarea;	// last area the trace was in (zero if none)
     91 	int			area;		// area blocking the trace (zero if none)
     92 	int			planenum;	// number of the plane that was hit
     93 } aas_trace_t;
     94 
     95 /* Defined in botlib.h
     96 
     97 //bsp_trace_t hit surface
     98 typedef struct bsp_surface_s
     99 {
    100 	char name[16];
    101 	int flags;
    102 	int value;
    103 } bsp_surface_t;
    104 
    105 //a trace is returned when a box is swept through the BSP world
    106 typedef struct bsp_trace_s
    107 {
    108 	qboolean		allsolid;	// if true, plane is not valid
    109 	qboolean		startsolid;	// if true, the initial point was in a solid area
    110 	float			fraction;	// time completed, 1.0 = didn't hit anything
    111 	vec3_t			endpos;		// final position
    112 	cplane_t		plane;		// surface normal at impact
    113 	float			exp_dist;	// expanded plane distance
    114 	int				sidenum;	// number of the brush side hit
    115 	bsp_surface_t	surface;	// hit surface
    116 	int				contents;	// contents on other side of surface hit
    117 	int				ent;		// number of entity hit
    118 } bsp_trace_t;
    119 //
    120 */
    121 
    122 //entity info
    123 typedef struct aas_entityinfo_s
    124 {
    125 	int		valid;			// true if updated this frame
    126 	int		type;			// entity type
    127 	int		flags;			// entity flags
    128 	float	ltime;			// local time
    129 	float	update_time;	// time between last and current update
    130 	int		number;			// number of the entity
    131 	vec3_t	origin;			// origin of the entity
    132 	vec3_t	angles;			// angles of the model
    133 	vec3_t	old_origin;		// for lerping
    134 	vec3_t	lastvisorigin;	// last visible origin
    135 	vec3_t	mins;			// bounding box minimums
    136 	vec3_t	maxs;			// bounding box maximums
    137 	int		groundent;		// ground entity
    138 	int		solid;			// solid type
    139 	int		modelindex;		// model used
    140 	int		modelindex2;	// weapons, CTF flags, etc
    141 	int		frame;			// model frame number
    142 	int		event;			// impulse events -- muzzle flashes, footsteps, etc
    143 	int		eventParm;		// even parameter
    144 	int		powerups;		// bit flags
    145 	int		weapon;			// determines weapon and flash model, etc
    146 	int		legsAnim;		// mask off ANIM_TOGGLEBIT
    147 	int		torsoAnim;		// mask off ANIM_TOGGLEBIT
    148 } aas_entityinfo_t;
    149 
    150 // area info
    151 typedef struct aas_areainfo_s
    152 {
    153 	int contents;
    154 	int flags;
    155 	int presencetype;
    156 	int cluster;
    157 	vec3_t mins;
    158 	vec3_t maxs;
    159 	vec3_t center;
    160 } aas_areainfo_t;
    161 
    162 // client movement prediction stop events, stop as soon as:
    163 #define SE_NONE					0
    164 #define SE_HITGROUND			1		// the ground is hit
    165 #define SE_LEAVEGROUND			2		// there's no ground
    166 #define SE_ENTERWATER			4		// water is entered
    167 #define SE_ENTERSLIME			8		// slime is entered
    168 #define SE_ENTERLAVA			16		// lava is entered
    169 #define SE_HITGROUNDDAMAGE		32		// the ground is hit with damage
    170 #define SE_GAP					64		// there's a gap
    171 #define SE_TOUCHJUMPPAD			128		// touching a jump pad area
    172 #define SE_TOUCHTELEPORTER		256		// touching teleporter
    173 #define SE_ENTERAREA			512		// the given stoparea is entered
    174 #define SE_HITGROUNDAREA		1024	// a ground face in the area is hit
    175 #define SE_HITBOUNDINGBOX		2048	// hit the specified bounding box
    176 #define SE_TOUCHCLUSTERPORTAL	4096	// touching a cluster portal
    177 
    178 typedef struct aas_clientmove_s
    179 {
    180 	vec3_t endpos;			//position at the end of movement prediction
    181 	int endarea;			//area at end of movement prediction
    182 	vec3_t velocity;		//velocity at the end of movement prediction
    183 	aas_trace_t trace;		//last trace
    184 	int presencetype;		//presence type at end of movement prediction
    185 	int stopevent;			//event that made the prediction stop
    186 	int endcontents;		//contents at the end of movement prediction
    187 	float time;				//time predicted ahead
    188 	int frames;				//number of frames predicted ahead
    189 } aas_clientmove_t;
    190 
    191 // alternate route goals
    192 #define ALTROUTEGOAL_ALL				1
    193 #define ALTROUTEGOAL_CLUSTERPORTALS		2
    194 #define ALTROUTEGOAL_VIEWPORTALS		4
    195 
    196 typedef struct aas_altroutegoal_s
    197 {
    198 	vec3_t origin;
    199 	int areanum;
    200 	unsigned short starttraveltime;
    201 	unsigned short goaltraveltime;
    202 	unsigned short extratraveltime;
    203 } aas_altroutegoal_t;
    204 
    205 // route prediction stop events
    206 #define RSE_NONE				0
    207 #define RSE_NOROUTE				1	//no route to goal
    208 #define RSE_USETRAVELTYPE		2	//stop as soon as on of the given travel types is used
    209 #define RSE_ENTERCONTENTS		4	//stop when entering the given contents
    210 #define RSE_ENTERAREA			8	//stop when entering the given area
    211 
    212 typedef struct aas_predictroute_s
    213 {
    214 	vec3_t endpos;			//position at the end of movement prediction
    215 	int endarea;			//area at end of movement prediction
    216 	int stopevent;			//event that made the prediction stop
    217 	int endcontents;		//contents at the end of movement prediction
    218 	int endtravelflags;		//end travel flags
    219 	int numareas;			//number of areas predicted ahead
    220 	int time;				//time predicted ahead (in hundreth of a sec)
    221 } aas_predictroute_t;