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