Annotation of quake2/ctf/q_shared.h, revision 1.1.1.2

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

unix.superglobalmegacorp.com

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