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

1.1       root        1: // g_local.h -- local definitions for game module
                      2: 
                      3: #include "q_shared.h"
                      4: 
                      5: // define GAME_INCLUDE so that game.h does not define the
                      6: // short, server-visible gclient_t and edict_t structures,
                      7: // because we define the full size ones in this file
                      8: #define        GAME_INCLUDE
                      9: #include "game.h"
                     10: 
                     11: // the "gameversion" client command will print this plus compile date
                     12: #define        GAMEVERSION     "baseq2"
                     13: 
                     14: // protocol bytes that can be directly added to messages
                     15: #define        svc_muzzleflash         1
                     16: #define        svc_muzzleflash2        2
                     17: #define        svc_temp_entity         3
                     18: #define        svc_layout                      4
                     19: #define        svc_inventory           5
                     20: #define        svc_stufftext           11
                     21: 
                     22: //==================================================================
                     23: 
                     24: // view pitching times
                     25: #define DAMAGE_TIME            0.5
                     26: #define        FALL_TIME               0.3
                     27: 
                     28: // ROGUE- id killed this weapon
                     29: #define        KILL_DISRUPTOR  1
                     30: // rogue
                     31: 
                     32: // edict->spawnflags
                     33: // these are set with checkboxes on each entity in the map editor
                     34: #define        SPAWNFLAG_NOT_EASY                      0x00000100
                     35: #define        SPAWNFLAG_NOT_MEDIUM            0x00000200
                     36: #define        SPAWNFLAG_NOT_HARD                      0x00000400
                     37: #define        SPAWNFLAG_NOT_DEATHMATCH        0x00000800
                     38: #define        SPAWNFLAG_NOT_COOP                      0x00001000
                     39: 
                     40: // edict->flags
                     41: #define        FL_FLY                                  0x00000001
                     42: #define        FL_SWIM                                 0x00000002      // implied immunity to drowining
                     43: #define FL_IMMUNE_LASER                        0x00000004
                     44: #define        FL_INWATER                              0x00000008
                     45: #define        FL_GODMODE                              0x00000010
                     46: #define        FL_NOTARGET                             0x00000020
                     47: #define FL_IMMUNE_SLIME                        0x00000040
                     48: #define FL_IMMUNE_LAVA                 0x00000080
                     49: #define        FL_PARTIALGROUND                0x00000100      // not all corners are valid
                     50: #define        FL_WATERJUMP                    0x00000200      // player jumping out of water
                     51: #define        FL_TEAMSLAVE                    0x00000400      // not the first on the team
                     52: #define FL_NO_KNOCKBACK                        0x00000800
                     53: #define FL_POWER_ARMOR                 0x00001000      // power armor (if any) is active
                     54: #define FL_RESPAWN                             0x80000000      // used for item respawning
                     55: 
                     56: //ROGUE
                     57: #define FL_MECHANICAL                  0x00002000      // entity is mechanical, use sparks not blood
                     58: #define FL_SAM_RAIMI                   0x00004000      // entity is in sam raimi cam mode
                     59: #define FL_DISGUISED                   0x00008000      // entity is in disguise, monsters will not recognize.
                     60: #define        FL_NOGIB                                0x00010000      // player has been vaporized by a nuke, drop no gibs
                     61: //ROGUE
                     62: 
                     63: #define        FRAMETIME               0.1
                     64: 
                     65: // memory tags to allow dynamic memory to be cleaned up
                     66: #define        TAG_GAME        765             // clear when unloading the dll
                     67: #define        TAG_LEVEL       766             // clear when loading a new level
                     68: 
                     69: 
                     70: #define MELEE_DISTANCE 80
                     71: 
                     72: #define BODY_QUEUE_SIZE                8
                     73: 
                     74: typedef enum
                     75: {
                     76:        DAMAGE_NO,
                     77:        DAMAGE_YES,                     // will take damage if hit
                     78:        DAMAGE_AIM                      // auto targeting recognizes this
                     79: } damage_t;
                     80: 
                     81: typedef enum 
                     82: {
                     83:        WEAPON_READY, 
                     84:        WEAPON_ACTIVATING,
                     85:        WEAPON_DROPPING,
                     86:        WEAPON_FIRING
                     87: } weaponstate_t;
                     88: 
                     89: typedef enum
                     90: {
                     91:        AMMO_BULLETS,
                     92:        AMMO_SHELLS,
                     93:        AMMO_ROCKETS,
                     94:        AMMO_GRENADES,
                     95:        AMMO_CELLS,
                     96:        AMMO_SLUGS,
                     97: 
                     98:        //ROGUE
                     99:        AMMO_FLECHETTES,
                    100:        AMMO_TESLA,
                    101: #ifdef KILL_DISRUPTOR
                    102:        AMMO_PROX
                    103: #else
                    104:        AMMO_PROX,
                    105:        AMMO_DISRUPTOR
                    106: #endif
                    107: } ammo_t;
                    108: 
                    109: 
                    110: //deadflag
                    111: #define DEAD_NO                                        0
                    112: #define DEAD_DYING                             1
                    113: #define DEAD_DEAD                              2
                    114: #define DEAD_RESPAWNABLE               3
                    115: 
                    116: //range
                    117: #define RANGE_MELEE                            0
                    118: #define RANGE_NEAR                             1
                    119: #define RANGE_MID                              2
                    120: #define RANGE_FAR                              3
                    121: 
                    122: //gib types
                    123: #define GIB_ORGANIC                            0
                    124: #define GIB_METALLIC                   1
                    125: 
                    126: //monster ai flags
                    127: #define AI_STAND_GROUND                        0x00000001
                    128: #define AI_TEMP_STAND_GROUND   0x00000002
                    129: #define AI_SOUND_TARGET                        0x00000004
                    130: #define AI_LOST_SIGHT                  0x00000008
                    131: #define AI_PURSUIT_LAST_SEEN   0x00000010
                    132: #define AI_PURSUE_NEXT                 0x00000020
                    133: #define AI_PURSUE_TEMP                 0x00000040
                    134: #define AI_HOLD_FRAME                  0x00000080
                    135: #define AI_GOOD_GUY                            0x00000100
                    136: #define AI_BRUTAL                              0x00000200
                    137: #define AI_NOSTEP                              0x00000400
                    138: #define AI_DUCKED                              0x00000800
                    139: #define AI_COMBAT_POINT                        0x00001000
                    140: #define AI_MEDIC                               0x00002000
                    141: #define AI_RESURRECTING                        0x00004000
                    142: 
                    143: //ROGUE
                    144: #define AI_WALK_WALLS                  0x00008000
                    145: #define AI_MANUAL_STEERING             0x00010000
                    146: #define AI_TARGET_ANGER                        0x00020000
                    147: #define AI_DODGING                             0x00040000
                    148: #define AI_CHARGING                            0x00080000
                    149: #define AI_HINT_PATH                   0x00100000
                    150: #define        AI_IGNORE_SHOTS                 0x00200000
                    151: // PMM - FIXME - last second added for E3 .. there's probably a better way to do this, but
                    152: // this works
                    153: #define        AI_DO_NOT_COUNT                 0x00400000      // set for healed monsters
                    154: #define        AI_SPAWNED_CARRIER              0x00800000      // both do_not_count and spawned are set for spawned monsters
                    155: #define        AI_SPAWNED_MEDIC_C              0x01000000      // both do_not_count and spawned are set for spawned monsters
                    156: #define        AI_SPAWNED_WIDOW                0x02000000      // both do_not_count and spawned are set for spawned monsters
                    157: #define AI_SPAWNED_MASK                        0x03800000      // mask to catch all three flavors of spawned
                    158: #define        AI_BLOCKED                              0x04000000      // used by blocked_checkattack: set to say I'm attacking while blocked 
                    159:                                                                                        // (prevents run-attacks)
                    160: //ROGUE
                    161: 
                    162: //monster attack state
                    163: #define AS_STRAIGHT                            1
                    164: #define AS_SLIDING                             2
                    165: #define        AS_MELEE                                3
                    166: #define        AS_MISSILE                              4
                    167: #define        AS_BLIND                                5       // PMM - used by boss code to do nasty things even if it can't see you
                    168: 
                    169: // armor types
                    170: #define ARMOR_NONE                             0
                    171: #define ARMOR_JACKET                   1
                    172: #define ARMOR_COMBAT                   2
                    173: #define ARMOR_BODY                             3
                    174: #define ARMOR_SHARD                            4
                    175: 
                    176: // power armor types
                    177: #define POWER_ARMOR_NONE               0
                    178: #define POWER_ARMOR_SCREEN             1
                    179: #define POWER_ARMOR_SHIELD             2
                    180: 
                    181: // handedness values
                    182: #define RIGHT_HANDED                   0
                    183: #define LEFT_HANDED                            1
                    184: #define CENTER_HANDED                  2
                    185: 
                    186: 
                    187: // game.serverflags values
                    188: #define SFL_CROSS_TRIGGER_1            0x00000001
                    189: #define SFL_CROSS_TRIGGER_2            0x00000002
                    190: #define SFL_CROSS_TRIGGER_3            0x00000004
                    191: #define SFL_CROSS_TRIGGER_4            0x00000008
                    192: #define SFL_CROSS_TRIGGER_5            0x00000010
                    193: #define SFL_CROSS_TRIGGER_6            0x00000020
                    194: #define SFL_CROSS_TRIGGER_7            0x00000040
                    195: #define SFL_CROSS_TRIGGER_8            0x00000080
                    196: #define SFL_CROSS_TRIGGER_MASK 0x000000ff
                    197: 
                    198: 
                    199: // noise types for PlayerNoise
                    200: #define PNOISE_SELF                            0
                    201: #define PNOISE_WEAPON                  1
                    202: #define PNOISE_IMPACT                  2
                    203: 
                    204: 
                    205: // edict->movetype values
                    206: typedef enum
                    207: {
                    208: MOVETYPE_NONE,                 // never moves
                    209: MOVETYPE_NOCLIP,               // origin and angles change with no interaction
                    210: MOVETYPE_PUSH,                 // no clip to world, push on box contact
                    211: MOVETYPE_STOP,                 // no clip to world, stops on box contact
                    212: 
                    213: MOVETYPE_WALK,                 // gravity
                    214: MOVETYPE_STEP,                 // gravity, special edge handling
                    215: MOVETYPE_FLY,
                    216: MOVETYPE_TOSS,                 // gravity
                    217: MOVETYPE_FLYMISSILE,   // extra size to monsters
                    218: MOVETYPE_BOUNCE,
                    219: MOVETYPE_NEWTOSS               // PGM - for deathball
                    220: } movetype_t;
                    221: 
                    222: 
                    223: 
                    224: typedef struct
                    225: {
                    226:        int             base_count;
                    227:        int             max_count;
                    228:        float   normal_protection;
                    229:        float   energy_protection;
                    230:        int             armor;
                    231: } gitem_armor_t;
                    232: 
                    233: 
                    234: // gitem_t->flags
                    235: #define        IT_WEAPON                       0x00000001              // use makes active weapon
                    236: #define        IT_AMMO                         0x00000002
                    237: #define IT_ARMOR                       0x00000004
                    238: #define IT_STAY_COOP           0x00000008
                    239: #define IT_KEY                         0x00000010
                    240: #define IT_POWERUP                     0x00000020
                    241: 
                    242: // ROGUE
                    243: #define IT_MELEE                       0x00000040
                    244: #define IT_NOT_GIVEABLE                0x00000080      // item can not be given
                    245: // ROGUE
                    246: 
                    247: // gitem_t->weapmodel for weapons indicates model index
                    248: #define WEAP_BLASTER                   1 
                    249: #define WEAP_SHOTGUN                   2 
                    250: #define WEAP_SUPERSHOTGUN              3 
                    251: #define WEAP_MACHINEGUN                        4 
                    252: #define WEAP_CHAINGUN                  5 
                    253: #define WEAP_GRENADES                  6 
                    254: #define WEAP_GRENADELAUNCHER   7 
                    255: #define WEAP_ROCKETLAUNCHER            8 
                    256: #define WEAP_HYPERBLASTER              9 
                    257: #define WEAP_RAILGUN                   10
                    258: #define WEAP_BFG                               11
                    259: 
                    260: #define WEAP_DISRUPTOR                 12              // PGM
                    261: #define WEAP_ETFRIFLE                  13              // PGM
                    262: #define WEAP_PLASMA                            14              // PGM
                    263: #define WEAP_PROXLAUNCH                        15              // PGM
                    264: #define WEAP_CHAINFIST                 16              // PGM
                    265: 
                    266: typedef struct gitem_s
                    267: {
                    268:        char            *classname;     // spawning name
                    269:        qboolean        (*pickup)(struct edict_s *ent, struct edict_s *other);
                    270:        void            (*use)(struct edict_s *ent, struct gitem_s *item);
                    271:        void            (*drop)(struct edict_s *ent, struct gitem_s *item);
                    272:        void            (*weaponthink)(struct edict_s *ent);
                    273:        char            *pickup_sound;
                    274:        char            *world_model;
                    275:        int                     world_model_flags;
                    276:        char            *view_model;
                    277: 
                    278:        // client side info
                    279:        char            *icon;
                    280:        char            *pickup_name;   // for printing on pickup
                    281:        int                     count_width;            // number of digits to display by icon
                    282: 
                    283:        int                     quantity;               // for ammo how much, for weapons how much is used per shot
                    284:        char            *ammo;                  // for weapons
                    285:        int                     flags;                  // IT_* flags
                    286: 
                    287:        int                     weapmodel;              // weapon model index (for weapons)
                    288: 
                    289:        void            *info;
                    290:        int                     tag;
                    291: 
                    292:        char            *precaches;             // string of all models, sounds, and images this item will use
                    293: } gitem_t;
                    294: 
                    295: 
                    296: 
                    297: //
                    298: // this structure is left intact through an entire game
                    299: // it should be initialized at dll load time, and read/written to
                    300: // the server.ssv file for savegames
                    301: //
                    302: typedef struct
                    303: {
                    304:        char            helpmessage1[512];
                    305:        char            helpmessage2[512];
                    306:        int                     helpchanged;    // flash F1 icon if non 0, play sound
                    307:                                                                // and increment only if 1, 2, or 3
                    308: 
                    309:        gclient_t       *clients;               // [maxclients]
                    310: 
                    311:        // can't store spawnpoint in level, because
                    312:        // it would get overwritten by the savegame restore
                    313:        char            spawnpoint[512];        // needed for coop respawns
                    314: 
                    315:        // store latched cvars here that we want to get at often
                    316:        int                     maxclients;
                    317:        int                     maxentities;
                    318: 
                    319:        // cross level triggers
                    320:        int                     serverflags;
                    321: 
                    322:        // items
                    323:        int                     num_items;
                    324: 
                    325:        qboolean        autosaved;
                    326: } game_locals_t;
                    327: 
                    328: 
                    329: //
                    330: // this structure is cleared as each map is entered
                    331: // it is read/written to the level.sav file for savegames
                    332: //
                    333: typedef struct
                    334: {
                    335:        int                     framenum;
                    336:        float           time;
                    337: 
                    338:        char            level_name[MAX_QPATH];  // the descriptive name (Outer Base, etc)
                    339:        char            mapname[MAX_QPATH];             // the server name (base1, etc)
                    340:        char            nextmap[MAX_QPATH];             // go here when fraglimit is hit
                    341: 
                    342:        // intermission state
                    343:        float           intermissiontime;               // time the intermission was started
                    344:        char            *changemap;
                    345:        int                     exitintermission;
                    346:        vec3_t          intermission_origin;
                    347:        vec3_t          intermission_angle;
                    348: 
                    349:        edict_t         *sight_client;  // changed once each frame for coop games
                    350: 
                    351:        edict_t         *sight_entity;
                    352:        int                     sight_entity_framenum;
                    353:        edict_t         *sound_entity;
                    354:        int                     sound_entity_framenum;
                    355:        edict_t         *sound2_entity;
                    356:        int                     sound2_entity_framenum;
                    357: 
                    358:        int                     pic_health;
                    359: 
                    360:        int                     total_secrets;
                    361:        int                     found_secrets;
                    362: 
                    363:        int                     total_goals;
                    364:        int                     found_goals;
                    365: 
                    366:        int                     total_monsters;
                    367:        int                     killed_monsters;
                    368: 
                    369:        edict_t         *current_entity;        // entity running from G_RunFrame
                    370:        int                     body_que;                       // dead bodies
                    371: 
                    372:        int                     power_cubes;            // ugly necessity for coop
                    373: 
                    374:        // ROGUE
                    375:        edict_t         *disguise_violator;
                    376:        int                     disguise_violation_framenum;
                    377:        // ROGUE
                    378: } level_locals_t;
                    379: 
                    380: 
                    381: // spawn_temp_t is only used to hold entity field values that
                    382: // can be set from the editor, but aren't actualy present
                    383: // in edict_t during gameplay
                    384: typedef struct
                    385: {
                    386:        // world vars
                    387:        char            *sky;
                    388:        float           skyrotate;
                    389:        vec3_t          skyaxis;
                    390:        char            *nextmap;
                    391: 
                    392:        int                     lip;
                    393:        int                     distance;
                    394:        int                     height;
                    395:        char            *noise;
                    396:        float           pausetime;
                    397:        char            *item;
                    398:        char            *gravity;
                    399: 
                    400:        float           minyaw;
                    401:        float           maxyaw;
                    402:        float           minpitch;
                    403:        float           maxpitch;
                    404: } spawn_temp_t;
                    405: 
                    406: 
                    407: typedef struct
                    408: {
                    409:        // fixed data
                    410:        vec3_t          start_origin;
                    411:        vec3_t          start_angles;
                    412:        vec3_t          end_origin;
                    413:        vec3_t          end_angles;
                    414: 
                    415:        int                     sound_start;
                    416:        int                     sound_middle;
                    417:        int                     sound_end;
                    418: 
                    419:        float           accel;
                    420:        float           speed;
                    421:        float           decel;
                    422:        float           distance;
                    423: 
                    424:        float           wait;
                    425: 
                    426:        // state data
                    427:        int                     state;
                    428:        vec3_t          dir;
                    429:        float           current_speed;
                    430:        float           move_speed;
                    431:        float           next_speed;
                    432:        float           remaining_distance;
                    433:        float           decel_distance;
                    434:        void            (*endfunc)(edict_t *);
                    435: } moveinfo_t;
                    436: 
                    437: 
                    438: typedef struct
                    439: {
                    440:        void    (*aifunc)(edict_t *self, float dist);
                    441:        float   dist;
                    442:        void    (*thinkfunc)(edict_t *self);
                    443: } mframe_t;
                    444: 
                    445: typedef struct
                    446: {
                    447:        int                     firstframe;
                    448:        int                     lastframe;
                    449:        mframe_t        *frame;
                    450:        void            (*endfunc)(edict_t *self);
                    451: } mmove_t;
                    452: 
                    453: typedef struct
                    454: {
                    455:        mmove_t         *currentmove;
                    456:        unsigned int    aiflags;                // PGM - unsigned, since we're close to the max
                    457:        int                     nextframe;
                    458:        float           scale;
                    459: 
                    460:        void            (*stand)(edict_t *self);
                    461:        void            (*idle)(edict_t *self);
                    462:        void            (*search)(edict_t *self);
                    463:        void            (*walk)(edict_t *self);
                    464:        void            (*run)(edict_t *self);
                    465:        void            (*dodge)(edict_t *self, edict_t *other, float eta, trace_t *tr);
                    466:        void            (*attack)(edict_t *self);
                    467:        void            (*melee)(edict_t *self);
                    468:        void            (*sight)(edict_t *self, edict_t *other);
                    469:        qboolean        (*checkattack)(edict_t *self);
                    470: 
                    471:        float           pausetime;
                    472:        float           attack_finished;
                    473: 
                    474:        vec3_t          saved_goal;
                    475:        float           search_time;
                    476:        float           trail_time;
                    477:        vec3_t          last_sighting;
                    478:        int                     attack_state;
                    479:        int                     lefty;
                    480:        float           idle_time;
                    481:        int                     linkcount;
                    482: 
                    483:        int                     power_armor_type;
                    484:        int                     power_armor_power;
                    485: 
                    486: //ROGUE
                    487:        qboolean        (*blocked)(edict_t *self, float dist);
                    488: //     edict_t         *last_hint;                     // last hint_path the monster touched
                    489:        float           last_hint_time;         // last time the monster checked for hintpaths.
                    490:        edict_t         *goal_hint;                     // which hint_path we're trying to get to
                    491:        int                     medicTries;
                    492:        edict_t         *badMedic1, *badMedic2; // these medics have declared this monster "unhealable"
                    493:        edict_t         *healer;        // this is who is healing this monster
                    494:        void            (*duck)(edict_t *self, float eta);
                    495:        void            (*unduck)(edict_t *self);
                    496:        void            (*sidestep)(edict_t *self);
                    497:        //  while abort_duck would be nice, only monsters which duck but don't sidestep would use it .. only the brain
                    498:        //  not really worth it.  sidestep is an implied abort_duck
                    499: //     void            (*abort_duck)(edict_t *self);
                    500:        float           base_height;
                    501:        float           next_duck_time;
                    502:        float           duck_wait_time;
                    503:        edict_t         *last_player_enemy;
                    504:        // blindfire stuff .. the boolean says whether the monster will do it, and blind_fire_time is the timing
                    505:        // (set in the monster) of the next shot
                    506:        qboolean        blindfire;              // will the monster blindfire?
                    507:        float           blind_fire_delay;
                    508:        vec3_t          blind_fire_target;
                    509:        // used by the spawners to not spawn too much and keep track of #s of monsters spawned
                    510:        int                     monster_slots;
                    511:        int                     monster_used;
                    512:        edict_t         *commander;
                    513:        // powerup timers, used by widow, our friend
                    514:        float           quad_framenum;
                    515:        float           invincible_framenum;
                    516:        float           double_framenum;
                    517: //ROGUE
                    518: } monsterinfo_t;
                    519: 
                    520: // ROGUE
                    521: // this determines how long to wait after a duck to duck again.  this needs to be longer than
                    522: // the time after the monster_duck_up in all of the animation sequences
                    523: #define        DUCK_INTERVAL   0.5
                    524: // ROGUE
                    525: 
                    526: extern game_locals_t   game;
                    527: extern level_locals_t  level;
                    528: extern game_import_t   gi;
                    529: extern game_export_t   globals;
                    530: extern spawn_temp_t    st;
                    531: 
                    532: extern int     sm_meat_index;
                    533: extern int     snd_fry;
                    534: 
                    535: extern int     jacket_armor_index;
                    536: extern int     combat_armor_index;
                    537: extern int     body_armor_index;
                    538: 
                    539: 
                    540: // means of death
                    541: #define MOD_UNKNOWN                    0
                    542: #define MOD_BLASTER                    1
                    543: #define MOD_SHOTGUN                    2
                    544: #define MOD_SSHOTGUN           3
                    545: #define MOD_MACHINEGUN         4
                    546: #define MOD_CHAINGUN           5
                    547: #define MOD_GRENADE                    6
                    548: #define MOD_G_SPLASH           7
                    549: #define MOD_ROCKET                     8
                    550: #define MOD_R_SPLASH           9
                    551: #define MOD_HYPERBLASTER       10
                    552: #define MOD_RAILGUN                    11
                    553: #define MOD_BFG_LASER          12
                    554: #define MOD_BFG_BLAST          13
                    555: #define MOD_BFG_EFFECT         14
                    556: #define MOD_HANDGRENADE                15
                    557: #define MOD_HG_SPLASH          16
                    558: #define MOD_WATER                      17
                    559: #define MOD_SLIME                      18
                    560: #define MOD_LAVA                       19
                    561: #define MOD_CRUSH                      20
                    562: #define MOD_TELEFRAG           21
                    563: #define MOD_FALLING                    22
                    564: #define MOD_SUICIDE                    23
                    565: #define MOD_HELD_GRENADE       24
                    566: #define MOD_EXPLOSIVE          25
                    567: #define MOD_BARREL                     26
                    568: #define MOD_BOMB                       27
                    569: #define MOD_EXIT                       28
                    570: #define MOD_SPLASH                     29
                    571: #define MOD_TARGET_LASER       30
                    572: #define MOD_TRIGGER_HURT       31
                    573: #define MOD_HIT                                32
                    574: #define MOD_TARGET_BLASTER     33
                    575: #define MOD_FRIENDLY_FIRE      0x8000000
                    576: 
                    577: //========
                    578: //ROGUE
                    579: #define MOD_CHAINFIST                  40
                    580: #define MOD_DISINTEGRATOR              41
                    581: #define MOD_ETF_RIFLE                  42
                    582: #define MOD_BLASTER2                   43
                    583: #define MOD_HEATBEAM                   44
                    584: #define MOD_TESLA                              45
                    585: #define MOD_PROX                               46
                    586: #define MOD_NUKE                               47
                    587: #define MOD_VENGEANCE_SPHERE   48
                    588: #define MOD_HUNTER_SPHERE              49
                    589: #define MOD_DEFENDER_SPHERE            50
                    590: #define MOD_TRACKER                            51
                    591: #define MOD_DBALL_CRUSH                        52
                    592: #define MOD_DOPPLE_EXPLODE             53
                    593: #define MOD_DOPPLE_VENGEANCE   54
                    594: #define MOD_DOPPLE_HUNTER              55
                    595: //ROGUE
                    596: //========
                    597: 
                    598: extern int     meansOfDeath;
                    599: 
                    600: 
                    601: extern edict_t                 *g_edicts;
                    602: 
                    603: #define        FOFS(x) (int)&(((edict_t *)0)->x)
                    604: #define        STOFS(x) (int)&(((spawn_temp_t *)0)->x)
                    605: #define        LLOFS(x) (int)&(((level_locals_t *)0)->x)
                    606: #define        CLOFS(x) (int)&(((gclient_t *)0)->x)
                    607: 
                    608: #define random()       ((rand () & 0x7fff) / ((float)0x7fff))
                    609: #define crandom()      (2.0 * (random() - 0.5))
                    610: 
                    611: extern cvar_t  *maxentities;
                    612: extern cvar_t  *deathmatch;
                    613: extern cvar_t  *coop;
                    614: extern cvar_t  *dmflags;
                    615: extern cvar_t  *skill;
                    616: extern cvar_t  *fraglimit;
                    617: extern cvar_t  *timelimit;
                    618: extern cvar_t  *password;
                    619: extern cvar_t  *spectator_password;
                    620: extern cvar_t  *g_select_empty;
                    621: extern cvar_t  *dedicated;
                    622: 
                    623: extern cvar_t  *filterban;
                    624: 
                    625: extern cvar_t  *sv_gravity;
                    626: extern cvar_t  *sv_maxvelocity;
                    627: 
                    628: extern cvar_t  *gun_x, *gun_y, *gun_z;
                    629: extern cvar_t  *sv_rollspeed;
                    630: extern cvar_t  *sv_rollangle;
                    631: 
                    632: extern cvar_t  *run_pitch;
                    633: extern cvar_t  *run_roll;
                    634: extern cvar_t  *bob_up;
                    635: extern cvar_t  *bob_pitch;
                    636: extern cvar_t  *bob_roll;
                    637: 
                    638: extern cvar_t  *sv_cheats;
                    639: extern cvar_t  *maxclients;
                    640: extern cvar_t  *maxspectators;
                    641: 
                    642: extern cvar_t  *flood_msgs;
                    643: extern cvar_t  *flood_persecond;
                    644: extern cvar_t  *flood_waitdelay;
                    645: 
                    646: extern cvar_t  *sv_maplist;
                    647: 
                    648: extern cvar_t  *sv_stopspeed;          // PGM - this was a define in g_phys.c
                    649: 
                    650: //ROGUE
                    651: extern cvar_t  *g_showlogic;
                    652: extern cvar_t  *gamerules;
                    653: extern cvar_t  *huntercam;
                    654: extern cvar_t  *randomrespawn;
                    655: 
                    656: // this is for the count of monsters
                    657: #define ENT_SLOTS_LEFT         (ent->monsterinfo.monster_slots - ent->monsterinfo.monster_used)
                    658: #define SELF_SLOTS_LEFT                (self->monsterinfo.monster_slots - self->monsterinfo.monster_used)
                    659: //ROGUE
                    660: 
                    661: #define world  (&g_edicts[0])
                    662: 
                    663: // item spawnflags
                    664: #define ITEM_TRIGGER_SPAWN             0x00000001
                    665: #define ITEM_NO_TOUCH                  0x00000002
                    666: // 6 bits reserved for editor flags
                    667: // 8 bits used as power cube id bits for coop games
                    668: #define DROPPED_ITEM                   0x00010000
                    669: #define        DROPPED_PLAYER_ITEM             0x00020000
                    670: #define ITEM_TARGETS_USED              0x00040000
                    671: 
                    672: //
                    673: // fields are needed for spawning from the entity string
                    674: // and saving / loading games
                    675: //
                    676: #define FFL_SPAWNTEMP          1
                    677: #define FFL_NOSPAWN                    2
                    678: 
                    679: typedef enum {
                    680:        F_INT, 
                    681:        F_FLOAT,
                    682:        F_LSTRING,                      // string on disk, pointer in memory, TAG_LEVEL
                    683:        F_GSTRING,                      // string on disk, pointer in memory, TAG_GAME
                    684:        F_VECTOR,
                    685:        F_ANGLEHACK,
                    686:        F_EDICT,                        // index on disk, pointer in memory
                    687:        F_ITEM,                         // index on disk, pointer in memory
                    688:        F_CLIENT,                       // index on disk, pointer in memory
                    689:        F_FUNCTION,
                    690:        F_MMOVE,
                    691:        F_IGNORE
                    692: } fieldtype_t;
                    693: 
                    694: typedef struct
                    695: {
                    696:        char    *name;
                    697:        int             ofs;
                    698:        fieldtype_t     type;
                    699:        int             flags;
                    700: } field_t;
                    701: 
                    702: 
                    703: extern field_t fields[];
                    704: extern gitem_t itemlist[];
                    705: 
                    706: 
                    707: //
                    708: // g_cmds.c
                    709: //
                    710: void Cmd_Help_f (edict_t *ent);
                    711: void Cmd_Score_f (edict_t *ent);
                    712: 
                    713: //
                    714: // g_items.c
                    715: //
                    716: void PrecacheItem (gitem_t *it);
                    717: void InitItems (void);
                    718: void SetItemNames (void);
                    719: gitem_t        *FindItem (char *pickup_name);
                    720: gitem_t        *FindItemByClassname (char *classname);
                    721: #define        ITEM_INDEX(x) ((x)-itemlist)
                    722: edict_t *Drop_Item (edict_t *ent, gitem_t *item);
                    723: void SetRespawn (edict_t *ent, float delay);
                    724: void ChangeWeapon (edict_t *ent);
                    725: void SpawnItem (edict_t *ent, gitem_t *item);
                    726: void Think_Weapon (edict_t *ent);
                    727: int ArmorIndex (edict_t *ent);
                    728: int PowerArmorType (edict_t *ent);
                    729: gitem_t        *GetItemByIndex (int index);
                    730: qboolean Add_Ammo (edict_t *ent, gitem_t *item, int count);
                    731: void Touch_Item (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf);
                    732: 
                    733: //
                    734: // g_utils.c
                    735: //
                    736: qboolean       KillBox (edict_t *ent);
                    737: void   G_ProjectSource (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result);
                    738: edict_t *G_Find (edict_t *from, int fieldofs, char *match);
                    739: edict_t *findradius (edict_t *from, vec3_t org, float rad);
                    740: edict_t *G_PickTarget (char *targetname);
                    741: void   G_UseTargets (edict_t *ent, edict_t *activator);
                    742: void   G_SetMovedir (vec3_t angles, vec3_t movedir);
                    743: 
                    744: void   G_InitEdict (edict_t *e);
                    745: edict_t        *G_Spawn (void);
                    746: void   G_FreeEdict (edict_t *e);
                    747: 
                    748: void   G_TouchTriggers (edict_t *ent);
                    749: void   G_TouchSolids (edict_t *ent);
                    750: 
                    751: char   *G_CopyString (char *in);
                    752: 
                    753: float  *tv (float x, float y, float z);
                    754: char   *vtos (vec3_t v);
                    755: 
                    756: float vectoyaw (vec3_t vec);
                    757: void vectoangles (vec3_t vec, vec3_t angles);
                    758: 
                    759: //ROGUE
                    760: void   G_ProjectSource2 (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t up, vec3_t result);
                    761: float  vectoyaw2 (vec3_t vec);
                    762: void   vectoangles2 (vec3_t vec, vec3_t angles);
                    763: edict_t *findradius2 (edict_t *from, vec3_t org, float rad);
                    764: //ROGUE
                    765: 
                    766: //
                    767: // g_combat.c
                    768: //
                    769: qboolean OnSameTeam (edict_t *ent1, edict_t *ent2);
                    770: qboolean CanDamage (edict_t *targ, edict_t *inflictor);
                    771: void T_Damage (edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir, vec3_t point, vec3_t normal, int damage, int knockback, int dflags, int mod);
                    772: void T_RadiusDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
                    773: 
                    774: //ROGUE
                    775: void T_RadiusNukeDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
                    776: void T_RadiusClassDamage (edict_t *inflictor, edict_t *attacker, float damage, char *ignoreClass, float radius, int mod);
                    777: void cleanupHealTarget (edict_t *ent);
                    778: //ROGUE
                    779: 
                    780: // damage flags
                    781: #define DAMAGE_RADIUS                  0x00000001      // damage was indirect
                    782: #define DAMAGE_NO_ARMOR                        0x00000002      // armour does not protect from this damage
                    783: #define DAMAGE_ENERGY                  0x00000004      // damage is from an energy based weapon
                    784: #define DAMAGE_NO_KNOCKBACK            0x00000008      // do not affect velocity, just view angles
                    785: #define DAMAGE_BULLET                  0x00000010  // damage is from a bullet (used for ricochets)
                    786: #define DAMAGE_NO_PROTECTION   0x00000020  // armor, shields, invulnerability, and godmode have no effect
                    787: //ROGUE
                    788: #define DAMAGE_DESTROY_ARMOR   0x00000040      // damage is done to armor and health.
                    789: #define DAMAGE_NO_REG_ARMOR            0x00000080      // damage skips regular armor
                    790: #define DAMAGE_NO_POWER_ARMOR  0x00000100      // damage skips power armor
                    791: //ROGUE
                    792: 
                    793: 
                    794: #define DEFAULT_BULLET_HSPREAD 300
                    795: #define DEFAULT_BULLET_VSPREAD 500
                    796: #define DEFAULT_SHOTGUN_HSPREAD        1000
                    797: #define DEFAULT_SHOTGUN_VSPREAD        500
                    798: #define DEFAULT_DEATHMATCH_SHOTGUN_COUNT       12
                    799: #define DEFAULT_SHOTGUN_COUNT  12
                    800: #define DEFAULT_SSHOTGUN_COUNT 20
                    801: 
                    802: //
                    803: // g_monster.c
                    804: //
                    805: void monster_fire_bullet (edict_t *self, vec3_t start, vec3_t dir, int damage, int kick, int hspread, int vspread, int flashtype);
                    806: void monster_fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int flashtype);
                    807: void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
                    808: void monster_fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int flashtype);
                    809: void monster_fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
                    810: void monster_fire_railgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int flashtype);
                    811: void monster_fire_bfg (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int kick, float damage_radius, int flashtype);
                    812: void M_droptofloor (edict_t *ent);
                    813: void monster_think (edict_t *self);
                    814: void walkmonster_start (edict_t *self);
                    815: void swimmonster_start (edict_t *self);
                    816: void flymonster_start (edict_t *self);
                    817: void AttackFinished (edict_t *self, float time);
                    818: void monster_death_use (edict_t *self);
                    819: void M_CatagorizePosition (edict_t *ent);
                    820: qboolean M_CheckAttack (edict_t *self);
                    821: void M_FlyCheck (edict_t *self);
                    822: void M_CheckGround (edict_t *ent);
                    823: //ROGUE
                    824: void monster_fire_blaster2 (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
                    825: void monster_fire_tracker (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, edict_t *enemy, int flashtype);
                    826: void monster_fire_heat (edict_t *self, vec3_t start, vec3_t dir, vec3_t offset, int damage, int kick, int flashtype);
                    827: void stationarymonster_start (edict_t *self);  
                    828: void monster_done_dodge (edict_t *self);
                    829: //ROGUE
                    830: 
                    831: 
                    832: //
                    833: // g_misc.c
                    834: //
                    835: void ThrowHead (edict_t *self, char *gibname, int damage, int type);
                    836: void ThrowClientHead (edict_t *self, int damage);
                    837: void ThrowGib (edict_t *self, char *gibname, int damage, int type);
                    838: void BecomeExplosion1(edict_t *self);
                    839: 
                    840: //
                    841: // g_ai.c
                    842: //
                    843: void AI_SetSightClient (void);
                    844: 
                    845: void ai_stand (edict_t *self, float dist);
                    846: void ai_move (edict_t *self, float dist);
                    847: void ai_walk (edict_t *self, float dist);
                    848: void ai_turn (edict_t *self, float dist);
                    849: void ai_run (edict_t *self, float dist);
                    850: void ai_charge (edict_t *self, float dist);
                    851: int range (edict_t *self, edict_t *other);
                    852: 
                    853: void FoundTarget (edict_t *self);
                    854: qboolean infront (edict_t *self, edict_t *other);
                    855: qboolean visible (edict_t *self, edict_t *other);
                    856: qboolean FacingIdeal(edict_t *self);
                    857: 
                    858: //
                    859: // g_weapon.c
                    860: //
                    861: void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin);
                    862: qboolean fire_hit (edict_t *self, vec3_t aim, int damage, int kick);
                    863: void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod);
                    864: void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod);
                    865: void fire_blaster (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper);
                    866: void fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius);
                    867: void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held);
                    868: void fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
                    869: void fire_rail (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
                    870: void fire_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius);
                    871: 
                    872: //
                    873: // g_ptrail.c
                    874: //
                    875: void PlayerTrail_Init (void);
                    876: void PlayerTrail_Add (vec3_t spot);
                    877: void PlayerTrail_New (vec3_t spot);
                    878: edict_t *PlayerTrail_PickFirst (edict_t *self);
                    879: edict_t *PlayerTrail_PickNext (edict_t *self);
                    880: edict_t        *PlayerTrail_LastSpot (void);
                    881: 
                    882: //
                    883: // g_client.c
                    884: //
                    885: void respawn (edict_t *ent);
                    886: void BeginIntermission (edict_t *targ);
                    887: void PutClientInServer (edict_t *ent);
                    888: void InitClientPersistant (gclient_t *client);
                    889: void InitClientResp (gclient_t *client);
                    890: void InitBodyQue (void);
                    891: void ClientBeginServerFrame (edict_t *ent);
                    892: 
                    893: //
                    894: // g_player.c
                    895: //
                    896: void player_pain (edict_t *self, edict_t *other, float kick, int damage);
                    897: void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
                    898: 
                    899: //
                    900: // g_svcmds.c
                    901: //
                    902: void   ServerCommand (void);
                    903: qboolean SV_FilterPacket (char *from);
                    904: 
                    905: //
                    906: // p_view.c
                    907: //
                    908: void ClientEndServerFrame (edict_t *ent);
                    909: 
                    910: //
                    911: // p_hud.c
                    912: //
                    913: void MoveClientToIntermission (edict_t *client);
                    914: void G_SetStats (edict_t *ent);
                    915: void G_SetSpectatorStats (edict_t *ent);
                    916: void G_CheckChaseStats (edict_t *ent);
                    917: void ValidateSelectedItem (edict_t *ent);
                    918: void DeathmatchScoreboardMessage (edict_t *client, edict_t *killer);
                    919: 
                    920: //
                    921: // g_pweapon.c
                    922: //
                    923: void PlayerNoise(edict_t *who, vec3_t where, int type);
                    924: 
                    925: //
                    926: // m_move.c
                    927: //
                    928: qboolean M_CheckBottom (edict_t *ent);
                    929: qboolean M_walkmove (edict_t *ent, float yaw, float dist);
                    930: void M_MoveToGoal (edict_t *ent, float dist);
                    931: void M_ChangeYaw (edict_t *ent);
                    932: 
                    933: //
                    934: // g_phys.c
                    935: //
                    936: void G_RunEntity (edict_t *ent);
                    937: 
                    938: //
                    939: // g_main.c
                    940: //
                    941: void SaveClientData (void);
                    942: void FetchClientEntData (edict_t *ent);
                    943: 
                    944: //
                    945: // g_chase.c
                    946: //
                    947: void UpdateChaseCam(edict_t *ent);
                    948: void ChaseNext(edict_t *ent);
                    949: void ChasePrev(edict_t *ent);
                    950: void GetChaseTarget(edict_t *ent);
                    951: 
                    952: 
                    953: //====================
                    954: // ROGUE PROTOTYPES
                    955: //
                    956: // g_newweap.c
                    957: //
                    958: //extern float nuke_framenum;
                    959: 
                    960: void fire_flechette (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int kick);
                    961: void fire_prox (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed);            
                    962: void fire_nuke (edict_t *self, vec3_t start, vec3_t aimdir, int speed);                
                    963: void fire_flame (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed);
                    964: void fire_burst (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed);
                    965: void fire_maintain (edict_t *, edict_t *, vec3_t start, vec3_t aimdir, int damage, int speed);
                    966: void fire_incendiary_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius);
                    967: void fire_player_melee (edict_t *self, vec3_t start, vec3_t aim, int reach, int damage, int kick, int quiet, int mod);
                    968: void fire_tesla (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed);
                    969: void fire_blaster2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper);
                    970: void fire_heat (edict_t *self, vec3_t start, vec3_t aimdir, vec3_t offset, int damage, int kick, qboolean monster);
                    971: void fire_tracker (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, edict_t *enemy);
                    972: 
                    973: //
                    974: // g_newai.c
                    975: //
                    976: qboolean blocked_checkshot (edict_t *self, float shotChance);
                    977: qboolean blocked_checkplat (edict_t *self, float dist);
                    978: qboolean blocked_checkjump (edict_t *self, float dist, float maxDown, float maxUp);
                    979: qboolean blocked_checknewenemy (edict_t *self);
                    980: qboolean monsterlost_checkhint (edict_t *self);
                    981: qboolean inback (edict_t *self, edict_t *other);
                    982: float realrange (edict_t *self, edict_t *other);
                    983: edict_t *SpawnBadArea(vec3_t mins, vec3_t maxs, float lifespan, edict_t *owner);
                    984: edict_t *CheckForBadArea(edict_t *ent);
                    985: qboolean MarkTeslaArea(edict_t *self, edict_t *tesla);
                    986: void InitHintPaths (void);
                    987: void PredictAim (edict_t *target, vec3_t start, float bolt_speed, qboolean eye_height, float offset, vec3_t aimdir, vec3_t aimpoint);
                    988: qboolean below (edict_t *self, edict_t *other);
                    989: void drawbbox (edict_t *self);
                    990: void M_MonsterDodge (edict_t *self, edict_t *attacker, float eta, trace_t *tr);
                    991: void monster_duck_down (edict_t *self);
                    992: void monster_duck_hold (edict_t *self);
                    993: void monster_duck_up (edict_t *self);
                    994: qboolean has_valid_enemy (edict_t *self);
                    995: void TargetTesla (edict_t *self, edict_t *tesla);
                    996: void hintpath_stop (edict_t *self);
                    997: edict_t * PickCoopTarget (edict_t *self);
                    998: int CountPlayers (void);
                    999: 
                   1000: //
                   1001: // g_sphere.c
                   1002: //
                   1003: void Defender_Launch (edict_t *self);
                   1004: void Vengeance_Launch (edict_t *self);
                   1005: void Hunter_Launch (edict_t *self);
                   1006: 
                   1007: //
                   1008: // g_newdm.c
                   1009: //
                   1010: void InitGameRules(void);
                   1011: edict_t *DoRandomRespawn (edict_t *ent);
                   1012: void PrecacheForRandomRespawn (void);
                   1013: qboolean Tag_PickupToken (edict_t *ent, edict_t *other);
                   1014: void Tag_DropToken (edict_t *ent, gitem_t *item);
                   1015: void Tag_PlayerDeath(edict_t *targ, edict_t *inflictor, edict_t *attacker);
                   1016: void fire_doppleganger (edict_t *ent, vec3_t start, vec3_t aimdir);
                   1017: 
                   1018: //
                   1019: // g_spawn.c
                   1020: //
                   1021: edict_t *CreateMonster(vec3_t origin, vec3_t angles, char *classname);
                   1022: edict_t *CreateFlyMonster (vec3_t origin, vec3_t angles, vec3_t mins, vec3_t maxs, char *classname);
                   1023: edict_t *CreateGroundMonster (vec3_t origin, vec3_t angles, vec3_t mins, vec3_t maxs, char *classname, int height);
                   1024: qboolean FindSpawnPoint (vec3_t startpoint, vec3_t mins, vec3_t maxs, vec3_t spawnpoint, float maxMoveUp);
                   1025: qboolean CheckSpawnPoint (vec3_t origin, vec3_t mins, vec3_t maxs);
                   1026: qboolean CheckGroundSpawnPoint (vec3_t origin, vec3_t entMins, vec3_t entMaxs, float height, float gravity);
                   1027: void DetermineBBox (char *classname, vec3_t mins, vec3_t maxs);
                   1028: void SpawnGrow_Spawn (vec3_t startpos, int size);
                   1029: void Widowlegs_Spawn (vec3_t startpos, vec3_t angles);
                   1030: 
                   1031: //
                   1032: // p_client.c
                   1033: //
                   1034: void RemoveAttackingPainDaemons (edict_t *self);
                   1035: 
                   1036: 
                   1037: // ROGUE PROTOTYPES
                   1038: //====================
                   1039: 
                   1040: //============================================================================
                   1041: 
                   1042: // client_t->anim_priority
                   1043: #define        ANIM_BASIC              0               // stand / run
                   1044: #define        ANIM_WAVE               1
                   1045: #define        ANIM_JUMP               2
                   1046: #define        ANIM_PAIN               3
                   1047: #define        ANIM_ATTACK             4
                   1048: #define        ANIM_DEATH              5
                   1049: #define        ANIM_REVERSE    6
                   1050: 
                   1051: 
                   1052: // client data that stays across multiple level loads
                   1053: typedef struct
                   1054: {
                   1055:        char            userinfo[MAX_INFO_STRING];
                   1056:        char            netname[16];
                   1057:        int                     hand;
                   1058: 
                   1059:        qboolean        connected;                      // a loadgame will leave valid entities that
                   1060:                                                                        // just don't have a connection yet
                   1061: 
                   1062:        // values saved and restored from edicts when changing levels
                   1063:        int                     health;
                   1064:        int                     max_health;
                   1065:        int                     savedFlags;
                   1066: 
                   1067:        int                     selected_item;
                   1068:        int                     inventory[MAX_ITEMS];
                   1069: 
                   1070:        // ammo capacities
                   1071:        int                     max_bullets;
                   1072:        int                     max_shells;
                   1073:        int                     max_rockets;
                   1074:        int                     max_grenades;
                   1075:        int                     max_cells;
                   1076:        int                     max_slugs;
                   1077: 
                   1078:        gitem_t         *weapon;
                   1079:        gitem_t         *lastweapon;
                   1080: 
                   1081:        int                     power_cubes;    // used for tracking the cubes in coop games
                   1082:        int                     score;                  // for calculating total unit score in coop games
                   1083: 
                   1084:        int                     game_helpchanged;
                   1085:        int                     helpchanged;
                   1086: 
                   1087:        qboolean        spectator;                      // client is a spectator
                   1088: 
                   1089: //=========
                   1090: //ROGUE
                   1091:        int                     max_tesla;
                   1092:        int                     max_prox;
                   1093:        int                     max_mines;
                   1094:        int                     max_flechettes;
                   1095: #ifndef KILL_DISRUPTOR
                   1096:        int                     max_rounds;
                   1097: #endif
                   1098: //ROGUE
                   1099: //=========
                   1100: } client_persistant_t;
                   1101: 
                   1102: // client data that stays across deathmatch respawns
                   1103: typedef struct
                   1104: {
                   1105:        client_persistant_t     coop_respawn;   // what to set client->pers to on a respawn
                   1106:        int                     enterframe;                     // level.framenum the client entered the game
                   1107:        int                     score;                          // frags, etc
                   1108:        vec3_t          cmd_angles;                     // angles sent over in the last command
                   1109: 
                   1110:        qboolean        spectator;                      // client is a spectator
                   1111: } client_respawn_t;
                   1112: 
                   1113: // this structure is cleared on each PutClientInServer(),
                   1114: // except for 'client->pers'
                   1115: struct gclient_s
                   1116: {
                   1117:        // known to server
                   1118:        player_state_t  ps;                             // communicated by server to clients
                   1119:        int                             ping;
                   1120: 
                   1121:        // private to game
                   1122:        client_persistant_t     pers;
                   1123:        client_respawn_t        resp;
                   1124:        pmove_state_t           old_pmove;      // for detecting out-of-pmove changes
                   1125: 
                   1126:        qboolean        showscores;                     // set layout stat
                   1127:        qboolean        showinventory;          // set layout stat
                   1128:        qboolean        showhelp;
                   1129:        qboolean        showhelpicon;
                   1130: 
                   1131:        int                     ammo_index;
                   1132: 
                   1133:        int                     buttons;
                   1134:        int                     oldbuttons;
                   1135:        int                     latched_buttons;
                   1136: 
                   1137:        qboolean        weapon_thunk;
                   1138: 
                   1139:        gitem_t         *newweapon;
                   1140: 
                   1141:        // sum up damage over an entire frame, so
                   1142:        // shotgun blasts give a single big kick
                   1143:        int                     damage_armor;           // damage absorbed by armor
                   1144:        int                     damage_parmor;          // damage absorbed by power armor
                   1145:        int                     damage_blood;           // damage taken out of health
                   1146:        int                     damage_knockback;       // impact damage
                   1147:        vec3_t          damage_from;            // origin for vector calculation
                   1148: 
                   1149:        float           killer_yaw;                     // when dead, look at killer
                   1150: 
                   1151:        weaponstate_t   weaponstate;
                   1152:        vec3_t          kick_angles;    // weapon kicks
                   1153:        vec3_t          kick_origin;
                   1154:        float           v_dmg_roll, v_dmg_pitch, v_dmg_time;    // damage kicks
                   1155:        float           fall_time, fall_value;          // for view drop on fall
                   1156:        float           damage_alpha;
                   1157:        float           bonus_alpha;
                   1158:        vec3_t          damage_blend;
                   1159:        vec3_t          v_angle;                        // aiming direction
                   1160:        float           bobtime;                        // so off-ground doesn't change it
                   1161:        vec3_t          oldviewangles;
                   1162:        vec3_t          oldvelocity;
                   1163: 
                   1164:        float           next_drown_time;
                   1165:        int                     old_waterlevel;
                   1166:        int                     breather_sound;
                   1167: 
                   1168:        int                     machinegun_shots;       // for weapon raising
                   1169: 
                   1170:        // animation vars
                   1171:        int                     anim_end;
                   1172:        int                     anim_priority;
                   1173:        qboolean        anim_duck;
                   1174:        qboolean        anim_run;
                   1175: 
                   1176:        // powerup timers
                   1177:        float           quad_framenum;
                   1178:        float           invincible_framenum;
                   1179:        float           breather_framenum;
                   1180:        float           enviro_framenum;
                   1181: 
                   1182:        qboolean        grenade_blew_up;
                   1183:        float           grenade_time;
                   1184:        int                     silencer_shots;
                   1185:        int                     weapon_sound;
                   1186: 
                   1187:        float           pickup_msg_time;
                   1188: 
                   1189:        float           flood_locktill;         // locked from talking
                   1190:        float           flood_when[10];         // when messages were said
                   1191:        int                     flood_whenhead;         // head pointer for when said
                   1192: 
                   1193:        float           respawn_time;           // can respawn when time > this
                   1194: 
                   1195:        edict_t         *chase_target;          // player we are chasing
                   1196:        qboolean        update_chase;           // need to update chase info?
                   1197: 
                   1198: //=======
                   1199: //ROGUE
                   1200:        float           double_framenum;
                   1201:        float           ir_framenum;
                   1202:        float           torch_framenum;
                   1203:        float           nuke_framenum;
                   1204:        float           tracker_pain_framenum;
                   1205: 
                   1206:        edict_t         *owned_sphere;          // this points to the player's sphere
                   1207: //ROGUE
                   1208: //=======
                   1209: };
                   1210: 
                   1211: 
                   1212: struct edict_s
                   1213: {
                   1214:        entity_state_t  s;
                   1215:        struct gclient_s        *client;        // NULL if not a player
                   1216:                                                                        // the server expects the first part
                   1217:                                                                        // of gclient_s to be a player_state_t
                   1218:                                                                        // but the rest of it is opaque
                   1219: 
                   1220:        qboolean        inuse;
                   1221:        int                     linkcount;
                   1222: 
                   1223:        // FIXME: move these fields to a server private sv_entity_t
                   1224:        link_t          area;                           // linked to a division node or leaf
                   1225:        
                   1226:        int                     num_clusters;           // if -1, use headnode instead
                   1227:        int                     clusternums[MAX_ENT_CLUSTERS];
                   1228:        int                     headnode;                       // unused if num_clusters != -1
                   1229:        int                     areanum, areanum2;
                   1230: 
                   1231:        //================================
                   1232: 
                   1233:        int                     svflags;
                   1234:        vec3_t          mins, maxs;
                   1235:        vec3_t          absmin, absmax, size;
                   1236:        solid_t         solid;
                   1237:        int                     clipmask;
                   1238:        edict_t         *owner;
                   1239: 
                   1240: 
                   1241:        // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER
                   1242:        // EXPECTS THE FIELDS IN THAT ORDER!
                   1243: 
                   1244:        //================================
                   1245:        int                     movetype;
                   1246:        int                     flags;
                   1247: 
                   1248:        char            *model;
                   1249:        float           freetime;                       // sv.time when the object was freed
                   1250:        
                   1251:        //
                   1252:        // only used locally in game, not by server
                   1253:        //
                   1254:        char            *message;
                   1255:        char            *classname;
                   1256:        int                     spawnflags;
                   1257: 
                   1258:        float           timestamp;
                   1259: 
                   1260:        float           angle;                  // set in qe3, -1 = up, -2 = down
                   1261:        char            *target;
                   1262:        char            *targetname;
                   1263:        char            *killtarget;
                   1264:        char            *team;
                   1265:        char            *pathtarget;
                   1266:        char            *deathtarget;
                   1267:        char            *combattarget;
                   1268:        edict_t         *target_ent;
                   1269: 
                   1270:        float           speed, accel, decel;
                   1271:        vec3_t          movedir;
                   1272:        vec3_t          pos1, pos2;
                   1273: 
                   1274:        vec3_t          velocity;
                   1275:        vec3_t          avelocity;
                   1276:        int                     mass;
                   1277:        float           air_finished;
                   1278:        float           gravity;                // per entity gravity multiplier (1.0 is normal)
                   1279:                                                                // use for lowgrav artifact, flares
                   1280: 
                   1281:        edict_t         *goalentity;
                   1282:        edict_t         *movetarget;
                   1283:        float           yaw_speed;
                   1284:        float           ideal_yaw;
                   1285: 
                   1286:        float           nextthink;
                   1287:        void            (*prethink) (edict_t *ent);
                   1288:        void            (*think)(edict_t *self);
                   1289:        void            (*blocked)(edict_t *self, edict_t *other);      //move to moveinfo?
                   1290:        void            (*touch)(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf);
                   1291:        void            (*use)(edict_t *self, edict_t *other, edict_t *activator);
                   1292:        void            (*pain)(edict_t *self, edict_t *other, float kick, int damage);
                   1293:        void            (*die)(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
                   1294: 
                   1295:        float           touch_debounce_time;            // are all these legit?  do we need more/less of them?
                   1296:        float           pain_debounce_time;
                   1297:        float           damage_debounce_time;
                   1298:        float           fly_sound_debounce_time;        //move to clientinfo
                   1299:        float           last_move_time;
                   1300: 
                   1301:        int                     health;
                   1302:        int                     max_health;
                   1303:        int                     gib_health;
                   1304:        int                     deadflag;
                   1305:        qboolean        show_hostile;
                   1306: 
                   1307:        float           powerarmor_time;
                   1308: 
                   1309:        char            *map;                   // target_changelevel
                   1310: 
                   1311:        int                     viewheight;             // height above origin where eyesight is determined
                   1312:        int                     takedamage;
                   1313:        int                     dmg;
                   1314:        int                     radius_dmg;
                   1315:        float           dmg_radius;
                   1316:        int                     sounds;                 //make this a spawntemp var?
                   1317:        int                     count;
                   1318: 
                   1319:        edict_t         *chain;
                   1320:        edict_t         *enemy;
                   1321:        edict_t         *oldenemy;
                   1322:        edict_t         *activator;
                   1323:        edict_t         *groundentity;
                   1324:        int                     groundentity_linkcount;
                   1325:        edict_t         *teamchain;
                   1326:        edict_t         *teammaster;
                   1327: 
                   1328:        edict_t         *mynoise;               // can go in client only
                   1329:        edict_t         *mynoise2;
                   1330: 
                   1331:        int                     noise_index;
                   1332:        int                     noise_index2;
                   1333:        float           volume;
                   1334:        float           attenuation;
                   1335: 
                   1336:        // timing variables
                   1337:        float           wait;
                   1338:        float           delay;                  // before firing targets
                   1339:        float           random;
                   1340: 
                   1341:        float           teleport_time;
                   1342: 
                   1343:        int                     watertype;
                   1344:        int                     waterlevel;
                   1345: 
                   1346:        vec3_t          move_origin;
                   1347:        vec3_t          move_angles;
                   1348: 
                   1349:        // move this to clientinfo?
                   1350:        int                     light_level;
                   1351: 
                   1352:        int                     style;                  // also used as areaportal number
                   1353: 
                   1354:        gitem_t         *item;                  // for bonus items
                   1355: 
                   1356:        // common data blocks
                   1357:        moveinfo_t              moveinfo;
                   1358:        monsterinfo_t   monsterinfo;
                   1359: 
                   1360: //=========
                   1361: //ROGUE
                   1362:        int                     plat2flags;
                   1363:        vec3_t          offset;
                   1364:        vec3_t          gravityVector;
                   1365:        edict_t         *bad_area;
                   1366:        edict_t         *hint_chain;
                   1367:        edict_t         *monster_hint_chain;
                   1368:        edict_t         *target_hint_chain;
                   1369:        int                     hint_chain_id;
                   1370:        // FIXME - debug help!
                   1371:        float           lastMoveTime;
                   1372: //ROGUE
                   1373: //=========
                   1374: };
                   1375: 
                   1376: //=============
                   1377: //ROGUE
                   1378: #define ROGUE_GRAVITY  1
                   1379: 
                   1380: #define SPHERE_DEFENDER                        0x0001
                   1381: #define SPHERE_HUNTER                  0x0002
                   1382: #define SPHERE_VENGEANCE               0x0004
                   1383: #define SPHERE_DOPPLEGANGER            0x0100
                   1384: 
                   1385: #define SPHERE_TYPE                            0x00FF
                   1386: #define SPHERE_FLAGS                   0xFF00
                   1387: 
                   1388: //
                   1389: // deathmatch games
                   1390: //
                   1391: #define                RDM_TAG                 2
                   1392: #define                RDM_DEATHBALL   3
                   1393: 
                   1394: typedef struct dm_game_rs
                   1395: {
                   1396:        void            (*GameInit)(void);
                   1397:        void            (*PostInitSetup)(void);
                   1398:        void            (*ClientBegin) (edict_t *ent);
                   1399:        void            (*SelectSpawnPoint) (edict_t *ent, vec3_t origin, vec3_t angles);
                   1400:        void            (*PlayerDeath)(edict_t *targ, edict_t *inflictor, edict_t *attacker);
                   1401:        void            (*Score)(edict_t *attacker, edict_t *victim, int scoreChange);
                   1402:        void            (*PlayerEffects)(edict_t *ent);
                   1403:        void            (*DogTag)(edict_t *ent, edict_t *killer, char **pic);
                   1404:        void            (*PlayerDisconnect)(edict_t *ent);
                   1405:        int                     (*ChangeDamage)(edict_t *targ, edict_t *attacker, int damage, int mod);
                   1406:        int                     (*ChangeKnockback)(edict_t *targ, edict_t *attacker, int knockback, int mod);
                   1407:        int                     (*CheckDMRules)(void);
                   1408: } dm_game_rt;
                   1409: 
                   1410: extern dm_game_rt      DMGame;
                   1411: 
                   1412: void Tag_GameInit (void);
                   1413: void Tag_PostInitSetup (void);
                   1414: void Tag_PlayerDeath (edict_t *targ, edict_t *inflictor, edict_t *attacker);
                   1415: void Tag_Score (edict_t *attacker, edict_t *victim, int scoreChange);
                   1416: void Tag_PlayerEffects (edict_t *ent);
                   1417: void Tag_DogTag (edict_t *ent, edict_t *killer, char **pic);
                   1418: void Tag_PlayerDisconnect (edict_t *ent);
                   1419: int  Tag_ChangeDamage (edict_t *targ, edict_t *attacker, int damage, int mod);
                   1420: 
                   1421: void DBall_GameInit (void);
                   1422: void DBall_ClientBegin (edict_t *ent);
                   1423: void DBall_SelectSpawnPoint (edict_t *ent, vec3_t origin, vec3_t angles);
                   1424: int  DBall_ChangeKnockback (edict_t *targ, edict_t *attacker, int knockback, int mod);
                   1425: int  DBall_ChangeDamage (edict_t *targ, edict_t *attacker, int damage, int mod);
                   1426: void DBall_PostInitSetup (void);
                   1427: int  DBall_CheckDMRules (void);
                   1428: //void Tag_PlayerDeath (edict_t *targ, edict_t *inflictor, edict_t *attacker);
                   1429: //void Tag_Score (edict_t *attacker, edict_t *victim, int scoreChange);
                   1430: //void Tag_PlayerEffects (edict_t *ent);
                   1431: //void Tag_DogTag (edict_t *ent, edict_t *killer, char **pic);
                   1432: //void Tag_PlayerDisconnect (edict_t *ent);
                   1433: //int  Tag_ChangeDamage (edict_t *targ, edict_t *attacker, int damage);
                   1434: 
                   1435: //ROGUE
                   1436: //============

unix.superglobalmegacorp.com

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