File: game\q_shared.h
1 /*
2 Copyright (C) 1997-2001 Id Software, Inc.
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13 See the GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 */
20
21 // q_shared.h -- included first by ALL program modules
22
23 #ifdef _WIN32
24 // unknown pragmas are SUPPOSED to be ignored, but....
25 #pragma warning(disable : 4244) // MIPS
26 #pragma warning(disable : 4136) // X86
27 #pragma warning(disable : 4051) // ALPHA
28
29 #pragma warning(disable : 4018) // signed/unsigned mismatch
30 #pragma warning(disable : 4305) // truncation from const double to float
31
32 #endif
33
34 #include <assert.h>
35 #include <math.h>
36 #include <stdio.h>
37 #include <stdarg.h>
38 #include <string.h>
39 #include <stdlib.h>
40 #include <time.h>
41
42 #if (defined _M_IX86 || defined __i386__) && !defined C_ONLY && !defined __sun__
44 #else
45 #define id386 0
46 #endif
47
48 #if defined _M_ALPHA && !defined C_ONLY
50 #else
51 #define idaxp 0
52 #endif
53
54 typedef unsigned char byte;
55 typedef enum {false, true} qboolean;
56
57
58 #ifndef NULL
59 #define NULL ((void *)0)
60 #endif
61
62
63 // angle indexes
64 #define PITCH 0 // up / down
65 #define YAW 1 // left / right
66 #define ROLL 2 // fall over
67
68 #define MAX_STRING_CHARS 1024 // max length of a string passed to Cmd_TokenizeString
69 #define MAX_STRING_TOKENS 80 // max tokens resulting from Cmd_TokenizeString
70 #define MAX_TOKEN_CHARS 128 // max length of an individual token
71
72 #define MAX_QPATH 64 // max length of a quake game pathname
73 #define MAX_OSPATH 128 // max length of a filesystem pathname
74
75 //
76 // per-level limits
77 //
78 #define MAX_CLIENTS 256 // absolute limit
79 #define MAX_EDICTS 1024 // must change protocol to increase more
80 #define MAX_LIGHTSTYLES 256
81 #define MAX_MODELS 256 // these are sent over the net as bytes
82 #define MAX_SOUNDS 256 // so they cannot be blindly increased
83 #define MAX_IMAGES 256
84 #define MAX_ITEMS 256
85 #define MAX_GENERAL (MAX_CLIENTS*2) // general config strings
86
87
88 // game print flags
89 #define PRINT_LOW 0 // pickup messages
90 #define PRINT_MEDIUM 1 // death messages
91 #define PRINT_HIGH 2 // critical messages
92 #define PRINT_CHAT 3 // chat messages
93
94
95
96 #define ERR_FATAL 0 // exit the entire game with a popup window
97 #define ERR_DROP 1 // print to console and disconnect from game
98 #define ERR_DISCONNECT 2 // don't kill server
99
100 #define PRINT_ALL 0
101 #define PRINT_DEVELOPER 1 // only print when "developer 1"
102 #define PRINT_ALERT 2
103
104
105 // destination class for gi.multicast()
106 typedef enum
107 {
108 MULTICAST_ALL,
109 MULTICAST_PHS,
110 MULTICAST_PVS,
111 MULTICAST_ALL_R,
112 MULTICAST_PHS_R,
113 MULTICAST_PVS_R
114 } multicast_t;
115
116
117 /*
118 ==============================================================
119
120 MATHLIB
121
122 ==============================================================
123 */
124
125 typedef float vec_t;
126 typedef vec_t vec3_t[3];
127 typedef vec_t vec5_t[5];
128
129 typedef int fixed4_t;
130 typedef int fixed8_t;
131 typedef int fixed16_t;
132
133 #ifndef M_PI
134 #define M_PI 3.14159265358979323846 // matches value in gcc v2 math.h
135 #endif
136
137 struct cplane_s;
138
139 extern vec3_t vec3_origin;
140
141 #define nanmask (255<<23)
142
143 #define IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask)
144
145 // microsoft's fabs seems to be ungodly slow...
146 //float Q_fabs (float f);
147 //#define fabs(f) Q_fabs(f)
148 #if !defined C_ONLY && !defined __linux__ && !defined __sgi
150 #else
151 #define Q_ftol( f ) ( long ) (f)
152 #endif
153
154 #define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
155 #define VectorSubtract(a,b,c) (c[0]=a[0]-b[0],c[1]=a[1]-b[1],c[2]=a[2]-b[2])
156 #define VectorAdd(a,b,c) (c[0]=a[0]+b[0],c[1]=a[1]+b[1],c[2]=a[2]+b[2])
157 #define VectorCopy(a,b) (b[0]=a[0],b[1]=a[1],b[2]=a[2])
158 #define VectorClear(a) (a[0]=a[1]=a[2]=0)
159 #define VectorNegate(a,b) (b[0]=-a[0],b[1]=-a[1],b[2]=-a[2])
160 #define VectorSet(v, x, y, z) (v[0]=(x), v[1]=(y), v[2]=(z))
161
162 void VectorMA (vec3_t veca, float scale, vec3_t vecb, vec3_t vecc);
163
164 // just in case you do't want to use the macros
165 vec_t _DotProduct (vec3_t v1, vec3_t v2);
166 void _VectorSubtract (vec3_t veca, vec3_t vecb, vec3_t out);
167 void _VectorAdd (vec3_t veca, vec3_t vecb, vec3_t out);
168 void _VectorCopy (vec3_t in, vec3_t out);
169
170 void ClearBounds (vec3_t mins, vec3_t maxs);
171 void AddPointToBounds (vec3_t v, vec3_t mins, vec3_t maxs);
172 int VectorCompare (vec3_t v1, vec3_t v2);
173 vec_t VectorLength (vec3_t v);
174 void CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross);
175 vec_t VectorNormalize (vec3_t v); // returns vector length
176 vec_t VectorNormalize2 (vec3_t v, vec3_t out);
177 void VectorInverse (vec3_t v);
178 void VectorScale (vec3_t in, vec_t scale, vec3_t out);
179 int Q_log2(int val);
180
181 void R_ConcatRotations (float in1[3][3], float in2[3][3], float out[3][3]);
182 void R_ConcatTransforms (float in1[3][4], float in2[3][4], float out[3][4]);
183
184 void AngleVectors (vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
185 int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *plane);
186 float anglemod(float a);
187 float LerpAngle (float a1, float a2, float frac);
188
189 #define BOX_ON_PLANE_SIDE(emins, emaxs, p) \
190 (((p)->type < 3)? \
191 ( \
192 ((p)->dist <= (emins)[(p)->type])? \
193 1 \
194 : \
195 ( \
196 ((p)->dist >= (emaxs)[(p)->type])?\
197 2 \
198 : \
199 3 \
200 ) \
201 ) \
202 : \
203 BoxOnPlaneSide( (emins), (emaxs), (p)))
204
205 void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal );
206 void PerpendicularVector( vec3_t dst, const vec3_t src );
207 void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, float degrees );
208
209
210 //=============================================
211
212 char *COM_SkipPath (char *pathname);
213 void COM_StripExtension (char *in, char *out);
214 void COM_FileBase (char *in, char *out);
215 void COM_FilePath (char *in, char *out);
216 void COM_DefaultExtension (char *path, char *extension);
217
218 char *COM_Parse (char **data_p);
219 // data is an in/out parm, returns a parsed out token
220
221 void Com_sprintf (char *dest, int size, char *fmt, ...);
222
223 void Com_PageInMemory (byte *buffer, int size);
224
225 //=============================================
226
227 // portable case insensitive compare
228 int Q_stricmp (char *s1, char *s2);
229 int Q_strcasecmp (char *s1, char *s2);
230 int Q_strncasecmp (char *s1, char *s2, int n);
231
232 //=============================================
233
234 short BigShort(short l);
235 short LittleShort(short l);
236 int BigLong (int l);
237 int LittleLong (int l);
238 float BigFloat (float l);
239 float LittleFloat (float l);
240
241 void Swap_Init (void);
242 char *va(char *format, ...);
243
244 //=============================================
245
246 //
247 // key / value info strings
248 //
249 #define MAX_INFO_KEY 64
250 #define MAX_INFO_VALUE 64
251 #define MAX_INFO_STRING 512
252
253 char *Info_ValueForKey (char *s, char *key);
254 void Info_RemoveKey (char *s, char *key);
255 void Info_SetValueForKey (char *s, char *key, char *value);
256 qboolean Info_Validate (char *s);
257
258 /*
259 ==============================================================
260
261 SYSTEM SPECIFIC
262
263 ==============================================================
264 */
265
266 extern int curtime; // time returned by last Sys_Milliseconds
267
268 int Sys_Milliseconds (void);
269 void Sys_Mkdir (char *path);
270
271 // large block stack allocation routines
272 void *Hunk_Begin (int maxsize);
273 void *Hunk_Alloc (int size);
274 void Hunk_Free (void *buf);
275 int Hunk_End (void);
276
277 // directory searching
278 #define SFF_ARCH 0x01
279 #define SFF_HIDDEN 0x02
280 #define SFF_RDONLY 0x04
281 #define SFF_SUBDIR 0x08
282 #define SFF_SYSTEM 0x10
283
284 /*
285 ** pass in an attribute mask of things you wish to REJECT
286 */
287 char *Sys_FindFirst (char *path, unsigned musthave, unsigned canthave );
288 char *Sys_FindNext ( unsigned musthave, unsigned canthave );
289 void Sys_FindClose (void);
290
291
292 // this is only here so the functions in q_shared.c and q_shwin.c can link
293 void Sys_Error (char *error, ...);
294 void Com_Printf (char *msg, ...);
295
296
297 /*
298 ==========================================================
299
300 CVARS (console variables)
301
302 ==========================================================
303 */
304
305 #ifndef CVAR
306 #define CVAR
307
308 #define CVAR_ARCHIVE 1 // set to cause it to be saved to vars.rc
309 #define CVAR_USERINFO 2 // added to userinfo when changed
310 #define CVAR_SERVERINFO 4 // added to serverinfo when changed
311 #define CVAR_NOSET 8 // don't allow change from console at all,
312 // but can be set from the command line
313 #define CVAR_LATCH 16 // save changes until server restart
314
315 // nothing outside the Cvar_*() functions should modify these fields!
316 typedef struct cvar_s
317 {
318 char *name;
319 char *string;
320 char *latched_string; // for CVAR_LATCH vars
321 int flags;
322 qboolean modified; // set each time the cvar is changed
323 float value;
324 struct cvar_s *next;
325 } cvar_t;
326
327 #endif // CVAR
328
329 /*
330 ==============================================================
331
332 COLLISION DETECTION
333
334 ==============================================================
335 */
336
337 // lower bits are stronger, and will eat weaker brushes completely
338 #define CONTENTS_SOLID 1 // an eye is never valid in a solid
339 #define CONTENTS_WINDOW 2 // translucent, but not watery
340 #define CONTENTS_AUX 4
341 #define CONTENTS_LAVA 8
342 #define CONTENTS_SLIME 16
343 #define CONTENTS_WATER 32
344 #define CONTENTS_MIST 64
345 #define LAST_VISIBLE_CONTENTS 64
346
347 // remaining contents are non-visible, and don't eat brushes
348
349 #define CONTENTS_AREAPORTAL 0x8000
350
351 #define CONTENTS_PLAYERCLIP 0x10000
352 #define CONTENTS_MONSTERCLIP 0x20000
353
354 // currents can be added to any other contents, and may be mixed
355 #define CONTENTS_CURRENT_0 0x40000
356 #define CONTENTS_CURRENT_90 0x80000
357 #define CONTENTS_CURRENT_180 0x100000
358 #define CONTENTS_CURRENT_270 0x200000
359 #define CONTENTS_CURRENT_UP 0x400000
360 #define CONTENTS_CURRENT_DOWN 0x800000
361
362 #define CONTENTS_ORIGIN 0x1000000 // removed before bsping an entity
363
364 #define CONTENTS_MONSTER 0x2000000 // should never be on a brush, only in game
365 #define CONTENTS_DEADMONSTER 0x4000000
366 #define CONTENTS_DETAIL 0x8000000 // brushes to be added after vis leafs
367 #define CONTENTS_TRANSLUCENT 0x10000000 // auto set if any surface has trans
368 #define CONTENTS_LADDER 0x20000000
369
370
371
372 #define SURF_LIGHT 0x1 // value will hold the light strength
373
374 #define SURF_SLICK 0x2 // effects game physics
375
376 #define SURF_SKY 0x4 // don't draw, but add to skybox
377 #define SURF_WARP 0x8 // turbulent water warp
378 #define SURF_TRANS33 0x10
379 #define SURF_TRANS66 0x20
380 #define SURF_FLOWING 0x40 // scroll towards angle
381 #define SURF_NODRAW 0x80 // don't bother referencing the texture
382
383
384
385 // content masks
386 #define MASK_ALL (-1)
387 #define MASK_SOLID (CONTENTS_SOLID|CONTENTS_WINDOW)
388 #define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER)
389 #define MASK_DEADSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW)
390 #define MASK_MONSTERSOLID (CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER)
391 #define MASK_WATER (CONTENTS_WATER|CONTENTS_LAVA|CONTENTS_SLIME)
392 #define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_SLIME|CONTENTS_LAVA)
393 #define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEADMONSTER)
394 #define MASK_CURRENT (CONTENTS_CURRENT_0|CONTENTS_CURRENT_90|CONTENTS_CURRENT_180|CONTENTS_CURRENT_270|CONTENTS_CURRENT_UP|CONTENTS_CURRENT_DOWN)
395
396
397 // gi.BoxEdicts() can return a list of either solid or trigger entities
398 // FIXME: eliminate AREA_ distinction?
399 #define AREA_SOLID 1
400 #define AREA_TRIGGERS 2
401
402
403 // plane_t structure
404 // !!! if this is changed, it must be changed in asm code too !!!
405 typedef struct cplane_s
406 {
407 vec3_t normal;
408 float dist;
409 byte type; // for fast side tests
410 byte signbits; // signx + (signy<<1) + (signz<<1)
411 byte pad[2];
412 } cplane_t;
413
414 // structure offset for asm code
415 #define CPLANE_NORMAL_X 0
416 #define CPLANE_NORMAL_Y 4
417 #define CPLANE_NORMAL_Z 8
418 #define CPLANE_DIST 12
419 #define CPLANE_TYPE 16
420 #define CPLANE_SIGNBITS 17
421 #define CPLANE_PAD0 18
422 #define CPLANE_PAD1 19
423
424 typedef struct cmodel_s
425 {
426 vec3_t mins, maxs;
427 vec3_t origin; // for sounds or lights
428 int headnode;
429 } cmodel_t;
430
431 typedef struct csurface_s
432 {
433 char name[16];
434 int flags;
435 int value;
436 } csurface_t;
437
438 typedef struct mapsurface_s // used internally due to name len probs //ZOID
439 {
440 csurface_t c;
441 char rname[32];
442 } mapsurface_t;
443
444 // a trace is returned when a box is swept through the world
445 typedef struct
446 {
447 qboolean allsolid; // if true, plane is not valid
448 qboolean startsolid; // if true, the initial point was in a solid area
449 float fraction; // time completed, 1.0 = didn't hit anything
450 vec3_t endpos; // final position
451 cplane_t plane; // surface normal at impact
452 csurface_t *surface; // surface hit
453 int contents; // contents on other side of surface hit
454 struct edict_s *ent; // not set by CM_*() functions
455 } trace_t;
456
457
458
459 // pmove_state_t is the information necessary for client side movement
460 // prediction
461 typedef enum
462 {
463 // can accelerate and turn
464 PM_NORMAL,
465 PM_SPECTATOR,
466 // no acceleration or turning
467 PM_DEAD,
468 PM_GIB, // different bounding box
469 PM_FREEZE
470 } pmtype_t;
471
472 // pmove->pm_flags
473 #define PMF_DUCKED 1
474 #define PMF_JUMP_HELD 2
475 #define PMF_ON_GROUND 4
476 #define PMF_TIME_WATERJUMP 8 // pm_time is waterjump
477 #define PMF_TIME_LAND 16 // pm_time is time before rejump
478 #define PMF_TIME_TELEPORT 32 // pm_time is non-moving time
479 #define PMF_NO_PREDICTION 64 // temporarily disables prediction (used for grappling hook)
480
481 // this structure needs to be communicated bit-accurate
482 // from the server to the client to guarantee that
483 // prediction stays in sync, so no floats are used.
484 // if any part of the game code modifies this struct, it
485 // will result in a prediction error of some degree.
486 typedef struct
487 {
488 pmtype_t pm_type;
489
490 short origin[3]; // 12.3
491 short velocity[3]; // 12.3
492 byte pm_flags; // ducked, jump_held, etc
493 byte pm_time; // each unit = 8 ms
494 short gravity;
495 short delta_angles[3]; // add to command angles to get view direction
496 // changed by spawns, rotating objects, and teleporters
497 } pmove_state_t;
498
499
500 //
501 // button bits
502 //
503 #define BUTTON_ATTACK 1
504 #define BUTTON_USE 2
505 #define BUTTON_ANY 128 // any key whatsoever
506
507
508 // usercmd_t is sent to the server each client frame
509 typedef struct usercmd_s
510 {
511 byte msec;
512 byte buttons;
513 short angles[3];
514 short forwardmove, sidemove, upmove;
515 byte impulse; // remove?
516 byte lightlevel; // light level the player is standing on
517 } usercmd_t;
518
519
520 #define MAXTOUCH 32
521 typedef struct
522 {
523 // state (in / out)
524 pmove_state_t s;
525
526 // command (in)
527 usercmd_t cmd;
528 qboolean snapinitial; // if s has been changed outside pmove
529
530 // results (out)
531 int numtouch;
532 struct edict_s *touchents[MAXTOUCH];
533
534 vec3_t viewangles; // clamped
535 float viewheight;
536
537 vec3_t mins, maxs; // bounding box size
538
539 struct edict_s *groundentity;
540 int watertype;
541 int waterlevel;
542
543 // callbacks to test the world
544 trace_t (*trace) (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end);
545 int (*pointcontents) (vec3_t point);
546 } pmove_t;
547
548
549 // entity_state_t->effects
550 // Effects are things handled on the client side (lights, particles, frame animations)
551 // that happen constantly on the given entity.
552 // An entity that has effects will be sent to the client
553 // even if it has a zero index model.
554 #define EF_ROTATE 0x00000001 // rotate (bonus items)
555 #define EF_GIB 0x00000002 // leave a trail
556 #define EF_BLASTER 0x00000008 // redlight + trail
557 #define EF_ROCKET 0x00000010 // redlight + trail
558 #define EF_GRENADE 0x00000020
559 #define EF_HYPERBLASTER 0x00000040
560 #define EF_BFG 0x00000080
561 #define EF_COLOR_SHELL 0x00000100
562 #define EF_POWERSCREEN 0x00000200
563 #define EF_ANIM01 0x00000400 // automatically cycle between frames 0 and 1 at 2 hz
564 #define EF_ANIM23 0x00000800 // automatically cycle between frames 2 and 3 at 2 hz
565 #define EF_ANIM_ALL 0x00001000 // automatically cycle through all frames at 2hz
566 #define EF_ANIM_ALLFAST 0x00002000 // automatically cycle through all frames at 10hz
567 #define EF_FLIES 0x00004000
568 #define EF_QUAD 0x00008000
569 #define EF_PENT 0x00010000
570 #define EF_TELEPORTER 0x00020000 // particle fountain
571 #define EF_FLAG1 0x00040000
572 #define EF_FLAG2 0x00080000
573 // RAFAEL
574 #define EF_IONRIPPER 0x00100000
575 #define EF_GREENGIB 0x00200000
576 #define EF_BLUEHYPERBLASTER 0x00400000
577 #define EF_SPINNINGLIGHTS 0x00800000
578 #define EF_PLASMA 0x01000000
579 #define EF_TRAP 0x02000000
580
581 //ROGUE
582 #define EF_TRACKER 0x04000000
583 #define EF_DOUBLE 0x08000000
584 #define EF_SPHERETRANS 0x10000000
585 #define EF_TAGTRAIL 0x20000000
586 #define EF_HALF_DAMAGE 0x40000000
587 #define EF_TRACKERTRAIL 0x80000000
588 //ROGUE
589
590 // entity_state_t->renderfx flags
591 #define RF_MINLIGHT 1 // allways have some light (viewmodel)
592 #define RF_VIEWERMODEL 2 // don't draw through eyes, only mirrors
593 #define RF_WEAPONMODEL 4 // only draw through eyes
594 #define RF_FULLBRIGHT 8 // allways draw full intensity
595 #define RF_DEPTHHACK 16 // for view weapon Z crunching
596 #define RF_TRANSLUCENT 32
597 #define RF_FRAMELERP 64
598 #define RF_BEAM 128
599 #define RF_CUSTOMSKIN 256 // skin is an index in image_precache
600 #define RF_GLOW 512 // pulse lighting for bonus items
601 #define RF_SHELL_RED 1024
602 #define RF_SHELL_GREEN 2048
603 #define RF_SHELL_BLUE 4096
604
605 //ROGUE
606 #define RF_IR_VISIBLE 0x00008000 // 32768
607 #define RF_SHELL_DOUBLE 0x00010000 // 65536
608 #define RF_SHELL_HALF_DAM 0x00020000
609 #define RF_USE_DISGUISE 0x00040000
610 //ROGUE
611
612 // player_state_t->refdef flags
613 #define RDF_UNDERWATER 1 // warp the screen as apropriate
614 #define RDF_NOWORLDMODEL 2 // used for player configuration screen
615
616 //ROGUE
617 #define RDF_IRGOGGLES 4
618 #define RDF_UVGOGGLES 8
619 //ROGUE
620
621 //
622 // muzzle flashes / player effects
623 //
624 #define MZ_BLASTER 0
625 #define MZ_MACHINEGUN 1
626 #define MZ_SHOTGUN 2
627 #define MZ_CHAINGUN1 3
628 #define MZ_CHAINGUN2 4
629 #define MZ_CHAINGUN3 5
630 #define MZ_RAILGUN 6
631 #define MZ_ROCKET 7
632 #define MZ_GRENADE 8
633 #define MZ_LOGIN 9
634 #define MZ_LOGOUT 10
635 #define MZ_RESPAWN 11
636 #define MZ_BFG 12
637 #define MZ_SSHOTGUN 13
638 #define MZ_HYPERBLASTER 14
639 #define MZ_ITEMRESPAWN 15
640 // RAFAEL
641 #define MZ_IONRIPPER 16
642 #define MZ_BLUEHYPERBLASTER 17
643 #define MZ_PHALANX 18
644 #define MZ_SILENCED 128 // bit flag ORed with one of the above numbers
645
646 //ROGUE
647 #define MZ_ETF_RIFLE 30
648 #define MZ_UNUSED 31
649 #define MZ_SHOTGUN2 32
650 #define MZ_HEATBEAM 33
651 #define MZ_BLASTER2 34
652 #define MZ_TRACKER 35
653 #define MZ_NUKE1 36
654 #define MZ_NUKE2 37
655 #define MZ_NUKE4 38
656 #define MZ_NUKE8 39
657 //ROGUE
658
659 //
660 // monster muzzle flashes
661 //
662 #define MZ2_TANK_BLASTER_1 1
663 #define MZ2_TANK_BLASTER_2 2
664 #define MZ2_TANK_BLASTER_3 3
665 #define MZ2_TANK_MACHINEGUN_1 4
666 #define MZ2_TANK_MACHINEGUN_2 5
667 #define MZ2_TANK_MACHINEGUN_3 6
668 #define MZ2_TANK_MACHINEGUN_4 7
669 #define MZ2_TANK_MACHINEGUN_5 8
670 #define MZ2_TANK_MACHINEGUN_6 9
671 #define MZ2_TANK_MACHINEGUN_7 10
672 #define MZ2_TANK_MACHINEGUN_8 11
673 #define MZ2_TANK_MACHINEGUN_9 12
674 #define MZ2_TANK_MACHINEGUN_10 13
675 #define MZ2_TANK_MACHINEGUN_11 14
676 #define MZ2_TANK_MACHINEGUN_12 15
677 #define MZ2_TANK_MACHINEGUN_13 16
678 #define MZ2_TANK_MACHINEGUN_14 17
679 #define MZ2_TANK_MACHINEGUN_15 18
680 #define MZ2_TANK_MACHINEGUN_16 19
681 #define MZ2_TANK_MACHINEGUN_17 20
682 #define MZ2_TANK_MACHINEGUN_18 21
683 #define MZ2_TANK_MACHINEGUN_19 22
684 #define MZ2_TANK_ROCKET_1 23
685 #define MZ2_TANK_ROCKET_2 24
686 #define MZ2_TANK_ROCKET_3 25
687
688 #define MZ2_INFANTRY_MACHINEGUN_1 26
689 #define MZ2_INFANTRY_MACHINEGUN_2 27
690 #define MZ2_INFANTRY_MACHINEGUN_3 28
691 #define MZ2_INFANTRY_MACHINEGUN_4 29
692 #define MZ2_INFANTRY_MACHINEGUN_5 30
693 #define MZ2_INFANTRY_MACHINEGUN_6 31
694 #define MZ2_INFANTRY_MACHINEGUN_7 32
695 #define MZ2_INFANTRY_MACHINEGUN_8 33
696 #define MZ2_INFANTRY_MACHINEGUN_9 34
697 #define MZ2_INFANTRY_MACHINEGUN_10 35
698 #define MZ2_INFANTRY_MACHINEGUN_11 36
699 #define MZ2_INFANTRY_MACHINEGUN_12 37
700 #define MZ2_INFANTRY_MACHINEGUN_13 38
701
702 #define MZ2_SOLDIER_BLASTER_1 39
703 #define MZ2_SOLDIER_BLASTER_2 40
704 #define MZ2_SOLDIER_SHOTGUN_1 41
705 #define MZ2_SOLDIER_SHOTGUN_2 42
706 #define MZ2_SOLDIER_MACHINEGUN_1 43
707 #define MZ2_SOLDIER_MACHINEGUN_2 44
708
709 #define MZ2_GUNNER_MACHINEGUN_1 45
710 #define MZ2_GUNNER_MACHINEGUN_2 46
711 #define MZ2_GUNNER_MACHINEGUN_3 47
712 #define MZ2_GUNNER_MACHINEGUN_4 48
713 #define MZ2_GUNNER_MACHINEGUN_5 49
714 #define MZ2_GUNNER_MACHINEGUN_6 50
715 #define MZ2_GUNNER_MACHINEGUN_7 51
716 #define MZ2_GUNNER_MACHINEGUN_8 52
717 #define MZ2_GUNNER_GRENADE_1 53
718 #define MZ2_GUNNER_GRENADE_2 54
719 #define MZ2_GUNNER_GRENADE_3 55
720 #define MZ2_GUNNER_GRENADE_4 56
721
722 #define MZ2_CHICK_ROCKET_1 57
723
724 #define MZ2_FLYER_BLASTER_1 58
725 #define MZ2_FLYER_BLASTER_2 59
726
727 #define MZ2_MEDIC_BLASTER_1 60
728
729 #define MZ2_GLADIATOR_RAILGUN_1 61
730
731 #define MZ2_HOVER_BLASTER_1 62
732
733 #define MZ2_ACTOR_MACHINEGUN_1 63
734
735 #define MZ2_SUPERTANK_MACHINEGUN_1 64
736 #define MZ2_SUPERTANK_MACHINEGUN_2 65
737 #define MZ2_SUPERTANK_MACHINEGUN_3 66
738 #define MZ2_SUPERTANK_MACHINEGUN_4 67
739 #define MZ2_SUPERTANK_MACHINEGUN_5 68
740 #define MZ2_SUPERTANK_MACHINEGUN_6 69
741 #define MZ2_SUPERTANK_ROCKET_1 70
742 #define MZ2_SUPERTANK_ROCKET_2 71
743 #define MZ2_SUPERTANK_ROCKET_3 72
744
745 #define MZ2_BOSS2_MACHINEGUN_L1 73
746 #define MZ2_BOSS2_MACHINEGUN_L2 74
747 #define MZ2_BOSS2_MACHINEGUN_L3 75
748 #define MZ2_BOSS2_MACHINEGUN_L4 76
749 #define MZ2_BOSS2_MACHINEGUN_L5 77
750 #define MZ2_BOSS2_ROCKET_1 78
751 #define MZ2_BOSS2_ROCKET_2 79
752 #define MZ2_BOSS2_ROCKET_3 80
753 #define MZ2_BOSS2_ROCKET_4 81
754
755 #define MZ2_FLOAT_BLASTER_1 82
756
757 #define MZ2_SOLDIER_BLASTER_3 83
758 #define MZ2_SOLDIER_SHOTGUN_3 84
759 #define MZ2_SOLDIER_MACHINEGUN_3 85
760 #define MZ2_SOLDIER_BLASTER_4 86
761 #define MZ2_SOLDIER_SHOTGUN_4 87
762 #define MZ2_SOLDIER_MACHINEGUN_4 88
763 #define MZ2_SOLDIER_BLASTER_5 89
764 #define MZ2_SOLDIER_SHOTGUN_5 90
765 #define MZ2_SOLDIER_MACHINEGUN_5 91
766 #define MZ2_SOLDIER_BLASTER_6 92
767 #define MZ2_SOLDIER_SHOTGUN_6 93
768 #define MZ2_SOLDIER_MACHINEGUN_6 94
769 #define MZ2_SOLDIER_BLASTER_7 95
770 #define MZ2_SOLDIER_SHOTGUN_7 96
771 #define MZ2_SOLDIER_MACHINEGUN_7 97
772 #define MZ2_SOLDIER_BLASTER_8 98
773 #define MZ2_SOLDIER_SHOTGUN_8 99
774 #define MZ2_SOLDIER_MACHINEGUN_8 100
775
776 // --- Xian shit below ---
777 #define MZ2_MAKRON_BFG 101
778 #define MZ2_MAKRON_BLASTER_1 102
779 #define MZ2_MAKRON_BLASTER_2 103
780 #define MZ2_MAKRON_BLASTER_3 104
781 #define MZ2_MAKRON_BLASTER_4 105
782 #define MZ2_MAKRON_BLASTER_5 106
783 #define MZ2_MAKRON_BLASTER_6 107
784 #define MZ2_MAKRON_BLASTER_7 108
785 #define MZ2_MAKRON_BLASTER_8 109
786 #define MZ2_MAKRON_BLASTER_9 110
787 #define MZ2_MAKRON_BLASTER_10 111
788 #define MZ2_MAKRON_BLASTER_11 112
789 #define MZ2_MAKRON_BLASTER_12 113
790 #define MZ2_MAKRON_BLASTER_13 114
791 #define MZ2_MAKRON_BLASTER_14 115
792 #define MZ2_MAKRON_BLASTER_15 116
793 #define MZ2_MAKRON_BLASTER_16 117
794 #define MZ2_MAKRON_BLASTER_17 118
795 #define MZ2_MAKRON_RAILGUN_1 119
796 #define MZ2_JORG_MACHINEGUN_L1 120
797 #define MZ2_JORG_MACHINEGUN_L2 121
798 #define MZ2_JORG_MACHINEGUN_L3 122
799 #define MZ2_JORG_MACHINEGUN_L4 123
800 #define MZ2_JORG_MACHINEGUN_L5 124
801 #define MZ2_JORG_MACHINEGUN_L6 125
802 #define MZ2_JORG_MACHINEGUN_R1 126
803 #define MZ2_JORG_MACHINEGUN_R2 127
804 #define MZ2_JORG_MACHINEGUN_R3 128
805 #define MZ2_JORG_MACHINEGUN_R4 129
806 #define MZ2_JORG_MACHINEGUN_R5 130
807 #define MZ2_JORG_MACHINEGUN_R6 131
808 #define MZ2_JORG_BFG_1 132
809 #define MZ2_BOSS2_MACHINEGUN_R1 133
810 #define MZ2_BOSS2_MACHINEGUN_R2 134
811 #define MZ2_BOSS2_MACHINEGUN_R3 135
812 #define MZ2_BOSS2_MACHINEGUN_R4 136
813 #define MZ2_BOSS2_MACHINEGUN_R5 137
814
815 //ROGUE
816 #define MZ2_CARRIER_MACHINEGUN_L1 138
817 #define MZ2_CARRIER_MACHINEGUN_R1 139
818 #define MZ2_CARRIER_GRENADE 140
819 #define MZ2_TURRET_MACHINEGUN 141
820 #define MZ2_TURRET_ROCKET 142
821 #define MZ2_TURRET_BLASTER 143
822 #define MZ2_STALKER_BLASTER 144
823 #define MZ2_DAEDALUS_BLASTER 145
824 #define MZ2_MEDIC_BLASTER_2 146
825 #define MZ2_CARRIER_RAILGUN 147
826 #define MZ2_WIDOW_DISRUPTOR 148
827 #define MZ2_WIDOW_BLASTER 149
828 #define MZ2_WIDOW_RAIL 150
829 #define MZ2_WIDOW_PLASMABEAM 151 // PMM - not used
830 #define MZ2_CARRIER_MACHINEGUN_L2 152
831 #define MZ2_CARRIER_MACHINEGUN_R2 153
832 #define MZ2_WIDOW_RAIL_LEFT 154
833 #define MZ2_WIDOW_RAIL_RIGHT 155
834 #define MZ2_WIDOW_BLASTER_SWEEP1 156
835 #define MZ2_WIDOW_BLASTER_SWEEP2 157
836 #define MZ2_WIDOW_BLASTER_SWEEP3 158
837 #define MZ2_WIDOW_BLASTER_SWEEP4 159
838 #define MZ2_WIDOW_BLASTER_SWEEP5 160
839 #define MZ2_WIDOW_BLASTER_SWEEP6 161
840 #define MZ2_WIDOW_BLASTER_SWEEP7 162
841 #define MZ2_WIDOW_BLASTER_SWEEP8 163
842 #define MZ2_WIDOW_BLASTER_SWEEP9 164
843 #define MZ2_WIDOW_BLASTER_100 165
844 #define MZ2_WIDOW_BLASTER_90 166
845 #define MZ2_WIDOW_BLASTER_80 167
846 #define MZ2_WIDOW_BLASTER_70 168
847 #define MZ2_WIDOW_BLASTER_60 169
848 #define MZ2_WIDOW_BLASTER_50 170
849 #define MZ2_WIDOW_BLASTER_40 171
850 #define MZ2_WIDOW_BLASTER_30 172
851 #define MZ2_WIDOW_BLASTER_20 173
852 #define MZ2_WIDOW_BLASTER_10 174
853 #define MZ2_WIDOW_BLASTER_0 175
854 #define MZ2_WIDOW_BLASTER_10L 176
855 #define MZ2_WIDOW_BLASTER_20L 177
856 #define MZ2_WIDOW_BLASTER_30L 178
857 #define MZ2_WIDOW_BLASTER_40L 179
858 #define MZ2_WIDOW_BLASTER_50L 180
859 #define MZ2_WIDOW_BLASTER_60L 181
860 #define MZ2_WIDOW_BLASTER_70L 182
861 #define MZ2_WIDOW_RUN_1 183
862 #define MZ2_WIDOW_RUN_2 184
863 #define MZ2_WIDOW_RUN_3 185
864 #define MZ2_WIDOW_RUN_4 186
865 #define MZ2_WIDOW_RUN_5 187
866 #define MZ2_WIDOW_RUN_6 188
867 #define MZ2_WIDOW_RUN_7 189
868 #define MZ2_WIDOW_RUN_8 190
869 #define MZ2_CARRIER_ROCKET_1 191
870 #define MZ2_CARRIER_ROCKET_2 192
871 #define MZ2_CARRIER_ROCKET_3 193
872 #define MZ2_CARRIER_ROCKET_4 194
873 #define MZ2_WIDOW2_BEAMER_1 195
874 #define MZ2_WIDOW2_BEAMER_2 196
875 #define MZ2_WIDOW2_BEAMER_3 197
876 #define MZ2_WIDOW2_BEAMER_4 198
877 #define MZ2_WIDOW2_BEAMER_5 199
878 #define MZ2_WIDOW2_BEAM_SWEEP_1 200
879 #define MZ2_WIDOW2_BEAM_SWEEP_2 201
880 #define MZ2_WIDOW2_BEAM_SWEEP_3 202
881 #define MZ2_WIDOW2_BEAM_SWEEP_4 203
882 #define MZ2_WIDOW2_BEAM_SWEEP_5 204
883 #define MZ2_WIDOW2_BEAM_SWEEP_6 205
884 #define MZ2_WIDOW2_BEAM_SWEEP_7 206
885 #define MZ2_WIDOW2_BEAM_SWEEP_8 207
886 #define MZ2_WIDOW2_BEAM_SWEEP_9 208
887 #define MZ2_WIDOW2_BEAM_SWEEP_10 209
888 #define MZ2_WIDOW2_BEAM_SWEEP_11 210
889
890 // ROGUE
891
892 extern vec3_t monster_flash_offset [];
893
894
895 // temp entity events
896 //
897 // Temp entity events are for things that happen
898 // at a location seperate from any existing entity.
899 // Temporary entity messages are explicitly constructed
900 // and broadcast.
901 typedef enum
902 {
903 TE_GUNSHOT,
904 TE_BLOOD,
905 TE_BLASTER,
906 TE_RAILTRAIL,
907 TE_SHOTGUN,
908 TE_EXPLOSION1,
909 TE_EXPLOSION2,
910 TE_ROCKET_EXPLOSION,
911 TE_GRENADE_EXPLOSION,
912 TE_SPARKS,
913 TE_SPLASH,
914 TE_BUBBLETRAIL,
915 TE_SCREEN_SPARKS,
916 TE_SHIELD_SPARKS,
917 TE_BULLET_SPARKS,
918 TE_LASER_SPARKS,
919 TE_PARASITE_ATTACK,
920 TE_ROCKET_EXPLOSION_WATER,
921 TE_GRENADE_EXPLOSION_WATER,
922 TE_MEDIC_CABLE_ATTACK,
923 TE_BFG_EXPLOSION,
924 TE_BFG_BIGEXPLOSION,
925 TE_BOSSTPORT, // used as '22' in a map, so DON'T RENUMBER!!!
926 TE_BFG_LASER,
927 TE_GRAPPLE_CABLE,
928 TE_WELDING_SPARKS,
929 TE_GREENBLOOD,
930 TE_BLUEHYPERBLASTER,
931 TE_PLASMA_EXPLOSION,
932 TE_TUNNEL_SPARKS,
933 //ROGUE
934 TE_BLASTER2,
935 TE_RAILTRAIL2,
936 TE_FLAME,
937 TE_LIGHTNING,
938 TE_DEBUGTRAIL,
939 TE_PLAIN_EXPLOSION,
940 TE_FLASHLIGHT,
941 TE_FORCEWALL,
942 TE_HEATBEAM,
943 TE_MONSTER_HEATBEAM,
944 TE_STEAM,
945 TE_BUBBLETRAIL2,
946 TE_MOREBLOOD,
947 TE_HEATBEAM_SPARKS,
948 TE_HEATBEAM_STEAM,
949 TE_CHAINFIST_SMOKE,
950 TE_ELECTRIC_SPARKS,
951 TE_TRACKER_EXPLOSION,
952 TE_TELEPORT_EFFECT,
953 TE_DBALL_GOAL,
954 TE_WIDOWBEAMOUT,
955 TE_NUKEBLAST,
956 TE_WIDOWSPLASH,
957 TE_EXPLOSION1_BIG,
958 TE_EXPLOSION1_NP,
959 TE_FLECHETTE
960 //ROGUE
961 } temp_event_t;
962
963 #define SPLASH_UNKNOWN 0
964 #define SPLASH_SPARKS 1
965 #define SPLASH_BLUE_WATER 2
966 #define SPLASH_BROWN_WATER 3
967 #define SPLASH_SLIME 4
968 #define SPLASH_LAVA 5
969 #define SPLASH_BLOOD 6
970
971
972 // sound channels
973 // channel 0 never willingly overrides
974 // other channels (1-7) allways override a playing sound on that channel
975 #define CHAN_AUTO 0
976 #define CHAN_WEAPON 1
977 #define CHAN_VOICE 2
978 #define CHAN_ITEM 3
979 #define CHAN_BODY 4
980 // modifier flags
981 #define CHAN_NO_PHS_ADD 8 // send to all clients, not just ones in PHS (ATTN 0 will also do this)
982 #define CHAN_RELIABLE 16 // send by reliable message, not datagram
983
984
985 // sound attenuation values
986 #define ATTN_NONE 0 // full volume the entire level
987 #define ATTN_NORM 1
988 #define ATTN_IDLE 2
989 #define ATTN_STATIC 3 // diminish very rapidly with distance
990
991
992 // player_state->stats[] indexes
993 #define STAT_HEALTH_ICON 0
994 #define STAT_HEALTH 1
995 #define STAT_AMMO_ICON 2
996 #define STAT_AMMO 3
997 #define STAT_ARMOR_ICON 4
998 #define STAT_ARMOR 5
999 #define STAT_SELECTED_ICON 6
1000 #define STAT_PICKUP_ICON 7
1001 #define STAT_PICKUP_STRING 8
1002 #define STAT_TIMER_ICON 9
1003 #define STAT_TIMER 10
1004 #define STAT_HELPICON 11
1005 #define STAT_SELECTED_ITEM 12
1006 #define STAT_LAYOUTS 13
1007 #define STAT_FRAGS 14
1008 #define STAT_FLASHES 15 // cleared each frame, 1 = health, 2 = armor
1009 #define STAT_CHASE 16
1010 #define STAT_SPECTATOR 17
1011
1012 #define MAX_STATS 32
1013
1014
1015 // dmflags->value flags
1016 #define DF_NO_HEALTH 0x00000001 // 1
1017 #define DF_NO_ITEMS 0x00000002 // 2
1018 #define DF_WEAPONS_STAY 0x00000004 // 4
1019 #define DF_NO_FALLING 0x00000008 // 8
1020 #define DF_INSTANT_ITEMS 0x00000010 // 16
1021 #define DF_SAME_LEVEL 0x00000020 // 32
1022 #define DF_SKINTEAMS 0x00000040 // 64
1023 #define DF_MODELTEAMS 0x00000080 // 128
1024 #define DF_NO_FRIENDLY_FIRE 0x00000100 // 256
1025 #define DF_SPAWN_FARTHEST 0x00000200 // 512
1026 #define DF_FORCE_RESPAWN 0x00000400 // 1024
1027 #define DF_NO_ARMOR 0x00000800 // 2048
1028 #define DF_ALLOW_EXIT 0x00001000 // 4096
1029 #define DF_INFINITE_AMMO 0x00002000 // 8192
1030 #define DF_QUAD_DROP 0x00004000 // 16384
1031 #define DF_FIXED_FOV 0x00008000 // 32768
1032
1033 // RAFAEL
1034 #define DF_QUADFIRE_DROP 0x00010000 // 65536
1035
1036 //ROGUE
1037 #define DF_NO_MINES 0x00020000
1038 #define DF_NO_STACK_DOUBLE 0x00040000
1039 #define DF_NO_NUKES 0x00080000
1040 #define DF_NO_SPHERES 0x00100000
1041 //ROGUE
1042
1043 /*
1044 ROGUE - VERSIONS
1045 1234 08/13/1998 Activision
1046 1235 08/14/1998 Id Software
1047 1236 08/15/1998 Steve Tietze
1048 1237 08/15/1998 Phil Dobranski
1049 1238 08/15/1998 John Sheley
1050 1239 08/17/1998 Barrett Alexander
1051 1230 08/17/1998 Brandon Fish
1052 1245 08/17/1998 Don MacAskill
1053 1246 08/17/1998 David "Zoid" Kirsch
1054 1247 08/17/1998 Manu Smith
1055 1248 08/17/1998 Geoff Scully
1056 1249 08/17/1998 Andy Van Fossen
1057 1240 08/20/1998 Activision Build 2
1058 1256 08/20/1998 Ranger Clan
1059 1257 08/20/1998 Ensemble Studios
1060 1258 08/21/1998 Robert Duffy
1061 1259 08/21/1998 Stephen Seachord
1062 1250 08/21/1998 Stephen Heaslip
1063 1267 08/21/1998 Samir Sandesara
1064 1268 08/21/1998 Oliver Wyman
1065 1269 08/21/1998 Steven Marchegiano
1066 1260 08/21/1998 Build #2 for Nihilistic
1067 1278 08/21/1998 Build #2 for Ensemble
1068
1069 9999 08/20/1998 Internal Use
1070 */
1071 #define ROGUE_VERSION_ID 1278
1072
1073 #define ROGUE_VERSION_STRING "08/21/1998 Beta 2 for Ensemble"
1074
1075 // ROGUE
1076 /*
1077 ==========================================================
1078
1079 ELEMENTS COMMUNICATED ACROSS THE NET
1080
1081 ==========================================================
1082 */
1083
1084 #define ANGLE2SHORT(x) ((int)((x)*65536/360) & 65535)
1085 #define SHORT2ANGLE(x) ((x)*(360.0/65536))
1086
1087
1088 //
1089 // config strings are a general means of communication from
1090 // the server to all connected clients.
1091 // Each config string can be at most MAX_QPATH characters.
1092 //
1093 #define CS_NAME 0
1094 #define CS_CDTRACK 1
1095 #define CS_SKY 2
1096 #define CS_SKYAXIS 3 // %f %f %f format
1097 #define CS_SKYROTATE 4
1098 #define CS_STATUSBAR 5 // display program string
1099
1100 #define CS_AIRACCEL 29 // air acceleration control
1101 #define CS_MAXCLIENTS 30
1102 #define CS_MAPCHECKSUM 31 // for catching cheater maps
1103
1104 #define CS_MODELS 32
1105 #define CS_SOUNDS (CS_MODELS+MAX_MODELS)
1106 #define CS_IMAGES (CS_SOUNDS+MAX_SOUNDS)
1107 #define CS_LIGHTS (CS_IMAGES+MAX_IMAGES)
1108 #define CS_ITEMS (CS_LIGHTS+MAX_LIGHTSTYLES)
1109 #define CS_PLAYERSKINS (CS_ITEMS+MAX_ITEMS)
1110 #define CS_GENERAL (CS_PLAYERSKINS+MAX_CLIENTS)
1111 #define MAX_CONFIGSTRINGS (CS_GENERAL+MAX_GENERAL)
1112
1113
1114 //==============================================
1115
1116
1117 // entity_state_t->event values
1118 // ertity events are for effects that take place reletive
1119 // to an existing entities origin. Very network efficient.
1120 // All muzzle flashes really should be converted to events...
1121 typedef enum
1122 {
1123 EV_NONE,
1124 EV_ITEM_RESPAWN,
1125 EV_FOOTSTEP,
1126 EV_FALLSHORT,
1127 EV_FALL,
1128 EV_FALLFAR,
1129 EV_PLAYER_TELEPORT,
1130 EV_OTHER_TELEPORT
1131 } entity_event_t;
1132
1133
1134 // entity_state_t is the information conveyed from the server
1135 // in an update message about entities that the client will
1136 // need to render in some way
1137 typedef struct entity_state_s
1138 {
1139 int number; // edict index
1140
1141 vec3_t origin;
1142 vec3_t angles;
1143 vec3_t old_origin; // for lerping
1144 int modelindex;
1145 int modelindex2, modelindex3, modelindex4; // weapons, CTF flags, etc
1146 int frame;
1147 int skinnum;
1148 unsigned int effects; // PGM - we're filling it, so it needs to be unsigned
1149 int renderfx;
1150 int solid; // for client side prediction, 8*(bits 0-4) is x/y radius
1151 // 8*(bits 5-9) is z down distance, 8(bits10-15) is z up
1152 // gi.linkentity sets this properly
1153 int sound; // for looping sounds, to guarantee shutoff
1154 int event; // impulse events -- muzzle flashes, footsteps, etc
1155 // events only go out for a single frame, they
1156 // are automatically cleared each frame
1157 } entity_state_t;
1158
1159 //==============================================
1160
1161
1162 // player_state_t is the information needed in addition to pmove_state_t
1163 // to rendered a view. There will only be 10 player_state_t sent each second,
1164 // but the number of pmove_state_t changes will be reletive to client
1165 // frame rates
1166 typedef struct
1167 {
1168 pmove_state_t pmove; // for prediction
1169
1170 // these fields do not need to be communicated bit-precise
1171
1172 vec3_t viewangles; // for fixed views
1173 vec3_t viewoffset; // add to pmovestate->origin
1174 vec3_t kick_angles; // add to view direction to get render angles
1175 // set by weapon kicks, pain effects, etc
1176
1177 vec3_t gunangles;
1178 vec3_t gunoffset;
1179 int gunindex;
1180 int gunframe;
1181
1182 float blend[4]; // rgba full screen effect
1183
1184 float fov; // horizontal field of view
1185
1186 int rdflags; // refdef flags
1187
1188 short stats[MAX_STATS]; // fast status bar updates
1189 } player_state_t;
1190
1191
1192 // ==================
1193 // PGM
1194 #define VIDREF_GL 1
1195 #define VIDREF_SOFT 2
1196 #define VIDREF_OTHER 3
1197
1198 extern int vidref_val;
1199 // PGM
1200 // ==================
1201