#pragma once #include #include #define INDEPENDENT_ATTACK_FINISHED 1 // Globals float g_footsteps, g_grappling_hook, g_instagib; float g_warmup_allguns; float g_warmup_allow_timeout; float warmup_stage; float g_jetpack; bool sv_ready_restart; bool sv_ready_restart_after_countdown; bool sv_ready_restart_repeatable; float sv_clones; float sv_foginterval; float player_count; float currentbots; float bots_would_leave; void UpdateFrags(entity player, int f); .float totalfrags; float team1_score, team2_score, team3_score, team4_score; // flag set on worldspawn so that the code knows if it is dedicated or not float server_is_dedicated; // Fields .void(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) event_damage; //.string wad; //.string map; //.float worldtype; // Needed for dynamic clientwalls .float inactive; // Clientwall disappears when inactive .float alpha_max, alpha_min; .float fade_start, fade_end, fade_vertical_offset; .float default_solid; // Variable to store default .solid for clientwalls .float pain_finished; //Added by Supajoe .float pain_frame; //" .float crouch; // Crouching or not? .float superweapons_finished = _STAT(SUPERWEAPONS_FINISHED); .float cnt; // used in too many places .float count; //.float cnt2; .int respawn_flags; .float respawn_time; .float respawn_time_max; .float death_time; .float fade_time; .float fade_rate; void player_setupanimsformodel(entity this); .string mdl; .string playermodel; .string playerskin; .float species; .float scheduledrespawntime; .float respawntime; .float respawntimejitter; .float respawntimestart; //.float chasecam; .float damageforcescale; const float MIN_DAMAGEEXTRARADIUS = 2; const float MAX_DAMAGEEXTRARADIUS = 16; .float damageextraradius; //.float gravity; .float dmg; // for railgun damage (hitting multiple enemies) .bool railgunhit; .float railgunhitsolidbackup; .vector railgunhitloc; .float air_finished; .float dmgtime; .float killcount; .float damage_dealt, typehitsound, killsound; .float watersound_finished; .float iscreature; .float damagedbycontents; .float damagedbytriggers; .float teleportable; .vector oldvelocity; .float pauseregen_finished; .float pauserothealth_finished; .float pauserotarmor_finished; .float pauserotfuel_finished; // string overrides entity .string item_pickupsound; .entity item_pickupsound_ent; .entity item_model_ent; // WEAPONTODO .float autoswitch; bool client_hasweapon(entity this, Weapon wpn, .entity weaponentity, float andammo, bool complain); void w_clear(Weapon thiswep, entity actor, .entity weaponentity, int fire); void w_ready(Weapon thiswep, entity actor, .entity weaponentity, int fire); // VorteX: standalone think for weapons, so normal think on weaponentity can be reserved by weaponflashes (which needs update even player dies) .float weapon_nextthink; .void(Weapon thiswep, entity actor, .entity weaponentity, int fire) weapon_think; // there is 2 weapon tics that can run in one server frame const int W_TICSPERFRAME = 2; void weapon_defaultspawnfunc(entity this, Weapon e); float intermission_running; float intermission_exittime; float alreadychangedlevel; // footstep interval .float nextstep; float blockSpectators; //if set, new or existing spectators or observers will be removed unless they become a player within g_maxplayers_spectator_blocktime seconds .float spectatortime; //point in time since the client is spectating or observing void checkSpectatorBlock(entity this); float game_completion_ratio; // 0 at start, 1 near end .float winning; .float jointime; // time of connecting .float startplaytime; // time of switching from spectator to player .float alivetime; // time of being alive .float motd_actived_time; // used for both motd and campaign_message bool nJoinAllowed(entity this, entity ignore); .float spawnshieldtime; .float item_spawnshieldtime; .entity flagcarried; .int playerid; .float noalign; // if set to 1, the item or spawnpoint won't be dropped to the floor .vector death_origin; float default_player_alpha; float default_weapon_alpha; .float cvar_cl_handicap; .float cvar_cl_clippedspectating; .float cvar_cl_autoscreenshot; .float cvar_cl_jetpack_jump; .float cvar_cl_movement_track_canjump; .float cvar_cl_newusekeysupported; .string cvar_g_xonoticversion; .string cvar_cl_weaponpriority; .string cvar_cl_weaponpriorities[10]; .float cvar_cl_noantilag; .string weaponorder_byimpulse; .float cvar_cl_allow_uid2name; .float cvar_cl_allow_uidtracking; .string stored_netname; string gamemode_name; float startitem_failed; string W_Apply_Weaponreplace(string in); void FixIntermissionClient(entity e); void FixClientCvars(entity e); // WEAPONTODO: remove this //WepSet weaponsInMap; #define weapons _STAT(WEAPONS) .float respawn_countdown; // next number to count float bot_waypoints_for_items; .float attack_finished_for[Weapons_MAX * MAX_WEAPONSLOTS]; .float attack_finished_single[MAX_WEAPONSLOTS]; #if INDEPENDENT_ATTACK_FINISHED #define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).(attack_finished_for[((w) - WEP_FIRST) * MAX_WEAPONSLOTS + (slot)])) #else #define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).attack_finished_single[slot]) #endif #define ATTACK_FINISHED(ent, slot) ATTACK_FINISHED_FOR(ent, ent.(weaponentity).m_weapon.m_id, slot) // assault game mode: Which team is attacking in this round? float assault_attacker_team; // speedrun: when 1, player auto teleports back when capture timeout happens .float speedrunning; // database float ServerProgsDB; float TemporaryDB; .float team_saved; bool some_spawn_has_been_used; int have_team_spawns; // 0 = no team spawns requested, -1 = team spawns requested but none found, 1 = team spawns requested and found int have_team_spawns_forteams; // if Xth bit is 1 then team X has spawns else it has no spawns; team 0 is the "no-team" // set when showing a kill countdown .entity killindicator; .bool canteamdamage; void Damage (entity targ, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force); float lockteams; float sv_maxidle; float sv_maxidle_spectatorsareidle; int sv_maxidle_slots; bool sv_maxidle_slots_countbots; float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end); float next_pingtime; // autotaunt system .float cvar_cl_autotaunt; .float cvar_cl_voice_directional; .float cvar_cl_voice_directional_taunt_attenuation; int autocvar__independent_players; bool independent_players; #define INDEPENDENT_PLAYERS (autocvar__independent_players ? (autocvar__independent_players > 0) : independent_players) #define IS_INDEPENDENT_PLAYER(e) ((e).solid == SOLID_TRIGGER) #define MAKE_INDEPENDENT_PLAYER(e) (((e).solid = SOLID_TRIGGER), ((e).frags = FRAGS_PLAYER_NONSOLID)) string clientstuff; .float phase; .int pressedkeys; .string fog; string cvar_changes; string cvar_purechanges; float cvar_purechanges_count; //float game_starttime; //point in time when the countdown to game start is over //float round_starttime; //point in time when the countdown to round start is over void W_Porto_Remove (entity p); .int projectiledeathtype; .string message2; // reset to 0 on weapon switch // may be useful to all weapons .float bulletcounter; // Nexball float g_nexball_meter_period; void SUB_DontUseTargets(entity this, entity actor, entity trigger); void SUB_UseTargets(entity this, entity actor, entity trigger); .void(entity this) reset; // if set, an entity is reset using this .void(entity this) reset2; // if set, an entity is reset using this (after calling ALL the reset functions for other entities) void ClientData_Touch(entity e); //vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons .bool wasplayer; float servertime, serverprevtime, serverframetime; .float ammo_fuel; //flood fields .float nickspamtime; // time of last nick change .float nickspamcount; .float floodcontrol_chat; .float floodcontrol_chatteam; .float floodcontrol_chattell; .float floodcontrol_voice; .float floodcontrol_voiceteam; .float stat_shotorg = _STAT(SHOTORG); // networked stat for trueaim HUD string matchid; .float last_pickup = _STAT(LAST_PICKUP); .float hit_time = _STAT(HIT_TIME); .float typehit_time = _STAT(TYPEHIT_TIME); .float kill_time = _STAT(KILL_TIME); .float damage_dealt_total = _STAT(DAMAGE_DEALT_TOTAL); bool radar_showennemies; #ifdef PROFILING float client_cefc_accumulator; float client_cefc_accumulatortime; #endif .float weapon_load[Weapons_MAX]; .int ammo_none; // used by the reloading system, must always be 0 .float clip_load = _STAT(WEAPON_CLIPLOAD); .float old_clip_load; .float clip_size = _STAT(WEAPON_CLIPSIZE); .float minelayer_mines = _STAT(LAYED_MINES); .float vortex_charge = _STAT(VORTEX_CHARGE); .float vortex_charge_rottime; .float vortex_chargepool_ammo = _STAT(VORTEX_CHARGEPOOL); .float hagar_load = _STAT(HAGAR_LOAD); .int grab; // 0 = can't grab, 1 = owner can grab, 2 = owner and team mates can grab, 3 = anyone can grab #define PROJECTILE_MAKETRIGGER(e) (e).solid = SOLID_CORPSE; (e).dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE // when doing this, hagar can go through clones // #define PROJECTILE_MAKETRIGGER(e) (e).solid = SOLID_BBOX .float spectatee_status; .float zoomstate; .float restriction; .entity clientdata; .entity personal; string deathmessage; .bool just_joined; .float cvar_cl_weaponimpulsemode; .float selectweapon; // last selected weapon of the player .float ballistics_density; // wall piercing factor, larger = bullet can pass through more const float ACTIVE_NOT = 0; const float ACTIVE_ACTIVE = 1; const float ACTIVE_IDLE = 2; const float ACTIVE_BUSY = 2; const float ACTIVE_TOGGLE = 3; .float active; .void (entity this, int act_state) setactive; .entity realowner; //float serverflags; .float team_forced; // can be a team number to force a team, or 0 for default action, or -1 for forced spectator .float player_blocked; .float revive_progress = _STAT(REVIVE_PROGRESS); .float revival_time; // time at which player was last revived .float revive_speed; // NOTE: multiplier (anything above 1 is instaheal) .entity iceblock; .entity frozen_by; // for ice fields .entity muzzle_flash; .float misc_bulletcounter; // replaces uzi & hlac bullet counter. .float stat_respawn_time = _STAT(RESPAWN_TIME); // shows respawn time, and is negative when awaiting respawn .int killindicator_teamchange; void PlayerUseKey(entity this); USING(spawn_evalfunc_t, vector(entity this, entity player, entity spot, vector current)); .spawn_evalfunc_t spawn_evalfunc; string modname; .float missile_flags; const int MIF_SPLASH = BIT(1); const int MIF_ARC = BIT(2); const int MIF_PROXY = BIT(3); const int MIF_GUIDED_MANUAL = BIT(4); const int MIF_GUIDED_HEAT = BIT(5); const int MIF_GUIDED_LASER = BIT(6); const int MIF_GUIDED_AI = BIT(7); const int MIF_GUIDED_TAG = BIT(7); const int MIF_GUIDED_ALL = MIF_GUIDED_MANUAL | MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG; const int MIF_GUIDED_TRACKING = MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG; const int MIF_GUIDED_CONFUSABLE = MIF_GUIDED_HEAT | MIF_GUIDED_AI; #define MISSILE_IS_CONFUSABLE(m) ((m.missile_flags & MIF_GUIDED_CONFUSABLE) ? true : false) #define MISSILE_IS_GUIDED(m) ((m.missile_flags & MIF_GUIDED_ALL) ? true : false) #define MISSILE_IS_TRACKING(m) ((m.missile_flags & MIF_GUIDED_TRACKING) ? true : false) //// .string cvar_cl_physics; .void(entity this, entity player) init_for_player; .WepSet dual_weapons; IntrusiveList g_monsters; STATIC_INIT(g_monsters) { g_monsters = IL_NEW(); } IntrusiveList g_waypoints; STATIC_INIT(g_waypoints) { g_waypoints = IL_NEW(); } IntrusiveList g_vehicles; STATIC_INIT(g_vehicles) { g_vehicles = IL_NEW(); } IntrusiveList g_turrets; STATIC_INIT(g_turrets) { g_turrets = IL_NEW(); } IntrusiveList g_mines; STATIC_INIT(g_mines) { g_mines = IL_NEW(); } IntrusiveList g_projectiles; STATIC_INIT(g_projectiles) { g_projectiles = IL_NEW(); } IntrusiveList g_items; STATIC_INIT(g_items) { g_items = IL_NEW(); } IntrusiveList g_initforplayer; STATIC_INIT(g_initforplayer) { g_initforplayer = IL_NEW(); } IntrusiveList g_clones; STATIC_INIT(g_clones) { g_clones = IL_NEW(); } IntrusiveList g_assault_destructibles; STATIC_INIT(g_assault_destructibles) { g_assault_destructibles = IL_NEW(); } IntrusiveList g_assault_objectivedecreasers; STATIC_INIT(g_assault_objectivedecreasers) { g_assault_objectivedecreasers = IL_NEW(); } IntrusiveList g_assault_objectives; STATIC_INIT(g_assault_objectives) { g_assault_objectives = IL_NEW(); } IntrusiveList g_spawnpoints; STATIC_INIT(g_spawnpoints) { g_spawnpoints = IL_NEW(); } IntrusiveList g_bot_targets; STATIC_INIT(g_bot_targets) { g_bot_targets = IL_NEW(); } IntrusiveList g_bot_dodge; STATIC_INIT(g_bot_dodge) { g_bot_dodge = IL_NEW(); } IntrusiveList g_damagedbycontents; STATIC_INIT(g_damagedbycontents) { g_damagedbycontents = IL_NEW(); } IntrusiveList g_railgunhit; STATIC_INIT(g_railgunhit) { g_railgunhit = IL_NEW(); } IntrusiveList g_ladders; STATIC_INIT(g_ladders) { g_ladders = IL_NEW(); } IntrusiveList g_locations; STATIC_INIT(g_locations) { g_locations = IL_NEW(); } IntrusiveList g_saved_team; STATIC_INIT(g_saved_team) { g_saved_team = IL_NEW(); } IntrusiveList g_monster_targets; STATIC_INIT(g_monster_targets) { g_monster_targets = IL_NEW(); } IntrusiveList g_pathlib_nodes; STATIC_INIT(g_pathlib_nodes) { g_pathlib_nodes = IL_NEW(); }