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 "PsychoMod v3.1" 13 14 // protocol bytes that can be directly added to messages 15 #define svc_muzzleflash 1 16 #define svc_muzzleflash2 2 17 #define svc_temp_entity 3 18 #define svc_layout 4 19 #define svc_inventory 5 20 #define svc_stufftext 11 21 22 //================================================================== 23 24 // view pitching times 25 #define DAMAGE_TIME 0.5 26 #define FALL_TIME 0.3 27 #define B_TIME_MIN -27 28 29 //Time in seconds for something to fade + rand()3 seconds 30 #define FADETIME 15 31 32 33 // edict->spawnflags 34 // these are set with checkboxes on each entity in the map editor 35 #define SPAWNFLAG_NOT_EASY 0x00000100 36 #define SPAWNFLAG_NOT_MEDIUM 0x00000200 37 #define SPAWNFLAG_NOT_HARD 0x00000400 38 #define SPAWNFLAG_NOT_DEATHMATCH 0x00000800 39 #define SPAWNFLAG_NOT_COOP 0x00001000 40 41 // edict->flags 42 #define FL_FLY 0x00000001 43 #define FL_SWIM 0x00000002 // implied immunity to drowining 44 #define FL_IMMUNE_LASER 0x00000004 45 #define FL_INWATER 0x00000008 46 #define FL_GODMODE 0x00000010 47 #define FL_NOTARGET 0x00000020 48 #define FL_IMMUNE_SLIME 0x00000040 49 #define FL_IMMUNE_LAVA 0x00000080 50 #define FL_PARTIALGROUND 0x00000100 // not all corners are valid 51 #define FL_WATERJUMP 0x00000200 // player jumping out of water 52 #define FL_TEAMSLAVE 0x00000400 // not the first on the team 53 #define FL_NO_KNOCKBACK 0x00000800 54 #define FL_POWER_ARMOR 0x00001000 // power armor (if any) is active 55 #define FL_RESPAWN 0x80000000 // used for item respawning 56 57 58 #define FRAMETIME 0.1 59 60 // memory tags to allow dynamic memory to be cleaned up 61 #define TAG_GAME 765 // clear when unloading the dll 62 #define TAG_LEVEL 766 // clear when loading a new level 63 64 65 #define MELEE_DISTANCE 80 66 67 #define BODY_QUEUE_SIZE 8 68 69 typedef enum 70 { 71 DAMAGE_NO, 72 DAMAGE_YES, // will take damage if hit 73 DAMAGE_AIM // auto targeting recognizes this 74 } damage_t; 75 76 typedef enum 77 { 78 WEAPON_READY, 79 WEAPON_ACTIVATING, 80 WEAPON_DROPPING, 81 WEAPON_FIRING 82 } weaponstate_t; 83 84 typedef enum 85 { 86 AMMO_BULLETS, 87 AMMO_SHELLS, 88 AMMO_ROCKETS, 89 AMMO_GRENADES, 90 AMMO_CELLS, 91 AMMO_SLUGS 92 } ammo_t; 93 94 95 //deadflag 96 #define DEAD_NO 0 97 #define DEAD_DYING 1 98 #define DEAD_DEAD 2 99 #define DEAD_RESPAWNABLE 3 100 101 //range 102 #define RANGE_MELEE 0 103 #define RANGE_NEAR 1 104 #define RANGE_MID 2 105 #define RANGE_FAR 3 106 107 //gib types 108 #define GIB_ORGANIC 0 109 #define GIB_METALLIC 1 110 111 //monster ai flags 112 #define AI_STAND_GROUND 0x00000001 113 #define AI_TEMP_STAND_GROUND 0x00000002 114 #define AI_SOUND_TARGET 0x00000004 115 #define AI_LOST_SIGHT 0x00000008 116 #define AI_PURSUIT_LAST_SEEN 0x00000010 117 #define AI_PURSUE_NEXT 0x00000020 118 #define AI_PURSUE_TEMP 0x00000040 119 #define AI_HOLD_FRAME 0x00000080 120 #define AI_GOOD_GUY 0x00000100 121 #define AI_BRUTAL 0x00000200 122 #define AI_NOSTEP 0x00000400 123 #define AI_DUCKED 0x00000800 124 #define AI_COMBAT_POINT 0x00001000 125 #define AI_MEDIC 0x00002000 126 #define AI_RESURRECTING 0x00004000 127 128 //weapon spawning 129 #define NO_BLASTER 0x00000001 130 #define NO_SHOTGUN 0x00000002 131 #define NO_SSHOTGUN 0x00000004 132 #define NO_MACHINEGUN 0x00000008 133 #define NO_CHAINGUN 0x00000010 134 #define NO_GRENADE_LAUNCHER 0x00000020 135 #define NO_ROCKET_LAUNCHER 0x00000040 136 #define NO_HYPERBLASTER 0x00000080 137 #define NO_RAILGUN 0x00000100 138 #define NO_TAZER 0x00000200 139 #define NO_ROCKETBFG 0x00000400 140 #define NO_BFGLASER 0x00000800 141 #define NO_GRENADES 0x00001000 142 143 //monster attack state 144 #define AS_STRAIGHT 1 145 #define AS_SLIDING 2 146 #define AS_MELEE 3 147 #define AS_MISSILE 4 148 149 // armor types 150 #define ARMOR_NONE 0 151 #define ARMOR_JACKET 1 152 #define ARMOR_COMBAT 2 153 #define ARMOR_BODY 3 154 #define ARMOR_SHARD 4 155 156 // power armor types 157 #define POWER_ARMOR_NONE 0 158 #define POWER_ARMOR_SCREEN 1 159 #define POWER_ARMOR_SHIELD 2 160 161 // handedness values 162 #define RIGHT_HANDED 0 163 #define LEFT_HANDED 1 164 #define CENTER_HANDED 2 165 166 167 // game.serverflags values 168 #define SFL_CROSS_TRIGGER_1 0x00000001 169 #define SFL_CROSS_TRIGGER_2 0x00000002 170 #define SFL_CROSS_TRIGGER_3 0x00000004 171 #define SFL_CROSS_TRIGGER_4 0x00000008 172 #define SFL_CROSS_TRIGGER_5 0x00000010 173 #define SFL_CROSS_TRIGGER_6 0x00000020 174 #define SFL_CROSS_TRIGGER_7 0x00000040 175 #define SFL_CROSS_TRIGGER_8 0x00000080 176 #define SFL_CROSS_TRIGGER_MASK 0x000000ff 177 178 179 // noise types for PlayerNoise 180 #define PNOISE_SELF 0 181 #define PNOISE_WEAPON 1 182 #define PNOISE_IMPACT 2 183 184 // edict->movetype values 185 typedef enum 186 { 187 MOVETYPE_NONE, // never moves 188 MOVETYPE_NOCLIP, // origin and angles change with no interaction 189 MOVETYPE_PUSH, // no clip to world, push on box contact 190 MOVETYPE_STOP, // no clip to world, stops on box contact 191 192 MOVETYPE_WALK, // gravity 193 MOVETYPE_STEP, // gravity, special edge handling 194 MOVETYPE_FLY, 195 MOVETYPE_TOSS, // gravity 196 MOVETYPE_FLYMISSILE, // extra size to monsters 197 MOVETYPE_BOUNCE, 198 199 MOVETYPE_MOVEWITH // decals moving with BSP nicely 200 } movetype_t; 201 202 203 204 typedef struct 205 { 206 int base_count; 207 int max_count; 208 float normal_protection; 209 float energy_protection; 210 int armor; 211 } gitem_armor_t; 212 213 214 // gitem_t->flags 215 #define IT_WEAPON 1 // use makes active weapon 216 #define IT_AMMO 2 217 #define IT_ARMOR 4 218 #define IT_STAY_COOP 8 219 #define IT_KEY 16 220 #define IT_POWERUP 32 221 222 // gitem_t->weapmodel for weapons indicates model index 223 #define WEAP_BLASTER 1 224 #define WEAP_SHOTGUN 2 225 #define WEAP_SUPERSHOTGUN 3 226 #define WEAP_MACHINEGUN 4 227 #define WEAP_CHAINGUN 5 228 #define WEAP_GRENADELAUNCHER 6 229 #define WEAP_ROCKETLAUNCHER 7 230 #define WEAP_HYPERBLASTER 8 231 #define WEAP_RAILGUN 9 232 #define WEAP_BFG 10 233 #define WEAP_GRENADES 11 234 235 typedef struct gitem_s 236 { 237 char *classname; // spawning name 238 qboolean (*pickup)(struct edict_s *ent, struct edict_s *other); 239 void (*use)(struct edict_s *ent, struct gitem_s *item); 240 void (*drop)(struct edict_s *ent, struct gitem_s *item); 241 void (*weaponthink)(struct edict_s *ent); 242 char *pickup_sound; 243 char *world_model; 244 int world_model_flags; 245 char *view_model; 246 247 // client side info 248 char *icon; 249 char *pickup_name; // for printing on pickup 250 int count_width; // number of digits to display by icon 251 252 int quantity; // for ammo how much, for weapons how much is used per shot 253 char *ammo; // for weapons 254 int flags; // IT_* flags 255 256 int weapmodel; // weapon model index (for weapons) 257 258 void *info; 259 int tag; 260 261 char *precaches; // string of all models, sounds, and images this item will use 262 } gitem_t; 263 264 265 266 // 267 // this structure is left intact through an entire game 268 // it should be initialized at dll load time, and read/written to 269 // the server.ssv file for savegames 270 // 271 typedef struct 272 { 273 char helpmessage1[512]; 274 char helpmessage2[512]; 275 int helpchanged; // flash F1 icon if non 0, play sound 276 // and increment only if 1, 2, or 3 277 278 gclient_t *clients; // [maxclients] 279 280 // can't store spawnpoint in level, because 281 // it would get overwritten by the savegame restore 282 char spawnpoint[512]; // needed for coop respawns 283 284 // store latched cvars here that we want to get at often 285 int maxclients; 286 int maxentities; 287 288 // cross level triggers 289 int serverflags; 290 291 // items 292 int num_items; 293 294 qboolean autosaved; 295 } game_locals_t; 296 297 298 // 299 // this structure is cleared as each map is entered 300 // it is read/written to the level.sav file for savegames 301 // 302 typedef struct 303 { 304 int framenum; 305 float time; 306 307 char level_name[MAX_QPATH]; // the descriptive name (Outer Base, etc) 308 char mapname[MAX_QPATH]; // the server name (base1, etc) 309 char nextmap[MAX_QPATH]; // go here when fraglimit is hit 310 311 // intermission state 312 float intermissiontime; // time the intermission was started 313 char *changemap; 314 int exitintermission; 315 vec3_t intermission_origin; 316 vec3_t intermission_angle; 317 318 edict_t *sight_client; // changed once each frame for coop games 319 320 edict_t *sight_entity; 321 int sight_entity_framenum; 322 edict_t *sound_entity; 323 int sound_entity_framenum; 324 edict_t *sound2_entity; 325 int sound2_entity_framenum; 326 327 int pic_health; 328 329 int total_secrets; 330 int found_secrets; 331 332 int total_goals; 333 int found_goals; 334 335 int total_monsters; 336 int killed_monsters; 337 338 edict_t *current_entity; // entity running from G_RunFrame 339 int body_que; // dead bodies 340 341 int power_cubes; // ugly necessity for coop 342 } level_locals_t; 343 344 345 // spawn_temp_t is only used to hold entity field values that 346 // can be set from the editor, but aren't actualy present 347 // in edict_t during gameplay 348 typedef struct 349 { 350 // world vars 351 char *sky; 352 float skyrotate; 353 vec3_t skyaxis; 354 char *nextmap; 355 356 int lip; 357 int distance; 358 int height; 359 char *noise; 360 float pausetime; 361 char *item; 362 char *gravity; 363 364 float minyaw; 365 float maxyaw; 366 float minpitch; 367 float maxpitch; 368 } spawn_temp_t; 369 370 371 typedef struct 372 { 373 // fixed data 374 vec3_t start_origin; 375 vec3_t start_angles; 376 vec3_t end_origin; 377 vec3_t end_angles; 378 379 int sound_start; 380 int sound_middle; 381 int sound_end; 382 383 float accel; 384 float speed; 385 float decel; 386 float distance; 387 388 float wait; 389 390 // state data 391 int state; 392 vec3_t dir; 393 float current_speed; 394 float move_speed; 395 float next_speed; 396 float remaining_distance; 397 float decel_distance; 398 void (*endfunc)(edict_t *); 399 } moveinfo_t; 400 401 402 typedef struct 403 { 404 void (*aifunc)(edict_t *self, float dist); 405 float dist; 406 void (*thinkfunc)(edict_t *self); 407 } mframe_t; 408 409 typedef struct 410 { 411 int firstframe; 412 int lastframe; 413 mframe_t *frame; 414 void (*endfunc)(edict_t *self); 415 } mmove_t; 416 417 typedef struct 418 { 419 mmove_t *currentmove; 420 int aiflags; 421 int nextframe; 422 float scale; 423 424 void (*stand)(edict_t *self); 425 void (*idle)(edict_t *self); 426 void (*search)(edict_t *self); 427 void (*walk)(edict_t *self); 428 void (*run)(edict_t *self); 429 void (*dodge)(edict_t *self, edict_t *other, float eta); 430 void (*attack)(edict_t *self); 431 void (*melee)(edict_t *self); 432 void (*sight)(edict_t *self, edict_t *other); 433 qboolean (*checkattack)(edict_t *self); 434 qboolean (*enemycheck)(edict_t *self, edict_t *other); 435 436 437 float pausetime; 438 float attack_finished; 439 440 vec3_t saved_goal; 441 float search_time; 442 float trail_time; 443 vec3_t last_sighting; 444 int attack_state; 445 int lefty; 446 float idle_time; 447 int linkcount; 448 449 int power_armor_type; 450 int power_armor_power; 451 } monsterinfo_t; 452 453 454 455 extern game_locals_t game; 456 extern level_locals_t level; 457 extern game_import_t gi; 458 extern game_export_t globals; 459 extern spawn_temp_t st; 460 461 extern int sm_meat_index; 462 extern int snd_fry; 463 464 extern int jacket_armor_index; 465 extern int combat_armor_index; 466 extern int body_armor_index; 467 468 469 // means of death 470 #define MOD_UNKNOWN 0 471 #define MOD_BLASTER 1 472 #define MOD_SHOTGUN 2 473 #define MOD_SSHOTGUN 3 474 #define MOD_MACHINEGUN 4 475 #define MOD_CHAINGUN 5 476 #define MOD_GRENADE 6 477 #define MOD_G_SPLASH 7 478 #define MOD_ROCKET 8 479 #define MOD_R_SPLASH 9 480 #define MOD_HYPERBLASTER 10 481 #define MOD_RAILGUN 11 482 #define MOD_BFG_LASER 12 483 #define MOD_BFG_BLAST 13 484 #define MOD_BFG_EFFECT 14 485 #define MOD_HANDGRENADE 15 486 #define MOD_HG_SPLASH 16 487 #define MOD_WATER 17 488 #define MOD_SLIME 18 489 #define MOD_LAVA 19 490 #define MOD_CRUSH 20 491 #define MOD_TELEFRAG 21 492 #define MOD_FALLING 22 493 #define MOD_SUICIDE 23 494 #define MOD_HELD_GRENADE 24 495 #define MOD_EXPLOSIVE 25 496 #define MOD_BARREL 26 497 #define MOD_BOMB 27 498 #define MOD_EXIT 28 499 #define MOD_SPLASH 29 500 #define MOD_TARGET_LASER 30 501 #define MOD_TRIGGER_HURT 31 502 #define MOD_HIT 32 503 #define MOD_TARGET_BLASTER 33 504 #define MOD_GRAPPLE 34 505 #define MOD_C4 35 506 #define MOD_GREN_HIT 36 507 #define MOD_FIRE 37 508 #define MOD_KICK 38 509 #define MOD_ROCKET_BFG 39 510 #define MOD_R_BFG_SPLASH 40 511 #define MOD_MAGIC 41 512 #define MOD_BLASTER2 42 513 #define MOD_SHOTGUN2 43 514 #define MOD_SSHOTGUN2 44 515 #define MOD_MACHINEGUN2 45 516 #define MOD_CHAINGUN2 46 517 #define MOD_GRENADE2 47 518 #define MOD_G_SPLASH2 48 519 #define MOD_ROCKET2 49 520 #define MOD_HYPERBLASTER2 51 521 #define MOD_PUNCH 52 522 #define MOD_GASGREN 53 523 #define MOD_SMACK 54 524 #define MOD_FLAME 55 525 #define MOD_GAS_BOOM 56 526 #define MOD_TAZER 57 527 #define MOD_DISCHARGE 58 528 #define MOD_HEAD 0x4000000 529 #define MOD_FRIENDLY_FIRE 0x8000000 530 531 extern int meansOfDeath; 532 533 extern edict_t *g_edicts; 534 535 #define FOFS(x) (int)&(((edict_t *)0)->x) 536 #define STOFS(x) (int)&(((spawn_temp_t *)0)->x) 537 #define LLOFS(x) (int)&(((level_locals_t *)0)->x) 538 #define CLOFS(x) (int)&(((gclient_t *)0)->x) 539 540 #define random() ((rand () & 0x7fff) / ((float)0x7fff)) 541 #define crandom() (2.0 * (random() - 0.5)) 542 543 extern cvar_t *maxentities; 544 extern cvar_t *deathmatch; 545 extern cvar_t *coop; 546 extern cvar_t *dmflags; 547 extern cvar_t *skill; 548 extern cvar_t *fraglimit; 549 extern cvar_t *timelimit; 550 extern cvar_t *password; 551 extern cvar_t *spectator_password; 552 extern cvar_t *needpass; 553 extern cvar_t *g_select_empty; 554 extern cvar_t *dedicated; 555 556 extern cvar_t *filterban; 557 558 extern cvar_t *sv_gravity; 559 extern cvar_t *sv_maxvelocity; 560 561 extern cvar_t *gun_x, *gun_y, *gun_z; 562 extern cvar_t *sv_rollspeed; 563 extern cvar_t *sv_rollangle; 564 565 extern cvar_t *run_pitch; 566 extern cvar_t *run_roll; 567 extern cvar_t *bob_up; 568 extern cvar_t *bob_pitch; 569 extern cvar_t *bob_roll; 570 571 extern cvar_t *sv_cheats; 572 extern cvar_t *maxclients; 573 extern cvar_t *maxspectators; 574 575 extern cvar_t *flood_msgs; 576 extern cvar_t *flood_persecond; 577 extern cvar_t *flood_waitdelay; 578 579 extern cvar_t *sv_maplist; 580 581 extern cvar_t *motd; 582 extern cvar_t *sv_teams; 583 extern cvar_t *sv_teams_locked; 584 extern cvar_t *sv_fall; 585 extern cvar_t *sv_laser_type; 586 extern cvar_t *sv_tracers; 587 extern cvar_t *sv_bulletmarks; //limit 588 extern cvar_t *sv_waterlevel; 589 extern cvar_t *sv_stunts; 590 extern cvar_t *sv_bloodyview; 591 extern cvar_t *sv_matrix; 592 extern cvar_t *sv_banned_weapons; 593 extern cvar_t *sv_grapple; 594 extern cvar_t *sv_chatdistance; 595 extern cvar_t *sv_stunt_door; 596 extern cvar_t *sv_realbullets; 597 extern cvar_t *sv_spawner; 598 extern cvar_t *sv_serversideonly; 599 extern cvar_t *sv_sprite_explosions; 600 extern cvar_t *sv_damageslow; 601 extern cvar_t *sv_surfacereflection; 602 extern cvar_t *sv_itemrotate; 603 extern cvar_t *sv_mzlmodel; 604 extern cvar_t *sv_lowlag; 605 606 extern cvar_t *sv_monsterspawntime; 607 608 extern int bulletmarks; //actual in-game 609 extern int tracers; 610 extern int headShot; 611 612 edict_t *bulletptr[2048]; 613 edict_t *tracerptr[2048]; 614 615 char *base_weapon; 616 617 #define world (&g_edicts[0]) 618 619 // item spawnflags 620 #define ITEM_TRIGGER_SPAWN 0x00000001 621 #define ITEM_NO_TOUCH 0x00000002 622 // 6 bits reserved for editor flags 623 // 8 bits used as power cube id bits for coop games 624 #define DROPPED_ITEM 0x00010000 625 #define DROPPED_PLAYER_ITEM 0x00020000 626 #define ITEM_TARGETS_USED 0x00040000 627 628 // 629 // fields are needed for spawning from the entity string 630 // and saving / loading games 631 // 632 #define FFL_SPAWNTEMP 1 633 #define FFL_NOSPAWN 2 634 635 typedef enum { 636 F_INT, 637 F_FLOAT, 638 F_LSTRING, // string on disk, pointer in memory, TAG_LEVEL 639 F_GSTRING, // string on disk, pointer in memory, TAG_GAME 640 F_VECTOR, 641 F_ANGLEHACK, 642 F_EDICT, // index on disk, pointer in memory 643 F_ITEM, // index on disk, pointer in memory 644 F_CLIENT, // index on disk, pointer in memory 645 F_FUNCTION, 646 F_MMOVE, 647 F_IGNORE 648 } fieldtype_t; 649 650 typedef struct 651 { 652 char *name; 653 int ofs; 654 fieldtype_t type; 655 int flags; 656 } field_t; 657 658 659 extern field_t fields[]; 660 extern gitem_t itemlist[]; 661 662 663 // 664 // g_cmds.c 665 // 666 void Cmd_Help_f (edict_t *ent); 667 void Cmd_Score_f (edict_t *ent); 668 669 char *make_green (char *s); 670 char *make_white (char *s); 671 672 // 673 // g_items.c 674 // 675 void PrecacheItem (gitem_t *it); 676 void InitItems (void); 677 void SetItemNames (void); 678 gitem_t *FindItem (char *pickup_name); 679 gitem_t *FindItemByClassname (char *classname); 680 #define ITEM_INDEX(x) ((x)-itemlist) 681 edict_t *Drop_Item (edict_t *ent, gitem_t *item); 682 void SetRespawn (edict_t *ent, float delay); 683 void ChangeWeapon (edict_t *ent); 684 void SpawnItem (edict_t *ent, gitem_t *item); 685 void Think_Weapon (edict_t *ent); 686 int ArmorIndex (edict_t *ent); 687 int PowerArmorType (edict_t *ent); 688 gitem_t *GetItemByIndex (int index); 689 qboolean Add_Ammo (edict_t *ent, gitem_t *item, int count); 690 void Touch_Item (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf); 691 692 // 693 // g_utils.c 694 // 695 696 int daycycletime; 697 int lightlevel; 698 int oldlightlevel; 699 extern cvar_t *day; 700 int GameSlowMo; 701 int GameSlowMoValue; 702 703 void stuffcmd(edict_t *ent, char *s); 704 705 qboolean KillBox (edict_t *ent); 706 void G_ProjectSource (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result); 707 edict_t *G_Find (edict_t *from, int fieldofs, char *match); 708 edict_t *findradius (edict_t *from, vec3_t org, float rad); 709 edict_t *G_PickTarget (char *targetname); 710 void G_UseTargets (edict_t *ent, edict_t *activator); 711 void G_SetMovedir (vec3_t angles, vec3_t movedir); 712 713 void G_InitEdict (edict_t *e); 714 edict_t *G_Spawn (void); 715 void G_FreeEdict (edict_t *e); 716 717 void G_TouchTriggers (edict_t *ent); 718 void G_TouchSolids (edict_t *ent); 719 720 char *G_CopyString (char *in); 721 722 float *tv (float x, float y, float z); 723 char *vtos (vec3_t v); 724 725 float vectoyaw (vec3_t vec); 726 void vectoangles (vec3_t vec, vec3_t angles); 727 728 // 729 // g_combat.c 730 // 731 qboolean OnSameTeam (edict_t *ent1, edict_t *ent2); 732 qboolean CanDamage (edict_t *targ, edict_t *inflictor); 733 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); 734 void T_RadiusDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod); 735 void T_FlashRadius (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius); 736 void T_RadiusDamageGas (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod); 737 void T_RadiusDamageFire (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod); 738 void T_RadiusDamageDischarge (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod); 739 740 void spawnGas(vec3_t start); 741 void bigExplosion(vec3_t start, vec3_t dir, int skin); 742 743 // damage flags 744 #define DAMAGE_RADIUS 0x00000001 // damage was indirect 745 #define DAMAGE_NO_ARMOR 0x00000002 // armour does not protect from this damage 746 #define DAMAGE_ENERGY 0x00000004 // damage is from an energy based weapon 747 #define DAMAGE_NO_KNOCKBACK 0x00000008 // do not affect velocity, just view angles 748 #define DAMAGE_BULLET 0x00000010 // damage is from a bullet (used for ricochets) 749 #define DAMAGE_NO_PROTECTION 0x00000020 // armor, shields, invulnerability, and godmode have no effect 750 751 #define DEFAULT_BULLET_HSPREAD 300 752 #define DEFAULT_BULLET_VSPREAD 500 753 #define DEFAULT_SHOTGUN_HSPREAD 1000 754 #define DEFAULT_SHOTGUN_VSPREAD 300 755 #define DEFAULT_DEATHMATCH_SHOTGUN_COUNT 12 756 #define DEFAULT_SHOTGUN_COUNT 12 757 #define DEFAULT_SSHOTGUN_COUNT 20 758 759 // 760 // g_monster.c 761 // 762 void predictTargPos (edict_t *self, vec3_t source, vec3_t targPos, vec3_t targVel, float speed, qboolean feet); 763 void monster_fire_bullet (edict_t *self, vec3_t start, vec3_t dir, int damage, int kick, int hspread, int vspread, int flashtype); 764 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); 765 void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect); 766 //My addition 767 void monster_fire_flame (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype); 768 //My addition 769 void monster_fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int flashtype); 770 void monster_fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype); 771 void monster_fire_railgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int flashtype); 772 void monster_fire_bfg (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int kick, float damage_radius, int flashtype); 773 void MuzzleEffect (edict_t *ent, vec3_t start, vec3_t forward, vec3_t offset); 774 void M_droptofloor (edict_t *ent); 775 void monster_think (edict_t *self); 776 void walkmonster_start (edict_t *self); 777 void swimmonster_start (edict_t *self); 778 void flymonster_start (edict_t *self); 779 void AttackFinished (edict_t *self, float time); 780 void monster_death_use (edict_t *self); 781 void M_CatagorizePosition (edict_t *ent); 782 qboolean M_CheckAttack (edict_t *self); 783 void M_FlyCheck (edict_t *self); 784 void M_CheckGround (edict_t *ent); 785 786 // 787 // g_misc.c 788 // 789 void ThrowGibHead (edict_t *self, char *gibname, int damage, int type); 790 void ThrowHead (edict_t *self, char *gibname, int damage, int type); 791 void ThrowClientHead (edict_t *self, int damage); 792 void ThrowGib (edict_t *self, char *gibname, int damage, int type); 793 void BecomeExplosion1(edict_t *self); 794 795 // 796 // g_ai.c 797 // 798 void AI_SetSightClient (void); 799 800 void ai_stand (edict_t *self, float dist); 801 void ai_move (edict_t *self, float dist); 802 void ai_walk (edict_t *self, float dist); 803 void ai_turn (edict_t *self, float dist); 804 void ai_run (edict_t *self, float dist); 805 void ai_charge (edict_t *self, float dist); 806 int range (edict_t *self, edict_t *other); 807 808 void FoundTarget (edict_t *self); 809 qboolean infront (edict_t *self, edict_t *other); 810 qboolean visible (edict_t *self, edict_t *other); 811 qboolean FacingIdeal(edict_t *self); 812 813 // 814 // g_weapon.c 815 // 816 void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin); 817 qboolean fire_hit (edict_t *self, vec3_t aim, int damage, int kick); 818 void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod); 819 void fire_bullet_2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int mod); 820 void fire_bullet_3 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod); 821 void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod); 822 void fire_shotgun_2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod); 823 void fire_shotgun_3 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod); 824 void fire_blaster (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper); 825 void fire_blaster_hyper (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper); 826 void fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius); 827 void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held); 828 void fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage); 829 void fire_rocket_2 (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage); 830 void fire_rocket_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage); 831 void fire_rail (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick); 832 void fire_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius); 833 834 void weapon_fire_laser_bfg (edict_t *ent); 835 836 void fireMagic (edict_t *ent); 837 void fire_bullet_slow (edict_t *self, vec3_t start, vec3_t dir, int speed, int kick, int damage, int mod, int effect); 838 void fire_rail_2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick); 839 void fire_plasma (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int effect, qboolean hyper); 840 void fire_tracer (edict_t *self, vec3_t start, vec3_t dir, int speed); 841 void fire_smack (edict_t *ent, vec3_t start, vec3_t aimdir); 842 void fire_tazer (edict_t *self, vec3_t start, vec3_t dir, int speed); 843 void fire_c4 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held); 844 void weapon_c4_fire (edict_t *ent); 845 void target_earthquake_think (edict_t *self); 846 847 void BulletMarkSlow (edict_t *self, vec3_t dir, edict_t *other); 848 void BulletMark (edict_t *self, trace_t* tr, int mod); 849 void ExplodeMark (edict_t *self, vec3_t origin, float time); 850 851 void FadeDie (edict_t *ent); 852 void FadeDieSink (edict_t *ent); 853 854 void weapon_flashlight_fire (edict_t *ent); 855 void weapon_fire_laser (edict_t *ent); 856 void weapon_muzzleflash (edict_t *ent); 857 858 void weapon_kick_fire (edict_t *ent); 859 860 void weapon_fire_grapple (edict_t *ent); 861 862 void Linked_Flame (edict_t *flamed, edict_t *owner); 863 864 #define LITHIUM_GRAPPLE 1 865 #define ROPE_GRAPPLE 2 866 #define PSYCHOMOD_GRAPPLE 3 867 868 #define GRAPPLE_ROPE 0 869 #define GRAPPLE_LASER 1 870 #define GRAPPLE_CHAIN 2 871 #define GRAPPLE_SHIP1 100 872 #define GRAPPLE_SHIP2 101 873 874 #define BFG_LASER_BLUE 1 875 #define BFG_LASER_RED 2 876 #define BFG_LASER_GREEN 3 877 878 // 879 // g_ptrail.c 880 // 881 void PlayerTrail_Init (void); 882 void PlayerTrail_Add (vec3_t spot); 883 void PlayerTrail_New (vec3_t spot); 884 edict_t *PlayerTrail_PickFirst (edict_t *self); 885 edict_t *PlayerTrail_PickNext (edict_t *self); 886 edict_t *PlayerTrail_LastSpot (void); 887 888 // 889 // g_client.c 890 // 891 void respawn (edict_t *ent); 892 void BeginIntermission (edict_t *targ); 893 void PutClientInServer (edict_t *ent); 894 void InitClientPersistant (gclient_t *client); 895 void InitClientResp (gclient_t *client); 896 void InitBodyQue (void); 897 void ClientBeginServerFrame (edict_t *ent); 898 void PrintMOTDmsg (edict_t *ent); 899 void MakeSlowMo (edict_t *ent); 900 void CheckStunt(edict_t * ent); 901 void CheckDiveGlassBreak (edict_t * ent); 902 // 903 // g_player.c 904 // 905 void player_pain (edict_t *self, edict_t *other, float kick, int damage); 906 void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point); 907 908 // 909 // g_svcmds.c 910 // 911 void ServerCommand (void); 912 qboolean SV_FilterPacket (char *from); 913 914 // 915 // p_view.c 916 // 917 void ClientEndServerFrame (edict_t *ent); 918 919 // 920 // p_hud.c 921 // 922 void MoveClientToIntermission (edict_t *client); 923 void G_SetStats (edict_t *ent); 924 void G_SetSpectatorStats (edict_t *ent); 925 void G_CheckChaseStats (edict_t *ent); 926 void ValidateSelectedItem (edict_t *ent); 927 void DeathmatchScoreboardMessage (edict_t *client, edict_t *killer); 928 929 // 930 // g_pweapon.c 931 // 932 void PlayerNoise(edict_t *who, vec3_t where, int type); 933 934 // 935 // m_move.c 936 // 937 qboolean M_CheckBottom (edict_t *ent); 938 qboolean M_walkmove (edict_t *ent, float yaw, float dist); 939 void M_MoveToGoal (edict_t *ent, float dist); 940 void M_ChangeYaw (edict_t *ent); 941 942 // 943 // g_phys.c 944 // 945 void G_RunEntity (edict_t *ent); 946 947 // 948 // g_main.c 949 // 950 void SaveClientData (void); 951 void FetchClientEntData (edict_t *ent); 952 953 // 954 // g_chase.c 955 // 956 void UpdateChaseCam(edict_t *ent); 957 void ChaseNext(edict_t *ent); 958 void ChasePrev(edict_t *ent); 959 void GetChaseTarget(edict_t *ent); 960 961 //============================================================================ 962 963 // client_t->anim_priority 964 #define ANIM_BASIC 0 // stand / run 965 #define ANIM_WAVE 1 966 #define ANIM_JUMP 2 967 #define ANIM_PAIN 3 968 #define ANIM_ATTACK 4 969 #define ANIM_DEATH 5 970 #define ANIM_REVERSE 6 971 972 973 // client data that stays across multiple level loads 974 typedef struct 975 { 976 char userinfo[MAX_INFO_STRING]; 977 char netname[16]; 978 int hand; 979 980 qboolean connected; // a loadgame will leave valid entities that 981 // just don't have a connection yet 982 983 // values saved and restored from edicts when changing levels 984 int health; 985 int max_health; 986 int savedFlags; 987 988 int selected_item; 989 int inventory[MAX_ITEMS]; 990 gitem_t *weapon; 991 gitem_t *lastweapon; 992 993 int power_cubes; // used for tracking the cubes in coop games 994 int score; // for calculating total unit score in coop games 995 996 int game_helpchanged; 997 int helpchanged; 998 999 qboolean spectator; // client is a spectator 1000 1001 int grappleType; 1002 int bfg_laser_type; 1003 int Player_ID; 1004 int TeamName; 1005 int viewcam_on; 1006 1007 // ammo capacities 1008 int max_bullets; 1009 int max_shells; 1010 int max_rockets; 1011 int max_grenades; 1012 int max_cells; 1013 int max_slugs; 1014 1015 int headshots; 1016 1017 int chasetoggle; //Chasetoggle 1018 1019 } client_persistant_t; 1020 1021 // client data that stays across deathmatch respawns 1022 typedef struct 1023 { 1024 client_persistant_t coop_respawn; // what to set client->pers to on a respawn 1025 int enterframe; // level.framenum the client entered the game 1026 int score; // frags, etc 1027 1028 vec3_t cmd_angles; // angles sent over in the last command 1029 1030 qboolean spectator; // client is a spectator 1031 1032 int fps_counter; 1033 int bullettime; 1034 1035 int headshots; //amount of headshots made 1036 1037 } client_respawn_t; 1038 1039 // this structure is cleared on each PutClientInServer(), 1040 // except for 'client->pers' 1041 1042 struct gclient_s 1043 { 1044 // known to server 1045 player_state_t ps; // communicated by server to clients 1046 int ping; 1047 1048 // private to game 1049 client_persistant_t pers; 1050 client_respawn_t resp; 1051 pmove_state_t old_pmove; // for detecting out-of-pmove changes 1052 1053 qboolean showscores; // set layout stat 1054 qboolean showinventory; // set layout stat 1055 qboolean showhelp; 1056 qboolean showhelpicon; 1057 1058 int ammo_index; 1059 1060 int buttons; 1061 int oldbuttons; 1062 int latched_buttons; 1063 1064 qboolean weapon_thunk; 1065 1066 gitem_t *newweapon; 1067 1068 // sum up damage over an entire frame, so 1069 // shotgun blasts give a single big kick 1070 int damage_armor; // damage absorbed by armor 1071 int damage_parmor; // damage absorbed by power armor 1072 int damage_blood; // damage taken out of health 1073 int damage_knockback; // impact damage 1074 vec3_t damage_from; // origin for vector calculation 1075 1076 float killer_yaw; // when dead, look at killer 1077 1078 weaponstate_t weaponstate; 1079 vec3_t kick_angles; // weapon kicks 1080 vec3_t kick_origin; 1081 float v_dmg_roll, v_dmg_pitch, v_dmg_time; // damage kicks 1082 float fall_time, fall_value; // for view drop on fall 1083 float damage_alpha; 1084 float bonus_alpha; 1085 vec3_t damage_blend; 1086 vec3_t v_angle; // aiming direction 1087 float bobtime; // so off-ground doesn't change it 1088 vec3_t oldviewangles; 1089 vec3_t oldvelocity; 1090 vec3_t old_origin; 1091 1092 float next_drown_time; 1093 int old_waterlevel; 1094 int breather_sound; 1095 1096 int machinegun_shots; // for weapon raising 1097 1098 // animation vars 1099 int anim_end; 1100 int anim_priority; 1101 qboolean anim_duck; 1102 qboolean anim_run; 1103 1104 // powerup timers 1105 float quad_framenum; 1106 float invincible_framenum; 1107 float breather_framenum; 1108 float enviro_framenum; 1109 1110 int weaphold; //check to see what holding for laser sight... 1111 1112 int hitmode; 1113 int kicktime; 1114 1115 qboolean grenade_blew_up; 1116 float grenade_time; 1117 int silencer_shots; 1118 int weapon_sound; 1119 1120 float goggles; //Goggles 1121 float aquasuit; //UnderWaterSuit 1122 float laser_on; //New Laser Sight 1123 float flashlight_on; //New Flashlight 1124 1125 int IR_View; 1126 1127 int lastSpeed; 1128 int lastSpeedUp; 1129 1130 float health_dir; //Bloody View Maker... 1131 float health_view; //Bloody View Maker... 1132 1133 //WEAP MODES 1134 float blst_set; 1135 float shot_set; 1136 float mach_set; 1137 float chan_set; 1138 float gren_set; 1139 float grn_set; 1140 float grnl_set; 1141 float rock_set; 1142 float hypr_set; 1143 float rail_set; 1144 float bfg_set; 1145 //WEAP MODES 1146 1147 qboolean stunt; 1148 int stunts; 1149 int wallrunning; 1150 1151 vec3_t laser_ptr; // player we are chasing 1152 1153 float bfg_firing; 1154 float old_fov; 1155 int isOnTurret; 1156 int hud; // ADVANCED HUD ON/OFF 1157 1158 int viewcam_dist; 1159 1160 int flightRoll; 1161 1162 edict_t *laser_targeted; 1163 1164 int tazer; 1165 edict_t *tazer_on; 1166 1167 int MotdTime; 1168 int MOTDrot; 1169 int MOTDrotChange; 1170 char MOTDmsg[50]; 1171 1172 edict_t *lasersight_dot; 1173 edict_t *grapple_on; 1174 int grapple; 1175 int grappleType; 1176 int jets; 1177 int climbing; 1178 int kami; 1179 1180 int foot; 1181 int bootwater; 1182 int bootblood; 1183 1184 qboolean heldfire; 1185 qboolean jumping; 1186 1187 float pickup_msg_time; 1188 1189 // float flood_locktill; // locked from talking 1190 // float flood_when[10]; // when messages were said 1191 // int flood_whenhead; // head pointer for when said 1192 1193 float respawn_time; // can respawn when time > this 1194 float damage_div; 1195 1196 1197 int chasetoggle; 1198 edict_t *chasecam; 1199 edict_t *oldplayer; 1200 int use; 1201 int zoom; 1202 int delayedstart; 1203 1204 vec3_t cl_origin; 1205 1206 edict_t *chase_target; // player we are chasing 1207 qboolean update_chase; // need to update chase info? 1208 }; 1209 1210 struct edict_s 1211 { 1212 entity_state_t s; 1213 struct gclient_s *client; // NULL if not a player 1214 // the server expects the first part 1215 // of gclient_s to be a player_state_t 1216 // but the rest of it is opaque 1217 1218 qboolean inuse; 1219 int linkcount; 1220 1221 // FIXME: move these fields to a server private sv_entity_t 1222 link_t area; // linked to a division node or leaf 1223 1224 int num_clusters; // if -1, use headnode instead 1225 int clusternums[MAX_ENT_CLUSTERS]; 1226 int headnode; // unused if num_clusters != -1 1227 int areanum, areanum2; 1228 1229 //================================ 1230 1231 int svflags; 1232 vec3_t mins, maxs; 1233 vec3_t absmin, absmax, size; 1234 solid_t solid; 1235 int clipmask; 1236 edict_t *owner; 1237 1238 1239 // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER 1240 // EXPECTS THE FIELDS IN THAT ORDER! 1241 1242 //================================ 1243 1244 int movetype; 1245 int flags; 1246 1247 char *model; 1248 float freetime; // sv.time when the object was freed 1249 1250 // 1251 // only used locally in game, not by server 1252 // 1253 char *message; 1254 char *classname; 1255 int spawnflags; 1256 1257 float timestamp; 1258 1259 float angle; // set in qe3, -1 = up, -2 = down 1260 char *target; 1261 char *targetname; 1262 char *killtarget; 1263 char *team; 1264 char *pathtarget; 1265 char *deathtarget; 1266 char *combattarget; 1267 edict_t *target_ent; 1268 edict_t *linkedto; 1269 edict_t *MonsterFind; 1270 int linkedtoclient; 1271 1272 float speed, accel, decel; 1273 vec3_t movedir; 1274 vec3_t pos1, pos2; 1275 1276 vec3_t velocity; 1277 vec3_t avelocity; 1278 int mass; 1279 float air_finished; 1280 float gravity; // per entity gravity multiplier (1.0 is normal) 1281 // use for lowgrav artifact, flares 1282 vec3_t end_pt; 1283 float lt_on; 1284 int mod; 1285 int floater; //if "1" then entity floats in water :) 1286 float timer; //used to time out events. 1287 float phase; //used for fading body 1288 float healthtimer; //used for regen timing 1289 1290 edict_t *goalentity; 1291 edict_t *movetarget; 1292 float yaw_speed; 1293 float ideal_yaw; 1294 1295 float nextthink; 1296 void (*prethink) (edict_t *ent); 1297 void (*think)(edict_t *self); 1298 void (*thinklinked)(edict_t *self); 1299 void (*blocked)(edict_t *self, edict_t *other); //move to moveinfo? 1300 void (*touch)(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf); 1301 void (*use)(edict_t *self, edict_t *other, edict_t *activator); 1302 void (*pain)(edict_t *self, edict_t *other, float kick, int damage); 1303 void (*die)(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point); 1304 1305 float touch_debounce_time; // are all these legit? do we need more/less of them? 1306 float pain_debounce_time; 1307 float damage_debounce_time; 1308 float fly_sound_debounce_time; //move to clientinfo 1309 float last_move_time; 1310 1311 int health; 1312 int max_health; 1313 int gib_health; 1314 int deadflag; 1315 qboolean show_hostile; 1316 1317 float powerarmor_time; 1318 1319 char *map; // target_changelevel 1320 1321 int viewheight; // height above origin where eyesight is determined 1322 1323 vec3_t viewangles; // now it looks cool when u fall 1324 1325 int takedamage; 1326 1327 int flaming; //check for fire... 1328 edict_t *flamed; 1329 edict_t *linked_flame; 1330 1331 int grappleType; 1332 int bfg_laser_type; 1333 int grapple; 1334 int tazer; 1335 int Player_ID; 1336 int TeamName; 1337 1338 int configed; 1339 1340 int viewcam_on; 1341 1342 int dmg; 1343 int radius_dmg; 1344 float dmg_radius; 1345 int sounds; //make this a spawntemp var? 1346 int count; 1347 int reload; 1348 1349 edict_t *chain; 1350 edict_t *enemy; 1351 edict_t *oldenemy; 1352 edict_t *activator; 1353 edict_t *groundentity; 1354 int groundentity_linkcount; 1355 edict_t *teamchain; 1356 edict_t *teammaster; 1357 1358 edict_t *flashlight; //flashlight 1359 1360 short Move_forward, Move_side, Move_up, lightlevel; 1361 1362 edict_t *mynoise; // can go in client only 1363 edict_t *mynoise2; 1364 1365 int fallen; //now i can check for falling over of ents 1366 1367 int linked_ents_num; 1368 edict_t *linked_ents[50]; 1369 1370 edict_t *blockedChat[100]; 1371 edict_t *killer; 1372 edict_t *shadow; 1373 edict_t *reflection; 1374 1375 float flashbanged; //for blinding :P 1376 1377 int IsGrapple; 1378 int IsTazer; 1379 1380 int noise_index; 1381 int noise_index2; 1382 float volume; 1383 float attenuation; 1384 1385 // timing variables 1386 float wait; 1387 float delay; // before firing targets 1388 float random; 1389 1390 float teleport_time; 1391 1392 int watertype; 1393 int waterlevel; 1394 1395 vec3_t move_origin; 1396 vec3_t move_angles; 1397 1398 vec3_t link_offset; 1399 1400 // move this to clientinfo? 1401 int light_level; 1402 1403 char *PlayerDeadName; 1404 1405 int style; // also used as areaportal number 1406 1407 gitem_t *item; // for bonus items 1408 1409 float chasedist1; 1410 float chasedist2; 1411 1412 // common data blocks 1413 moveinfo_t moveinfo; 1414 monsterinfo_t monsterinfo; 1415 }; 1416 1417 vec3_t nextmonsterspawn; 1418 vec3_t nextmonsterspawnangles; 1419 1420 edict_t *SPClient; //for SP effects 1421 void sprite_explosion (vec3_t start, int type, cplane_t *plane); 1422 void SP_LensFlare (edict_t *flare); 1423 void SP_SunFlare (edict_t *flare); 1424 1425 void AddShadow(edict_t *ent); 1426 void AddReflection(edict_t *ent); 1427 1428 extern void CheckChasecam_Viewent (edict_t *ent); 1429 extern void Cmd_Chasecam_Toggle (edict_t *ent); 1430 extern void ChasecamRemove (edict_t *ent, int opt); 1431 extern void ChasecamStart (edict_t *ent); 1432 #define OPTION_OFF 0 1433 #define OPTION_BACKGROUND 1 1434