Annotation of quake2/ctf/g_local.h, revision 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: //ZOID
        !            12: #include "p_menu.h"
        !            13: //ZOID
        !            14: 
        !            15: // the "gameversion" client command will print this plus compile date
        !            16: #define        GAMEVERSION     "baseq2"
        !            17: 
        !            18: // protocol bytes that can be directly added to messages
        !            19: #define        svc_muzzleflash         1
        !            20: #define        svc_muzzleflash2        2
        !            21: #define        svc_temp_entity         3
        !            22: #define        svc_layout                      4
        !            23: #define        svc_inventory           5
        !            24: 
        !            25: //==================================================================
        !            26: 
        !            27: // view pitching times
        !            28: #define DAMAGE_TIME            0.5
        !            29: #define        FALL_TIME               0.3
        !            30: 
        !            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: 
        !            57: #define        FRAMETIME               0.1
        !            58: 
        !            59: // memory tags to allow dynamic memory to be cleaned up
        !            60: #define        TAG_GAME        765             // clear when unloading the dll
        !            61: #define        TAG_LEVEL       766             // clear when loading a new level
        !            62: 
        !            63: 
        !            64: #define MELEE_DISTANCE 80
        !            65: 
        !            66: #define BODY_QUEUE_SIZE                8
        !            67: 
        !            68: typedef enum
        !            69: {
        !            70:        DAMAGE_NO,
        !            71:        DAMAGE_YES,                     // will take damage if hit
        !            72:        DAMAGE_AIM                      // auto targeting recognizes this
        !            73: } damage_t;
        !            74: 
        !            75: typedef enum 
        !            76: {
        !            77:        WEAPON_READY, 
        !            78:        WEAPON_ACTIVATING,
        !            79:        WEAPON_DROPPING,
        !            80:        WEAPON_FIRING
        !            81: } weaponstate_t;
        !            82: 
        !            83: typedef enum
        !            84: {
        !            85:        AMMO_BULLETS,
        !            86:        AMMO_SHELLS,
        !            87:        AMMO_ROCKETS,
        !            88:        AMMO_GRENADES,
        !            89:        AMMO_CELLS,
        !            90:        AMMO_SLUGS
        !            91: } ammo_t;
        !            92: 
        !            93: 
        !            94: //deadflag
        !            95: #define DEAD_NO                                        0
        !            96: #define DEAD_DYING                             1
        !            97: #define DEAD_DEAD                              2
        !            98: #define DEAD_RESPAWNABLE               3
        !            99: 
        !           100: //range
        !           101: #define RANGE_MELEE                            0
        !           102: #define RANGE_NEAR                             1
        !           103: #define RANGE_MID                              2
        !           104: #define RANGE_FAR                              3
        !           105: 
        !           106: //gib types
        !           107: #define GIB_ORGANIC                            0
        !           108: #define GIB_METALLIC                   1
        !           109: 
        !           110: //monster ai flags
        !           111: #define AI_STAND_GROUND                        0x00000001
        !           112: #define AI_TEMP_STAND_GROUND   0x00000002
        !           113: #define AI_SOUND_TARGET                        0x00000004
        !           114: #define AI_LOST_SIGHT                  0x00000008
        !           115: #define AI_PURSUIT_LAST_SEEN   0x00000010
        !           116: #define AI_PURSUE_NEXT                 0x00000020
        !           117: #define AI_PURSUE_TEMP                 0x00000040
        !           118: #define AI_HOLD_FRAME                  0x00000080
        !           119: #define AI_GOOD_GUY                            0x00000100
        !           120: #define AI_BRUTAL                              0x00000200
        !           121: #define AI_NOSTEP                              0x00000400
        !           122: #define AI_DUCKED                              0x00000800
        !           123: #define AI_COMBAT_POINT                        0x00001000
        !           124: #define AI_MEDIC                               0x00002000
        !           125: #define AI_RESURRECTING                        0x00004000
        !           126: 
        !           127: //monster attack state
        !           128: #define AS_STRAIGHT                            1
        !           129: #define AS_SLIDING                             2
        !           130: #define        AS_MELEE                                3
        !           131: #define        AS_MISSILE                              4
        !           132: 
        !           133: // armor types
        !           134: #define ARMOR_NONE                             0
        !           135: #define ARMOR_JACKET                   1
        !           136: #define ARMOR_COMBAT                   2
        !           137: #define ARMOR_BODY                             3
        !           138: #define ARMOR_SHARD                            4
        !           139: 
        !           140: // power armor types
        !           141: #define POWER_ARMOR_NONE               0
        !           142: #define POWER_ARMOR_SCREEN             1
        !           143: #define POWER_ARMOR_SHIELD             2
        !           144: 
        !           145: // handedness values
        !           146: #define RIGHT_HANDED                   0
        !           147: #define LEFT_HANDED                            1
        !           148: #define CENTER_HANDED                  2
        !           149: 
        !           150: 
        !           151: // game.serverflags values
        !           152: #define SFL_CROSS_TRIGGER_1            0x00000001
        !           153: #define SFL_CROSS_TRIGGER_2            0x00000002
        !           154: #define SFL_CROSS_TRIGGER_3            0x00000004
        !           155: #define SFL_CROSS_TRIGGER_4            0x00000008
        !           156: #define SFL_CROSS_TRIGGER_5            0x00000010
        !           157: #define SFL_CROSS_TRIGGER_6            0x00000020
        !           158: #define SFL_CROSS_TRIGGER_7            0x00000040
        !           159: #define SFL_CROSS_TRIGGER_8            0x00000080
        !           160: #define SFL_CROSS_TRIGGER_MASK 0x000000ff
        !           161: 
        !           162: 
        !           163: // noise types for PlayerNoise
        !           164: #define PNOISE_SELF                            0
        !           165: #define PNOISE_WEAPON                  1
        !           166: #define PNOISE_IMPACT                  2
        !           167: 
        !           168: 
        !           169: // edict->movetype values
        !           170: typedef enum
        !           171: {
        !           172: MOVETYPE_NONE,                 // never moves
        !           173: MOVETYPE_NOCLIP,               // origin and angles change with no interaction
        !           174: MOVETYPE_PUSH,                 // no clip to world, push on box contact
        !           175: MOVETYPE_STOP,                 // no clip to world, stops on box contact
        !           176: 
        !           177: MOVETYPE_WALK,                 // gravity
        !           178: MOVETYPE_STEP,                 // gravity, special edge handling
        !           179: MOVETYPE_FLY,
        !           180: MOVETYPE_TOSS,                 // gravity
        !           181: MOVETYPE_FLYMISSILE,   // extra size to monsters
        !           182: MOVETYPE_BOUNCE
        !           183: } movetype_t;
        !           184: 
        !           185: 
        !           186: 
        !           187: typedef struct
        !           188: {
        !           189:        int             base_count;
        !           190:        int             max_count;
        !           191:        float   normal_protection;
        !           192:        float   energy_protection;
        !           193:        int             armor;
        !           194: } gitem_armor_t;
        !           195: 
        !           196: 
        !           197: // gitem_t->flags
        !           198: #define        IT_WEAPON               1               // use makes active weapon
        !           199: #define        IT_AMMO                 2
        !           200: #define IT_ARMOR               4
        !           201: #define IT_STAY_COOP   8
        !           202: #define IT_KEY                 16
        !           203: #define IT_POWERUP             32
        !           204: //ZOID
        !           205: #define IT_TECH                        64
        !           206: //ZOID
        !           207: 
        !           208: // gitem_t->weapmodel for weapons indicates model index
        !           209: #define WEAP_BLASTER                   1 
        !           210: #define WEAP_SHOTGUN                   2 
        !           211: #define WEAP_SUPERSHOTGUN              3 
        !           212: #define WEAP_MACHINEGUN                        4 
        !           213: #define WEAP_CHAINGUN                  5 
        !           214: #define WEAP_GRENADES                  6 
        !           215: #define WEAP_GRENADELAUNCHER   7 
        !           216: #define WEAP_ROCKETLAUNCHER            8 
        !           217: #define WEAP_HYPERBLASTER              9 
        !           218: #define WEAP_RAILGUN                   10
        !           219: #define WEAP_BFG                               11
        !           220: #define WEAP_GRAPPLE                   12
        !           221: 
        !           222: typedef struct gitem_s
        !           223: {
        !           224:        char            *classname;     // spawning name
        !           225:        qboolean        (*pickup)(struct edict_s *ent, struct edict_s *other);
        !           226:        void            (*use)(struct edict_s *ent, struct gitem_s *item);
        !           227:        void            (*drop)(struct edict_s *ent, struct gitem_s *item);
        !           228:        void            (*weaponthink)(struct edict_s *ent);
        !           229:        char            *pickup_sound;
        !           230:        char            *world_model;
        !           231:        int                     world_model_flags;
        !           232:        char            *view_model;
        !           233: 
        !           234:        // client side info
        !           235:        char            *icon;
        !           236:        char            *pickup_name;   // for printing on pickup
        !           237:        int                     count_width;            // number of digits to display by icon
        !           238: 
        !           239:        int                     quantity;               // for ammo how much, for weapons how much is used per shot
        !           240:        char            *ammo;                  // for weapons
        !           241:        int                     flags;                  // IT_* flags
        !           242: 
        !           243:        int                     weapmodel;              // weapon model index (for weapons)
        !           244: 
        !           245:        void            *info;
        !           246:        int                     tag;
        !           247: 
        !           248:        char            *precaches;             // string of all models, sounds, and images this item will use
        !           249: } gitem_t;
        !           250: 
        !           251: 
        !           252: 
        !           253: //
        !           254: // this structure is left intact through an entire game
        !           255: // it should be initialized at dll load time, and read/written to
        !           256: // the server.ssv file for savegames
        !           257: //
        !           258: typedef struct
        !           259: {
        !           260:        char            helpmessage1[512];
        !           261:        char            helpmessage2[512];
        !           262:        int                     helpchanged;    // flash F1 icon if non 0, play sound
        !           263:                                                                // and increment only if 1, 2, or 3
        !           264: 
        !           265:        gclient_t       *clients;               // [maxclients]
        !           266: 
        !           267:        // can't store spawnpoint in level, because
        !           268:        // it would get overwritten by the savegame restore
        !           269:        char            spawnpoint[512];        // needed for coop respawns
        !           270: 
        !           271:        // store latched cvars here that we want to get at often
        !           272:        int                     maxclients;
        !           273:        int                     maxentities;
        !           274: 
        !           275:        // cross level triggers
        !           276:        int                     serverflags;
        !           277: 
        !           278:        // items
        !           279:        int                     num_items;
        !           280: 
        !           281:        qboolean        autosaved;
        !           282: } game_locals_t;
        !           283: 
        !           284: 
        !           285: //
        !           286: // this structure is cleared as each map is entered
        !           287: // it is read/written to the level.sav file for savegames
        !           288: //
        !           289: typedef struct
        !           290: {
        !           291:        int                     framenum;
        !           292:        float           time;
        !           293: 
        !           294:        char            level_name[MAX_QPATH];  // the descriptive name (Outer Base, etc)
        !           295:        char            mapname[MAX_QPATH];             // the server name (base1, etc)
        !           296:        char            nextmap[MAX_QPATH];             // go here when fraglimit is hit
        !           297:        char            forcemap[MAX_QPATH];    // go here
        !           298: 
        !           299:        // intermission state
        !           300:        float           intermissiontime;               // time the intermission was started
        !           301:        char            *changemap;
        !           302:        int                     exitintermission;
        !           303:        vec3_t          intermission_origin;
        !           304:        vec3_t          intermission_angle;
        !           305: 
        !           306:        edict_t         *sight_client;  // changed once each frame for coop games
        !           307: 
        !           308:        edict_t         *sight_entity;
        !           309:        int                     sight_entity_framenum;
        !           310:        edict_t         *sound_entity;
        !           311:        int                     sound_entity_framenum;
        !           312:        edict_t         *sound2_entity;
        !           313:        int                     sound2_entity_framenum;
        !           314: 
        !           315:        int                     pic_health;
        !           316: 
        !           317:        int                     total_secrets;
        !           318:        int                     found_secrets;
        !           319: 
        !           320:        int                     total_goals;
        !           321:        int                     found_goals;
        !           322: 
        !           323:        int                     total_monsters;
        !           324:        int                     killed_monsters;
        !           325: 
        !           326:        edict_t         *current_entity;        // entity running from G_RunFrame
        !           327:        int                     body_que;                       // dead bodies
        !           328: 
        !           329:        int                     power_cubes;            // ugly necessity for coop
        !           330: } level_locals_t;
        !           331: 
        !           332: 
        !           333: // spawn_temp_t is only used to hold entity field values that
        !           334: // can be set from the editor, but aren't actualy present
        !           335: // in edict_t during gameplay
        !           336: typedef struct
        !           337: {
        !           338:        // world vars
        !           339:        char            *sky;
        !           340:        float           skyrotate;
        !           341:        vec3_t          skyaxis;
        !           342:        char            *nextmap;
        !           343: 
        !           344:        int                     lip;
        !           345:        int                     distance;
        !           346:        int                     height;
        !           347:        char            *noise;
        !           348:        float           pausetime;
        !           349:        char            *item;
        !           350:        char            *gravity;
        !           351: 
        !           352:        float           minyaw;
        !           353:        float           maxyaw;
        !           354:        float           minpitch;
        !           355:        float           maxpitch;
        !           356: } spawn_temp_t;
        !           357: 
        !           358: 
        !           359: typedef struct
        !           360: {
        !           361:        // fixed data
        !           362:        vec3_t          start_origin;
        !           363:        vec3_t          start_angles;
        !           364:        vec3_t          end_origin;
        !           365:        vec3_t          end_angles;
        !           366: 
        !           367:        int                     sound_start;
        !           368:        int                     sound_middle;
        !           369:        int                     sound_end;
        !           370: 
        !           371:        float           accel;
        !           372:        float           speed;
        !           373:        float           decel;
        !           374:        float           distance;
        !           375: 
        !           376:        float           wait;
        !           377: 
        !           378:        // state data
        !           379:        int                     state;
        !           380:        vec3_t          dir;
        !           381:        float           current_speed;
        !           382:        float           move_speed;
        !           383:        float           next_speed;
        !           384:        float           remaining_distance;
        !           385:        float           decel_distance;
        !           386:        void            (*endfunc)(edict_t *);
        !           387: } moveinfo_t;
        !           388: 
        !           389: 
        !           390: typedef struct
        !           391: {
        !           392:        void    (*aifunc)(edict_t *self, float dist);
        !           393:        float   dist;
        !           394:        void    (*thinkfunc)(edict_t *self);
        !           395: } mframe_t;
        !           396: 
        !           397: typedef struct
        !           398: {
        !           399:        int                     firstframe;
        !           400:        int                     lastframe;
        !           401:        mframe_t        *frame;
        !           402:        void            (*endfunc)(edict_t *self);
        !           403: } mmove_t;
        !           404: 
        !           405: typedef struct
        !           406: {
        !           407:        mmove_t         *currentmove;
        !           408:        int                     aiflags;
        !           409:        int                     nextframe;
        !           410:        float           scale;
        !           411: 
        !           412:        void            (*stand)(edict_t *self);
        !           413:        void            (*idle)(edict_t *self);
        !           414:        void            (*search)(edict_t *self);
        !           415:        void            (*walk)(edict_t *self);
        !           416:        void            (*run)(edict_t *self);
        !           417:        void            (*dodge)(edict_t *self, edict_t *other, float eta);
        !           418:        void            (*attack)(edict_t *self);
        !           419:        void            (*melee)(edict_t *self);
        !           420:        void            (*sight)(edict_t *self, edict_t *other);
        !           421:        qboolean        (*checkattack)(edict_t *self);
        !           422: 
        !           423:        float           pausetime;
        !           424:        float           attack_finished;
        !           425: 
        !           426:        vec3_t          saved_goal;
        !           427:        float           search_time;
        !           428:        float           trail_time;
        !           429:        vec3_t          last_sighting;
        !           430:        int                     attack_state;
        !           431:        int                     lefty;
        !           432:        float           idle_time;
        !           433:        int                     linkcount;
        !           434: 
        !           435:        int                     power_armor_type;
        !           436:        int                     power_armor_power;
        !           437: } monsterinfo_t;
        !           438: 
        !           439: 
        !           440: 
        !           441: extern game_locals_t   game;
        !           442: extern level_locals_t  level;
        !           443: extern game_import_t   gi;
        !           444: extern game_export_t   globals;
        !           445: extern spawn_temp_t    st;
        !           446: 
        !           447: extern int     sm_meat_index;
        !           448: extern int     snd_fry;
        !           449: 
        !           450: extern int     jacket_armor_index;
        !           451: extern int     combat_armor_index;
        !           452: extern int     body_armor_index;
        !           453: 
        !           454: 
        !           455: // means of death
        !           456: #define MOD_UNKNOWN                    0
        !           457: #define MOD_BLASTER                    1
        !           458: #define MOD_SHOTGUN                    2
        !           459: #define MOD_SSHOTGUN           3
        !           460: #define MOD_MACHINEGUN         4
        !           461: #define MOD_CHAINGUN           5
        !           462: #define MOD_GRENADE                    6
        !           463: #define MOD_G_SPLASH           7
        !           464: #define MOD_ROCKET                     8
        !           465: #define MOD_R_SPLASH           9
        !           466: #define MOD_HYPERBLASTER       10
        !           467: #define MOD_RAILGUN                    11
        !           468: #define MOD_BFG_LASER          12
        !           469: #define MOD_BFG_BLAST          13
        !           470: #define MOD_BFG_EFFECT         14
        !           471: #define MOD_HANDGRENADE                15
        !           472: #define MOD_HG_SPLASH          16
        !           473: #define MOD_WATER                      17
        !           474: #define MOD_SLIME                      18
        !           475: #define MOD_LAVA                       19
        !           476: #define MOD_CRUSH                      20
        !           477: #define MOD_TELEFRAG           21
        !           478: #define MOD_FALLING                    22
        !           479: #define MOD_SUICIDE                    23
        !           480: #define MOD_HELD_GRENADE       24
        !           481: #define MOD_EXPLOSIVE          25
        !           482: #define MOD_BARREL                     26
        !           483: #define MOD_BOMB                       27
        !           484: #define MOD_EXIT                       28
        !           485: #define MOD_SPLASH                     29
        !           486: #define MOD_TARGET_LASER       30
        !           487: #define MOD_TRIGGER_HURT       31
        !           488: #define MOD_HIT                                32
        !           489: #define MOD_TARGET_BLASTER     33
        !           490: #define MOD_GRAPPLE                    34
        !           491: #define MOD_FRIENDLY_FIRE      0x8000000
        !           492: 
        !           493: extern int     meansOfDeath;
        !           494: 
        !           495: 
        !           496: extern edict_t                 *g_edicts;
        !           497: 
        !           498: #define        FOFS(x) (int)&(((edict_t *)0)->x)
        !           499: #define        STOFS(x) (int)&(((spawn_temp_t *)0)->x)
        !           500: #define        LLOFS(x) (int)&(((level_locals_t *)0)->x)
        !           501: #define        CLOFS(x) (int)&(((gclient_t *)0)->x)
        !           502: 
        !           503: #define random()       ((rand () & 0x7fff) / ((float)0x7fff))
        !           504: #define crandom()      (2.0 * (random() - 0.5))
        !           505: 
        !           506: extern cvar_t  *maxentities;
        !           507: extern cvar_t  *deathmatch;
        !           508: extern cvar_t  *coop;
        !           509: extern cvar_t  *dmflags;
        !           510: extern cvar_t  *skill;
        !           511: extern cvar_t  *fraglimit;
        !           512: extern cvar_t  *timelimit;
        !           513: //ZOID
        !           514: extern cvar_t  *capturelimit;
        !           515: extern cvar_t  *instantweap;
        !           516: //ZOID
        !           517: extern cvar_t  *password;
        !           518: extern cvar_t  *g_select_empty;
        !           519: extern cvar_t  *dedicated;
        !           520: 
        !           521: extern cvar_t  *sv_gravity;
        !           522: extern cvar_t  *sv_maxvelocity;
        !           523: 
        !           524: extern cvar_t  *gun_x, *gun_y, *gun_z;
        !           525: extern cvar_t  *sv_rollspeed;
        !           526: extern cvar_t  *sv_rollangle;
        !           527: 
        !           528: extern cvar_t  *run_pitch;
        !           529: extern cvar_t  *run_roll;
        !           530: extern cvar_t  *bob_up;
        !           531: extern cvar_t  *bob_pitch;
        !           532: extern cvar_t  *bob_roll;
        !           533: 
        !           534: extern cvar_t  *sv_cheats;
        !           535: extern cvar_t  *maxclients;
        !           536: 
        !           537: extern cvar_t  *flood_msgs;
        !           538: extern cvar_t  *flood_persecond;
        !           539: extern cvar_t  *flood_waitdelay;
        !           540: 
        !           541: extern cvar_t  *sv_maplist;
        !           542: 
        !           543: //ZOID
        !           544: extern qboolean        is_quad;
        !           545: //ZOID
        !           546: 
        !           547: #define world  (&g_edicts[0])
        !           548: 
        !           549: // item spawnflags
        !           550: #define ITEM_TRIGGER_SPAWN             0x00000001
        !           551: #define ITEM_NO_TOUCH                  0x00000002
        !           552: // 6 bits reserved for editor flags
        !           553: // 8 bits used as power cube id bits for coop games
        !           554: #define DROPPED_ITEM                   0x00010000
        !           555: #define        DROPPED_PLAYER_ITEM             0x00020000
        !           556: #define ITEM_TARGETS_USED              0x00040000
        !           557: 
        !           558: //
        !           559: // fields are needed for spawning from the entity string
        !           560: // and saving / loading games
        !           561: //
        !           562: #define FFL_SPAWNTEMP          1
        !           563: 
        !           564: typedef enum {
        !           565:        F_INT, 
        !           566:        F_FLOAT,
        !           567:        F_LSTRING,                      // string on disk, pointer in memory, TAG_LEVEL
        !           568:        F_GSTRING,                      // string on disk, pointer in memory, TAG_GAME
        !           569:        F_VECTOR,
        !           570:        F_ANGLEHACK,
        !           571:        F_EDICT,                        // index on disk, pointer in memory
        !           572:        F_ITEM,                         // index on disk, pointer in memory
        !           573:        F_CLIENT,                       // index on disk, pointer in memory
        !           574:        F_IGNORE
        !           575: } fieldtype_t;
        !           576: 
        !           577: typedef struct
        !           578: {
        !           579:        char    *name;
        !           580:        int             ofs;
        !           581:        fieldtype_t     type;
        !           582:        int             flags;
        !           583: } field_t;
        !           584: 
        !           585: 
        !           586: extern field_t fields[];
        !           587: extern gitem_t itemlist[];
        !           588: 
        !           589: 
        !           590: //
        !           591: // g_cmds.c
        !           592: //
        !           593: qboolean CheckFlood(edict_t *ent);
        !           594: void Cmd_Help_f (edict_t *ent);
        !           595: void Cmd_Score_f (edict_t *ent);
        !           596: 
        !           597: //
        !           598: // g_items.c
        !           599: //
        !           600: void PrecacheItem (gitem_t *it);
        !           601: void InitItems (void);
        !           602: void SetItemNames (void);
        !           603: gitem_t        *FindItem (char *pickup_name);
        !           604: gitem_t        *FindItemByClassname (char *classname);
        !           605: #define        ITEM_INDEX(x) ((x)-itemlist)
        !           606: edict_t *Drop_Item (edict_t *ent, gitem_t *item);
        !           607: void SetRespawn (edict_t *ent, float delay);
        !           608: void ChangeWeapon (edict_t *ent);
        !           609: void SpawnItem (edict_t *ent, gitem_t *item);
        !           610: void Think_Weapon (edict_t *ent);
        !           611: int ArmorIndex (edict_t *ent);
        !           612: int PowerArmorType (edict_t *ent);
        !           613: gitem_t        *GetItemByIndex (int index);
        !           614: qboolean Add_Ammo (edict_t *ent, gitem_t *item, int count);
        !           615: void Touch_Item (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf);
        !           616: 
        !           617: //
        !           618: // g_utils.c
        !           619: //
        !           620: qboolean       KillBox (edict_t *ent);
        !           621: void   G_ProjectSource (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result);
        !           622: edict_t *G_Find (edict_t *from, int fieldofs, char *match);
        !           623: edict_t *findradius (edict_t *from, vec3_t org, float rad);
        !           624: edict_t *G_PickTarget (char *targetname);
        !           625: void   G_UseTargets (edict_t *ent, edict_t *activator);
        !           626: void   G_SetMovedir (vec3_t angles, vec3_t movedir);
        !           627: 
        !           628: void   G_InitEdict (edict_t *e);
        !           629: edict_t        *G_Spawn (void);
        !           630: void   G_FreeEdict (edict_t *e);
        !           631: 
        !           632: void   G_TouchTriggers (edict_t *ent);
        !           633: void   G_TouchSolids (edict_t *ent);
        !           634: 
        !           635: char   *G_CopyString (char *in);
        !           636: 
        !           637: float  *tv (float x, float y, float z);
        !           638: char   *vtos (vec3_t v);
        !           639: 
        !           640: float vectoyaw (vec3_t vec);
        !           641: void vectoangles (vec3_t vec, vec3_t angles);
        !           642: 
        !           643: //
        !           644: // g_combat.c
        !           645: //
        !           646: qboolean OnSameTeam (edict_t *ent1, edict_t *ent2);
        !           647: qboolean CanDamage (edict_t *targ, edict_t *inflictor);
        !           648: qboolean CheckTeamDamage (edict_t *targ, edict_t *attacker);
        !           649: 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);
        !           650: void T_RadiusDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
        !           651: 
        !           652: // damage flags
        !           653: #define DAMAGE_RADIUS                  0x00000001      // damage was indirect
        !           654: #define DAMAGE_NO_ARMOR                        0x00000002      // armour does not protect from this damage
        !           655: #define DAMAGE_ENERGY                  0x00000004      // damage is from an energy based weapon
        !           656: #define DAMAGE_NO_KNOCKBACK            0x00000008      // do not affect velocity, just view angles
        !           657: #define DAMAGE_BULLET                  0x00000010  // damage is from a bullet (used for ricochets)
        !           658: #define DAMAGE_NO_PROTECTION   0x00000020  // armor, shields, invulnerability, and godmode have no effect
        !           659: 
        !           660: #define DEFAULT_BULLET_HSPREAD 300
        !           661: #define DEFAULT_BULLET_VSPREAD 500
        !           662: #define DEFAULT_SHOTGUN_HSPREAD        1000
        !           663: #define DEFAULT_SHOTGUN_VSPREAD        500
        !           664: #define DEFAULT_DEATHMATCH_SHOTGUN_COUNT       12
        !           665: #define DEFAULT_SHOTGUN_COUNT  12
        !           666: #define DEFAULT_SSHOTGUN_COUNT 20
        !           667: 
        !           668: //
        !           669: // g_monster.c
        !           670: //
        !           671: void monster_fire_bullet (edict_t *self, vec3_t start, vec3_t dir, int damage, int kick, int hspread, int vspread, int flashtype);
        !           672: 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);
        !           673: void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
        !           674: void monster_fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int flashtype);
        !           675: void monster_fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
        !           676: void monster_fire_railgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int flashtype);
        !           677: void monster_fire_bfg (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int kick, float damage_radius, int flashtype);
        !           678: void M_droptofloor (edict_t *ent);
        !           679: void monster_think (edict_t *self);
        !           680: void walkmonster_start (edict_t *self);
        !           681: void swimmonster_start (edict_t *self);
        !           682: void flymonster_start (edict_t *self);
        !           683: void AttackFinished (edict_t *self, float time);
        !           684: void monster_death_use (edict_t *self);
        !           685: void M_CatagorizePosition (edict_t *ent);
        !           686: qboolean M_CheckAttack (edict_t *self);
        !           687: void M_FlyCheck (edict_t *self);
        !           688: void M_CheckGround (edict_t *ent);
        !           689: 
        !           690: //
        !           691: // g_misc.c
        !           692: //
        !           693: void ThrowHead (edict_t *self, char *gibname, int damage, int type);
        !           694: void ThrowClientHead (edict_t *self, int damage);
        !           695: void ThrowGib (edict_t *self, char *gibname, int damage, int type);
        !           696: void BecomeExplosion1(edict_t *self);
        !           697: 
        !           698: //
        !           699: // g_ai.c
        !           700: //
        !           701: void AI_SetSightClient (void);
        !           702: 
        !           703: void ai_stand (edict_t *self, float dist);
        !           704: void ai_move (edict_t *self, float dist);
        !           705: void ai_walk (edict_t *self, float dist);
        !           706: void ai_turn (edict_t *self, float dist);
        !           707: void ai_run (edict_t *self, float dist);
        !           708: void ai_charge (edict_t *self, float dist);
        !           709: int range (edict_t *self, edict_t *other);
        !           710: 
        !           711: void FoundTarget (edict_t *self);
        !           712: qboolean infront (edict_t *self, edict_t *other);
        !           713: qboolean visible (edict_t *self, edict_t *other);
        !           714: qboolean FacingIdeal(edict_t *self);
        !           715: 
        !           716: //
        !           717: // g_weapon.c
        !           718: //
        !           719: void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin);
        !           720: qboolean fire_hit (edict_t *self, vec3_t aim, int damage, int kick);
        !           721: void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod);
        !           722: void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod);
        !           723: void fire_blaster (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper);
        !           724: void fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius);
        !           725: void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held);
        !           726: void fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
        !           727: void fire_rail (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
        !           728: void fire_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius);
        !           729: 
        !           730: //
        !           731: // g_ptrail.c
        !           732: //
        !           733: void PlayerTrail_Init (void);
        !           734: void PlayerTrail_Add (vec3_t spot);
        !           735: void PlayerTrail_New (vec3_t spot);
        !           736: edict_t *PlayerTrail_PickFirst (edict_t *self);
        !           737: edict_t *PlayerTrail_PickNext (edict_t *self);
        !           738: edict_t        *PlayerTrail_LastSpot (void);
        !           739: 
        !           740: 
        !           741: //
        !           742: // g_client.c
        !           743: //
        !           744: void respawn (edict_t *ent);
        !           745: void BeginIntermission (edict_t *targ);
        !           746: void PutClientInServer (edict_t *ent);
        !           747: void InitClientPersistant (gclient_t *client);
        !           748: void InitClientResp (gclient_t *client);
        !           749: void InitBodyQue (void);
        !           750: void ClientBeginServerFrame (edict_t *ent);
        !           751: 
        !           752: //
        !           753: // g_player.c
        !           754: //
        !           755: void player_pain (edict_t *self, edict_t *other, float kick, int damage);
        !           756: void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
        !           757: 
        !           758: //
        !           759: // g_svcmds.c
        !           760: //
        !           761: void   ServerCommand (void);
        !           762: 
        !           763: //
        !           764: // p_view.c
        !           765: //
        !           766: void ClientEndServerFrame (edict_t *ent);
        !           767: 
        !           768: //
        !           769: // p_hud.c
        !           770: //
        !           771: void MoveClientToIntermission (edict_t *client);
        !           772: void G_SetStats (edict_t *ent);
        !           773: void ValidateSelectedItem (edict_t *ent);
        !           774: void DeathmatchScoreboardMessage (edict_t *client, edict_t *killer);
        !           775: 
        !           776: //
        !           777: // g_pweapon.c
        !           778: //
        !           779: void PlayerNoise(edict_t *who, vec3_t where, int type);
        !           780: void P_ProjectSource (gclient_t *client, vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result);
        !           781: void Weapon_Generic (edict_t *ent, int FRAME_ACTIVATE_LAST, int FRAME_FIRE_LAST, int FRAME_IDLE_LAST, int FRAME_DEACTIVATE_LAST, int *pause_frames, int *fire_frames, void (*fire)(edict_t *ent));
        !           782: 
        !           783: //
        !           784: // m_move.c
        !           785: //
        !           786: qboolean M_CheckBottom (edict_t *ent);
        !           787: qboolean M_walkmove (edict_t *ent, float yaw, float dist);
        !           788: void M_MoveToGoal (edict_t *ent, float dist);
        !           789: void M_ChangeYaw (edict_t *ent);
        !           790: 
        !           791: //
        !           792: // g_phys.c
        !           793: //
        !           794: void G_RunEntity (edict_t *ent);
        !           795: 
        !           796: //
        !           797: // g_main.c
        !           798: //
        !           799: void SaveClientData (void);
        !           800: void FetchClientEntData (edict_t *ent);
        !           801: void EndDMLevel (void);
        !           802: 
        !           803: 
        !           804: //============================================================================
        !           805: 
        !           806: // client_t->anim_priority
        !           807: #define        ANIM_BASIC              0               // stand / run
        !           808: #define        ANIM_WAVE               1
        !           809: #define        ANIM_JUMP               2
        !           810: #define        ANIM_PAIN               3
        !           811: #define        ANIM_ATTACK             4
        !           812: #define        ANIM_DEATH              5
        !           813: #define        ANIM_REVERSE    6
        !           814: 
        !           815: 
        !           816: // client data that stays across multiple level loads
        !           817: typedef struct
        !           818: {
        !           819:        char            userinfo[MAX_INFO_STRING];
        !           820:        char            netname[16];
        !           821:        int                     hand;
        !           822: 
        !           823:        qboolean        connected;                      // a loadgame will leave valid entities that
        !           824:                                                                        // just don't have a connection yet
        !           825: 
        !           826:        // values saved and restored from edicts when changing levels
        !           827:        int                     health;
        !           828:        int                     max_health;
        !           829:        qboolean        powerArmorActive;
        !           830: 
        !           831:        int                     selected_item;
        !           832:        int                     inventory[MAX_ITEMS];
        !           833: 
        !           834:        // ammo capacities
        !           835:        int                     max_bullets;
        !           836:        int                     max_shells;
        !           837:        int                     max_rockets;
        !           838:        int                     max_grenades;
        !           839:        int                     max_cells;
        !           840:        int                     max_slugs;
        !           841: 
        !           842:        gitem_t         *weapon;
        !           843:        gitem_t         *lastweapon;
        !           844: 
        !           845:        int                     power_cubes;    // used for tracking the cubes in coop games
        !           846:        int                     score;                  // for calculating total unit score in coop games
        !           847: } client_persistant_t;
        !           848: 
        !           849: // client data that stays across deathmatch respawns
        !           850: typedef struct
        !           851: {
        !           852:        client_persistant_t     coop_respawn;   // what to set client->pers to on a respawn
        !           853:        int                     enterframe;                     // level.framenum the client entered the game
        !           854:        int                     score;                          // frags, etc
        !           855: //ZOID
        !           856:        int                     ctf_team;                       // CTF team
        !           857:        int                     ctf_state;
        !           858:        float           ctf_lasthurtcarrier;
        !           859:        float           ctf_lastreturnedflag;
        !           860:        float           ctf_flagsince;
        !           861:        float           ctf_lastfraggedcarrier;
        !           862:        qboolean        id_state;
        !           863:        qboolean        voted; // for elections
        !           864:        qboolean        ready;
        !           865:        qboolean        admin;
        !           866:        struct ghost_s *ghost; // for ghost codes
        !           867: //ZOID
        !           868:        vec3_t          cmd_angles;                     // angles sent over in the last command
        !           869:        int                     game_helpchanged;
        !           870:        int                     helpchanged;
        !           871: } client_respawn_t;
        !           872: 
        !           873: // this structure is cleared on each PutClientInServer(),
        !           874: // except for 'client->pers'
        !           875: struct gclient_s
        !           876: {
        !           877:        // known to server
        !           878:        player_state_t  ps;                             // communicated by server to clients
        !           879:        int                             ping;
        !           880: 
        !           881:        // private to game
        !           882:        client_persistant_t     pers;
        !           883:        client_respawn_t        resp;
        !           884:        pmove_state_t           old_pmove;      // for detecting out-of-pmove changes
        !           885: 
        !           886:        qboolean        showscores;                     // set layout stat
        !           887: //ZOID
        !           888:        qboolean        inmenu;                         // in menu
        !           889:        pmenuhnd_t      *menu;                          // current menu
        !           890: //ZOID
        !           891:        qboolean        showinventory;          // set layout stat
        !           892:        qboolean        showhelp;
        !           893:        qboolean        showhelpicon;
        !           894: 
        !           895:        int                     ammo_index;
        !           896: 
        !           897:        int                     buttons;
        !           898:        int                     oldbuttons;
        !           899:        int                     latched_buttons;
        !           900: 
        !           901:        qboolean        weapon_thunk;
        !           902: 
        !           903:        gitem_t         *newweapon;
        !           904: 
        !           905:        // sum up damage over an entire frame, so
        !           906:        // shotgun blasts give a single big kick
        !           907:        int                     damage_armor;           // damage absorbed by armor
        !           908:        int                     damage_parmor;          // damage absorbed by power armor
        !           909:        int                     damage_blood;           // damage taken out of health
        !           910:        int                     damage_knockback;       // impact damage
        !           911:        vec3_t          damage_from;            // origin for vector calculation
        !           912: 
        !           913:        float           killer_yaw;                     // when dead, look at killer
        !           914: 
        !           915:        weaponstate_t   weaponstate;
        !           916:        vec3_t          kick_angles;    // weapon kicks
        !           917:        vec3_t          kick_origin;
        !           918:        float           v_dmg_roll, v_dmg_pitch, v_dmg_time;    // damage kicks
        !           919:        float           fall_time, fall_value;          // for view drop on fall
        !           920:        float           damage_alpha;
        !           921:        float           bonus_alpha;
        !           922:        vec3_t          damage_blend;
        !           923:        vec3_t          v_angle;                        // aiming direction
        !           924:        float           bobtime;                        // so off-ground doesn't change it
        !           925:        vec3_t          oldviewangles;
        !           926:        vec3_t          oldvelocity;
        !           927: 
        !           928:        float           next_drown_time;
        !           929:        int                     old_waterlevel;
        !           930:        int                     breather_sound;
        !           931: 
        !           932:        int                     machinegun_shots;       // for weapon raising
        !           933: 
        !           934:        // animation vars
        !           935:        int                     anim_end;
        !           936:        int                     anim_priority;
        !           937:        qboolean        anim_duck;
        !           938:        qboolean        anim_run;
        !           939: 
        !           940:        // powerup timers
        !           941:        float           quad_framenum;
        !           942:        float           invincible_framenum;
        !           943:        float           breather_framenum;
        !           944:        float           enviro_framenum;
        !           945: 
        !           946:        qboolean        grenade_blew_up;
        !           947:        float           grenade_time;
        !           948:        int                     silencer_shots;
        !           949:        int                     weapon_sound;
        !           950: 
        !           951:        float           pickup_msg_time;
        !           952: 
        !           953:        float           flood_locktill;         // locked from talking
        !           954:        float           flood_when[10];         // when messages were said
        !           955:        int                     flood_whenhead;         // head pointer for when said
        !           956: 
        !           957:        float           respawn_time;           // can respawn when time > this
        !           958: 
        !           959: //ZOID
        !           960:        void            *ctf_grapple;           // entity of grapple
        !           961:        int                     ctf_grapplestate;               // true if pulling
        !           962:        float           ctf_grapplereleasetime; // time of grapple release
        !           963:        float           ctf_regentime;          // regen tech
        !           964:        float           ctf_techsndtime;
        !           965:        float           ctf_lasttechmsg;
        !           966:        edict_t         *chase_target;
        !           967:        qboolean        update_chase;
        !           968:        float           menutime;                       // time to update menu
        !           969:        qboolean        menudirty;
        !           970: //ZOID
        !           971: };
        !           972: 
        !           973: 
        !           974: struct edict_s
        !           975: {
        !           976:        entity_state_t  s;
        !           977:        struct gclient_s        *client;        // NULL if not a player
        !           978:                                                                        // the server expects the first part
        !           979:                                                                        // of gclient_s to be a player_state_t
        !           980:                                                                        // but the rest of it is opaque
        !           981: 
        !           982:        qboolean        inuse;
        !           983:        int                     linkcount;
        !           984: 
        !           985:        // FIXME: move these fields to a server private sv_entity_t
        !           986:        link_t          area;                           // linked to a division node or leaf
        !           987:        
        !           988:        int                     num_clusters;           // if -1, use headnode instead
        !           989:        int                     clusternums[MAX_ENT_CLUSTERS];
        !           990:        int                     headnode;                       // unused if num_clusters != -1
        !           991:        int                     areanum, areanum2;
        !           992: 
        !           993:        //================================
        !           994: 
        !           995:        int                     svflags;
        !           996:        vec3_t          mins, maxs;
        !           997:        vec3_t          absmin, absmax, size;
        !           998:        solid_t         solid;
        !           999:        int                     clipmask;
        !          1000:        edict_t         *owner;
        !          1001: 
        !          1002: 
        !          1003:        // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER
        !          1004:        // EXPECTS THE FIELDS IN THAT ORDER!
        !          1005: 
        !          1006:        //================================
        !          1007:        int                     movetype;
        !          1008:        int                     flags;
        !          1009: 
        !          1010:        char            *model;
        !          1011:        float           freetime;                       // sv.time when the object was freed
        !          1012:        
        !          1013:        //
        !          1014:        // only used locally in game, not by server
        !          1015:        //
        !          1016:        char            *message;
        !          1017:        char            *classname;
        !          1018:        int                     spawnflags;
        !          1019: 
        !          1020:        float           timestamp;
        !          1021: 
        !          1022:        float           angle;                  // set in qe3, -1 = up, -2 = down
        !          1023:        char            *target;
        !          1024:        char            *targetname;
        !          1025:        char            *killtarget;
        !          1026:        char            *team;
        !          1027:        char            *pathtarget;
        !          1028:        char            *deathtarget;
        !          1029:        char            *combattarget;
        !          1030:        edict_t         *target_ent;
        !          1031: 
        !          1032:        float           speed, accel, decel;
        !          1033:        vec3_t          movedir;
        !          1034:        vec3_t          pos1, pos2;
        !          1035: 
        !          1036:        vec3_t          velocity;
        !          1037:        vec3_t          avelocity;
        !          1038:        int                     mass;
        !          1039:        float           air_finished;
        !          1040:        float           gravity;                // per entity gravity multiplier (1.0 is normal)
        !          1041:                                                                // use for lowgrav artifact, flares
        !          1042: 
        !          1043:        edict_t         *goalentity;
        !          1044:        edict_t         *movetarget;
        !          1045:        float           yaw_speed;
        !          1046:        float           ideal_yaw;
        !          1047: 
        !          1048:        float           nextthink;
        !          1049:        void            (*prethink) (edict_t *ent);
        !          1050:        void            (*think)(edict_t *self);
        !          1051:        void            (*blocked)(edict_t *self, edict_t *other);      //move to moveinfo?
        !          1052:        void            (*touch)(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf);
        !          1053:        void            (*use)(edict_t *self, edict_t *other, edict_t *activator);
        !          1054:        void            (*pain)(edict_t *self, edict_t *other, float kick, int damage);
        !          1055:        void            (*die)(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
        !          1056: 
        !          1057:        float           touch_debounce_time;            // are all these legit?  do we need more/less of them?
        !          1058:        float           pain_debounce_time;
        !          1059:        float           damage_debounce_time;
        !          1060:        float           fly_sound_debounce_time;        //move to clientinfo
        !          1061:        float           last_move_time;
        !          1062: 
        !          1063:        int                     health;
        !          1064:        int                     max_health;
        !          1065:        int                     gib_health;
        !          1066:        int                     deadflag;
        !          1067:        qboolean        show_hostile;
        !          1068: 
        !          1069:        float           powerarmor_time;
        !          1070: 
        !          1071:        char            *map;                   // target_changelevel
        !          1072: 
        !          1073:        int                     viewheight;             // height above origin where eyesight is determined
        !          1074:        int                     takedamage;
        !          1075:        int                     dmg;
        !          1076:        int                     radius_dmg;
        !          1077:        float           dmg_radius;
        !          1078:        int                     sounds;                 //make this a spawntemp var?
        !          1079:        int                     count;
        !          1080: 
        !          1081:        edict_t         *chain;
        !          1082:        edict_t         *enemy;
        !          1083:        edict_t         *oldenemy;
        !          1084:        edict_t         *activator;
        !          1085:        edict_t         *groundentity;
        !          1086:        int                     groundentity_linkcount;
        !          1087:        edict_t         *teamchain;
        !          1088:        edict_t         *teammaster;
        !          1089: 
        !          1090:        edict_t         *mynoise;               // can go in client only
        !          1091:        edict_t         *mynoise2;
        !          1092: 
        !          1093:        int                     noise_index;
        !          1094:        int                     noise_index2;
        !          1095:        float           volume;
        !          1096:        float           attenuation;
        !          1097: 
        !          1098:        // timing variables
        !          1099:        float           wait;
        !          1100:        float           delay;                  // before firing targets
        !          1101:        float           random;
        !          1102: 
        !          1103:        float           teleport_time;
        !          1104: 
        !          1105:        int                     watertype;
        !          1106:        int                     waterlevel;
        !          1107: 
        !          1108:        vec3_t          move_origin;
        !          1109:        vec3_t          move_angles;
        !          1110: 
        !          1111:        // move this to clientinfo?
        !          1112:        int                     light_level;
        !          1113: 
        !          1114:        int                     style;                  // also used as areaportal number
        !          1115: 
        !          1116:        gitem_t         *item;                  // for bonus items
        !          1117: 
        !          1118:        // common data blocks
        !          1119:        moveinfo_t              moveinfo;
        !          1120:        monsterinfo_t   monsterinfo;
        !          1121: };
        !          1122: 
        !          1123: //ZOID
        !          1124: #include "g_ctf.h"
        !          1125: //ZOID
        !          1126: 

unix.superglobalmegacorp.com

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