File: be_aas.h

package info (click to toggle)
iortcw 1.51.c%2Bdfsg1-7
  • links: PTS, VCS
  • area: contrib
  • in suites: forky, sid, trixie
  • size: 25,304 kB
  • sloc: ansic: 457,326; cpp: 6,507; makefile: 4,737; sh: 1,292; asm: 1,176; xml: 31
file content (194 lines) | stat: -rw-r--r-- 8,523 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/*
===========================================================================

Return to Castle Wolfenstein single player GPL Source Code
Copyright (C) 1999-2010 id Software LLC, a ZeniMax Media company. 

This file is part of the Return to Castle Wolfenstein single player GPL Source Code (“RTCW SP Source Code”).  

RTCW SP 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 3 of the License, or
(at your option) any later version.

RTCW SP 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 RTCW SP Source Code.  If not, see <http://www.gnu.org/licenses/>.

In addition, the RTCW SP Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the RTCW SP Source Code.  If not, please request a copy in writing from id Software at the address below.

If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.

===========================================================================
*/


/*****************************************************************************
 * name:		be_aas.h
 *
 * desc:		Area Awareness System, stuff exported to the AI
 *
 *
 *****************************************************************************/

#define MAX_AAS_WORLDS      2   // one for each bounding box type

#ifndef MAX_STRINGFIELD
#define MAX_STRINGFIELD             80
#endif

//travel flags
#define TFL_INVALID             0x0000001   //traveling temporary not possible
#define TFL_WALK                0x0000002   //walking
#define TFL_CROUCH              0x0000004   //crouching
#define TFL_BARRIERJUMP         0x0000008   //jumping onto a barrier
#define TFL_JUMP                0x0000010   //jumping
#define TFL_LADDER              0x0000020   //climbing a ladder
#define TFL_WALKOFFLEDGE        0x0000080   //walking of a ledge
#define TFL_SWIM                0x0000100   //swimming
#define TFL_WATERJUMP           0x0000200   //jumping out of the water
#define TFL_TELEPORT            0x0000400   //teleporting
#define TFL_ELEVATOR            0x0000800   //elevator
#define TFL_ROCKETJUMP          0x0001000   //rocket jumping
#define TFL_BFGJUMP             0x0002000   //bfg jumping
#define TFL_GRAPPLEHOOK         0x0004000   //grappling hook
#define TFL_DOUBLEJUMP          0x0008000   //double jump
#define TFL_RAMPJUMP            0x0010000   //ramp jump
#define TFL_STRAFEJUMP          0x0020000   //strafe jump
#define TFL_JUMPPAD             0x0040000   //jump pad
#define TFL_AIR                 0x0080000   //travel through air
#define TFL_WATER               0x0100000   //travel through water
#define TFL_SLIME               0x0200000   //travel through slime
#define TFL_LAVA                0x0400000   //travel through lava
#define TFL_DONOTENTER          0x0800000   //travel through donotenter area
#define TFL_FUNCBOB             0x1000000   //func bobbing
#define TFL_DONOTENTER_LARGE    0x2000000   //travel through donotenter area

//default travel flags

//----(SA)	modified since slime is no longer deadly
#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_SLIME |	\
						TFL_JUMPPAD | TFL_FUNCBOB )	\
					  & ~( TFL_JUMPPAD | TFL_ROCKETJUMP | TFL_BFGJUMP | TFL_GRAPPLEHOOK | TFL_DOUBLEJUMP | TFL_RAMPJUMP | TFL_STRAFEJUMP | TFL_LAVA ) )
// RF, added that bottom line so it's the same as AICAST_TFL_DEFAULT

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
//	int		weapAnim;		// mask off ANIM_TOGGLEBIT	//----(SA)	added
//----(SA)	didn't want to comment in as I wasn't sure of any implications of changing this structure.
} aas_entityinfo_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

typedef struct aas_clientmove_s
{
	vec3_t endpos;          //position at the 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
	float endcontents;      //contents at the end of movement prediction
	float time;             //time predicted ahead
	int frames;             //number of frames predicted ahead
} aas_clientmove_t;

typedef struct aas_altroutegoal_s
{
	vec3_t origin;
	int areanum;
	unsigned short starttraveltime;
	unsigned short goaltraveltime;
	unsigned short extratraveltime;
} aas_altroutegoal_t;