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
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
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
{\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
}\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
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