]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Move midair to the mutator system
authorMario <mario.mario@y7mail.com>
Thu, 6 Jun 2013 02:17:29 +0000 (12:17 +1000)
committerMario <mario.mario@y7mail.com>
Thu, 6 Jun 2013 02:17:29 +0000 (12:17 +1000)
qcsrc/server/autocvars.qh
qcsrc/server/bot/havocbot/havocbot.qc
qcsrc/server/cl_client.qc
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_world.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/mutator_midair.qc [new file with mode: 0644]
qcsrc/server/mutators/mutators.qh
qcsrc/server/progs.src
qcsrc/server/teamplay.qc

index dead5a9d4b360d924a0642f4b21fe0161e734ccd..9c0515281829e7f08736c31a627763040b1592ea 100644 (file)
@@ -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;
index a9a3ea9f62b29796504d03eb5167b7218c2d748c..5b889b8ca140f43f46f3633f3b5a924438b75788 100644 (file)
@@ -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;
index 036bb45fb6dc48f029212faead961db052d00d12..2477b29b05d55b297575a46f92c7692febc36182 100644 (file)
@@ -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);
index d3490a209106ef59faab7905ee68c5b769ae1083..23d1cd0eb6555edd607d72df1b0482ef32b607e8 100644 (file)
@@ -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;
index da013fc75d0eebe984ebc4a39717489d47d72f45..f8a77a2cd4f194c16e33c4fba4d2b975c871d07d 100644 (file)
@@ -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)
index 3043a30003a590f713fc6561074605fbf31d236f..19961d8ae607066ad60f884ac03e0730d3278fbf 100644 (file)
@@ -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");
index 61c96e14c6653a007c66104e4a00b91f049fe61b..176da91ef89a9c2b664ccc9a8571ca69927a27a0 100644 (file)
@@ -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 (file)
index 0000000..0d48fef
--- /dev/null
@@ -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;
+}
index 2cf318b203a9535df5f53e68f24864a9cee4632f..a27373dc3262e634425a66fa8b0ebe47cbb0489b 100644 (file)
@@ -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);
index 95906022c2e70c163fb7409e577675ab6ee35e3a..c7aa13a3c7b092941b2f3e6167591dc37d0863d1 100644 (file)
@@ -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
index 031151674fed560f9c72e8214f306afb2dd6381f..bb27e73ed7df69918a586fc1c4fc7bef085f14e3 100644 (file)
@@ -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)