From 0e8bb460f7ee90a70701957fb94b9a7a443bf20e Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 6 Jun 2013 12:17:29 +1000 Subject: [PATCH] Move midair to the mutator system --- qcsrc/server/autocvars.qh | 1 - qcsrc/server/bot/havocbot/havocbot.qc | 3 -- qcsrc/server/cl_client.qc | 9 ----- qcsrc/server/defs.qh | 2 +- qcsrc/server/g_damage.qc | 2 +- qcsrc/server/g_world.qc | 4 -- qcsrc/server/miscfunctions.qc | 2 +- qcsrc/server/mutators/mutator_midair.qc | 54 +++++++++++++++++++++++++ qcsrc/server/mutators/mutators.qh | 1 + qcsrc/server/progs.src | 1 + qcsrc/server/teamplay.qc | 2 - 11 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 qcsrc/server/mutators/mutator_midair.qc diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index dead5a9d4..9c0515281 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -892,7 +892,6 @@ float autocvar_g_maxplayers; float autocvar_g_maxplayers_spectator_blocktime; float autocvar_g_maxpushtime; float autocvar_g_maxspeed; -#define autocvar_g_midair cvar("g_midair") float autocvar_g_midair_shieldtime; #define autocvar_g_minstagib cvar("g_minstagib") float autocvar_g_minstagib_ammo_drop; diff --git a/qcsrc/server/bot/havocbot/havocbot.qc b/qcsrc/server/bot/havocbot/havocbot.qc index a9a3ea9f6..5b889b8ca 100644 --- a/qcsrc/server/bot/havocbot/havocbot.qc +++ b/qcsrc/server/bot/havocbot/havocbot.qc @@ -253,9 +253,6 @@ void havocbot_bunnyhop(vector dir) float maxspeed; vector gco, gno; - if(autocvar_g_midair) - return; - // Don't jump when attacking if(self.aistatus & AI_STATUS_ATTACKING) return; diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 036bb45fb..2477b29b0 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -1517,15 +1517,6 @@ void player_powerups (void) if(autocvar_g_fullbrightplayers) self.effects = self.effects | EF_FULLBRIGHT; - // midair gamemode: damage only while in the air - // if in midair mode, being on ground grants temporary invulnerability - // (this is so that multishot weapon don't clear the ground flag on the - // first damage in the frame, leaving the player vulnerable to the - // remaining hits in the same frame) - if (self.flags & FL_ONGROUND) - if (g_midair) - self.spawnshieldtime = max(self.spawnshieldtime, time + autocvar_g_midair_shieldtime); - if (time >= game_starttime) if (time < self.spawnshieldtime) self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT); diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index d3490a209..23d1cd0eb 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -16,7 +16,7 @@ noref float require_spawnfunc_prefix; // if this float exists, only functions wi // Globals -float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_midair, g_minstagib, g_norecoil, g_bloodloss; +float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_minstagib, g_norecoil, g_bloodloss; float g_warmup_limit; float g_warmup_allguns; float g_warmup_allow_timeout; diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index da013fc75..f8a77a2cd 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -772,7 +772,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float // apply push if (self.damageforcescale) if (vlen(force)) - if (!IS_PLAYER(self) || time >= self.spawnshieldtime || g_midair) + if (!IS_PLAYER(self) || time >= self.spawnshieldtime) { vector farce = damage_explosion_calcpush(self.damageforcescale * force, self.velocity, autocvar_g_balance_damagepush_speedfactor); if(self.movetype == MOVETYPE_PHYSICS) diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 3043a3000..19961d8ae 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -706,10 +706,6 @@ void spawnfunc_worldspawn (void) if(autocvar_g_norecoil) s = strcat(s, ":norecoil"); - // TODO to mutator system - if(autocvar_g_midair) - s = strcat(s, ":midair"); - // TODO to mutator system if(autocvar_g_powerups == 0) s = strcat(s, ":no_powerups"); diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 61c96e14c..176da91ef 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -919,6 +919,7 @@ void readlevelcvars(void) CHECK_MUTATOR_ADD("g_vampire", mutator_vampire, !cvar("g_minstagib")); CHECK_MUTATOR_ADD("g_superspectate", mutator_superspec, 1); CHECK_MUTATOR_ADD("g_pinata", mutator_pinata, !cvar("g_minstagib")); + CHECK_MUTATOR_ADD("g_midair", mutator_midair, 1); CHECK_MUTATOR_ADD("g_sandbox", sandbox, 1); #undef CHECK_MUTATOR_ADD @@ -953,7 +954,6 @@ void readlevelcvars(void) g_footsteps = cvar("g_footsteps"); g_grappling_hook = cvar("g_grappling_hook"); g_jetpack = cvar("g_jetpack"); - g_midair = cvar("g_midair"); g_norecoil = cvar("g_norecoil"); g_bloodloss = cvar("g_bloodloss"); sv_maxidle = cvar("sv_maxidle"); diff --git a/qcsrc/server/mutators/mutator_midair.qc b/qcsrc/server/mutators/mutator_midair.qc new file mode 100644 index 000000000..0d48fef9d --- /dev/null +++ b/qcsrc/server/mutators/mutator_midair.qc @@ -0,0 +1,54 @@ +.float midair_shieldtime; + +MUTATOR_HOOKFUNCTION(midair_PlayerDamage) +{ + if(IS_PLAYER(frag_attacker)) + if(IS_PLAYER(frag_target)) + if(time < self.midair_shieldtime) + frag_damage = FALSE; + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(midair_PlayerPowerups) +{ + if(time >= game_starttime) + if(self.flags & FL_ONGROUND) + { + self.effects |= (EF_ADDITIVE | EF_FULLBRIGHT); + self.midair_shieldtime = max(self.midair_shieldtime, time + autocvar_g_midair_shieldtime); + } + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(midair_PlayerSpawn) +{ + if(IS_BOT_CLIENT(self)) + self.bot_moveskill = 0; // disable bunnyhopping + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(midair_BuildMutatorsString) +{ + ret_string = strcat(ret_string, ":midair"); + return FALSE; +} + +MUTATOR_HOOKFUNCTION(midair_BuildMutatorsPrettyString) +{ + ret_string = strcat(ret_string, ", Midair"); + return FALSE; +} + +MUTATOR_DEFINITION(mutator_midair) +{ + MUTATOR_HOOK(PlayerDamage_Calculate, midair_PlayerDamage, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayerPowerups, midair_PlayerPowerups, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayerSpawn, midair_PlayerSpawn, CBC_ORDER_ANY); + MUTATOR_HOOK(BuildMutatorsString, midair_BuildMutatorsString, CBC_ORDER_ANY); + MUTATOR_HOOK(BuildMutatorsPrettyString, midair_BuildMutatorsPrettyString, CBC_ORDER_ANY); + + return FALSE; +} diff --git a/qcsrc/server/mutators/mutators.qh b/qcsrc/server/mutators/mutators.qh index 2cf318b20..a27373dc3 100644 --- a/qcsrc/server/mutators/mutators.qh +++ b/qcsrc/server/mutators/mutators.qh @@ -22,5 +22,6 @@ MUTATOR_DECLARATION(mutator_superspec); MUTATOR_DECLARATION(mutator_minstagib); MUTATOR_DECLARATION(mutator_touchexplode); MUTATOR_DECLARATION(mutator_pinata); +MUTATOR_DECLARATION(mutator_midair); MUTATOR_DECLARATION(sandbox); diff --git a/qcsrc/server/progs.src b/qcsrc/server/progs.src index 95906022c..c7aa13a3c 100644 --- a/qcsrc/server/progs.src +++ b/qcsrc/server/progs.src @@ -249,6 +249,7 @@ mutators/mutator_superspec.qc mutators/mutator_minstagib.qc mutators/mutator_touchexplode.qc mutators/mutator_pinata.qc +mutators/mutator_midair.qc ../warpzonelib/anglestransform.qc ../warpzonelib/mathlib.qc diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 031151674..bb27e73ed 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -286,8 +286,6 @@ string getwelcomemessage(void) modifications = strcat(modifications, ", Cloaked"); if(g_grappling_hook) modifications = strcat(modifications, ", Hook"); - if(g_midair) - modifications = strcat(modifications, ", Midair"); if(g_weapon_stay && !g_cts) modifications = strcat(modifications, ", Weapons stay"); if(g_bloodloss > 0) -- 2.39.2