From: Mircea Kitsune Date: Fri, 21 Jan 2011 02:03:50 +0000 (+0200) Subject: Part 2 of per-weapon load persistence. Much closer to what it should be like X-Git-Tag: xonotic-v0.5.0~309^2~7^2~176 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=8c2ca1c3540e236dad9cab692e8bdff19cd2c7a8;p=xonotic%2Fxonotic-data.pk3dir.git Part 2 of per-weapon load persistence. Much closer to what it should be like --- diff --git a/balanceXonotic.cfg b/balanceXonotic.cfg index 414222b28..24bdbe08b 100644 --- a/balanceXonotic.cfg +++ b/balanceXonotic.cfg @@ -263,7 +263,7 @@ set g_balance_shotgun_secondary_damage 110 set g_balance_shotgun_secondary_force 150 set g_balance_shotgun_secondary_refire 1.1 set g_balance_shotgun_secondary_animtime 1 -set g_balance_shotgun_reload_ammo 4 +set g_balance_shotgun_reload_ammo 5 // }}} // {{{ uzi set g_balance_uzi_mode 1 // Activates varible spread for sustained & burst mode secondary diff --git a/qcsrc/server/cl_weaponsystem.qc b/qcsrc/server/cl_weaponsystem.qc index 31f3da102..914abef35 100644 --- a/qcsrc/server/cl_weaponsystem.qc +++ b/qcsrc/server/cl_weaponsystem.qc @@ -1616,27 +1616,16 @@ void W_SetupProjectileVelocity(entity missile, float pSpeed, float spread) // weapon reload code // ---------------------------------------------------------------- -void W_ReloadedAndReady() +float W_ReloadCheck(float ammo_amount) { - float t; - self.ammo_counter = autocvar_g_balance_sniperrifle_magazinecapacity; - t = ATTACK_FINISHED(self) - autocvar_g_balance_sniperrifle_reloadtime - 1; - ATTACK_FINISHED(self) = t; - w_ready(); -} - -float W_Reload(float ammo_value) -{ - float t; - - if(ammo_value < min(autocvar_g_balance_sniperrifle_primary_ammo, autocvar_g_balance_sniperrifle_secondary_ammo)) // when we get here, bulletcounter must be 0 or -1 + if(ammo_amount < min(autocvar_g_balance_sniperrifle_primary_ammo, autocvar_g_balance_sniperrifle_secondary_ammo)) // when we get here, ammo_counter must be 0 or -1 { - print("cannot reload... not enough bullets\n"); + print("cannot reload... not enough ammo\n"); self.ammo_counter = -1; // reload later W_SwitchToOtherWeapon(self); return 0; } - + if (self.ammo_counter >= autocvar_g_balance_shotgun_reload_ammo) return 0; @@ -1649,15 +1638,6 @@ float W_Reload(float ammo_value) self.weaponentity.state = WS_READY; } - sound (self, CHAN_WEAPON2, "weapons/campingrifle_reload.wav", VOL_BASE, ATTN_NORM); - - t = max(time, ATTACK_FINISHED(self)) + autocvar_g_balance_sniperrifle_reloadtime + 1; - ATTACK_FINISHED(self) = t; - - weapon_thinkf(WFRAME_RELOAD, autocvar_g_balance_sniperrifle_reloadtime, W_ReloadedAndReady); - - self.ammo_counter = -1; - return 1; } diff --git a/qcsrc/server/w_shotgun.qc b/qcsrc/server/w_shotgun.qc index 4af29229d..13f2cfe67 100644 --- a/qcsrc/server/w_shotgun.qc +++ b/qcsrc/server/w_shotgun.qc @@ -7,31 +7,50 @@ REGISTER_WEAPON(SHOTGUN, w_shotgun, IT_SHELLS, 2, WEP_FLAG_NORMAL | WEP_TYPE_HIT void W_Shotgun_SetAmmoCounter() { - // set our ammo counter to the weapon we have switched to + // set ammo counter to the weapon we have switched to if(!autocvar_g_balance_shotgun_reload_ammo) self.ammo_counter = 0; // also keeps the crosshair ammo from displaying else self.ammo_counter = self.shotgun_load; } +void W_Shotgun_ReloadedAndReady() +{ + float t; + + // now do the ammo maths + self.ammo_counter = 0; // when we get here it's -1 + while(self.ammo_counter < autocvar_g_balance_shotgun_reload_ammo) + { + self.ammo_counter += 1; + self.ammo_shells -= 1; + } + self.shotgun_load = self.ammo_counter; + + t = ATTACK_FINISHED(self) - autocvar_g_balance_sniperrifle_reloadtime - 1; + ATTACK_FINISHED(self) = t; + w_ready(); +} + void W_Shotgun_Reload() { // reloading is disabled for this weapon if(!autocvar_g_balance_shotgun_reload_ammo) return; - w_ready(); - if(W_Reload(self.ammo_shells)) - { - // now do the actual ammo transfer - for(self.shotgun_load; self.shotgun_load < autocvar_g_balance_shotgun_reload_ammo && self.ammo_shells; ) - { - self.ammo_counter += 1; - self.shotgun_load = self.ammo_counter; - self.ammo_shells -= 1; - } + float t; + + if(!W_ReloadCheck(self.ammo_shells)) return; - } + + sound (self, CHAN_WEAPON2, "weapons/campingrifle_reload.wav", VOL_BASE, ATTN_NORM); + + t = max(time, ATTACK_FINISHED(self)) + autocvar_g_balance_sniperrifle_reloadtime + 1; + ATTACK_FINISHED(self) = t; + + weapon_thinkf(WFRAME_RELOAD, autocvar_g_balance_sniperrifle_reloadtime, W_Shotgun_ReloadedAndReady); + + self.ammo_counter = -1; } void W_Shotgun_Attack (void) @@ -182,7 +201,7 @@ float w_shotgun(float req) if(self.weaponentity.state == WS_READY) { self.wish_reload = 0; - W_Reload(self.ammo_shells); + W_Shotgun_Reload(); } } } diff --git a/qcsrc/server/w_sniperrifle.qc b/qcsrc/server/w_sniperrifle.qc index 378e0622a..10d77affa 100644 --- a/qcsrc/server/w_sniperrifle.qc +++ b/qcsrc/server/w_sniperrifle.qc @@ -24,13 +24,13 @@ void W_SniperRifle_Reload() return; w_ready(); - if(W_Reload(self.ammo_nails)) + /*if(W_Reload(self.ammo_nails)) { // now do the actual ammo transfer for(self.sniperrifle_load; self.sniperrifle_load < autocvar_g_balance_shotgun_reload_ammo && self.ammo_nails; ++self.sniperrifle_load) self.ammo_nails -= 1; return; - } + }*/ } float W_SniperRifle_CheckMaxBullets(float checkammo) @@ -110,8 +110,8 @@ void spawnfunc_weapon_campingrifle (void) void W_SniperRifle_BulletHail_Continue() { float r, sw, af; - if(self.ammo_counter <= 0) - W_SniperRifle_Reload(); + //if(self.ammo_counter <= 0) + //W_SniperRifle_Reload(); if(self.ammo_counter < 0) return; // reloading, so we are done sw = self.switchweapon; // make it not detect weapon changes as reason to abort firing @@ -224,7 +224,7 @@ float w_sniperrifle(float req) if(self.weaponentity.state == WS_READY) { self.wish_reload = 0; - W_Reload(self.ammo_nails); + //W_Reload(self.ammo_nails); } } }