- // prey disconnects or goes spectating while inside someone's belly:\r
- if(self.eater.classname == "player")\r
- {\r
- self.view_ofs_z = self.vore_oldview_ofs_z;\r
- self.eater.stomach_load -= 1;\r
- Vore_Weight_apply(self.eater);\r
- self.eater = world;\r
- }\r
+ if(e.fakeprey || e.predator.classname != "player") // already configured\r
+ return;\r
+\r
+ // this entity is like e.predator but for dead prey, to avoid conflicts\r
+ e.fakepredator = e.predator;\r
+ e.fakeprey = TRUE;\r
+\r
+ // first release the prey from the predator, as dead prey needs to be attached differently\r
+ // the predator's stomach load is also decreased, as dead prey doesn't count any more\r
+ e.predator.stomach_load -= 1;\r
+ Vore_WeightApply(e.predator);\r
+ e.predator = world;\r
+\r
+ // now put our dead prey inside the predator's stomach, but only as an effect\r
+ e.movetype = MOVETYPE_FOLLOW;\r
+ e.takedamage = DAMAGE_NO;\r
+ e.solid = SOLID_NOT;\r
+ e.aiment = e.fakepredator;\r
+\r
+ // completely remove the dead body\r
+ e.modelindex = 0;\r
+}\r
+\r
+void Vore_DeadPrey_Detach(entity e)\r
+{\r
+ // ran when dead prey must be detached from the stomach (eg: they are respawning)\r
+ // should only execute after Vore_DeadPrey_Configure has ran first\r
+\r
+ if not(cvar("g_vore_keepdeadprey"))\r
+ return;\r
+\r
+ e.fakepredator = world;\r
+ e.fakeprey = FALSE;\r
+ e.aiment = world;\r
+ e.movetype = MOVETYPE_TOSS;\r
+}\r