From d2f1fa55a0f453e6174aacbd83980a6e35a743df Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 21 Sep 2006 19:55:43 +0000 Subject: [PATCH] UNTESTED fix for "armor increases slowly for no reason" bug. PLEASE TEST. git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1891 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_client.qc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index 1488ba28a..3ff8143af 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -1143,6 +1143,16 @@ void player_powerups (void) self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT); } +float CalcRegen(float current, float stable, float maxv, float regenfactor) +{ + if(current > maxv) + return current; + else if(current > maxv - 0.25) // when close enough, "snap" + return maxv; + else + return bound(0, current + (maxv - current) * regenfactor * frametime, maxv); +} + void player_regen (void) { float maxh, maxa, limith, limita, max_mod, regen_mod, rot_mod, limit_mod; @@ -1198,10 +1208,8 @@ void player_regen (void) } if (time > self.pauseregen_finished) { - if (self.health < maxh) - self.health = bound(0, self.health + (maxh- self.health) * regen_mod*cvar("g_balance_health_regen") * frametime + 0.001, 1000); - if (self.armorvalue < maxa) - self.armorvalue = bound(0, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_regen") * frametime + 0.001, 1000); + self.health = CalcRegen(self.health, maxh, 1000, regen_mod * cvar("g_balance_health_regen")); + self.armorvalue = CalcRegen(self.armorvalue, maxh, 1000, cvar("g_balance_health_regen")); } } else @@ -1214,10 +1222,8 @@ void player_regen (void) self.armorvalue = bound(0, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime, 1000); if (time > self.pauseregen_finished) { - if (self.health < maxh) - self.health = bound(0, self.health + (maxh - self.health) * cvar("g_balance_health_regen") * frametime + 0.001, 1000); - if (self.armorvalue < maxa) - self.armorvalue = bound(0, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_regen") * frametime + 0.001, 1000); + self.health = CalcRegen(self.health, maxh, 1000, cvar("g_balance_health_regen")); + self.armorvalue = CalcRegen(self.armorvalue, maxh, 1000, cvar("g_balance_health_regen")); } } -- 2.39.2