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