Annotation of quake2/rogue/q_shared.h, revision 1.1.1.1

1.1       root        1:        
                      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: 
                    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: 
                    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: 
                    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: 
                    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: 
                    597: //ROGUE
                    598: #define        RDF_IRGOGGLES           4
                    599: #define RDF_UVGOGGLES          8
                    600: //ROGUE
                    601: 
                    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: 
                    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: 
                    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: 
                    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: 
                    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,
                    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
                    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
                    990: #define STAT_CHASE                             16
                    991: #define STAT_SPECTATOR                 17
                    992: 
                    993: #define        MAX_STATS                               32
                    994: 
                    995: 
                    996: // dmflags->value flags
                    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"
                   1055: 
                   1056: // ROGUE
                   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: 
                   1081: #define CS_AIRACCEL                    29              // air acceleration control
                   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;
                   1129:        unsigned int            effects;                // PGM - we're filling it, so it needs to be unsigned
                   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: 
                   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: // ==================

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.