From e9cae2b0847db96224527392003832576f2f3200 Mon Sep 17 00:00:00 2001 From: MirceaKitsune Date: Tue, 3 May 2011 03:11:14 +0300 Subject: [PATCH] Some major changes to fake prey and the way prey is hidden. Fixes a bug and might prevent and improve other parts. --- data/qcsrc/server/cl_client.qc | 7 +++++-- data/qcsrc/server/g_violence.qc | 2 +- data/qcsrc/server/vore.qc | 17 ++++++----------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index 73bc1803..63ae5907 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -530,6 +530,8 @@ float Client_customizeentityforclient() Client_setmodel(setmodel_state()); if not(self.predator.classname == "player" || self.fakeprey) self.alpha = default_player_alpha; + else + self.alpha = -1; // hide all prey return TRUE; } @@ -827,6 +829,7 @@ void PutClientInServer (void) RemoveGrabber(self); // Wazat's Grabber Vore_DeadPrey_Detach(self); + self.fakeprey = 0; // completely clear the fakeprey status self.classname = "player"; self.wasplayer = TRUE; @@ -2263,13 +2266,13 @@ void ApplyHealthSize() if(self.crouch) { //setsize (self, PL_CROUCH_MIN * self.scale, PL_CROUCH_MAX * self.scale); - if not(self.predator.classname == "player" || self.fakeprey) + if not(self.predator.classname == "player" || self.fakeprey > 1) self.view_ofs = PL_CROUCH_VIEW_OFS * self.scale; } else { //setsize (self, PL_MIN * self.scale, PL_MAX * self.scale); - if not(self.predator.classname == "player" || self.fakeprey) + if not(self.predator.classname == "player" || self.fakeprey > 1) self.view_ofs = PL_VIEW_OFS * self.scale; } } diff --git a/data/qcsrc/server/g_violence.qc b/data/qcsrc/server/g_violence.qc index 7bc550dc..769b19d9 100644 --- a/data/qcsrc/server/g_violence.qc +++ b/data/qcsrc/server/g_violence.qc @@ -13,7 +13,7 @@ float Violence_GibSplash_SendEntity(entity to, float sf) // TODO maybe convert this to a TE? void Violence_GibSplash_At(vector org, vector dir, float type, float amount, entity gibowner, entity attacker) { - if(gibowner.predator.classname == "player") + if(gibowner.predator.classname == "player" || gibowner.fakeprey > 1) return; // you can't bleed or gib outside of the stomach entity e; diff --git a/data/qcsrc/server/vore.qc b/data/qcsrc/server/vore.qc index b2fa9e60..eb9ab112 100644 --- a/data/qcsrc/server/vore.qc +++ b/data/qcsrc/server/vore.qc @@ -129,7 +129,7 @@ void Vore_CameraEffect_Set(entity e) } void Vore_CameraEffect_Apply() { - if not(self.predator.classname == "player" || self.fakeprey) + if not(self.predator.classname == "player" || self.fakeprey > 1) return; if(self.cvar_cl_vore_cameraspeed) @@ -151,7 +151,7 @@ void Vore_CameraEffect_Apply() self.view_ofs_z = PL_PREY_VIEW_OFS_z / self.cameraeffect_current; float prey_height; - if(self.fakeprey) + if(self.fakeprey > 1) prey_height = (self.scale - self.fakepredator.scale) * cvar("g_healthsize_vore_pos"); else prey_height = (self.scale - self.predator.scale) * cvar("g_healthsize_vore_pos"); @@ -212,7 +212,6 @@ void Vore_Swallow(entity e) e.velocity = '0 0 0'; e.movetype = MOVETYPE_FOLLOW; e.solid = SOLID_NOT; - e.alpha = -1; // best way of hiding the eaten player e.aiment = e.predator; // follow the predator, automatically unset when regurgitated // drop keys (KH) and flags (CTF) when we get swallowed @@ -256,7 +255,6 @@ void Vore_Regurgitate(entity e) if(e.health > 0) // leave SOLID_NOT for dead bodies e.solid = e.vore_oldsolid; e.view_ofs_z = PL_VIEW_OFS_z; - e.alpha = default_player_alpha; // apply velocities local vector oldforward, oldright, oldup; @@ -297,7 +295,7 @@ void Vore_DeadPrey_Configure(entity e) // this entity is like e.predator but for dead prey, to avoid conflicts e.fakepredator = e.predator; - e.fakeprey = TRUE; + e.fakeprey = 2; // is fakeprey in a stomach // first release the prey from the predator, as dead prey needs to be attached differently // the predator's stomach load is also decreased, as dead prey doesn't count any more @@ -310,9 +308,6 @@ void Vore_DeadPrey_Configure(entity e) e.takedamage = DAMAGE_NO; e.solid = SOLID_NOT; e.aiment = e.fakepredator; - - // completely remove the dead body - e.modelindex = 0; } void Vore_DeadPrey_Detach(entity e) @@ -324,7 +319,7 @@ void Vore_DeadPrey_Detach(entity e) return; e.fakepredator = world; - e.fakeprey = FALSE; + e.fakeprey = 1; // was fakeprey but is now detached e.aiment = world; e.movetype = MOVETYPE_TOSS; } @@ -333,7 +328,7 @@ void Vore_PreyRelease(entity e, float pred_disconnect) { if(pred_disconnect) { - if(e.fakeprey) + if(e.fakeprey > 1) Vore_DeadPrey_Detach(e); else Vore_Regurgitate(e); @@ -515,7 +510,7 @@ void Vore() } // set all vore stats - if(self.fakeprey) + if(self.fakeprey > 1) self.stat_eaten = num_for_edict(self.fakepredator); else if(self.predator.classname == "player") { -- 2.39.2