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