From: Rudolf Polzer Date: Tue, 19 Oct 2010 12:51:48 +0000 (+0200) Subject: nex charge: properly support g_use_ammunition; don't bite off more than you can chew... X-Git-Tag: xonotic-v0.1.0preview~280 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=99e0de6d197aae596bbd1a1e2154f9a49029a63b;p=xonotic%2Fxonotic-data.pk3dir.git nex charge: properly support g_use_ammunition; don't bite off more than you can chew (stop charging from cells if you drop below the cells for a single shot) --- diff --git a/qcsrc/server/w_electro.qc b/qcsrc/server/w_electro.qc index 4bee058f0..2268ca7cb 100644 --- a/qcsrc/server/w_electro.qc +++ b/qcsrc/server/w_electro.qc @@ -238,8 +238,10 @@ void lgbeam_think() if not(self.owner.items & IT_UNLIMITED_WEAPON_AMMO) { if(cvar("g_balance_electro_primary_ammo")) - dt = min(frametime, self.owner.ammo_cells / cvar("g_balance_electro_primary_ammo")); - self.owner.ammo_cells = max(0, self.owner.ammo_cells - cvar("g_balance_electro_primary_ammo") * frametime); + { + dt = min(dt, self.owner.ammo_cells / cvar("g_balance_electro_primary_ammo")); + self.owner.ammo_cells = max(0, self.owner.ammo_cells - cvar("g_balance_electro_primary_ammo") * frametime); + } } W_SetupShot_Range(self.owner, TRUE, 0, "", cvar("g_balance_electro_primary_damage") * dt, cvar("g_balance_electro_primary_range")); diff --git a/qcsrc/server/w_nex.qc b/qcsrc/server/w_nex.qc index b30b2255d..64c9c385b 100644 --- a/qcsrc/server/w_nex.qc +++ b/qcsrc/server/w_nex.qc @@ -74,6 +74,7 @@ void spawnfunc_weapon_nex (void); // defined in t_items.qc float w_nex(float req) { + float dt; if (req == WR_AIM) { self.BUTTON_ATCK = bot_aim(1000000, 0, 1, FALSE); @@ -95,10 +96,23 @@ float w_nex(float req) { if(cvar("g_balance_nex_secondary_charge")) { - if(self.ammo_cells && self.nex_charge < 1) + dt = frametime / W_TICSPERFRAME; + if(self.nex_charge < 1) { - self.nex_charge = min(1, self.nex_charge + cvar("g_balance_nex_secondary_charge_rate") * frametime / W_TICSPERFRAME); - self.ammo_cells = max(0, self.ammo_cells - cvar("g_balance_nex_secondary_ammo") * frametime / W_TICSPERFRAME); + dt = min(dt, (1 - self.nex_charge) / cvar("g_balance_nex_secondary_charge_rate")); + if not(self.items & IT_UNLIMITED_WEAPON_AMMO) + { + if(cvar("g_balance_nex_secondary_ammo")) + { + dt = min(dt, (self.ammo_cells - cvar("g_balance_nex_primary_ammo")) / cvar("g_balance_nex_secondary_ammo")); + dt = max(0, dt); + if(dt > 0) + { + self.ammo_cells = max(cvar("g_balance_nex_secondary_ammo"), self.ammo_cells - cvar("g_balance_nex_secondary_ammo") * dt); + } + } + } + self.nex_charge += dt * cvar("g_balance_nex_secondary_charge_rate"); } } else if(cvar("g_balance_nex_secondary")) @@ -127,7 +141,11 @@ float w_nex(float req) else if (req == WR_CHECKAMMO1) return self.ammo_cells >= cvar("g_balance_nex_primary_ammo"); else if (req == WR_CHECKAMMO2) + { + if(cvar("g_balance_nex_secondary_charge")) + return self.ammo_cells >= cvar("g_balance_nex_primary_ammo"); return self.ammo_cells >= cvar("g_balance_nex_secondary_ammo"); + } return TRUE; }; #endif