/* server/defs/custom.qc put custom server-only globals and fields here Copyright (C) 2021-2024 NZ:P Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to: Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307, USA */ #ifndef STANDARD #pragma target fte_5768 #endif // STANDARD #define true 1 #define false 0 #define FL_JUMPRELEASED 4096 #define STR_NOTENOUGHPOINTS "Not Enough Points\n" // To help aid consistency with these.. #define SPAWN_1_CLASS "info_player_1_spawn" #define SPAWN_2_CLASS "info_player_2_spawn" #define SPAWN_3_CLASS "info_player_3_spawn" #define SPAWN_4_CLASS "info_player_4_spawn" float cheats_have_been_activated; // Quake assumes these are defined. string string_null; .string killtarget; entity activator; float framecount; float music_override; .float recoil_delay; .float cur_spread; #ifndef FTE void(string com) SV_ParseClientCommand; .float gravity; .float mapversion; .float ammo; .float frags; #endif // FTE // achievement tracking .float ach_tracker_npnp; .float ach_tracker_abst; .float ach_tracker_coll; float ach_tracker_col2; float ach_tracker_barr; float ach_tracker_spin; float global_trace_damage_multiplier; .float has_ads_toggle; .float ads_release; .float has_doubletap_damage_buff; .vector oldvelocity; .float lastsound_time; .float isspec; string mappath; .float ads_toggle; float player_count; entity pl1; .string fog; // used for hacking in changing fog from world.fog for legacy maps entity local_client; .float stance; .float stancereset; .float changestance; .vector new_ofs; //money .float points; .float cost; .float cost2; //stats .float score; .float kills; .float headshots; #ifdef FTE .float facingenemy; #endif // FTE //doors .float state; #define STATE_TOP 0 #define STATE_BOTTOM 1 #define STATE_UP 2 #define STATE_DOWN 3 .float /*worldtype,*/ delay, wait, lip, /*light_lev,*/ speed, style/*, skill*/; .float requirespower; //player funcs #ifdef FTE .float zoom; #endif // FTE .float damage_timer; // Used for time-based damage infliction such as Traps. .float speed_penalty; // A multiplier for limiting player speed. Also // prohibits sprinting. .float speed_penalty_time; // A timer for how long speed_penalty is applied for. float sprint_max_time = 4.0; .float sprinting; .float weaponskin; .float stamina; .float sprint_timer; .float sprint_duration; .float sprint_timer_stopped; .float sprint_start_time; .float sprint_stop_time; .float sprint_rest_time; .float tp_anim_time; .float tp_anim_type; void() W_SprintStop; .float into_sprint; .float dive; .float dive_delay; .vector movement; .float hunt_count; // How many Hellhounds are hunting a client //Weaponsystem defines void GetUp(); void WeaponCore_ClientLogic(); void (float shotcount, float sprd, float Damage, float side) FireTrace; .float downed; .float fire_delay; .float fire_delay2; .float reload_delay; .float reload_delay2; .float switch_delay; .float health_delay; .float health_was_very_low; .float progress_bar; .float progress_bar_time; .float progress_bar_percent; .float weaponbk; .float currentmag; .float currentmag2; .float currentmagbk; .float currentmagbk2; .float currentammobk; .float NeedLoad; .string weapon2model; .float weapon2frame; .float reloadinterupted; .float hitcount; #ifdef FTE .float weapon2modelindex; #endif // FTE #define SEMIACTION_FIRE_RIGHT 1 #define SEMIACTION_FIRE_LEFT 2 #define SEMIACTION_USE 4 #define SEMIACTION_GRENADE 8 #define SEMIACTION_MELEE 16 #define SEMIACTION_WAYPOINT 32 #define SEMIACTION_WEAPONSWAP 64 // Semi-automatic actions (requires button release) .float semi_actions; #define MAX_PLAYER_WEAPONS 3 #define MULEKICK_WEAPON_SLOT 3 var struct guninventory_struct { float weapon_id; float weapon_magazine; float weapon_magazine_left; float weapon_reserve; float weapon_skin; float is_mulekick_weapon; }; .guninventory_struct weapons[MAX_PLAYER_WEAPONS]; .float weapon_count; //Reviving .float invoke_revive; .float reviving; .float revived; .float beingrevived; .float downedloop; #define S_LEFT 0 #define S_RIGHT 1 #define S_BOTH 2 //Knife .float knife_delay; .float bowie; //Grenades .float grenades; .float pri_grenade_state; .float bk_nade; .float grenade_delay; .float secondary_grenades; .float primary_grenades; .float throw_delay; //weapon frames void Set_W_Frame (float startframe, float endframe, float duration, float funccalledin, float animtype, void(optional float t) endanimfunc, string set_model, float dontstartnew, float side); .float weapon_animduration; .float weapon2_animduration; .float weapon_anim_type; .float weapon2_anim_type; .float anim_weapon_time; .float anim_weapon2_time; .float weaponframe_end; .float weapon2frame_end; .float callfuncat; .float callfuncat2; .float new_anim_stop; .float new_anim2_stop; .float anim_reversed; .float anim2_reversed; .void() animend; .void(optional float t) animend2; string(string path) Compat_ConvertOldAssetPath; //Null functions void() SUB_Null = {}; void() SUB_Null2 = {}; #define VEC_HULL_MIN '-16 -16 -36' #define VEC_HULL_MAX '16 16 36' #define VEC_HULL2_MIN '-32 -32 -24' #define VEC_HULL2_MAX '32 32 64' #define VIEW_OFS_HL '0 0 32' #define VIEW_OFS_QK '0 0 22' .string name; vector trace_plane_normal; .float dmg; .float fire_timeout; // // AI definitions // Used for global one-zombie-at-a-time type ai // void Do_Zombie_AI(); void Z_ElectroShock(); .float electro_targeted; // Marks Zombie as waiting to die via Electro-Shock .float death_timer; // A timer that will kill a Zombie when it expires. .float death_timer_activated; // To prevent Zombies just dying because of this.. .float is_attacking; // Returns true if Zombie is in the middle of an attack. #ifndef FTE entity lastzombie; // Used by non-FTE to update zombie AI one ent at a time. #endif // FTE .string aistatus; float zombie_spawn_delay; // time before spawning, in seconds. float zombie_spawn_timer; // the actual timer for spawn delay //Other AI definitions .vector box1, box2, box3;//used for windows and zombies .vector idlebox; .vector hop_spot;//used for windows (zombies hop to these) .vector goalorigin; .float teslacount; // TODO - Remove this .float tesla_n_kills; // Player - Number of kills remaining for the current tesla shot .float tesla_next_arc_time; // Zombie - Time at which zombie should try arcing .float tesla_arc_num; // Zombie - current arc number .entity tesla_arc_parent; // Zombie - Track the entity that we arced from .entity tesla_arc_owner; // Zombie - Player ent that fired the tesla void(vector pos) tesla_spark; .float iszomb; .float onfire; .entity firer; float crawler_num; float zombie_spawn_points; //==== Reference Vars ==== #define WWINDOW 1 #define WBOX1 2 #define WBOX2 4 #define WBOX3 8 #define WIDLEBOX 16 //======================== // Definitions for the `.dimension_hit` and `.dimension_solid` fields // Used to let limbs be non-solid to player bbox but still be hit by player tracelines #define HITBOX_DIM_LIMBS 1 #define HITBOX_DIM_ZOMBIES 2 //we're using usedent for who is currently hopping the window //Used for windows to keep track of what zombies are at windows .entity box1owner, box2owner, box3owner; .entity usedent; //.float used;//used for the window boxes//not anymore .float outside;//used for knowing if a zomibe has hopped window yet .float chase_enemy_time; .float chase_time; .float enemy_timeout; //.float pathing; .float calc_time; // used as a delay thing (so zombie ai doesn't run // 100% of the time .string zappername; // An identifier similar to targetname used to link // Electric Trap components. .string target2; .string target3; .string target4; .string target5; .string target6; .string target7; .string target8; .string wayTarget; .entity active_door; // Set in waypoint mode .string targetname; // the name of an entitys entity lastspawn; // last spawn point used by spawning code .entity goaldummy; // Used to store the origin of the zombies target .float goalway; // Used to store the origin of the zombies target .float walktype; // decides animations and moving speeds for zombies .float spawn_id; // assigned to spawn point ents, for grabbing one at random. .void() th_walk; //.void() th_run; .void() th_die; .void() th_melee; .void() th_idle; .void() th_windowhop; .void() th_diewunder; .void() th_fall; .void() th_falling; .void() th_land; .void() th_jump; .void() th_grabledge; .float tries; .float hop_step;//KEEPS TRACK OF WHERE WE ARE ON THE HOPPING PART float INACTIVE = 1; float tracemove(vector start, vector min, vector max, vector end, float nomonsters, entity forent); .float way_path[40]; .float way_cur; .float sound_time; .float s_time; float sounds_playing; .float fall; //.vector lastOrg;//Zombie's last origin, for checking stuckness //.float OrgStuckCount; .float crawling; #define HIT_REGION_HEAD 1 #define HIT_REGION_ARM 2 #define HIT_REGION_TORSO_LOWER 3 #define HIT_REGION_TORSO_UPPER 4 .float washit; .float hit_region; .float hitamount; .float laststep; void(entity who) makeCrawler; .float state;//used to delay making a crawler, ex) when zombie is rising from ground or climbing over barrier, turn zombie into a crawler afterwards void() spawnAllZombEnts; void() set_z_health; float() spawn_a_zombieA; float gotdog; float dogRound; float dogWave; float dog_round_count; float z_health; .float bleedingtime; .float time_to_die; .float respawn_timer; .float respawn_iterator; float crandom(); // Door .void() think1; .vector finaldest; .vector pos1, pos2/*, mangle*/; .vector finalangle; .float distance; .float sequence; .entity active_door; .string door_model_target; .string door_model_name; //Perk and Power system #define PERK_QUICKREVIVE_DEFAULT_MODEL "models/machines/quake_scale/quick_revive.mdl" #define PERK_JUGGERNOG_DEFAULT_MODEL "models/machines/quake_scale/juggernog.mdl" #define PERK_SPEEDCOLA_DEFAULT_MODEL "models/machines/quake_scale/speed_cola.mdl" #define PERK_DOUBLETAP_DEFAULT_MODEL "models/machines/quake_scale/double_tap.mdl" #define PERK_PHDFLOPPER_DEFAULT_MODEL "models/machines/quake_scale/flopper.mdl" #define PERK_STAMINUP_DEFAULT_MODEL "models/machines/quake_scale/staminup.mdl" #define PERK_DEADSHOT_DEFAULT_MODEL "models/machines/quake_scale/deadshot.mdl" #define PERK_MULEKICK_DEFAULT_MODEL "models/machines/quake_scale/mulekick.mdl" float isPowerOn; .float isBuying; // naievil -- used for checking if a perk is being consumed, limits glitching .float perks; .float perk_delay; .float perk_purchase_count; .float perk_purchase_limit_solo; .float perk_purchase_limit_coop; .float perk_requires_power_solo; .float perk_requires_power_coop; // Mystery Box #define MAX_BOX_WEAPONS 27 .float boxstatus; .entity boxweapon; .float spins; .float papState; var struct mbox_struct { float weapon_id; // ID for the relevant weapon. float allowed; // 1 for allowed, 0 for denied. float rarity; // 0-100 (float) percent change for obtaining. -1 for normal. float already_obtained; // true if only one allowed and a client already holds it. } mystery_box_weapons[MAX_BOX_WEAPONS] = {}; float mystery_box_count; float mystery_box_leave_count; float mystery_box_cost; string mystery_box_model; string mystery_box_glow_model; string mystery_box_open_sound; string mystery_box_close_sound; entity mystery_boxes[16]; vector mystery_box_start_origin; #ifdef FTE //powerups .float x2_icon; .float insta_icon; #endif // FTE .string powerup_vo; float instakill_finished; float insta_blink; float x2_finished; float x2_blink; float total_windows_down; float total_powerup_points; float powerup_score_threshold; float powerup_activate; float carp_powerup_active; float nuke_powerup_active; float nuke_powerups_activated; float nuke_powerup_spawndelay; //rounds float roundinit; float roundtype; float Current_Zombies; float Total_Zombies; float Remaining_Zombies; float Delay_Time; float spawn_time; float round_changetime; float blink_return; float delay_at_round; float spawn_delay; float totalpowerups; float sounds_playing; float barricade_reward_maximum; .float barricade_reward; float rounds; float rounds_change; //Waypoints void () Waypoint_Logic; entity current_way; float waypoint_mode; entity active_way; #define MAX_WAY_TARGETS 10 .string waynum; .string targets[MAX_WAY_TARGETS]; //pathfinds #define MAX_WAYPOINTS 256 //max waypoints void LoadWaypointData(); typedef struct { vector org; float id; float g, f; float next, prev; float step; float target_id [MAX_WAY_TARGETS]; // Targets array number string targetdoor; //special tag is required for the closed waypoints float dist [MAX_WAY_TARGETS]; // Distance to the next waypoints float set; } waypoint_ai; #define SET_NONE 0 #define SET_OPEN 1 #define SET_CLOSED 2 #ifdef FTE waypoint_ai waypoints[MAX_WAYPOINTS]; #endif // FTE #define UT_HUD 1 #define UT_ROUNDS_CHANGE 2 #define UT_HM 3 #define UT_ZOOM2 4 #define UT_CROSSHAIR 5 //Misc patch definitions .string teddyremovetarget; .float entity_removed; .float oldz; // used for fall damage that does not truly work correctly .float sprint_delay; //soft restart stuff for doors .string oldmodel; .vector oldorigin; .float oldstate; .float state; .float isopen; //world .string chaptertitle; .string location; .string date; .string person; .string song; //altered game elements float G_STARTPOINTS; float G_STARTROUND; float G_PRONEPOINTS; float G_STARTWEAPON[3]; float G_WORLDTEXT; float G_PERKS; float G_PERKPOWER; .float activated; //teleporter .entity tele_target; .float mode; .float cooldown; .float isLinked; .float waitLink; .float tpTimer; .float isTimed; .entity host; .entity entities[4]; // GIBBING .entity larm; .entity rarm; .entity head; .vector bbmins, bbmaxs; .float currentHitBoxSetup; .float sprintflag; // hl stuff .float rendermode; .float renderamt; .vector rendercolor; float revive_index; #ifdef FTE .float last_solid; .float had_solid_modified; #endif // FTE