1 /* 2 Copyright (C) 1997-2001 Id Software, Inc. 3 4 This program is free software; you can redistribute it and/or 5 modify it under the terms of the GNU General Public License 6 as published by the Free Software Foundation; either version 2 7 of the License, or (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 13 See the GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 */ 20 // g_local.h -- local definitions for game module 21 22 #include "q_shared.h" 23 24 // define GAME_INCLUDE so that game.h does not define the 25 // short, server-visible gclient_t and edict_t structures, 26 // because we define the full size ones in this file 27 #define GAME_INCLUDE 28 #include "game.h" 29 30 // the "gameversion" client command will print this plus compile date 31 #define GAMEVERSION "data1" 32 33 // protocol bytes that can be directly added to messages 34 #define svc_muzzleflash 1 35 #define svc_muzzleflash2 2 36 #define svc_temp_entity 3 37 #define svc_layout 4 38 #define svc_inventory 5 39 #define svc_nop 6 40 #define svc_stufftext 11 41 42 //================================================================== 43 44 // view pitching times 45 #define DAMAGE_TIME 0.5 46 #define FALL_TIME 0.3 47 48 49 // edict->spawnflags 50 // these are set with checkboxes on each entity in the map editor 51 #define SPAWNFLAG_NOT_EASY 0x00000100 52 #define SPAWNFLAG_NOT_MEDIUM 0x00000200 53 #define SPAWNFLAG_NOT_HARD 0x00000400 54 #define SPAWNFLAG_NOT_DEATHMATCH 0x00000800 55 56 // edict->flags 57 #define FL_FLY 0x00000001 58 #define FL_SWIM 0x00000002 // implied immunity to drowining 59 #define FL_IMMUNE_LASER 0x00000004 60 #define FL_INWATER 0x00000008 61 #define FL_GODMODE 0x00000010 62 #define FL_NOTARGET 0x00000020 63 #define FL_IMMUNE_SLIME 0x00000040 64 #define FL_IMMUNE_LAVA 0x00000080 65 #define FL_PARTIALGROUND 0x00000100 // not all corners are valid 66 #define FL_WATERJUMP 0x00000200 // player jumping out of water 67 #define FL_TEAMSLAVE 0x00000400 // not the first on the team 68 #define FL_NO_KNOCKBACK 0x00000800 69 #define FL_POWER_ARMOR 0x00001000 // power armor (if any) is active 70 #define FL_RESPAWN 0x80000000 // used for item respawning 71 72 73 #define FRAMETIME 0.1 74 75 //unlagged - true ping 76 #define NUM_PING_SAMPLES 64 77 //unlagged - true ping 78 79 // memory tags to allow dynamic memory to be cleaned up 80 #define TAG_GAME 765 // clear when unloading the dll 81 #define TAG_LEVEL 766 // clear when loading a new level 82 83 84 #define MELEE_DISTANCE 80 85 86 // Anti-camp defaults 87 /** @brief Default anti-camp frames 88 * 89 * Default value for the ac_frames anti-camp CVar. 90 */ 91 #define G_ANTICAMP_FRAMES 30 92 93 /** @brief Default anti-camp threshold 94 * 95 * Default value for the ac_threshold anti-camp CVar. 96 */ 97 #define G_ANTICAMP_THRESHOLD 100 98 99 100 #define BODY_QUEUE_SIZE 8 101 102 typedef enum 103 { 104 DAMAGE_NO, 105 DAMAGE_YES, // will take damage if hit 106 DAMAGE_AIM // auto targeting recognizes this 107 } damage_t; 108 109 typedef enum 110 { 111 WEAPON_READY, 112 WEAPON_ACTIVATING, 113 WEAPON_DROPPING, 114 WEAPON_FIRING 115 } weaponstate_t; 116 117 typedef enum 118 { 119 AMMO_BULLETS, 120 AMMO_SHELLS, 121 AMMO_ROCKETS, 122 AMMO_GRENADES, 123 AMMO_CELLS, 124 AMMO_SLUGS, 125 AMMO_SEEKERS, 126 AMMO_BOMBS 127 } ammo_t; 128 129 //teams 130 typedef struct teamcensus_s 131 { // see p_client.c::TeamCensus() 132 int total; 133 int real; 134 int bots; 135 int red; 136 int blue; 137 int real_red; 138 int real_blue; 139 int bots_red; 140 int bots_blue; 141 int team_for_real; 142 int team_for_bot; 143 } teamcensus_t; 144 145 #define TEAM_GAME ( (dmflags->integer & (DF_SKINTEAMS)) \ 146 || ctf->integer || tca->integer || cp->integer ) 147 148 //clientinfo origins 149 #define INGAME 0 150 #define SPAWN 1 151 #define CONNECT 2 152 153 //deadflag 154 #define DEAD_NO 0 155 #define DEAD_DYING 1 156 #define DEAD_DEAD 2 157 #define DEAD_RESPAWNABLE 3 158 159 //range 160 #define RANGE_MELEE 0 161 #define RANGE_NEAR 1 162 #define RANGE_MID 2 163 #define RANGE_FAR 3 164 165 //gib types 166 #define GIB_ORGANIC 0 167 #define GIB_METALLIC 1 168 169 //monster ai flags 170 #define AI_STAND_GROUND 0x00000001 171 #define AI_TEMP_STAND_GROUND 0x00000002 172 #define AI_SOUND_TARGET 0x00000004 173 #define AI_LOST_SIGHT 0x00000008 174 #define AI_PURSUIT_LAST_SEEN 0x00000010 175 #define AI_PURSUE_NEXT 0x00000020 176 #define AI_PURSUE_TEMP 0x00000040 177 #define AI_HOLD_FRAME 0x00000080 178 #define AI_GOOD_GUY 0x00000100 179 #define AI_BRUTAL 0x00000200 180 #define AI_NOSTEP 0x00000400 181 #define AI_DUCKED 0x00000800 182 #define AI_COMBAT_POINT 0x00001000 183 #define AI_MEDIC 0x00002000 184 #define AI_RESURRECTING 0x00004000 185 #define AI_NPC 0x00008000 // FIXME: use AI_GOOD_GUY instead? 186 187 //monster attack state 188 #define AS_STRAIGHT 1 189 #define AS_SLIDING 2 190 #define AS_MELEE 3 191 #define AS_MISSILE 4 192 193 // armor types 194 #define ARMOR_NONE 0 195 #define ARMOR_JACKET 1 196 #define ARMOR_COMBAT 2 197 #define ARMOR_BODY 3 198 #define ARMOR_SHARD 4 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_t; 239 240 241 typedef struct 242 { 243 char command[128]; //limit to prevent malicious buffer overflows 244 int yay; 245 int nay; 246 float starttime; 247 float time; 248 qboolean called; 249 } g_vote_t; 250 251 typedef struct 252 { 253 int base_count; 254 int max_count; 255 float normal_protection; 256 float energy_protection; 257 int armor; 258 } gitem_armor_t; 259 260 261 // gitem_t->flags 262 #define IT_WEAPON 1 // use makes active weapon 263 #define IT_AMMO 2 264 #define IT_ARMOR 4 265 #define IT_KEY 8 266 #define IT_POWERUP 16 267 #define IT_HEALTH 32 268 269 //to do - add alteria items - will require a number of other changes, particularly in bot code as well 270 // gitem_t->weapmodel for weapons indicates model index 271 #define WEAP_BLASTER 1 272 #define WEAP_SMARTGUN 2 273 #define WEAP_CHAINGUN 3 274 #define WEAP_GRAPPLE 4 275 #define WEAP_FLAMETHROWER 5 276 #define WEAP_ROCKETLAUNCHER 8 277 #define WEAP_DISRUPTOR 9 278 #define WEAP_BEAMGUN 10 279 #define WEAP_VAPORIZER 11 280 #define WEAP_VIOLATOR 12 281 #define WEAP_MINDERASER 13 282 #define WEAP_BOMBER 14 283 #define WEAP_STRAFER 15 284 #define WEAP_DEATHBALL 16 285 #define WEAP_HOVER 17 286 #define WEAP_ABOMB 18 287 #define WEAP_HBOMB 19 288 289 typedef struct gitem_s 290 { 291 char *classname; // spawning name 292 qboolean (*pickup)(struct edict_s *ent, struct edict_s *other); 293 void (*use)(struct edict_s *ent, struct gitem_s *item); 294 void (*drop)(struct edict_s *ent, struct gitem_s *item); 295 void (*weaponthink)(struct edict_s *ent); 296 char *pickup_sound; 297 char *world_model; 298 int world_model_flags; 299 char *view_model; 300 301 // client side info 302 char *icon; 303 char *pickup_name; // for printing on pickup 304 int count_width; // number of digits to display by icon 305 306 int quantity; // for ammo how much, for weapons how much is used per shot 307 char *ammo; // for weapons 308 int flags; // IT_* flags 309 310 int weapmodel; // weapon model index (for weapons) 311 312 void *info; 313 int tag; 314 315 char *precaches; // string of all models, sounds, and images this item will use 316 } gitem_t; 317 318 // 319 // this structure is left intact through an entire game 320 // it should be initialized at dll load time, and read/written to 321 // the server.ssv file for savegames 322 // 323 typedef struct 324 { 325 char helpmessage1[512]; 326 char helpmessage2[512]; 327 int helpchanged; // flash F1 icon if non 0, play sound 328 // and increment only if 1, 2, or 3 329 330 gclient_t *clients; // [maxclients] 331 332 // store latched cvars here that we want to get at often 333 int maxclients; 334 int maxentities; 335 336 // cross level triggers 337 int serverflags; 338 339 // items 340 int num_items; 341 342 qboolean autosaved; 343 } game_locals_t; 344 345 // 346 // this structure is cleared as each map is entered 347 // it is read/written to the level.sav file for savegames 348 // 349 typedef struct 350 { 351 int framenum; 352 float time; 353 int previousTime; //in milleseconds 354 355 char level_name[MAX_QPATH]; // the descriptive name (Outer Base, etc) 356 char mapname[MAX_QPATH]; // the server name (base1, etc) 357 char nextmap[MAX_QPATH]; // go here when fraglimit is hit 358 359 // intermission state 360 float intermissiontime; // time the intermission was started 361 char *changemap; 362 int exitintermission; 363 vec3_t intermission_origin; 364 vec3_t intermission_angle; 365 366 edict_t *sight_client; // changed once each frame for coop games 367 368 edict_t *sight_entity; 369 int sight_entity_framenum; 370 edict_t *sound_entity; 371 int sound_entity_framenum; 372 edict_t *sound2_entity; 373 int sound2_entity_framenum; 374 375 int pic_health; 376 377 int total_secrets; 378 int found_secrets; 379 380 int total_goals; 381 int found_goals; 382 383 int total_monsters; 384 int killed_monsters; 385 386 edict_t *current_entity; // entity running from G_RunFrame 387 int body_que; // dead bodies 388 389 //unlagged - backward reconciliation #4 390 // actual time this server frame started 391 float frameStartTime; 392 //unlagged - backward reconciliation #4 393 394 } level_locals_t; 395 396 // spawn_temp_t is only used to hold entity field values that 397 // can be set from the editor, but aren't actualy present 398 // in edict_t during gameplay 399 typedef struct 400 { 401 // world vars 402 char *sky; 403 float skyrotate; 404 vec3_t skyaxis; 405 char *nextmap; 406 407 int lip; 408 int distance; 409 int height; 410 char *noise; 411 float pausetime; 412 char *item; 413 char *gravity; 414 415 float minyaw; 416 float maxyaw; 417 float minpitch; 418 float maxpitch; 419 } spawn_temp_t; 420 421 typedef struct 422 { 423 // fixed data 424 vec3_t start_origin; 425 vec3_t start_angles; 426 vec3_t end_origin; 427 vec3_t end_angles; 428 429 int sound_start; 430 int sound_middle; 431 int sound_end; 432 433 float accel; 434 float speed; 435 float decel; 436 float distance; 437 438 float wait; 439 440 // state data 441 int state; 442 vec3_t dir; 443 float current_speed; 444 float move_speed; 445 float next_speed; 446 float remaining_distance; 447 float decel_distance; 448 void (*endfunc)(edict_t *); 449 } moveinfo_t; 450 451 typedef struct 452 { 453 void (*aifunc)(edict_t *self, float dist); 454 float dist; 455 void (*thinkfunc)(edict_t *self); 456 } mframe_t; 457 458 typedef struct 459 { 460 int firstframe; 461 int lastframe; 462 mframe_t *frame; 463 void (*endfunc)(edict_t *self); 464 } mmove_t; 465 466 typedef struct 467 { 468 mmove_t *currentmove; 469 int aiflags; 470 int nextframe; 471 float scale; 472 473 void (*stand)(edict_t *self); 474 void (*idle)(edict_t *self); 475 void (*search)(edict_t *self); 476 void (*walk)(edict_t *self); 477 void (*run)(edict_t *self); 478 void (*dodge)(edict_t *self, edict_t *other, float eta); 479 void (*attack)(edict_t *self); 480 void (*melee)(edict_t *self); 481 void (*sight)(edict_t *self, edict_t *other); 482 qboolean (*checkattack)(edict_t *self); 483 484 float pausetime; 485 float attack_finished; 486 487 vec3_t saved_goal; 488 float search_time; 489 float trail_time; 490 vec3_t last_sighting; 491 int attack_state; 492 int lefty; 493 float idle_time; 494 int linkcount; 495 496 } monsterinfo_t; 497 498 //tactical 499 typedef struct 500 { 501 qboolean alienComputer; 502 int alienComputerHealth; 503 qboolean alienPowerSource; 504 int alienPowerSourceHealth; 505 qboolean alienAmmoDepot; 506 int alienAmmoDepotHealth; 507 qboolean alienBackupGen; 508 509 qboolean humanComputer; 510 int humanComputerHealth; 511 qboolean humanPowerSource; 512 int humanPowerSourceHealth; 513 qboolean humanAmmoDepot; 514 int humanAmmoDepotHealth; 515 qboolean humanBackupGen; 516 517 } tactical_t; 518 519 extern game_locals_t game; 520 extern level_locals_t level; 521 extern game_import_t gi; 522 extern game_export_t globals; 523 extern spawn_temp_t st; 524 extern g_vote_t playervote; 525 extern tactical_t tacticalScore; 526 527 extern int sm_meat_index; 528 529 extern int red_team_score; 530 extern int blue_team_score; 531 extern int red_team_matches; //for tca 532 extern int blue_team_matches; //for tca 533 extern int reddiff; 534 extern int bluediff; 535 extern int redwinning; 536 extern int print1; 537 extern int print2; 538 extern int print3; 539 540 // means of death 541 #define MOD_UNKNOWN 0 542 #define MOD_BLASTER 1 543 #define MOD_VIOLATOR 2 544 #define MOD_CGALTFIRE 3 545 #define MOD_CHAINGUN 5 546 #define MOD_FLAME 6 547 #define MOD_ROCKET 8 548 #define MOD_R_SPLASH 9 549 #define MOD_BEAMGUN 10 550 #define MOD_DISRUPTOR 11 551 #define MOD_SMARTGUN 12 552 #define MOD_VAPORIZER 13 553 #define MOD_VAPORALTFIRE 14 554 #define MOD_PLASMA_SPLASH 16 555 #define MOD_WATER 17 556 #define MOD_SLIME 18 557 #define MOD_LAVA 19 558 #define MOD_CRUSH 20 559 #define MOD_TELEFRAG 21 560 #define MOD_FALLING 22 561 #define MOD_SUICIDE 23 562 #define MOD_CAMPING 24 563 #define MOD_EXPLOSIVE 25 564 #define MOD_BARREL 26 565 #define MOD_BOMB 27 566 #define MOD_EXIT 28 567 #define MOD_SPLASH 29 568 #define MOD_TARGET_LASER 30 569 #define MOD_TRIGGER_HURT 31 570 #define MOD_DEATHRAY 32 571 #define MOD_TARGET_BLASTER 33 572 #define MOD_GRAPPLE 34 573 #define MOD_HEADSHOT 35 574 #define MOD_MINDERASER 36 575 #define MOD_SPIDER 37 576 #define MOD_FRIENDLY_FIRE 0x8000000 577 578 extern int meansOfDeath; 579 580 extern edict_t *g_edicts; 581 582 #define FOFS(x)(ptrdiff_t)&(((edict_t *)0)->x) 583 #define STOFS(x)(ptrdiff_t)&(((spawn_temp_t *)0)->x) 584 #define LLOFS(x)(ptrdiff_t)&(((level_locals_t *)0)->x) 585 #define CLOFS(x)(ptrdiff_t)&(((gclient_t *)0)->x) 586 587 #define random() ((rand() & 0x7fff) / ((float)0x7fff)) 588 #define crandom() (2.0 * (random() - 0.5)) 589 590 extern cvar_t *maxentities; 591 extern cvar_t *deathmatch; 592 extern cvar_t *ctf; 593 extern cvar_t *tca; 594 extern cvar_t *cp; 595 extern cvar_t *dmflags; 596 extern cvar_t *skill; 597 extern cvar_t *fraglimit; 598 extern cvar_t *timelimit; 599 extern cvar_t *password; 600 extern cvar_t *spectator_password; 601 extern cvar_t *needpass; 602 extern cvar_t *g_select_empty; 603 extern cvar_t *g_dedicated; 604 extern cvar_t *motdfile; 605 extern cvar_t *motdforce; 606 607 extern cvar_t *filterban; 608 609 extern cvar_t *sv_gravity; 610 extern cvar_t *sv_maxvelocity; 611 612 extern cvar_t *gun_x, *gun_y, *gun_z; 613 extern cvar_t *sv_rollspeed; 614 extern cvar_t *sv_rollangle; 615 616 extern cvar_t *run_pitch; 617 extern cvar_t *run_roll; 618 extern cvar_t *bob_up; 619 extern cvar_t *bob_pitch; 620 extern cvar_t *bob_roll; 621 622 extern cvar_t *sv_cheats; 623 extern cvar_t *g_maxclients; 624 extern cvar_t *maxspectators; 625 626 extern cvar_t *flood_msgs; 627 extern cvar_t *flood_persecond; 628 extern cvar_t *flood_waitdelay; 629 630 extern cvar_t *sv_maplist; 631 632 extern cvar_t *g_background_music; 633 634 extern cvar_t *sv_botkickthreshold; 635 extern cvar_t *sv_custombots; 636 637 //mutators 638 extern cvar_t *instagib; 639 extern cvar_t *rocket_arena; 640 extern cvar_t *insta_rockets; 641 extern cvar_t *low_grav; 642 extern cvar_t *regeneration; 643 extern cvar_t *vampire; 644 extern cvar_t *excessive; 645 extern cvar_t *grapple; 646 extern cvar_t *classbased; 647 648 //duel mode 649 extern cvar_t *g_duel; 650 651 //tactical mode 652 extern cvar_t *g_tactical; 653 654 extern cvar_t *g_losehealth; 655 extern cvar_t *g_losehealth_num; 656 657 //weapons 658 extern cvar_t *wep_selfdmgmulti; 659 660 //health/max health/max ammo 661 extern cvar_t *g_spawnhealth; 662 extern cvar_t *g_maxhealth; 663 extern cvar_t *g_maxbullets; 664 extern cvar_t *g_maxshells; 665 extern cvar_t *g_maxrockets; 666 extern cvar_t *g_maxgrenades; 667 extern cvar_t *g_maxcells; 668 extern cvar_t *g_maxslugs; 669 extern cvar_t *g_maxseekers; 670 extern cvar_t *g_maxbombs; 671 672 //quick weapon change 673 extern cvar_t *quickweap; 674 675 //anti-camp 676 extern cvar_t *anticamp; 677 extern cvar_t *camptime; 678 extern cvar_t *ac_frames; 679 extern cvar_t *ac_threshold; 680 681 extern cvar_t *g_randomquad; 682 683 //warmup time 684 extern cvar_t *warmuptime; 685 686 //spawn protection 687 extern cvar_t *g_spawnprotect; 688 689 //jousting 690 extern cvar_t *joustmode; 691 692 //map voting 693 extern cvar_t *g_mapvote; 694 extern cvar_t *g_voterand; 695 extern cvar_t *g_votemode; 696 extern cvar_t *g_votesame; 697 698 //call voting 699 extern cvar_t *g_callvote; 700 701 //forced autobalanced teams 702 extern cvar_t *g_autobalance; 703 704 //reward point threshold 705 extern cvar_t *g_reward; 706 707 //show player lights for visibility even in non-team games 708 extern cvar_t *g_dmlights; 709 710 #define world (&g_edicts[0]) 711 712 // item spawnflags 713 #define ITEM_TRIGGER_SPAWN 0x00000001 714 #define ITEM_NO_TOUCH 0x00000002 715 // 6 bits reserved for editor flags 716 // 8 bits used as power cube id bits for coop games 717 #define DROPPED_ITEM 0x00010000 718 #define DROPPED_PLAYER_ITEM 0x00020000 719 #define ITEM_TARGETS_USED 0x00040000 720 721 // 722 // fields are needed for spawning from the entity string 723 // and saving / loading games 724 // 725 #define FFL_SPAWNTEMP 1 726 #define FFL_NOSPAWN 2 727 728 typedef enum { 729 F_INT, 730 F_FLOAT, 731 F_LSTRING, // string on disk, pointer in memory, TAG_LEVEL 732 F_GSTRING, // string on disk, pointer in memory, TAG_GAME 733 F_VECTOR, 734 F_ANGLEHACK, 735 F_EDICT, // index on disk, pointer in memory 736 F_ITEM, // index on disk, pointer in memory 737 F_CLIENT, // index on disk, pointer in memory 738 F_FUNCTION, 739 F_MMOVE, 740 F_IGNORE 741 } fieldtype_t; 742 743 typedef struct 744 { 745 char *name; 746 int ofs; 747 fieldtype_t type; 748 int flags; 749 } field_t; 750 751 752 extern field_t fields[]; 753 extern gitem_t itemlist[]; 754 755 //mind eraser globals 756 extern float mindEraserTime; 757 758 // 759 // g_cmds.c 760 // 761 void Cmd_Score_f (edict_t *ent); 762 void Cmd_VoiceTaunt_f (edict_t *ent); 763 764 // 765 // g_items.c 766 // 767 void PrecacheItem (gitem_t *it); 768 void InitItems (void); 769 void SetItemNames (void); 770 gitem_t *FindItem (char *pickup_name); 771 gitem_t *FindItemByClassname (char *classname); 772 #define ITEM_INDEX(x) ((x)-itemlist) 773 edict_t *Drop_Item (edict_t *ent, gitem_t *item); 774 void SetRespawn (edict_t *ent, float delay); 775 void ChangeWeapon (edict_t *ent); 776 void SpawnItem (edict_t *ent, gitem_t *item); 777 void DoRespawn (edict_t *ent); 778 void Think_Weapon (edict_t *ent); 779 int ArmorIndex (edict_t *ent); 780 gitem_t *GetItemByIndex (int index); 781 qboolean Add_Ammo (edict_t *ent, gitem_t *item, int count, qboolean weapon, qboolean dropped); 782 void Touch_Item (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf); 783 784 //CTF 785 void CTFDeadDropFlag(edict_t *self, edict_t *other); 786 void CTFResetFlag(int team); 787 void CTFEffects(edict_t *player); 788 void CTFScoreboardMessage (edict_t *ent, edict_t *killer, int mapvote); 789 void CTFPrecache(void); 790 void CTFFlagSetup (edict_t *ent); 791 qboolean CTFPickup_Flag (edict_t *ent, edict_t *other); 792 void CTFDrop_Flag(edict_t *ent, gitem_t *item); 793 794 //Vehicles 795 void Reset_player(edict_t *ent); 796 void Jet_Explosion(edict_t *ent); 797 qboolean Jet_Active(edict_t *ent); 798 void Jet_ApplyJet( edict_t *ent, usercmd_t *ucmd ); 799 qboolean Jet_AvoidGround( edict_t *ent ); 800 void VehicleDeadDrop(edict_t *self); 801 void VehicleSetup (edict_t *ent); 802 qboolean Get_in_vehicle (edict_t *ent, edict_t *other); 803 void Leave_vehicle(edict_t *ent, gitem_t *item); 804 805 //deathball 806 void ResetDeathball(); 807 void DeadDropDeathball(edict_t *self); 808 void DeathballSetup (edict_t *ent); 809 qboolean Pickup_deathball (edict_t *ent, edict_t *other); 810 void DeathballDrop(edict_t *ent, gitem_t *item); 811 812 // 813 // g_utils.c 814 // 815 qboolean KillBox (edict_t *ent); 816 void G_ProjectSource (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result); 817 edict_t *G_Find (edict_t *from, int fieldofs, char *match); 818 edict_t *findradius (edict_t *from, vec3_t org, float rad); 819 edict_t *G_PickTarget (char *targetname); 820 void G_UseTargets (edict_t *ent, edict_t *activator); 821 void G_SetMovedir (vec3_t angles, vec3_t movedir); 822 823 void G_InitEdict (edict_t *e); 824 edict_t *G_Spawn (void); 825 void G_FreeEdict (edict_t *e); 826 827 void G_TouchTriggers (edict_t *ent); 828 void G_TouchSolids (edict_t *ent); 829 830 char *G_CopyString (const char *in); 831 void G_CleanPlayerName ( const char *source, char *dest ); 832 833 float *tv (float x, float y, float z); 834 char *vtos (vec3_t v); 835 836 float vectoyaw (vec3_t vec); 837 // void vectoangles (vec3_t vec, vec3_t angles); 838 839 // 840 // g_combat.c 841 // 842 qboolean OnSameTeam (edict_t *ent1, edict_t *ent2); 843 qboolean CanDamage (edict_t *targ, edict_t *inflictor); 844 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); 845 void T_RadiusDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod, int weapon); 846 847 // damage flags 848 #define DAMAGE_RADIUS 0x00000001 // damage was indirect 849 #define DAMAGE_NO_ARMOR 0x00000002 // armour does not protect from this damage 850 #define DAMAGE_ENERGY 0x00000004 // damage is from an energy based weapon 851 #define DAMAGE_NO_KNOCKBACK 0x00000008 // do not affect velocity, just view angles 852 #define DAMAGE_BULLET 0x00000010 // damage is from a bullet (used for ricochets) 853 #define DAMAGE_NO_PROTECTION 0x00000020 // armor, shields, invulnerability, and godmode have no effect 854 855 #define DEFAULT_BULLET_HSPREAD 300 856 #define DEFAULT_BULLET_VSPREAD 300 857 #define DEFAULT_SHOTGUN_HSPREAD 1000 858 #define DEFAULT_SHOTGUN_VSPREAD 500 859 #define DEFAULT_DEATHMATCH_SHOTGUN_COUNT 12 860 #define DEFAULT_SHOTGUN_COUNT 12 861 #define DEFAULT_SSHOTGUN_COUNT 15 862 863 // 864 // g_monster.c 865 // 866 void M_droptofloor (edict_t *ent); 867 void monster_think (edict_t *self); 868 void walkmonster_start (edict_t *self); 869 void swimmonster_start (edict_t *self); 870 void flymonster_start (edict_t *self); 871 void AttackFinished (edict_t *self, float time); 872 void monster_death_use (edict_t *self); 873 void M_CatagorizePosition (edict_t *ent); 874 qboolean M_CheckAttack (edict_t *self); 875 void M_FlyCheck (edict_t *self); 876 void M_CheckGround (edict_t *ent); 877 void M_SetEffects (edict_t *ent); 878 879 // 880 // g_misc.c 881 // 882 void ThrowClientHead (edict_t *self, int damage); 883 void ThrowGib (edict_t *self, char *gibname, int damage, int type, int effects); 884 void BecomeExplosion1 (edict_t *self); 885 886 // 887 // g_ai.c 888 // 889 void AI_SetSightClient (void); 890 891 void ai_stand (edict_t *self, float dist); 892 void ai_move (edict_t *self, float dist); 893 void ai_walk (edict_t *self, float dist); 894 void ai_turn (edict_t *self, float dist); 895 void ai_still (edict_t *self, float dist); 896 void ai_run (edict_t *self, float dist); 897 void ai_charge (edict_t *self, float dist); 898 int range (edict_t *self, edict_t *other); 899 900 void FoundTarget (edict_t *self); 901 qboolean infront (edict_t *self, edict_t *other); 902 qboolean visible (edict_t *self, edict_t *other); 903 qboolean FacingIdeal(edict_t *self); 904 905 // 906 // g_weapon.c 907 // 908 void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin); 909 void ThrowDebris2 (edict_t *self, char *modelname, float speed, vec3_t origin); 910 911 #ifdef ALTERIA 912 void fire_punch(edict_t *self, vec3_t start, vec3_t aimdir, int damage); 913 #else 914 void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod); 915 void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod); 916 void fire_blaster (edict_t *self, vec3_t start, vec3_t muzzle, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper); 917 void fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage); 918 void fire_homingrocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage); 919 void fire_disruptor (edict_t *self, vec3_t start, vec3_t muzzle, vec3_t aimdir, int damage, int kick); 920 void fire_bomb (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage, float timer); 921 void fire_blaster_beam (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, qboolean detonate, qboolean alien); 922 void fire_smartgrenade (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage, float timer); 923 void fire_smartgrenade_alien (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage, float timer); 924 void fire_flamethrower(edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius); 925 void fire_hover_beam (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, qboolean detonate); 926 void fire_minderaser (edict_t *self, vec3_t start, vec3_t dir, float timer); 927 void fire_spider (edict_t *self, vec3_t start, vec3_t aimdir, int speed); 928 void fire_vaporizer (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick); 929 void fire_blasterball (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int effect, qboolean hyper, qboolean alien); 930 void fire_prox (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage, float timer); 931 void fire_fireball (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float damage_radius, int radius_damage); 932 void fire_violator(edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int alt); 933 void fire_tacticalbomb (edict_t *self, vec3_t start, vec3_t aimdir, int speed); 934 #endif 935 936 //deathball 937 void fire_deathball (edict_t *self, vec3_t start, vec3_t dir, int speed); 938 939 //grapple 940 typedef enum { 941 CTF_GRAPPLE_STATE_FLY, 942 CTF_GRAPPLE_STATE_PULL, 943 CTF_GRAPPLE_STATE_HANG 944 } ctfgrapplestate_t; 945 946 #define CTF_GRAPPLE_SPEED 1650 // speed of grapple in flight 947 #define CTF_GRAPPLE_PULL_SPEED 1650 // speed player is pulled at 948 949 // GRAPPLE 950 void CTFWeapon_Grapple (edict_t *ent); 951 void CTFPlayerResetGrapple(edict_t *ent); 952 void CTFGrapplePull(edict_t *self); 953 void CTFResetGrapple(edict_t *self); 954 955 // 956 // g_ptrail.c 957 // 958 void PlayerTrail_Init (void); 959 void PlayerTrail_Add (vec3_t spot); 960 void PlayerTrail_New (vec3_t spot); 961 edict_t *PlayerTrail_PickFirst (edict_t *self); 962 edict_t *PlayerTrail_PickNext (edict_t *self); 963 edict_t *PlayerTrail_LastSpot (void); 964 965 // 966 // p_client.c 967 // 968 void respawn (edict_t *ent); 969 void BeginIntermission (edict_t *targ); 970 void EndIntermission (void); 971 void PutClientInServer (edict_t *ent); 972 void InitClientPersistant (gclient_t *client); 973 void InitClientResp (gclient_t *client); 974 void InitBodyQue (void); 975 void ClientBeginServerFrame (edict_t *ent); 976 void Q2_FindFile (char *filename, FILE **file); 977 void ClientPlaceInQueue(edict_t *ent); 978 void ClientCheckQueue(edict_t *ent); 979 void MoveClientsDownQueue(edict_t *ent); 980 void SaveClientData (void); 981 void FetchClientEntData (edict_t *ent); 982 void TeamCensus( teamcensus_t* team_census ); 983 void ParseClassFile( char *config_file, edict_t *ent ); 984 985 //unlagged - g_unlagged.c 986 void G_ResetHistory( edict_t *ent ); 987 void G_StoreHistory( edict_t *ent ); 988 void G_TimeShiftAllClients( int time, edict_t *skip ); 989 void G_UnTimeShiftAllClients( edict_t *skip ); 990 void G_DoTimeShiftFor( edict_t *ent ); 991 void G_UndoTimeShiftFor( edict_t *ent ); 992 void G_UnTimeShiftClient( edict_t *ent ); 993 void G_AntilagProjectile( edict_t *ent ); 994 //unlagged - g_unlagged.c 995 996 // 997 // g_player.c 998 // 999 void player_pain (edict_t *self, edict_t *other, float kick, int damage); 1000 void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point); 1001 1002 // 1003 // g_svcmds.c 1004 // 1005 void ServerCommand (void); 1006 qboolean SV_FilterPacket (char *from); 1007 1008 // 1009 // p_view.c 1010 // 1011 void ClientEndServerFrame (edict_t *ent); 1012 1013 // 1014 // p_hud.c 1015 // 1016 void MoveClientToIntermission (edict_t *client); 1017 void G_UpdateStats (edict_t *ent); 1018 void ValidateSelectedItem (edict_t *ent); 1019 void DeathmatchScoreboardMessage (edict_t *client, edict_t *killer, int mapvote); 1020 1021 // 1022 // p_weapon.c 1023 // 1024 void P_ProjectSource (gclient_t *client, vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result); 1025 void Weapon_Generic (edict_t *ent, int FRAME_ACTIVATE_LAST, int FRAME_FIRE_LAST, int FRAME_IDLE_LAST, int FRAME_DEACTIVATE_LAST, int *pause_frames, int *fire_frames, void (*fire)(edict_t *ent)); 1026 void PlayerNoise(edict_t *who, vec3_t where, int type); 1027 1028 // 1029 // m_move.c 1030 // 1031 qboolean M_CheckBottom (edict_t *ent); 1032 qboolean M_walkmove (edict_t *ent, float yaw, float dist); 1033 void M_MoveToGoal (edict_t *ent, float dist); 1034 void M_ChangeYaw (edict_t *ent); 1035 1036 // 1037 // g_phys.c 1038 // 1039 void G_RunEntity (edict_t *ent, float timespan); 1040 void SV_CheckVelocity (edict_t *ent); 1041 1042 // 1043 // g_chase.c 1044 // 1045 void UpdateChaseCam(edict_t *ent); 1046 void ChaseNext(edict_t *ent); 1047 void ChasePrev(edict_t *ent); 1048 void GetChaseTarget(edict_t *ent); 1049 1050 // 1051 // g_main.c 1052 // 1053 qboolean G_NameMatch( const char* netname, const char *kickname ); 1054 1055 // 1056 // Spawn functions 1057 // 1058 extern void SP_item_health (edict_t *self); 1059 extern void SP_item_health_small (edict_t *self); 1060 extern void SP_item_health_large (edict_t *self); 1061 extern void SP_item_health_mega (edict_t *self); 1062 1063 extern void SP_info_player_start (edict_t *ent); 1064 extern void SP_info_player_deathmatch (edict_t *ent); 1065 extern void SP_info_player_intermission (edict_t *ent); 1066 extern void SP_info_player_red (edict_t *ent); 1067 extern void SP_info_player_blue(edict_t *ent); 1068 1069 extern void SP_func_plat (edict_t *ent); 1070 extern void SP_func_rotating (edict_t *ent); 1071 extern void SP_func_button (edict_t *ent); 1072 extern void SP_func_door (edict_t *ent); 1073 extern void SP_func_door_secret (edict_t *ent); 1074 extern void SP_func_door_rotating (edict_t *ent); 1075 extern void SP_func_water (edict_t *ent); 1076 extern void SP_func_train (edict_t *ent); 1077 extern void SP_func_conveyor (edict_t *self); 1078 extern void SP_func_wall (edict_t *self); 1079 extern void SP_func_object (edict_t *self); 1080 extern void SP_func_explosive (edict_t *self); 1081 extern void SP_func_timer (edict_t *self); 1082 extern void SP_func_areaportal (edict_t *ent); 1083 extern void SP_func_killbox (edict_t *ent); 1084 1085 extern void SP_trigger_always (edict_t *ent); 1086 extern void SP_trigger_once (edict_t *ent); 1087 extern void SP_trigger_multiple (edict_t *ent); 1088 extern void SP_trigger_relay (edict_t *ent); 1089 extern void SP_trigger_push (edict_t *ent); 1090 extern void SP_trigger_hurt (edict_t *ent); 1091 extern void SP_trigger_key (edict_t *ent); 1092 extern void SP_trigger_counter (edict_t *ent); 1093 extern void SP_trigger_elevator (edict_t *ent); 1094 extern void SP_trigger_gravity (edict_t *ent); 1095 extern void SP_trigger_monsterjump (edict_t *ent); 1096 extern void SP_trigger_deathballtarget (edict_t *ent); 1097 extern void SP_trigger_reddeathballtarget (edict_t *ent); 1098 extern void SP_trigger_bluedeathballtarget (edict_t *ent); 1099 extern void SP_trigger_redcowtarget ( edict_t *ent); 1100 extern void SP_trigger_bluecowtarget (edict_t *ent); 1101 1102 extern void SP_target_temp_entity (edict_t *ent); 1103 extern void SP_target_speaker (edict_t *ent); 1104 extern void SP_target_explosion (edict_t *ent); 1105 extern void SP_target_secret (edict_t *ent); 1106 extern void SP_target_splash (edict_t *ent); 1107 extern void SP_target_steam (edict_t *ent); 1108 extern void SP_target_spawner (edict_t *ent); 1109 extern void SP_target_blaster (edict_t *ent); 1110 extern void SP_target_laser (edict_t *self); 1111 extern void SP_target_lightramp (edict_t *self); 1112 extern void SP_target_earthquake (edict_t *ent); 1113 extern void SP_target_fire (edict_t *ent); 1114 extern void SP_target_changelevel (edict_t *ent); 1115 1116 extern void SP_worldspawn (edict_t *ent); 1117 1118 extern void SP_light (edict_t *self); 1119 extern void SP_info_null (edict_t *self); 1120 extern void SP_info_notnull (edict_t *self); 1121 extern void SP_path_corner (edict_t *self); 1122 extern void SP_point_combat (edict_t *self); 1123 1124 extern void SP_misc_teleporter (edict_t *self); 1125 extern void SP_misc_teleporter_dest (edict_t *self); 1126 1127 extern void SP_npc_cow (edict_t *self); 1128 extern void SP_npc_deathray(edict_t *self); 1129 1130 //TCA 1131 extern void SP_misc_spiderpod (edict_t *self); 1132 extern void SP_misc_rednode (edict_t *self); 1133 extern void SP_misc_bluenode (edict_t *self); 1134 extern void SP_misc_bluespidernode (edict_t *self); 1135 extern void SP_misc_redspidernode (edict_t *self); 1136 1137 //Tactical 1138 extern void SP_misc_aliencomputer (edict_t *self); 1139 extern void SP_misc_humancomputer (edict_t *self); 1140 extern void SP_misc_alienpowersrc (edict_t *self); 1141 extern void SP_misc_humanpowersrc (edict_t *self); 1142 extern void SP_misc_alienammodepot (edict_t *self); 1143 extern void SP_misc_humanammodepot (edict_t *self); 1144 extern void SP_misc_alienbackupgen (edict_t *self); 1145 extern void SP_misc_humanbackupgen (edict_t *self); 1146 extern void SP_misc_deathray (edict_t *self); 1147 extern void SP_misc_laser (edict_t *self); 1148 1149 extern void SP_misc_mapmodel (edict_t *self); 1150 extern void SP_misc_watersplash (edict_t *ent); 1151 extern void SP_misc_electroflash (edict_t *ent); 1152 1153 1154 //============================================================================ 1155 1156 // client_t->anim_priority 1157 #define ANIM_BASIC 0 // stand / run 1158 #define ANIM_WAVE 1 1159 #define ANIM_JUMP 2 1160 #define ANIM_PAIN 3 1161 #define ANIM_ATTACK 4 1162 #define ANIM_DEATH 5 1163 #define ANIM_REVERSE 6 1164 1165 #define BASE_ROCKETS 10 1166 #define BASE_SHELLS 10 1167 #define BASE_CELLS 50 1168 #define BASE_SLUGS 10 1169 #define BASE_GRENADES 50 1170 #define BASE_BULLETS 50 1171 #define BASE_SEEKERS 1 1172 #define BASE_BOMBS 1 1173 1174 1175 // client data that stays across multiple level loads 1176 typedef struct 1177 { 1178 char userinfo[MAX_INFO_STRING]; 1179 1180 char netname[(PLAYERNAME_GLYPHS*3)+1]; // name from cvar 1181 // room for "rainbow" name, but is truncated to PLAYERNAME_SIZE 1182 1183 int hand; 1184 1185 qboolean connected; // a loadgame will leave valid entities that 1186 // just don't have a connection yet 1187 1188 // values saved and restored from edicts when changing levels 1189 int health; 1190 int max_health; 1191 int savedFlags; 1192 1193 int selected_item; 1194 int inventory[MAX_ITEMS]; 1195 1196 // ammo capacities 1197 int max_bullets; 1198 int max_shells; 1199 int max_rockets; 1200 int max_grenades; 1201 int max_cells; 1202 int max_slugs; 1203 int max_seekers; 1204 int max_bombs; 1205 1206 gitem_t *weapon; 1207 gitem_t *lastweapon; 1208 gitem_t *lastfailedswitch; 1209 float failedswitch_framenum; 1210 1211 int game_helpchanged; 1212 int helpchanged; 1213 1214 int spectator; // client is a spectator 1215 int queue; // client queue position for duel mode 1216 1217 //unlagged - client options 1218 // these correspond with variables in the userinfo string 1219 int delag; 1220 int debugDelag; 1221 int cmdTimeNudge; 1222 //unlagged - client options 1223 //unlagged - lag simulation #2 1224 int latentSnaps; 1225 int latentCmds; 1226 int plOut; 1227 usercmd_t cmdqueue[MAX_LATENT_CMDS]; 1228 int cmdhead; 1229 //unlagged - lag simulation #2 1230 //unlagged - true ping 1231 int realPing; 1232 int pingsamples[NUM_PING_SAMPLES]; 1233 int samplehead; 1234 //unlagged - true ping 1235 1236 } client_persistant_t; 1237 1238 //unlagged - backward reconciliation #1 1239 // the size of history we'll keep 1240 #define NUM_CLIENT_HISTORY 17 1241 1242 // everything we need to know to backward reconcile 1243 typedef struct { 1244 vec3_t mins, maxs; 1245 vec3_t currentOrigin; 1246 int leveltime; 1247 } clientHistory_t; 1248 //unlagged - backward reconciliation #1 1249 1250 // client data that stays across deathmatch respawns 1251 typedef struct 1252 { 1253 int enterframe; // level.framenum the client entered the game 1254 int score; // frags, etc 1255 int deaths; // deaths, etc 1256 vec3_t cmd_angles; // angles sent over in the last command 1257 1258 //bot score info 1259 int botnum; 1260 bot_t bots[100]; 1261 1262 //weapon accuracy info 1263 int weapon_shots[9]; 1264 int weapon_hits[9]; 1265 1266 //reward points 1267 int reward_pts; 1268 qboolean powered; 1269 1270 //voting 1271 qboolean voted; 1272 1273 int spectator; // client is a spectator 1274 } client_respawn_t; 1275 1276 // this structure is cleared on each PutClientInServer(), 1277 // except for 'client->pers' 1278 struct gclient_s 1279 { 1280 // known to server 1281 player_state_t ps; // communicated by server to clients 1282 int ping; 1283 1284 // private to game 1285 client_persistant_t pers; 1286 client_respawn_t resp; 1287 pmove_state_t old_pmove; // for detecting out-of-pmove changes 1288 1289 qboolean showscores; // set layout stat 1290 qboolean showinventory; // set layout stat 1291 qboolean showhelp; 1292 qboolean showhelpicon; 1293 1294 /** @brief "Message of the day" frames left 1295 * 1296 * Prevent centerprinting until the MOTD has been displayed 1297 * for some time. This makes sure players can actually read 1298 * the MOTD. 1299 */ 1300 int motd_frames; 1301 1302 //stuff for bots 1303 qboolean is_bot; 1304 /* --------------------------*/ 1305 /* 1306 * this is identical to declarations in edict_t 1307 * it appears this data in gclient_s is not used. 1308 */ 1309 int skill; 1310 char faveweap[64]; 1311 float weapacc[10]; 1312 float accuracy; 1313 float awareness; 1314 char chatmsg1[128]; 1315 char chatmsg2[128]; 1316 char chatmsg3[128]; 1317 char chatmsg4[128]; 1318 char chatmsg5[128]; 1319 char chatmsg6[128]; 1320 char chatmsg7[128]; 1321 char chatmsg8[128]; 1322 /*----------------------------*/ 1323 1324 int ammo_index; 1325 1326 int buttons; 1327 int oldbuttons; 1328 int latched_buttons; 1329 1330 qboolean weapon_thunk; 1331 1332 gitem_t *newweapon; 1333 1334 // sum up damage over an entire frame, so 1335 // shotgun blasts give a single big kick 1336 int damage_armor; // damage absorbed by armor 1337 int damage_blood; // damage taken out of health 1338 int damage_knockback; // impact damage 1339 vec3_t damage_from; // origin for vector calculation 1340 1341 float killer_yaw; // when dead, look at killer 1342 1343 weaponstate_t weaponstate; 1344 vec3_t kick_angles; // weapon kicks 1345 vec3_t kick_origin; 1346 float v_dmg_roll, v_dmg_pitch, v_dmg_time; // damage kicks 1347 float fall_time, fall_value; // for view drop on fall 1348 float damage_alpha; 1349 float bonus_alpha; 1350 vec3_t damage_blend; 1351 vec3_t v_angle; // aiming direction 1352 float bobtime; // so off-ground doesn't change it 1353 vec3_t oldviewangles; 1354 vec3_t oldvelocity; 1355 1356 float next_drown_time; 1357 int old_waterlevel; 1358 int breather_sound; 1359 1360 int machinegun_shots; // for weapon raising 1361 1362 // animation vars 1363 int anim_end; 1364 int anim_priority; 1365 qboolean anim_duck; 1366 qboolean anim_run; 1367 1368 // powerup timers 1369 float quad_framenum; 1370 float invincible_framenum; 1371 float haste_framenum; 1372 float sproing_framenum; 1373 float regen_framenum; 1374 float invis_framenum; 1375 1376 float losehealth_framenum; 1377 1378 qboolean grenade_blew_up; 1379 float grenade_time; 1380 int silencer_shots; 1381 int weapon_sound; 1382 1383 float pickup_msg_time; 1384 1385 float flood_locktill; // locked from talking 1386 float flood_when[10]; // when messages were said 1387 int flood_whenhead; // head pointer for when said 1388 1389 float respawn_time; // can respawn when time > this 1390 1391 edict_t *chase_target; // player we are chasing 1392 qboolean update_chase; // need to update chase info? 1393 1394 //team 1395 int dmteam; 1396 1397 //chasecam 1398 int chasetoggle; 1399 edict_t *chasecam; 1400 edict_t *oldplayer; 1401 1402 //vehicles 1403 qboolean in_vehicle; 1404 float Jet_framenum; /*burn out time when jet is activated*/ 1405 float Jet_remaining; /*remaining fuel time*/ 1406 float Jet_next_think; 1407 1408 //deathball 1409 qboolean in_deathball; 1410 1411 //grapple 1412 void *ctf_grapple; // entity of grapple 1413 int ctf_grapplestate; // true if pulling 1414 float ctf_grapplereleasetime; // time of grapple release 1415 1416 //kill streaks 1417 int kill_streak; //obviously this *will* get cleared at each respawn in most cases 1418 1419 //joust attempts - for limiting how many times you can joust at a time 1420 int joustattempts; 1421 1422 //homing rocket limits 1423 int homing_shots; 1424 1425 //movetime - used for special moves 1426 float lastmovetime; 1427 int lastsidemove; 1428 int lastforwardmove; 1429 int dodge; 1430 int moved; 1431 int keydown; 1432 float lastdodge; 1433 1434 float spawnprotecttime; 1435 qboolean spawnprotected; 1436 1437 //map voting 1438 int mapvote; 1439 1440 //taunt message 1441 float lasttaunttime; 1442 1443 //deathray immunity 1444 qboolean rayImmunity; 1445 float rayTime; 1446 1447 //unlagged - backward reconciliation #1 1448 // the serverTime the button was pressed 1449 // (stored before pmove_fixed changes serverTime) 1450 int attackTime; 1451 // the head of the history queue 1452 int historyHead; 1453 // the history queue 1454 clientHistory_t history[NUM_CLIENT_HISTORY]; 1455 // the client's saved position 1456 clientHistory_t saved; // used to restore after time shift 1457 // an approximation of the actual server time we received this 1458 // command (not in 50ms increments) 1459 int frameOffset; 1460 //unlagged - backward reconciliation #1 1461 1462 //unlagged - smooth clients #1 1463 // the last frame number we got an update from this client 1464 int lastUpdateFrame; 1465 //unlagged - smooth clients #1 1466 1467 }; 1468 1469 1470 struct edict_s 1471 { 1472 entity_state_t s; 1473 struct gclient_s *client; // NULL if not a player 1474 // the server expects the first part 1475 // of gclient_s to be a player_state_t 1476 // but the rest of it is opaque 1477 1478 qboolean inuse; 1479 int linkcount; 1480 1481 // FIXME: move these fields to a server private sv_entity_t 1482 link_t area; // linked to a division node or leaf 1483 1484 int num_clusters; // if -1, use headnode instead 1485 int clusternums[MAX_ENT_CLUSTERS]; 1486 int headnode; // unused if num_clusters != -1 1487 int areanum, areanum2; 1488 1489 //================================ 1490 1491 int svflags; 1492 vec3_t mins, maxs; 1493 vec3_t absmin, absmax, size; 1494 solid_t solid; 1495 int clipmask; 1496 edict_t *owner; 1497 1498 int redirect_number; //for ghost mode 1499 1500 // must be accessible to server code for collision detection 1501 int dmteam; 1502 int teamset; 1503 #define RED_TEAM 0 1504 #define BLUE_TEAM 1 1505 #define NO_TEAM 2 1506 1507 1508 // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER 1509 // EXPECTS THE FIELDS IN THAT ORDER! 1510 1511 //================================ 1512 int movetype; 1513 int flags; 1514 1515 char *model; 1516 float freetime; // sv.time when the object was freed 1517 1518 // 1519 // only used locally in game, not by server 1520 // 1521 char *message; 1522 char *classname; 1523 int spawnflags; 1524 1525 float timestamp; 1526 1527 float angle; // set in qe3, -1 = up, -2 = down 1528 char *target; 1529 char *targetname; 1530 char *killtarget; 1531 char *team; 1532 char *pathtarget; 1533 char *deathtarget; 1534 char *combattarget; 1535 edict_t *target_ent; 1536 1537 float speed, accel, decel; 1538 vec3_t movedir; 1539 vec3_t pos1, pos2; 1540 1541 vec3_t velocity; 1542 vec3_t avelocity; 1543 int mass; 1544 float air_finished; 1545 float gravity; // per entity gravity multiplier (1.0 is normal) 1546 // use for lowgrav artifact, flares 1547 1548 edict_t *goalentity; 1549 edict_t *movetarget; 1550 float yaw_speed; 1551 float ideal_yaw; 1552 1553 float nextthink; 1554 void (*prethink) (edict_t *ent); 1555 void (*think)(edict_t *self); 1556 void (*blocked)(edict_t *self, edict_t *other); //move to moveinfo? 1557 void (*touch)(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf); 1558 void (*use)(edict_t *self, edict_t *other, edict_t *activator); 1559 void (*pain)(edict_t *self, edict_t *other, float kick, int damage); 1560 void (*die)(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point); 1561 1562 float touch_debounce_time; // are all these legit? do we need more/less of them? 1563 float pain_debounce_time; 1564 float damage_debounce_time; 1565 float fly_sound_debounce_time; //move to clientinfo 1566 float last_move_time; 1567 1568 int health; 1569 int max_health; 1570 int gib_health; 1571 int deadflag; 1572 qboolean show_hostile; 1573 1574 char *map; // target_changelevel 1575 1576 int viewheight; // height above origin where eyesight is determined 1577 int takedamage; 1578 int dmg; 1579 int radius_dmg; 1580 float dmg_radius; 1581 int sounds; //make this a spawntemp var? 1582 int count; 1583 1584 edict_t *chain; 1585 edict_t *enemy; 1586 edict_t *oldenemy; 1587 edict_t *activator; 1588 edict_t *groundentity; 1589 int groundentity_linkcount; 1590 edict_t *teamchain; 1591 edict_t *teammaster; 1592 1593 edict_t *mynoise; // can go in client only 1594 edict_t *mynoise2; 1595 1596 int noise_index; 1597 int noise_index2; 1598 float volume; 1599 float attenuation; 1600 1601 // timing variables 1602 float wait; 1603 float delay; // before firing targets 1604 float random; 1605 1606 float teleport_time; 1607 1608 int watertype; 1609 int waterlevel; 1610 1611 vec3_t move_origin; 1612 vec3_t move_angles; 1613 1614 // move this to clientinfo? 1615 int light_level; 1616 1617 int style; // also used as areaportal number 1618 1619 gitem_t *item; // for bonus items 1620 1621 // common data blocks 1622 moveinfo_t moveinfo; 1623 monsterinfo_t monsterinfo; 1624 1625 edict_t *flashlight; 1626 1627 edict_t *replaced_weapon; 1628 1629 // ACEBOT_ADD 1630 qboolean is_bot; 1631 qboolean is_jumping; 1632 1633 // For movement 1634 vec3_t move_vector; 1635 float next_move_time; 1636 float wander_timeout; 1637 float suicide_timeout; 1638 1639 // For node code 1640 int current_node; // current node 1641 int goal_node; // current goal node 1642 int next_node; // the node that will take us one step closer to our goal 1643 int node_timeout; 1644 int last_node; 1645 int tries; 1646 int state; 1647 1648 //for config 1649 int skill; 1650 char faveweap[64]; 1651 float weapacc[10]; 1652 float accuracy; 1653 float awareness; 1654 char chatmsg1[128]; 1655 char chatmsg2[128]; 1656 char chatmsg3[128]; 1657 char chatmsg4[128]; 1658 char chatmsg5[128]; 1659 char chatmsg6[128]; 1660 char chatmsg7[128]; 1661 char chatmsg8[128]; 1662 1663 // ACEBOT_END 1664 //chasecam 1665 int chasedist1; 1666 int chasedist2; 1667 1668 // for deathcam to remember position of player's death 1669 vec3_t death_origin; 1670 1671 //vehicles 1672 qboolean in_vehicle; 1673 1674 //deathball 1675 qboolean in_deathball; 1676 1677 //Flamethrower and fire vars 1678 float FlameDelay; 1679 int Flames; 1680 int FlameDamage; 1681 edict_t *orb; 1682 1683 //Prox mines and grenades 1684 int nade_timer; 1685 1686 //bombs 1687 int armed; 1688 1689 //alt-fires 1690 qboolean altfire; 1691 1692 //power nodes 1693 qboolean powered; 1694 1695 //class(human = 0; alien = 1; robot = 2;) 1696 int ctype; 1697 1698 //tactical mode 1699 qboolean has_bomb; 1700 qboolean has_detonator; 1701 qboolean has_vaporizor; 1702 qboolean has_minderaser; 1703 int armor_type; 1704 char charModel[128]; 1705 1706 //model specific gibs 1707 int usegibs; 1708 char head[64]; 1709 char leg[64]; 1710 char arm[64]; 1711 char body[64]; 1712 1713 // Anti-camp velocity accumulation 1714 1715 /** @brief Velocities history 1716 * 1717 * At each server frame, a client's velocity will be stored inside 1718 * this array. While the array may contain up to 100 vectors, the 1719 * ac_frames CVar will determine how many of these vectors will be 1720 * used. 1721 */ 1722 vec3_t old_velocities[ 100 ]; 1723 1724 /** @brief Velocity accumulator 1725 * 1726 * This vector contains the sum of velocities for the past frames. 1727 * The amount of frames that are indeed accumulated depends on the 1728 * value of the ac_frames CVar. 1729 */ 1730 vec3_t velocity_accum; 1731 1732 /** @brief Velocities history index 1733 * 1734 * The last updated vector in the old_velocities array. 1735 */ 1736 int old_velocities_current; 1737 1738 /** @brief Stored velocity vectors 1739 * 1740 * The actual amount of vectors currently stored in the old_velocities 1741 * array. 1742 */ 1743 int old_velocities_count; 1744 1745 }; 1746 1747 struct gmapvote_s 1748 { 1749 char mapname[32]; //ugg, end the pointer madness 1750 int tally; 1751 } votedmap[4]; 1752 1753 extern char *winningmap; 1754 1755 extern void CheckDeathcam_Viewent(edict_t *ent); 1756 extern void DeathcamRemove (edict_t *ent, char *opt); 1757 extern void DeathcamStart (edict_t *ent); 1758 extern void DeathcamTrack (edict_t *ent); 1759 1760 //IP information 1761 typedef struct 1762 { 1763 unsigned mask; 1764 unsigned compare; 1765 } ipfilter_t; 1766 1767 #define MAX_IPFILTERS 1024 1768 1769 ipfilter_t ipfilters[MAX_IPFILTERS]; 1770 int numipfilters; 1771 extern qboolean StringToFilter (char *s, ipfilter_t *f); 1772 1773 //unlagged 1774 extern cvar_t *g_antilag; 1775 extern cvar_t *g_antilagdebug; 1776 extern cvar_t *g_antilagprojectiles; 1777 1778 // ACEBOT_ADD 1779 #include "acesrc/acebot.h" 1780 // ACEBOT_END 1781 1782