|
|
1.1.1.2 ! root 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: */ 1.1 root 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__ 43: #define id386 1 44: #else 45: #define id386 0 46: #endif 47: 48: #if defined _M_ALPHA && !defined C_ONLY 49: #define idaxp 1 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 149: extern long Q_ftol( float f ); 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: // ==================
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.