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