X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_hagar.qc;h=c54164299a8f05cbbbeeeb2100efab68483d94b5;hb=695cd1f79336cc38ce083bafe2118b44a638fde5;hp=ab4e9ee3bfec833d45da1e338ed09befc2bf3c1f;hpb=6e3050bb5c8dc67ed5b7763dcca25464a8cd2057;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/w_hagar.qc b/qcsrc/server/w_hagar.qc index ab4e9ee3b..c54164299 100644 --- a/qcsrc/server/w_hagar.qc +++ b/qcsrc/server/w_hagar.qc @@ -115,31 +115,45 @@ void W_Hagar_Attack2 (void) other = missile; MUTATOR_CALLHOOK(EditProjectile); } -.float hagarload_refire, hagarload_loaded; - +.float hagarload_refire; void W_Hagar_Attack2_Load (void) { - if not(autocvar_g_balance_hagar_secondary) + if not(weapon_action(self.weapon, WR_CHECKAMMO2)) + { + W_SwitchToOtherWeapon(self); return; + } local entity missile, prevmissile, firstmissile; - local float counter, shots; + local float counter, shots, loaded; + local float used_ammo, enough_ammo; local vector s; vector forward, right, up; - if(self.BUTTON_ATCK2 && !self.hagarload_loaded) + loaded = self.hagar_load >= autocvar_g_balance_hagar_secondary_load_maxload; + + // check if we have enough ammo for another rocket + used_ammo = autocvar_g_balance_hagar_secondary_ammo; + if(autocvar_g_balance_hagar_reload_ammo) + enough_ammo = self.weapon_load[WEP_HAGAR] >= used_ammo + (used_ammo * self.hagar_load); + else + enough_ammo = self.ammo_rockets >= used_ammo + (used_ammo * self.hagar_load); + + if(self.BUTTON_ATCK2 && !loaded && enough_ammo) { + // we can attempt to load another rocket if(self.hagarload_refire < time) { self.hagar_load += 1; - if(self.hagar_load >= autocvar_g_balance_hagar_secondary_load_maxload) - self.hagarload_loaded = TRUE; + sound(self, CHAN_WEAPON2, "weapons/hagar_load.wav", VOL_BASE, ATTN_NORM); self.hagarload_refire = time + autocvar_g_balance_hagar_secondary_refire; } } - else if(self.hagar_load) + else if(self.hagar_load && (!self.BUTTON_ATCK2 || ((loaded || !enough_ammo) && !autocvar_g_balance_hagar_secondary_load_canhold))) { + // time to release the rockets we've loaded + W_SetupShot (self, FALSE, 2, "weapons/hagar_fire.wav", CHAN_WEAPON, autocvar_g_balance_hagar_secondary_damage); pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); @@ -153,12 +167,12 @@ void W_Hagar_Attack2_Load (void) missile = world; while (counter < shots) { - missile = spawn (); missile.owner = missile.realowner = self; missile.classname = "missile"; missile.bot_dodge = TRUE; missile.bot_dodgerating = autocvar_g_balance_hagar_secondary_damage; + if(shots == 1) { missile.queuenext = missile; missile.queueprev = missile; @@ -176,7 +190,6 @@ void W_Hagar_Attack2_Load (void) prevmissile.queuenext = missile; missile.queueprev = prevmissile; } - prevmissile = missile; missile.touch = W_Hagar_Touch; @@ -187,7 +200,6 @@ void W_Hagar_Attack2_Load (void) missile.projectiledeathtype = WEP_HAGAR; setorigin (missile, w_shotorg); setsize(missile, '0 0 0', '0 0 0'); - missile.movetype = MOVETYPE_FLY; s = '0 0 0'; @@ -213,7 +225,6 @@ void W_Hagar_Attack2_Load (void) } self.hagar_load = 0; - self.hagarload_loaded = FALSE; } } @@ -237,7 +248,7 @@ float w_hagar(float req) { if(autocvar_g_balance_hagar_reload_ammo && self.clip_load < min(autocvar_g_balance_hagar_primary_ammo, autocvar_g_balance_hagar_secondary_ammo)) // forced reload weapon_action(self.weapon, WR_RELOAD); - else if (self.BUTTON_ATCK && !self.hagar_load) // not while loading secondary fire + else if (self.BUTTON_ATCK && !self.hagar_load) // not while loading the secondary fire { if (weapon_prepareattack(0, autocvar_g_balance_hagar_primary_refire)) { @@ -245,7 +256,7 @@ float w_hagar(float req) weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_hagar_primary_refire, w_ready); } } - else if(autocvar_g_balance_hagar_secondary_load) + else if(autocvar_g_balance_hagar_secondary_load && autocvar_g_balance_hagar_secondary) W_Hagar_Attack2_Load(); // must run each frame else if (self.BUTTON_ATCK2 && autocvar_g_balance_hagar_secondary) { @@ -262,6 +273,7 @@ float w_hagar(float req) precache_model ("models/weapons/v_hagar.md3"); precache_model ("models/weapons/h_hagar.iqm"); precache_sound ("weapons/hagar_fire.wav"); + precache_sound ("weapons/hagar_load.wav"); //precache_sound ("weapons/reload.wav"); // until weapons have individual reload sounds, precache the reload sound somewhere else } else if (req == WR_SETUP) @@ -270,7 +282,6 @@ float w_hagar(float req) self.current_ammo = ammo_rockets; self.hagar_load = 0; - self.hagarload_loaded = FALSE; } else if (req == WR_CHECKAMMO1) {