]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - data/qcsrc/server/vore.qc
Make the swallow progress idly decrease
[voretournament/voretournament.git] / data / qcsrc / server / vore.qc
index 692776c66be13697cd29b51e0aef87f92d97c034..6c787ca3fa5ab3f6d222aedcea7f38fd7d1530e5 100644 (file)
@@ -247,6 +247,27 @@ void Vore_Swallow(entity e)
        e.stomachkick_delay = time + cvar("g_balance_vore_kick_delay"); // don't kick immediately after being swallowed\r
 }\r
 \r
+void Vore_SwallowStep(entity e)\r
+{\r
+       if(!cvar("g_balance_vore_swallow_speed_fill"))\r
+       {\r
+               Vore_Swallow(e);\r
+               return;\r
+       }\r
+\r
+       // increase the progress value until it reaches 1, then swallow the player\r
+       if(e.swallow_progress_prey < 1)\r
+               e.swallow_progress_prey += cvar("g_balance_vore_swallow_speed_fill") * frametime;\r
+       else\r
+       {\r
+               Vore_Swallow(e);\r
+               e.swallow_progress_prey = 0;\r
+       }\r
+\r
+       // the predator's progress is how much the prey got swallowed\r
+       self.swallow_progress_pred = e.swallow_progress_prey;\r
+}\r
+\r
 void Vore_Regurgitate(entity e)\r
 {\r
        // this player is being regurgitated by their predator, apply the proper changes\r
@@ -378,7 +399,14 @@ void Vore_Digest()
                else\r
                        reduce = 1;\r
 \r
-               Damage(self, self.predator, self.predator, cvar("g_balance_vore_digestion_damage") / reduce, DEATH_DIGESTION, self.origin, '0 0 0');\r
+               float damage;\r
+               damage = cvar("g_balance_vore_digestion_damage") / reduce;\r
+\r
+               // apply player scale to digestion damage\r
+               if(cvar("g_balance_vore_digestion_playerscale"))\r
+                       damage *= self.predator.scale;\r
+\r
+               Damage(self, self.predator, self.predator, damage, DEATH_DIGESTION, self.origin, '0 0 0');\r
                if(cvar("g_balance_vore_digestion_vampire") && self.predator.health < cvar("g_balance_vore_digestion_vampire_stable"))\r
                        self.predator.health += cvar("g_balance_vore_digestion_vampire") / reduce;\r
 \r
@@ -422,13 +450,26 @@ void Vore_StomachKick()
        if(time > self.stomachkick_delay)\r
        {\r
                float damage;\r
+               vector force;\r
                damage = ceil(random() * (cvar("g_balance_vore_kick_damage_max") - cvar("g_balance_vore_kick_damage_min")) + cvar("g_balance_vore_kick_damage_min"));\r
+               force = v_forward * cvar("g_balance_vore_kick_force");\r
 \r
-               Damage(self.predator, self, self, damage, DEATH_STOMACHKICK, self.predator.origin, v_forward * cvar("g_balance_vore_kick_force"));\r
+               // apply player scale to the damage / force of the kick\r
+               if(cvar("g_balance_vore_kick_playerscale"))\r
+               {\r
+                       damage *= self.scale;\r
+                       force *= self.scale;\r
+               }\r
+\r
+               Damage(self.predator, self, self, damage, DEATH_STOMACHKICK, self.predator.origin, force);\r
                sound(self.predator, CHAN_PROJECTILE, strcat("weapons/hit", ftos(floor(random() * 8)), ".wav"), VOL_BASE, ATTN_NORM);\r
                self.predator.punchangle_x -= cvar("g_balance_vore_kick_predator_punchangle");\r
                self.punchangle_x += cvar("g_balance_vore_kick_prey_punchangle");\r
 \r
+               // abort the predator's scheduled regurgitation\r
+               if(random() < cvar("g_balance_vore_kick_cutregurgitate"))\r
+                       self.predator.regurgitate_prepare = 0;\r
+\r
                self.stomachkick_delay = time + cvar("g_balance_vore_kick_delay");\r
        }\r
 }\r
@@ -494,20 +535,31 @@ void Vore_SetSbarRings()
        {\r
                if(time <= self.stomachkick_delay)\r
                {\r
-                       self.stat_sbring1_type = 2; // ring shows stomach kick delay, empties with progress\r
+                       self.stat_sbring1_type = 3; // ring shows stomach kick delay, empties with progress\r
                        self.stat_sbring1_clip = bound(0, (time / self.stomachkick_delay - 1) / ((self.stomachkick_delay - cvar("g_balance_vore_kick_delay")) / self.stomachkick_delay - 1), 1);\r
                }\r
        }\r
        else\r
        {\r
-               if(time <= self.action_delay)\r
+               if(self.swallow_progress_pred)\r
                {\r
-                       self.stat_sbring1_type = 1; // ring shows vore action delay, empties with progress\r
+                       self.stat_sbring1_type = 1; // ring shows predator swallow progress, fills with progress\r
+                       self.stat_sbring1_clip = bound(0, self.swallow_progress_pred, 1);\r
+               }\r
+               else if(time <= self.action_delay)\r
+               {\r
+                       self.stat_sbring1_type = 2; // ring shows vore action delay, empties with progress\r
                        self.stat_sbring1_clip = bound(0, (time / self.action_delay - 1) / ((self.action_delay - cvar("g_balance_vore_action_delay")) / self.action_delay - 1), 1);\r
                }\r
-               if(time <= self.regurgitate_prepare)\r
+\r
+               if(self.swallow_progress_prey)\r
+               {\r
+                       self.stat_sbring2_type = 1; // ring shows prey swallow progress, fills with progress\r
+                       self.stat_sbring2_clip = bound(0, self.swallow_progress_prey, 1);\r
+               }\r
+               else if(time <= self.regurgitate_prepare)\r
                {\r
-                       self.stat_sbring2_type = 1; // ring shows regurgitation preparing, fills with progress\r
+                       self.stat_sbring2_type = 2; // ring shows regurgitation preparing, fills with progress\r
                        self.stat_sbring2_clip = 1 - bound(0, (time / self.regurgitate_prepare - 1) / ((self.regurgitate_prepare - cvar("g_balance_vore_regurgitate_delay")) / self.regurgitate_prepare - 1), 1);\r
                }\r
        }\r
@@ -584,6 +636,20 @@ void Vore()
                }\r
        }\r
 \r
+       // the swallow progress of prey and preds idly decrease by this amount\r
+       if(self.swallow_progress_pred)\r
+       {\r
+               self.swallow_progress_pred -= cvar("g_balance_vore_swallow_speed_decrease") * frametime;\r
+               if(self.swallow_progress_pred < 0)\r
+                       self.swallow_progress_pred = 0;\r
+       }\r
+       if(self.swallow_progress_prey)\r
+       {\r
+               self.swallow_progress_prey -= cvar("g_balance_vore_swallow_speed_decrease") * frametime;\r
+               if(self.swallow_progress_prey < 0)\r
+                       self.swallow_progress_prey = 0;\r
+       }\r
+\r
        // apply delays and skip the vore system under some circumstances\r
        if(time < game_starttime || (time < warmup && !inWarmupStage)) // don't allow vore before a round begins\r
        {\r
@@ -613,7 +679,7 @@ void Vore()
                        self.stat_canswallow = 1;\r
 \r
                if(self.BUTTON_ATCK)\r
-                       Vore_Swallow(prey);\r
+                       Vore_SwallowStep(prey);\r
        }\r
        else if(prey != world)\r
                self.stat_canswallow = -1;\r