OpenMoHAA ..
Loading...
Searching...
No Matches
bg_public.h
1/*
2===========================================================================
3Copyright (C) 1999-2005 Id Software, Inc.
4Copyright (C) 2024 the OpenMoHAA team
5
6This file is part of Quake III Arena source code.
7
8Quake III Arena source code is free software; you can redistribute it
9and/or modify it under the terms of the GNU General Public License as
10published by the Free Software Foundation; either version 2 of the License,
11or (at your option) any later version.
12
13Quake III Arena source code is distributed in the hope that it will be
14useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with Quake III Arena source code; if not, write to the Free Software
20Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21===========================================================================
22*/
23//
24// bg_public.h -- definitions shared by both the server game and client game modules
25
26// because games can change separately from the main system version, we need a
27// second version that must match between game and cgame
28
29#pragma once
30
31#define GAME_VERSION "mohaa-base-1"
32
33static const int MINS_X = -15;
34static const int MINS_Y = -15;
35static const int MAXS_X = 15;
36static const int MAXS_Y = 15;
37
38static const int MINS_Z = 0; // IneQuation: bounding box and viewheights to match MoHAA
39static const int MAXS_Z = 94;
40
41static const int DEAD_MINS_Z = 32;
42static const int PRONE_MAXS_Z = 20;
43static const int CROUCH_MAXS_Z = 54;
44static const int CROUCH_RUN_MAXS_Z = 60;
45
46static const unsigned int DEFAULT_VIEWHEIGHT = 82;
47static const unsigned int CROUCH_RUN_VIEWHEIGHT = 64;
48static const unsigned int JUMP_START_VIEWHEIGHT = 52;
49static const unsigned int CROUCH_VIEWHEIGHT = 48;
50static const unsigned int PRONE_VIEWHEIGHT = 16;
51static const unsigned int DEAD_VIEWHEIGHT = 8;
52
53//
54// config strings are a general means of communicating variable length strings
55// from the server to all connected clients.
56//
57
58// CS_SERVERINFO and CS_SYSTEMINFO are defined in q_shared.h
59
60#define CS_MESSAGE 2 // from the map worldspawn's message field
61#define CS_SAVENAME 3 // current save
62#define CS_MOTD 4 // g_motd string for server message of the day
63#define CS_WARMUP 5 // server time when the match will be restarted
64
65// 2 values were removed in team tactics
66#define CS_MUSIC 6 // MUSIC_NewSoundtrack(cs)
67#define CS_FOGINFO 7 // cg.farplane_cull cg.farplane_distance cg.farplane_color[3]
68#define CS_SKYINFO 8 // cg.sky_alpha cg.sky_portal
69
70#define CS_GAME_VERSION 9
71#define CS_LEVEL_START_TIME 10 // so the timer only shows the current level cgs.levelStartTime
72
73#define CS_CURRENT_OBJECTIVE 11
74
75#define CS_RAIN_DENSITY 12 // cg.rain
76#define CS_RAIN_SPEED 13
77#define CS_RAIN_SPEEDVARY 14
78#define CS_RAIN_SLANT 15
79#define CS_RAIN_LENGTH 16
80#define CS_RAIN_MINDIST 17
81#define CS_RAIN_WIDTH 18
82#define CS_RAIN_SHADER 19
83#define CS_RAIN_NUMSHADERS 20
84
85//
86// Team tactics
87//
88#define CS_VOTE_TIME 21
89#define CS_VOTE_STRING 22
90#define CS_VOTE_YES 23
91#define CS_VOTE_NO 24
92#define CS_VOTE_UNDECIDED 25
93//
94
95#define CS_MATCHEND 26 // cgs.matchEndTime
96
97#define CS_MODELS 32
98#define CS_OBJECTIVES (CS_MODELS + MAX_MODELS) // 1056
99#define CS_SOUNDS (CS_OBJECTIVES + MAX_OBJECTIVES) // 1076
100
101#define CS_IMAGES (CS_SOUNDS + MAX_SOUNDS) // 1588
102#define MAX_IMAGES 64
103
104#define CS_LIGHTSTYLES (CS_IMAGES + MAX_IMAGES) //1652
105#define CS_PLAYERS (CS_LIGHTSTYLES + MAX_LIGHTSTYLES) // 1684
106
107#define CS_WEAPONS (CS_PLAYERS + MAX_CLIENTS) // su44 was here
108#define CS_TEAMS 1892
109#define CS_GENERAL_STRINGS 1893
110#define CS_SPECTATORS 1894
111#define CS_ALLIES 1895
112#define CS_AXIS 1896
113#define CS_SOUNDTRACK 1881
114
115#define CS_TEAMINFO 1
116
117#define CS_MAX (CS_PARTICLES + MAX_LOCATIONS)
118#if (CS_MAX) > MAX_CONFIGSTRINGS
119# error overflow: (CS_MAX) > MAX_CONFIGSTRINGS
120#endif
121
122#ifdef __cplusplus
123extern "C" {
124#endif
125
126 typedef enum {
127 GT_SINGLE_PLAYER, // single player
128 GT_FFA, // free for all
129 GT_TEAM, // team deathmatch
130 GT_TEAM_ROUNDS,
131 GT_OBJECTIVE,
132 // Team Assault game mode
133 GT_TOW,
134 // Team Tactics game mode
135 GT_LIBERATION,
136 GT_MAX_GAME_TYPE
137 } gametype_t;
138
139 //
140 // scale to use when evaluating entityState_t::constantLight scale
141 //
142 static const float CONSTANTLIGHT_RADIUS_SCALE = 8;
143
144 typedef enum {
145 GENDER_MALE,
146 GENDER_FEMALE,
147 GENDER_NEUTER
148 } gender_t;
149
150 enum vmAnim_e {
151 VM_ANIM_DISABLED,
152 VM_ANIM_IDLE,
153 VM_ANIM_CHARGE,
154 VM_ANIM_FIRE,
155 VM_ANIM_FIRE_SECONDARY,
156 VM_ANIM_RECHAMBER,
157 VM_ANIM_RELOAD,
158 VM_ANIM_RELOAD_SINGLE,
159 VM_ANIM_RELOAD_END,
160 VM_ANIM_PULLOUT,
161 VM_ANIM_PUTAWAY,
162 VM_ANIM_LADDERSTEP,
163 VM_ANIM_IDLE_0,
164 VM_ANIM_IDLE_1,
165 VM_ANIM_IDLE_2,
166 };
167
168 // su44: playerState_t::activeItems[8] slots
169 // they are sent as 16 bits
170 // TODO: find out rest of them
171 enum itemtype_e {
172 ITEM_AMMO,
173 ITEM_WEAPON
174 };
175
176 /*
177===================================================================================
178
179PMOVE MODULE
180
181The pmove code takes a player_state_t and a usercmd_t and generates a new player_state_t
182and some other output data. Used for local prediction on the client game and true
183movement on the server game.
184===================================================================================
185*/
186
187 static const unsigned int MAX_CLIP_PLANES = 5;
188 static const float MIN_WALK_NORMAL = 0.7f; // can't walk on very steep slopes
189
190 static const float STEPSIZE = 18;
191
192 static const float OVERCLIP = 1.001f;
193
194 // su44: our pmtype_t enum must be the same
195 // as in MoHAA, because playerState_t::pm_type
196 // is send over the net and used by cgame
197 // for movement prediction
198 typedef enum {
199 PM_NORMAL, // can accelerate and turn
200 PM_CLIMBWALL, // su44: I think it's used for ladders
201 PM_NOCLIP, // noclip movement
202 PM_DEAD, // no acceleration or turning, but free falling
203 } pmtype_t;
204
205 typedef enum {
206 EV_NONE,
207
208 EV_FALL_SHORT,
209 EV_FALL_MEDIUM,
210 EV_FALL_FAR,
211 EV_FALL_FATAL,
212 EV_TERMINAL_VELOCITY,
213
214 EV_WATER_TOUCH, // foot touches
215 EV_WATER_LEAVE, // foot leaves
216 EV_WATER_UNDER, // head touches
217 EV_WATER_CLEAR, // head leaves
218
219 EV_LAST_PREDICTED // just a marker point
220
221 // events generated by non-players or never predicted
222 } entity_event_t;
223
224#if 0
225// pmove->pm_flags
226# define PMF_DUCKED (1 << 0)
227# define PMF_JUMP_HELD (1 << 1)
228# define PMF_BACKWARDS_JUMP 0 //(1<<3) // go into backwards land
229# define PMF_BACKWARDS_RUN 0 //(1<<4) // coast down to backwards run
230# define PMF_TIME_LAND (1 << 5) // pm_time is time before rejump
231# define PMF_TIME_KNOCKBACK (1 << 6) // pm_time is an air-accelerate only time
232# define PMF_TIME_WATERJUMP (1 << 8) // pm_time is waterjump
233# define PMF_USE_ITEM_HELD (1 << 10)
234# define PMF_GRAPPLE_PULL (1 << 11) // pull towards grapple location
235# define PMF_FOLLOW (1 << 12) // spectate following another player
236# define PMF_SCOREBOARD (1 << 13) // spectate as a scoreboard
237# define PMF_INVULEXPAND (1 << 14) // invulnerability sphere set to full size
238# define PMF_FROZEN (1 << 15)
239# define PMF_NO_MOVE (1 << 16)
240# define PMF_NO_PREDICTION (1 << 17)
241# define PMF_NO_GRAVITY (1 << 18)
242# define PMF_LEVELEXIT (1 << 20) // use camera view instead of ps view
243#endif
244
245// moh pm_flags
246#define PMF_DUCKED (1 << 0)
247#define PMF_VIEW_PRONE (1 << 1)
248#define PMF_DAMAGE_ANGLES (1 << 1) // in protocol >= 15
249//
250// 2 Flags removed in team tactics
251//
252#define PMF_SPECTATING (1 << 2)
253#define PMF_RESPAWNED (1 << 3)
254#define PMF_NO_PREDICTION (1 << 4)
255#define PMF_FROZEN (1 << 5)
256#define PMF_INTERMISSION (1 << 6)
257#define PMF_SPECTATE_FOLLOW (1 << 7)
258#define PMF_CAMERA_VIEW (1 << 7) // use camera view instead of ps view
259#define PMF_NO_MOVE (1 << 8)
260#define PMF_VIEW_DUCK_RUN (1 << 9)
261#define PMF_VIEW_JUMP_START (1 << 10)
262#define PMF_LEVELEXIT (1 << 11)
263#define PMF_TURRET (1 << 12)
264#define PMF_NO_WEAPONBAR (1 << 14)
265#define PMF_NO_HUD (1 << 15)
266
267 // moveposflags
268 enum moveposflags_e {
269 MPF_POSITION_STANDING = (1 << 0),
270 MPF_POSITION_CROUCHING = (1 << 1),
271 MPF_POSITION_PRONE = (1 << 2),
272 MPF_POSITION_OFFGROUND = (1 << 3),
273 MPF_MOVEMENT_WALKING = (1 << 4),
274 MPF_MOVEMENT_RUNNING = (1 << 5),
275 MPF_MOVEMENT_FALLING = (1 << 6),
276 };
277
278#define MAXTOUCH 32
279
280 enum moveresult_e {
281 MOVERESULT_NONE, // nothing blocking
282 MOVERESULT_TURNED, // move blocked, but player turned to avoid it
283 MOVERESULT_BLOCKED, // move blocked by slope or wall
284 MOVERESULT_HITWALL // player ran into wall
285 };
286
287 typedef struct {
288 // state (in / out)
289 playerState_t *ps;
290
291 // command (in)
292 usercmd_t cmd;
293 int tracemask; // collide against these types of surfaces
294 int debugLevel; // if set, diagnostic output will be printed
295 qboolean noFootsteps; // if the game is setup for no footsteps by the server
296 qboolean alwaysAllowLean;
297
298 int framecount;
299
300 // results (out)
301 int numtouch;
302 int touchents[MAXTOUCH];
303
304 int moveresult; // indicates whether 2the player's movement was blocked and how
305 qboolean stepped;
306
307 int pmoveEvent; // events predicted on client side
308 vec3_t mins, maxs; // bounding box size
309
310 int watertype;
311 int waterlevel;
312
313 float xyspeed;
314
315 // for fixed msec Pmove
316 int pmove_fixed;
317 int pmove_msec;
318
319 // callbacks to test the world
320 // these will be different functions during game and cgame
321 void (*trace)(
322 trace_t *results,
323 const vec3_t start,
324 const vec3_t mins,
325 const vec3_t maxs,
326 const vec3_t end,
327 int passEntityNum,
328 int contentMask,
329 int capsule,
330 qboolean traceDeep
331 );
332 int (*pointcontents)(const vec3_t point, int passEntityNum);
333
334 //
335 // Openmohaa addition
336 //
337 int protocol;
338 float leanSpeed;
339 float leanRecoverSpeed;
340 float leanAdd;
341 float leanMax;
342 } pmove_t;
343
344 // if a full pmove isn't done on the client, you can just update the angles
345 void PM_GetMove(float *pfForward, float *pfRight);
346 void PM_UpdateViewAngles(playerState_t *ps, const usercmd_t *cmd);
347 void Pmove_GroundTrace(pmove_t *pmove);
348 void Pmove(pmove_t *pmove);
349 void
350 PmoveAdjustAngleSettings(vec_t *vViewAngles, vec_t *vAngles, playerState_t *pPlayerState, entityState_t *pEntState);
351 void PmoveAdjustAngleSettings_Client(
352 vec_t *vViewAngles, vec_t *vAngles, playerState_t *pPlayerState, entityState_t *pEntState
353 );
354
355 //===================================================================================
356
357 static const unsigned int MAX_LETTERBOX_SIZE = 0x7fff;
358
359 enum weaponclass_e {
360 WEAPON_CLASS_PISTOL = (1 << 0),
361 WEAPON_CLASS_RIFLE = (1 << 1),
362 WEAPON_CLASS_SMG = (1 << 2),
363 WEAPON_CLASS_MG = (1 << 3),
364 WEAPON_CLASS_GRENADE = (1 << 4),
365 WEAPON_CLASS_HEAVY = (1 << 5),
366 WEAPON_CLASS_CANNON = (1 << 6),
367 WEAPON_CLASS_ITEM = (1 << 7),
368 WEAPON_CLASS_ITEM1 = (1 << 8),
369 WEAPON_CLASS_ITEM2 = (1 << 9),
370 WEAPON_CLASS_ITEM3 = (1 << 10),
371 WEAPON_CLASS_ITEM4 = (1 << 11),
372 WEAPON_CLASS_ANY_ITEM =
373 (WEAPON_CLASS_ITEM | WEAPON_CLASS_ITEM1 | WEAPON_CLASS_ITEM2 | WEAPON_CLASS_ITEM3 | WEAPON_CLASS_ITEM4),
374 WEAPON_CLASS_ITEM_SLOT_BITS =
375 (WEAPON_CLASS_ITEM1 | WEAPON_CLASS_ITEM2 | WEAPON_CLASS_ITEM3 | WEAPON_CLASS_ITEM4),
376 WEAPON_CLASS_PRIMARY = (!(WEAPON_CLASS_PISTOL | WEAPON_CLASS_GRENADE)),
377 WEAPON_CLASS_SECONDARY = (WEAPON_CLASS_PISTOL | WEAPON_CLASS_GRENADE),
378 WEAPON_CLASS_THROWABLE = (WEAPON_CLASS_GRENADE | WEAPON_CLASS_ITEM),
379 WEAPON_CLASS_MISC =
380 (WEAPON_CLASS_CANNON | WEAPON_CLASS_ITEM | WEAPON_CLASS_ITEM1 | WEAPON_CLASS_ITEM2 | WEAPON_CLASS_ITEM3
381 | WEAPON_CLASS_ITEM4),
382 WEAPON_CLASS_ITEMINDEX = (WEAPON_CLASS_ITEM1 | WEAPON_CLASS_ITEM2 | WEAPON_CLASS_ITEM3 | WEAPON_CLASS_ITEM4)
383 };
384
385 // player_state->persistant[] indexes
386 // these fields are the only part of player_state that isn't
387 // cleared on respawn
388 // NOTE: may not have more than 16
389 typedef enum {
390 PERS_SCORE, // !!! MUST NOT CHANGE, SERVER AND GAME BOTH REFERENCE !!!
391 PERS_TEAM // player team
392 } persEnum_t;
393
394// entityState_t->eFlags
395// su44: eFlags used in MoHAA
396#define EF_EVERYFRAME 0x00000008
397#define EF_CLIMBWALL 0x00000010
398#define EF_UNARMED 0x00000020 // su44: this player has his weapon holstered
399#define EF_LINKANGLES 0x00000040
400#define EF_ALLIES 0x00000080 // su44: this player is in allies team
401#define EF_AXIS 0x00000100 // su44: this player is in axis team
402#define EF_ANY_TEAM (EF_ALLIES | EF_AXIS)
403#define EF_DEAD 0x00000200 // don't draw a foe marker over players with EF_DEAD
404#define EF_NO_LERP 0x00001000 // don't lerp animations
405
406//
407// Team assault flags
408//
409#define EF_PLAYER_IN_MENU 0x00000400 // Player is in menu
410#define EF_PLAYER_TALKING 0x00000800 // Player is talking
411#define EF_PLAYER_ARTILLERY 0x00002000 // Player is using an artillery
412
413// su44: q3 remnants
414#define EF_TICKING 0x00000002 // used to make players play the prox mine ticking sound
415#define EF_TELEPORT_BIT 0x00000004 // toggled every time the origin abruptly changes
416#define EF_AWARD_EXCELLENT 0x00000008 // draw an excellent sprite
417#define EF_PLAYER_EVENT 0x00000010
418#define EF_BOUNCE 0x00000010 // for missiles
419#define EF_AWARD_GAUNTLET 0x00000040 // draw a gauntlet sprite
420#define EF_MOVER_STOP 0x00000400 // will push otherwise
421#define EF_AWARD_CAP 0x00000800 // draw the capture sprite
422#define EF_TALK 0x00001000 // draw a talk balloon
423#define EF_CONNECTION 0x00002000 // draw a connection trouble sprite
424#define EF_VOTED 0x00004000 // already cast a vote
425#define EF_AWARD_IMPRESSIVE 0x00008000 // draw an impressive sprite
426#define EF_AWARD_DEFEND 0x00010000 // draw a defend sprite
427#define EF_AWARD_ASSIST 0x00020000 // draw a assist sprite
428#define EF_AWARD_DENIED 0x00040000 // denied
429#define EF_TEAMVOTED 0x00080000 // already cast a team vote
430#define EF_ANTISBJUICE 0x00200000 // anti sucknblow juice
431#define EF_DONT_PROCESS_COMMANDS 0x00400000 // don't process client commands for this entity
432
433//===================================================================================
434
435//
436// Tag specific flags
437//
438#define TAG_NUMBITS 10 // number of bits required to send over network
439#define TAG_MASK ((1 << 10) - 1)
440
441//
442// Camera Flags
443//
444#define CF_CAMERA_ANGLES_ABSOLUTE (1 << 0)
445#define CF_CAMERA_ANGLES_IGNORE_PITCH (1 << 1)
446#define CF_CAMERA_ANGLES_IGNORE_YAW (1 << 2)
447#define CF_CAMERA_ANGLES_ALLOWOFFSET (1 << 3)
448#define CF_CAMERA_ANGLES_TURRETMODE (1 << 4)
449#define CF_CAMERA_CUT_BIT (1 << 7) // this bit gets toggled everytime we do a hard camera cut
450
451 // means of death
452 // su44: changed to MoHAA's
453 typedef enum {
454 MOD_NONE,
455 MOD_SUICIDE,
456 MOD_CRUSH,
457 MOD_CRUSH_EVERY_FRAME,
458 MOD_TELEFRAG,
459 MOD_LAVA,
460 MOD_SLIME,
461 MOD_FALLING,
462 MOD_LAST_SELF_INFLICTED,
463 MOD_EXPLOSION,
464 MOD_EXPLODEWALL,
465 MOD_ELECTRIC,
466 MOD_ELECTRICWATER,
467 MOD_THROWNOBJECT,
468 MOD_GRENADE,
469 MOD_BEAM,
470 MOD_ROCKET,
471 MOD_IMPACT,
472 MOD_BULLET,
473 MOD_FAST_BULLET,
474 MOD_VEHICLE,
475 MOD_FIRE,
476 MOD_FLASHBANG,
477 MOD_ON_FIRE,
478 MOD_GIB,
479 MOD_IMPALE,
480 MOD_BASH,
481 MOD_SHOTGUN,
482 //
483 // Team assault
484 //
485 MOD_AAGUN,
486 //
487 // Team tactics
488 //
489 MOD_LANDMINE,
490 MOD_TOTAL_NUMBER,
491
492 } meansOfDeath_t;
493
494 //
495 // entityState_t->eType
496 //
497 typedef enum {
498 ET_MODELANIM_SKEL,
499 ET_MODELANIM,
500 ET_VEHICLE,
501 ET_PLAYER,
502 ET_ITEM,
503 ET_GENERAL,
504 ET_MISSILE,
505 ET_MOVER,
506 ET_BEAM,
507 ET_MULTIBEAM,
508 ET_PORTAL,
509 ET_EVENT_ONLY,
510 ET_RAIN,
511 ET_LEAF,
512 ET_SPEAKER,
513 ET_PUSH_TRIGGER,
514 ET_TELEPORT_TRIGGER,
515 ET_DECAL,
516 ET_EMITTER,
517 ET_ROPE,
518 ET_EVENTS,
519 ET_EXEC_COMMANDS
520 } entityType_t;
521
522 // player_state->stats[] indexes
523 // NOTE: may not have more than 32
524 typedef enum {
525 STAT_HEALTH,
526 STAT_MAXHEALTH,
527 STAT_WEAPONS,
528 STAT_EQUIPPED_WEAPON,
529 STAT_AMMO,
530 STAT_MAXAMMO,
531 STAT_CLIPAMMO,
532 STAT_MAXCLIPAMMO,
533 STAT_INZOOM,
534 STAT_CROSSHAIR,
535 STAT_LAST_PAIN,
536 STAT_NEXTHEALTH, // was unused until 2.0
537 STAT_BOSSHEALTH,
538 STAT_CINEMATIC,
539 STAT_ADDFADE,
540 STAT_LETTERBOX,
541 STAT_COMPASSNORTH,
542 STAT_OBJECTIVELEFT,
543 STAT_OBJECTIVERIGHT,
544 STAT_OBJECTIVECENTER,
545 STAT_TEAM,
546 STAT_KILLS,
547 STAT_DEATHS,
548 STAT_VEHICLE_HEALTH, // was unused until 2.0
549 STAT_VEHICLE_MAX_HEALTH, // was unused until 2.0
550 STAT_HIGHEST_SCORE,
551 STAT_ATTACKERCLIENT,
552 STAT_INFOCLIENT,
553 STAT_INFOCLIENT_HEALTH,
554 STAT_DAMAGEDIR,
555 STAT_SECONDARY_AMMO, // added in 2.0
556 STAT_LAST_STAT
557 } playerstat_t;
558
559 extern const char *means_of_death_strings[];
560
561 typedef enum {
562 TEAM_NONE,
563 TEAM_SPECTATOR,
564 TEAM_FREEFORALL,
565 TEAM_ALLIES,
566 TEAM_AXIS,
567 TEAM_MAX
568 } teamtype_t;
569
570 typedef enum {
571 SWT_NORMAL,
572 SWT_FUSE,
573 SWT_FUSE_WET
574 } stopWatchType_t;
575
576//---------------------------------------------------------
577
578// g_dmflags->integer flags
579#define DF_NO_HEALTH (1 << 0)
580#define DF_NO_POWERUPS (1 << 1)
581#define DF_WEAPONS_STAY (1 << 2)
582#define DF_NO_FALLING (1 << 3)
583#define DF_INSTANT_ITEMS (1 << 4)
584#define DF_SAME_LEVEL (1 << 5)
585#define DF_SKINTEAMS (1 << 6)
586#define DF_MODELTEAMS (1 << 7)
587#define DF_FRIENDLY_FIRE (1 << 8)
588#define DF_SPAWN_FARTHEST (1 << 9)
589#define DF_FORCE_RESPAWN (1 << 10)
590#define DF_NO_ARMOR (1 << 11)
591#define DF_FAST_WEAPONS (1 << 12)
592#define DF_NOEXIT (1 << 13)
593#define DF_INFINITE_AMMO (1 << 14)
594#define DF_FIXED_FOV (1 << 15)
595#define DF_NO_DROP_WEAPONS (1 << 16)
596#define DF_NO_FOOTSTEPS (1 << 17)
597#define DF_ALLOW_LEAN_MOVEMENT (1 << 18)
598#define DF_OLD_SNIPER (1 << 19)
599#define DF_DISALLOW_KAR98_MORTAR (1 << 20)
600
601#define DF_WEAPON_LANDMINE_ALWAYS (1 << 21)
602#define DF_WEAPON_NO_RIFLE (1 << 22)
603#define DF_WEAPON_NO_SNIPER (1 << 23)
604#define DF_WEAPON_NO_SMG (1 << 24)
605#define DF_WEAPON_NO_MG (1 << 25)
606#define DF_WEAPON_NO_ROCKET (1 << 26)
607#define DF_WEAPON_NO_SHOTGUN (1 << 27)
608#define DF_WEAPON_NO_LANDMINE (1 << 28)
609
610#define DM_FLAG(flag) (g_gametype->integer != GT_SINGLE_PLAYER && ((int)dmflags->integer & (flag)))
611
612 //
613 // Content masks
614 //
615
616#define MASK_ALL (-1)
617#define MASK_SOLID \
618 (CONTENTS_SOLID | CONTENTS_BODY | CONTENTS_UNKNOWN2 | CONTENTS_NOBOTCLIP | CONTENTS_BBOX | CONTENTS_FENCE)
619#define MASK_SAFESOLID (CONTENTS_BODY | CONTENTS_UNKNOWN2 | CONTENTS_NOBOTCLIP | CONTENTS_BBOX)
620#define MASK_USABLE (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_BODY)
621#define MASK_PLAYERSOLID \
622 (CONTENTS_TRIGGER | CONTENTS_BODY | CONTENTS_PLAYERCLIP | CONTENTS_FENCE | CONTENTS_UNKNOWN2 | CONTENTS_NOBOTCLIP \
623 | CONTENTS_BBOX | CONTENTS_SOLID)
624#define MASK_GUNTARGET \
625 (CONTENTS_SOLID | CONTENTS_LADDER | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_CLAYPIDGEON | CONTENTS_BBOX \
626 | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_UNKNOWN3 | CONTENTS_FENCE | CONTENTS_BODY | CONTENTS_CORPSE \
627 | CONTENTS_TRIGGER)
628#define MASK_FOOTSHADOW (CONTENTS_FENCE | CONTENTS_SLIME | CONTENTS_LAVA | CONTENTS_SOLID)
629#define MASK_PLAYERSTART (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_BODY)
630#define MASK_VIEWSOLID (CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_FENCE | CONTENTS_TRIGGER)
631#define MASK_DEADSOLID (CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_CORPSE | CONTENTS_NOTTEAM2 | CONTENTS_FENCE)
632#define MASK_MONSTERSOLID \
633 (CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_BODY | CONTENTS_TRIGGER | CONTENTS_UNKNOWN2 | CONTENTS_BBOX)
634#define MASK_WATER (CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME)
635#define MASK_OPAQUE (CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA)
636#define MASK_SHOT \
637 (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_FENCE | CONTENTS_WEAPONCLIP \
638 | CONTENTS_BODY | CONTENTS_TRIGGER)
639#define MASK_SHOT_TRIG \
640 (CONTENTS_SOLID | CONTENTS_CLAYPIDGEON | CONTENTS_WATER | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 \
641 | CONTENTS_FENCE | CONTENTS_WEAPONCLIP | CONTENTS_BODY | CONTENTS_TRIGGER)
642#define MASK_SHOT_FLUID \
643 (CONTENTS_SOLID | CONTENTS_WATER | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_FENCE \
644 | CONTENTS_WEAPONCLIP | CONTENTS_SHOOTONLY | CONTENTS_BODY | CONTENTS_TRIGGER)
645#define MASK_PROJECTILE \
646 (CONTENTS_SOLID | CONTENTS_BODY | CONTENTS_TRIGGER | CONTENTS_FENCE | CONTENTS_WEAPONCLIP | CONTENTS_UNKNOWN2 \
647 | CONTENTS_NOBOTCLIP | CONTENTS_BBOX)
648#define MASK_MELEE \
649 (CONTENTS_SOLID | CONTENTS_BODY | CONTENTS_TRIGGER | CONTENTS_WEAPONCLIP | CONTENTS_FENCE | CONTENTS_UNKNOWN2 \
650 | CONTENTS_NOBOTCLIP | CONTENTS_BBOX | CONTENTS_NOTTEAM1)
651#define MASK_PATHSOLID \
652 (CONTENTS_SOLID | CONTENTS_TRIGGER | CONTENTS_BODY | CONTENTS_FENCE | CONTENTS_UNKNOWN2 | CONTENTS_BBOX \
653 | CONTENTS_MONSTERCLIP)
654#define MASK_LOOK (CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_FENCE)
655#define MASK_CAMERASOLID (CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_BODY | MASK_WATER)
656#define MASK_BEAM (CONTENTS_SOLID | CONTENTS_TRIGGER | CONTENTS_PLAYERCLIP | CONTENTS_BODY | CONTENTS_FENCE)
657#define MASK_LADDER \
658 (CONTENTS_SOLID | CONTENTS_LADDER | CONTENTS_TRIGGER | CONTENTS_PLAYERCLIP | CONTENTS_BODY | CONTENTS_FENCE \
659 | CONTENTS_UNKNOWN2 | CONTENTS_NOBOTCLIP | CONTENTS_BBOX)
660#define MASK_AUTOCALCLIFE (CONTENTS_SOLID | CONTENTS_TRIGGER | CONTENTS_FENCE)
661#define MASK_EXPLOSION (CONTENTS_SOLID | CONTENTS_TRIGGER | CONTENTS_WEAPONCLIP)
662#define MASK_SOUND (CONTENTS_SOLID | CONTENTS_TRANSLUCENT)
663#define MASK_VEHICLE \
664 (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_FENCE | CONTENTS_VEHICLECLIP \
665 | CONTENTS_BODY | CONTENTS_TRIGGER)
666#define MASK_VEHICLE_TIRES (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_FENCE | CONTENTS_VEHICLECLIP | CONTENTS_TRIGGER)
667#define MASK_CLICK \
668 (CONTENTS_VEHICLECLIP | CONTENTS_WEAPONCLIP | CONTENTS_MONSTERCLIP | CONTENTS_PLAYERCLIP | CONTENTS_SOLID)
669#define MASK_CANSEE \
670 (CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 \
671 | CONTENTS_FENCE | CONTENTS_WEAPONCLIP | CONTENTS_BODY)
672#define MASK_CANSEE_NOENTS (CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_FENCE | CONTENTS_WEAPONCLIP)
673#define MASK_USE \
674 (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_FENCE | CONTENTS_WEAPONCLIP \
675 | CONTENTS_BODY | CONTENTS_TRIGGER)
676#define MASK_CLICKITEM (MASK_SOLID | CONTENTS_UNKNOWN3)
677#define MASK_ITEM (CONTENTS_SOLID | CONTENTS_TRIGGER | CONTENTS_PLAYERCLIP | CONTENTS_FENCE)
678#define MASK_TRANSITION \
679 (CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_FENCE | CONTENTS_WEAPONCLIP | CONTENTS_UNKNOWN2 \
680 | CONTENTS_BBOX)
681#define MASK_TARGETPATH \
682 (CONTENTS_SOLID | CONTENTS_TRIGGER | CONTENTS_MONSTERCLIP | CONTENTS_FENCE | CONTENTS_UNKNOWN2 | CONTENTS_BBOX)
683#define MASK_ACTORPATH (CONTENTS_SOLID | CONTENTS_FENCE | CONTENTS_MONSTERCLIP | CONTENTS_TRIGGER)
684#define MASK_GRENADEPATH \
685 (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_FENCE | CONTENTS_WEAPONCLIP \
686 | CONTENTS_BODY | CONTENTS_TRIGGER)
687#define MASK_LINE (CONTENTS_SOLID | CONTENTS_BODY | CONTENTS_UNKNOWN2 | CONTENTS_NOBOTCLIP | CONTENTS_BBOX)
688#define MASK_VEHICLETURRET \
689 (CONTENTS_SOLID | CONTENTS_TRIGGER | CONTENTS_FENCE | CONTENTS_VEHICLECLIP | CONTENTS_MONSTERCLIP \
690 | CONTENTS_PLAYERCLIP)
691#define MASK_VOLUMETRIC_SMOKE \
692 (CONTENTS_TRANSLUCENT | CONTENTS_CORPSE | CONTENTS_BODY | CONTENTS_UNKNOWN2 | CONTENTS_NOBOTCLIP | CONTENTS_BBOX \
693 | CONTENTS_WATER)
694#define MASK_SMOKE_SPRITE (CONTENTS_SOLID | CONTENTS_TRIGGER | CONTENTS_FENCE)
695#define MASK_LANDMINE \
696 (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_FENCE | CONTENTS_PLAYERCLIP \
697 | CONTENTS_WEAPONCLIP | CONTENTS_BODY | CONTENTS_DETAIL | CONTENTS_STRUCTURAL | CONTENTS_TRIGGER)
698#define MASK_LANDMINE_PLACE \
699 (CONTENTS_SOLID | CONTENTS_FENCE | CONTENTS_PLAYERCLIP | CONTENTS_DETAIL | CONTENTS_STRUCTURAL | CONTENTS_TRIGGER)
700#define MASK_BATTLELANGUAGE \
701 (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_PLAYERCLIP \
702 | CONTENTS_WEAPONCLIP | CONTENTS_BODY | CONTENTS_TRIGGER)
703#define MASK_SCRIPT_SLAVE \
704 (CONTENTS_LADDER | CONTENTS_CLAYPIDGEON | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 \
705 | CONTENTS_UNKNOWN3 | CONTENTS_BODY | CONTENTS_CORPSE)
706#define MASK_CARRYABLETURRET \
707 (CONTENTS_SOLID | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 | CONTENTS_FENCE | CONTENTS_BODY)
708#define MASK_AITURRET \
709 (CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN2 \
710 | CONTENTS_FENCE | CONTENTS_WEAPONCLIP | CONTENTS_BODY)
711#define MASK_TRANSPARENT (CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_BBOX | CONTENTS_FENCE)
712#define MASK_MOVEVEHICLE \
713 (CONTENTS_LADDER | CONTENTS_CLAYPIDGEON | CONTENTS_BBOX | CONTENTS_NOBOTCLIP | CONTENTS_UNKNOWN3 | CONTENTS_BODY \
714 | CONTENTS_CORPSE)
715#define MASK_MOVEINFO (CONTENTS_SOLID | CONTENTS_FENCE)
716#define MASK_AI_CANSEE \
717 (CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_BBOX | CONTENTS_UNKNOWN2 | CONTENTS_FENCE \
718 | CONTENTS_WEAPONCLIP)
719#define MASK_CORNER_NODE \
720 (CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_UNKNOWN2 | CONTENTS_WEAPONCLIP | CONTENTS_BODY)
721#define MASK_IGNORE_ENTS \
722 (CONTENTS_CORPSE | CONTENTS_BODY | CONTENTS_UNKNOWN3 | CONTENTS_UNKNOWN2 | CONTENTS_NOBOTCLIP | CONTENTS_BBOX \
723 | CONTENTS_CLAYPIDGEON | CONTENTS_LADDER)
724
725//
726// Marks
727//
728#define MASK_MARK (CONTENTS_TRIGGER | CONTENTS_SOLID)
729#define MASK_TREADMARK \
730 (CONTENTS_TRIGGER | CONTENTS_BODY | CONTENTS_PLAYERCLIP | CONTENTS_FENCE | CONTENTS_UNKNOWN2 | CONTENTS_NOBOTCLIP \
731 | CONTENTS_BBOX | CONTENTS_SOLID)
732
733 void BG_EvaluateTrajectoryDelta(const trajectory_t *tr, int atTime, vec3_t result);
734
735 void BG_PlayerStateToEntityState(playerState_t *ps, entityState_t *s, qboolean snap);
736 void BG_PlayerStateToEntityStateExtraPolate(playerState_t *ps, entityState_t *s, int time, qboolean snap);
737
738 enum cg_message_ver_15_e {
739 CGM_NONE,
740 CGM_BULLET_1,
741 CGM_BULLET_2,
742 CGM_BULLET_3,
743 CGM_BULLET_4,
744 CGM_BULLET_5,
745 CGM_BULLET_6,
746 CGM_BULLET_7,
747 CGM_BULLET_8,
748 CGM_BULLET_9,
749 CGM_BULLET_10,
750 CGM_BULLET_11,
751 CGM_MELEE_IMPACT,
752 CGM_EXPLOSION_EFFECT_1,
753 CGM_EXPLOSION_EFFECT_2,
754 CGM_EXPLOSION_EFFECT_3,
755 CGM_EXPLOSION_EFFECT_4,
756 CGM_PADDING_1,
757 CGM_MAKE_EFFECT_1,
758 CGM_MAKE_EFFECT_2,
759 CGM_MAKE_EFFECT_3,
760 CGM_MAKE_EFFECT_4,
761 CGM_MAKE_EFFECT_5,
762 CGM_MAKE_EFFECT_6,
763 CGM_MAKE_EFFECT_7,
764 CGM_MAKE_EFFECT_8,
765 CGM_MAKE_CRATE_DEBRIS,
766 CGM_MAKE_WINDOW_DEBRIS,
767 CGM_BULLET_NO_BARREL_1,
768 CGM_BULLET_NO_BARREL_2,
769 CGM_HUDDRAW_SHADER,
770 CGM_HUDDRAW_ALIGN,
771 CGM_HUDDRAW_RECT,
772 CGM_HUDDRAW_VIRTUALSIZE,
773 CGM_HUDDRAW_COLOR,
774 CGM_HUDDRAW_ALPHA,
775 CGM_HUDDRAW_STRING,
776 CGM_HUDDRAW_FONT,
777 CGM_NOTIFY_HIT,
778 CGM_NOTIFY_KILL,
779 CGM_VOICE_CHAT,
780 CGM_FENCEPOST,
781 };
782
783 enum cg_message_ver_6_e {
784 CGM6_NONE,
785 CGM6_BULLET_1,
786 CGM6_BULLET_2,
787 CGM6_BULLET_3,
788 CGM6_BULLET_4,
789 CGM6_BULLET_5,
790 CGM6_BULLET_6,
791 CGM6_BULLET_7,
792 CGM6_BULLET_8,
793 CGM6_BULLET_9,
794 CGM6_BULLET_10,
795 CGM6_MELEE_IMPACT,
796 CGM6_EXPLOSION_EFFECT_1,
797 CGM6_EXPLOSION_EFFECT_2,
798 CGM6_PADDING_1,
799 CGM6_MAKE_EFFECT_1,
800 CGM6_MAKE_EFFECT_2,
801 CGM6_MAKE_EFFECT_3,
802 CGM6_MAKE_EFFECT_4,
803 CGM6_MAKE_EFFECT_5,
804 CGM6_MAKE_EFFECT_6,
805 CGM6_MAKE_EFFECT_7,
806 CGM6_MAKE_EFFECT_8,
807 CGM6_MAKE_CRATE_DEBRIS,
808 CGM6_MAKE_WINDOW_DEBRIS,
809 CGM6_BULLET_NO_BARREL_1,
810 CGM6_BULLET_NO_BARREL_2,
811 CGM6_HUDDRAW_SHADER,
812 CGM6_HUDDRAW_ALIGN,
813 CGM6_HUDDRAW_RECT,
814 CGM6_HUDDRAW_VIRTUALSIZE,
815 CGM6_HUDDRAW_COLOR,
816 CGM6_HUDDRAW_ALPHA,
817 CGM6_HUDDRAW_STRING,
818 CGM6_HUDDRAW_FONT,
819 CGM6_NOTIFY_HIT,
820 CGM6_NOTIFY_KILL,
821 CGM6_VOICE_CHAT,
822 };
823
824 int BG_MapCGMToProtocol(int protocol, int messageNumber);
825
826#ifdef __cplusplus
827}
828#endif
829
830typedef enum {
831 OBJ_FLAG_NONE,
832 OBJ_FLAG_HIDDEN = 1,
833 OBJ_FLAG_CURRENT = 2,
834 OBJ_FLAG_COMPLETED = 4
835} objective_flags_t;
836
837typedef enum {
838 OBJ_STATUS_NONE = 0,
839 OBJ_STATUS_HIDDEN,
840 OBJ_STATUS_CURRENT,
841 OBJ_STATUS_COMPLETED
842} objective_status_t;
Definition bg_public.h:287
Definition q_shared.h:1452
Definition q_shared.h:1978