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