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