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