self.stomach_load = final_load;\r
\r
// apply weight\r
- self.gravity = 1 + (self.stomach_load / self.stomach_maxload) * cvar("g_balance_vore_load_pred_weight");\r
+ self.gravity = 1 * (cvar("g_healthsize") ? pow(self.scale, cvar("g_healthsize_weight")) : 1) + (self.stomach_load / self.stomach_maxload) * cvar("g_balance_vore_load_pred_weight");\r
if(!self.gravity && self.stomach_load)\r
self.gravity = 0.00001; // 0 becomes 1 for gravity, so do this to allow 0 gravity\r
}\r
\r
.entity swallow_model;\r
-float Vore_SwallowModel_CustomizeEntityForClient()\r
+float Vore_GulletModel_CustomizeEntityForClient()\r
{\r
// use the same system as the weapon model\r
\r
self.viewmodelforclient = self.owner;\r
- self.alpha = self.owner.cvar_cl_vore_swallowmodel;\r
+ self.alpha = self.owner.cvar_cl_vore_gulletmodel;\r
\r
if(other.classname == "spectator")\r
if(other.enemy == self.owner)\r
{\r
self.viewmodelforclient = other;\r
- self.alpha = other.cvar_cl_vore_swallowmodel;\r
+ self.alpha = other.cvar_cl_vore_gulletmodel;\r
}\r
\r
return TRUE;\r
}\r
\r
-void Vore_SwallowModel_Think()\r
+void Vore_GulletModel_Think()\r
{\r
// update the position of the swallow model to match our swallow progress\r
float dist;\r
self.nextthink = time;\r
}\r
\r
-void Vore_SwallowModel_Update(entity prey, entity pred)\r
+void Vore_GulletModel_Update(entity prey, entity pred)\r
{\r
// if we don't have a swallow model already, spawn one\r
if(!prey.swallow_model)\r
//prey.swallow_model.effects |= EF_NOGUNBOB; // let it bob\r
prey.swallow_model.effects |= EF_NODEPTHTEST; // don't hide behind walls\r
prey.swallow_model.owner = prey;\r
- prey.swallow_model.customizeentityforclient = Vore_SwallowModel_CustomizeEntityForClient;\r
- prey.swallow_model.think = Vore_SwallowModel_Think;\r
+ prey.swallow_model.customizeentityforclient = Vore_GulletModel_CustomizeEntityForClient;\r
+ prey.swallow_model.think = Vore_GulletModel_Think;\r
prey.swallow_model.nextthink = time;\r
}\r
\r
// properties that should update whenever possible, but when the predator is available\r
- string player_swallowmodel;\r
- player_swallowmodel = strcat(substring(pred.playermodel, 0, strlen(pred.playermodel) - 4), "_swallow.md3"); // 4 is the extension length\r
- if(prey.swallow_model.model != player_swallowmodel) // player model can be changed while the predator is active\r
- setmodel(prey.swallow_model, player_swallowmodel);\r
+ string player_gulletmodel;\r
+ player_gulletmodel = strcat(substring(pred.playermodel, 0, strlen(pred.playermodel) - 4), "_gullet.iqm"); // 4 is the extension length\r
+ if(prey.swallow_model.model != player_gulletmodel) // player model can be changed while the predator is active\r
+ setmodel(prey.swallow_model, player_gulletmodel);\r
if(prey.swallow_model.skin != pred.skin) // player skin can be changed while the predator is active\r
prey.swallow_model.skin = pred.skin;\r
if(cvar("g_healthsize"))\r
e.predator = self;\r
setorigin(e, e.predator.origin);\r
e.velocity = '0 0 0';\r
+ e.punchangle = '0 0 0';\r
e.movetype = MOVETYPE_FOLLOW;\r
e.solid = SOLID_NOT;\r
e.aiment = e.predator; // follow the predator, automatically unset when regurgitated\r
\r
void Vore_SwallowStep(entity e)\r
{\r
- if(!cvar("g_balance_vore_swallow_speed_fill"))\r
+ if(!cvar("g_balance_vore_swallow_speed_fill_player"))\r
{\r
Vore_Swallow(e);\r
return;\r
if(!self.swallow_progress_pred)\r
PlayerSound(self, playersound_grab, CHAN_PAIN, VOICETYPE_PLAYERSOUND);\r
\r
- Vore_SwallowModel_Update(e, self);\r
+ // apply prey orientation\r
+ if(cvar("g_balance_vore_swallow_prey_orient"))\r
+ {\r
+ e.punchangle = self.angles - e.angles;\r
+ e.punchangle_speed = cvar("g_balance_vore_swallow_prey_orient_speed") * (1 - e.swallow_progress_prey);\r
+ }\r
+\r
+ Vore_GulletModel_Update(e, self);\r
\r
// increase the progress value until it reaches 1, then swallow the player\r
if(e.swallow_progress_prey < 1)\r
{\r
float fill;\r
- fill = cvar("g_balance_vore_swallow_speed_fill") * frametime;\r
- if(cvar("g_healthsize") && cvar("g_balance_vore_swallow_speed_fill_scalediff")) // fill rate depends on predator size compared to prey size\r
- fill *= pow(self.scale / e.scale, cvar("g_balance_vore_swallow_speed_fill_scalediff"));\r
+ fill = cvar("g_balance_vore_swallow_speed_fill_player") * frametime;\r
+ if(cvar("g_healthsize") && cvar("g_balance_vore_swallow_speed_fill_scalediff_player")) // fill rate depends on predator size compared to prey size\r
+ fill *= pow(self.scale / e.scale, cvar("g_balance_vore_swallow_speed_fill_scalediff_player"));\r
if(cvar("g_balance_vore_swallow_speed_fill_stomachload") && e.stomach_load) // fill rate is influenced by the prey's stomach load\r
fill *= (1 - ((e.stomach_load / e.stomach_maxload) * bound(0, cvar("g_balance_vore_swallow_speed_fill_stomachload"), 1)));\r
\r
e.pusher = e.predator; // allows us to frag players by regurgitating them in deadly pits\r
e.pushltime = time + cvar("g_maxpushtime");\r
\r
+ // apply prey orientation\r
+ if(cvar("g_balance_vore_swallow_prey_orient"))\r
+ {\r
+ e.punchangle = e.predator.angles - e.angles;\r
+ e.punchangle_speed = cvar("g_balance_vore_swallow_prey_orient_speed") * (1 - e.swallow_progress_prey);\r
+ }\r
+\r
// if the dead body of the prey is below gibbing health, gib it\r
e.stat_eaten = 0; // necessary for gibs to show\r
PlayerGib(e, e.predator);\r
\r
// regurgitated prey is given this amount of swallow progress, to simulate being more vulnerable\r
- if(cvar("g_balance_vore_swallow_speed_fill") && cvar("g_balance_vore_regurgitate_swallowprogress"))\r
+ if(cvar("g_balance_vore_swallow_speed_fill_player") && cvar("g_balance_vore_regurgitate_swallowprogress"))\r
{\r
e.swallow_progress_prey = cvar("g_balance_vore_regurgitate_swallowprogress");\r
- Vore_SwallowModel_Update(e, e.predator);\r
+ Vore_GulletModel_Update(e, e.predator);\r
}\r
\r
// apply regurgitation damage to the predator\r
{\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
+ float speed = cvar("g_balance_vore_swallow_speed_decrease");\r
+ if(cvar("g_balance_vore_swallow_speed_decrease_even"))\r
+ speed += self.swallow_progress_prey * cvar("g_balance_vore_swallow_speed_decrease_even");\r
+ self.swallow_progress_pred = max(0, self.swallow_progress_pred - speed * frametime);\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
+ float speed = cvar("g_balance_vore_swallow_speed_decrease");\r
+ if(cvar("g_balance_vore_swallow_speed_decrease_even"))\r
+ speed += self.swallow_progress_pred * cvar("g_balance_vore_swallow_speed_decrease_even");\r
+ self.swallow_progress_prey = max(0, self.swallow_progress_prey - cvar("g_balance_vore_swallow_speed_decrease") * frametime);\r
}\r
}\r
\r
\r
// always position camera at the center of the stomach, to reduce probability of the view poking out\r
self.view_ofs_z = PL_PREY_VIEW_OFS_z * self.predator.scale;\r
-}
\ No newline at end of file
+}\r