From bfaeb550b41ee930f807537fedce6cb4470463c0 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 12 May 2009 15:16:41 +0000 Subject: [PATCH] items: randomize initial spawn of powerups fully regeneration: always regenerate fuel, even in LMS git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6719 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_client.qc | 69 +++++++++++++++++----------------- data/qcsrc/server/t_items.qc | 27 +++++++++---- 2 files changed, 55 insertions(+), 41 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index 3f447a87a..f772b3296 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -1745,9 +1745,6 @@ void player_regen (void) limita = cvar("g_balance_armor_limit"); limitf = cvar("g_balance_fuel_limit"); - if (g_minstagib || (g_lms && !cvar("g_lms_regenerate"))) - return; - max_mod = regen_mod = rot_mod = limit_mod = 1; if (self.runes & RUNE_REGEN) @@ -1783,38 +1780,51 @@ void player_regen (void) limita = limita * limit_mod; //limitf = limitf * limit_mod; - if (self.armorvalue > maxa) + if (!g_minstagib && (!g_lms || cvar("g_lms_regenerate"))) { - if (time > self.pauserotarmor_finished) + if (self.armorvalue > maxa) { - self.armorvalue = max(maxa, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime); - self.armorvalue = max(maxa, self.armorvalue - cvar("g_balance_armor_rotlinear") * frametime); + if (time > self.pauserotarmor_finished) + { + self.armorvalue = max(maxa, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime); + self.armorvalue = max(maxa, self.armorvalue - cvar("g_balance_armor_rotlinear") * frametime); + } } - } - else if (self.armorvalue < maxa) - { - if (time > self.pauseregen_finished) + else if (self.armorvalue < maxa) { - self.armorvalue = CalcRegen(self.armorvalue, maxa, cvar("g_balance_armor_regen")); - self.armorvalue = min(maxa, self.armorvalue + cvar("g_balance_armor_regenlinear") * frametime); + if (time > self.pauseregen_finished) + { + self.armorvalue = CalcRegen(self.armorvalue, maxa, cvar("g_balance_armor_regen")); + self.armorvalue = min(maxa, self.armorvalue + cvar("g_balance_armor_regenlinear") * frametime); + } } - } - if (self.health > maxh) - { - if (time > self.pauserothealth_finished) + if (self.armorvalue > limita) + self.armorvalue = limita; + + if (self.health > maxh) { - self.health = max(maxh, self.health + (maxh - self.health) * rot_mod*cvar("g_balance_health_rot") * frametime); - self.health = max(maxh, self.health - rot_mod*cvar("g_balance_health_rotlinear") * frametime); + if (time > self.pauserothealth_finished) + { + self.health = max(maxh, self.health + (maxh - self.health) * rot_mod*cvar("g_balance_health_rot") * frametime); + self.health = max(maxh, self.health - rot_mod*cvar("g_balance_health_rotlinear") * frametime); + } } - } - else if (self.health < maxh) - { - if (time > self.pauseregen_finished) + else if (self.health < maxh) { - self.health = CalcRegen(self.health, maxh, regen_mod * cvar("g_balance_health_regen")); - self.health = min(maxh, self.health + regen_mod*cvar("g_balance_health_regenlinear") * frametime); + if (time > self.pauseregen_finished) + { + self.health = CalcRegen(self.health, maxh, regen_mod * cvar("g_balance_health_regen")); + self.health = min(maxh, self.health + regen_mod*cvar("g_balance_health_regenlinear") * frametime); + } } + if (self.health > limith) + self.health = limith; + + // if player rotted to death... die! + if(self.health < 1) + self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0'); } + if (self.ammo_fuel > maxf) { if (time > self.pauserotfuel_finished) @@ -1834,17 +1844,8 @@ void player_regen (void) } } } - - if (self.health > limith) - self.health = limith; - if (self.armorvalue > limita) - self.armorvalue = limita; if (self.ammo_fuel > limitf) self.ammo_fuel = limitf; - - // if player rotted to death... die! - if(self.health < 1) - self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0'); } float zoomstate_set; diff --git a/data/qcsrc/server/t_items.qc b/data/qcsrc/server/t_items.qc index d5a90a3a0..b2f0f0ebe 100644 --- a/data/qcsrc/server/t_items.qc +++ b/data/qcsrc/server/t_items.qc @@ -1,4 +1,7 @@ -#define ITEM_RESPAWNTIME(i) ((i).respawntime + crandom() * (i).respawntimejitter) +#define ITEM_RESPAWNTIME(i) ((i).respawntime + crandom() * (i).respawntimejitter) + // range: respawntime - respawntimejitter .. respawntime + respawntimejitter +#define ITEM_RESPAWNTIME_INITIAL(i) (10 + random() * ((i).respawntime + (i).respawntimejitter - 10)) + // range: 10 .. respawntime + respawntimejitter floatfield Item_CounterField(float it) { @@ -99,21 +102,31 @@ void Item_RespawnCountdown (void) } } -void Item_ScheduleRespawn(entity e) +void Item_ScheduleRespawnIn(entity e, float t) { if(e.flags & FL_POWERUP) { e.think = Item_RespawnCountdown; - e.nextthink = time + ITEM_RESPAWNTIME(e) - 5; + e.nextthink = time + max(0, t - 5); e.count = 0; } else { e.think = Item_Respawn; - e.nextthink = time + ITEM_RESPAWNTIME(e); + e.nextthink = time + t; } } +void Item_ScheduleRespawn(entity e) +{ + Item_ScheduleRespawnIn(e, ITEM_RESPAWNTIME(e)); +} + +void Item_ScheduleInitialRespawn(entity e) +{ + Item_ScheduleRespawnIn(e, ITEM_RESPAWNTIME_INITIAL(e)); +} + float Item_GiveTo(entity item, entity player) { float _switchweapon; @@ -381,7 +394,7 @@ void Item_FindTeam() { e.solid = SOLID_NOT; e.model = string_null; - Item_ScheduleRespawn(e); + Item_ScheduleInitialRespawn(e); } } } @@ -406,7 +419,7 @@ void Item_Reset() { self.solid = SOLID_NOT; self.model = string_null; - Item_ScheduleRespawn(self); + Item_ScheduleInitialRespawn(self); } } @@ -656,7 +669,7 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, { self.solid = SOLID_NOT; self.model = string_null; - Item_ScheduleRespawn(self); + Item_ScheduleInitialRespawn(self); } } -- 2.39.2