+.entity swallow_model;\r
+void Vore_SwallowModel_Think()\r
+{\r
+ //update the position of the swallow model to match our swallow progress\r
+ float dist;\r
+ dist = (-0.5 + self.owner.swallow_progress_prey) * cvar("g_vore_swallowmodel_range"); // the model is centered at 0.5 progress\r
+ if(cvar("g_healthsize"))\r
+ dist *= self.scale;\r
+ self.view_ofs = '1 0 0' * dist;\r
+\r
+ // if our swallow progress is gone or we are dead, the swallow model also goes away\r
+ if(!self.owner.swallow_progress_prey || self.owner.deadflag != DEAD_NO || self.owner.classname != "player")\r
+ {\r
+ remove(self.owner.swallow_model);\r
+ self.owner.swallow_model = world;\r
+ return;\r
+ }\r
+\r
+ // properties that should update whenever possible, but when the predator is not available\r
+ self.alpha = self.owner.cvar_cl_vore_swallowmodel;\r
+ self.nextthink = time;\r
+}\r
+\r
+void Vore_SwallowModel_Update(entity prey, entity pred)\r
+{\r
+ // if we don't have a swallow model already, spawn one\r
+ if(!prey.swallow_model)\r
+ {\r
+ prey.swallow_model = spawn();\r
+\r
+ prey.swallow_model.movetype = MOVETYPE_FOLLOW;\r
+ prey.swallow_model.solid = SOLID_NOT;\r
+\r
+ // apply the properties of the prey\r
+ prey.swallow_model.viewmodelforclient = prey; // use the same system as the weapon 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.colormap = prey.colormap; // pants and shirt color\r
+ prey.swallow_model.glowmod = prey.glowmod; // glow color\r
+\r
+ prey.swallow_model.owner = prey; // owned by the prey\r
+ prey.swallow_model.think = Vore_SwallowModel_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
+ 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
+ prey.swallow_model.scale = pred.scale / prey.scale; // player size difference\r
+ if(prey.swallow_model.enemy != pred)\r
+ prey.swallow_model.enemy = pred; // enemy is the predator\r
+}\r
+\r