]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/w_hagar.qc
Merge branch 'master' into terencehill/maximized_radar
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / w_hagar.qc
index 0be80db124af3c7675ffc929ac1537d7eff9e81f..1952607b823e04838f4f4b671a97a009d4a844f9 100644 (file)
@@ -118,7 +118,7 @@ void W_Hagar_Attack2_Load_Release (void)
        // time to release the rockets we've loaded
 
        local entity missile;
-       local float counter, shots;
+       local float counter, shots, spread_pershot;
        local vector s;
        vector forward, right, up;
 
@@ -153,7 +153,13 @@ void W_Hagar_Attack2_Load_Release (void)
                setorigin (missile, w_shotorg);
                setsize(missile, '0 0 0', '0 0 0');
                missile.movetype = MOVETYPE_FLY;
-
+               
+               // per-shot spread calculation: the more shots there are, the less spread is applied (based on the bias cvar)
+               spread_pershot = ((shots - 1) / (autocvar_g_balance_hagar_secondary_load_max - 1)); 
+               spread_pershot = (1 - (spread_pershot * autocvar_g_balance_hagar_secondary_load_spread_bias));
+               spread_pershot = (autocvar_g_balance_hagar_secondary_spread * spread_pershot * g_weaponspreadfactor);
+               
+               // pattern spread calculation
                s = '0 0 0';
                if (counter == 0)
                        s = '0 0 0';
@@ -163,8 +169,9 @@ void W_Hagar_Attack2_Load_Release (void)
                        s_y = v_forward_x;
                        s_z = v_forward_y;
                }
-               s = s * cvar("g_balance_hagar_secondary_spread") * g_weaponspreadfactor;
-               W_SetupProjectileVelocityEx(missile, w_shotdir + right * s_y + up * s_z, v_up, cvar("g_balance_hagar_secondary_speed"), 0, 0, 0, FALSE);
+               s = s * autocvar_g_balance_hagar_secondary_load_spread * g_weaponspreadfactor;
+               
+               W_SetupProjectileVelocityEx(missile, w_shotdir + right * s_y + up * s_z, v_up, autocvar_g_balance_hagar_secondary_speed, 0, 0, spread_pershot, FALSE);
 
                missile.angles = vectoangles (missile.velocity);
                missile.flags = FL_PROJECTILE;
@@ -177,7 +184,7 @@ void W_Hagar_Attack2_Load_Release (void)
        }
 
        weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_hagar_secondary_refire, w_ready);
-       self.hagar_loadstep = time + autocvar_g_balance_hagar_secondary_refire;
+       self.hagar_loadstep = time + autocvar_g_balance_hagar_secondary_refire * W_WeaponRateFactor();
        self.hagar_load = 0;
 }
 
@@ -190,7 +197,7 @@ void W_Hagar_Attack2_Load (void)
 
        // this is different than WR_CHECKAMMO when it comes to reloading
        if(autocvar_g_balance_hagar_reload_ammo)
-               enough_ammo = self.weapon_load[WEP_HAGAR] >= autocvar_g_balance_hagar_secondary_ammo;
+               enough_ammo = self.(weapon_load[WEP_HAGAR]) >= autocvar_g_balance_hagar_secondary_ammo;
        else
                enough_ammo = self.ammo_rockets >= autocvar_g_balance_hagar_secondary_ammo;
 
@@ -207,7 +214,7 @@ void W_Hagar_Attack2_Load (void)
                                sound(self, CH_WEAPON_A, "weapons/hagar_beep.wav", VOL_BASE, ATTN_NORM);
 
                                // pause until we can load rockets again, once we re-press the alt fire button
-                               self.hagar_loadstep = time + autocvar_g_balance_hagar_secondary_load_speed;
+                               self.hagar_loadstep = time + autocvar_g_balance_hagar_secondary_load_speed * W_WeaponRateFactor();
 
                                // require letting go of the alt fire button before we can load again
                                self.hagar_loadblock = TRUE;
@@ -225,7 +232,7 @@ void W_Hagar_Attack2_Load (void)
                                        self.hagar_load += 1;
                                        sound(self, CH_WEAPON_B, "weapons/hagar_load.wav", VOL_BASE, ATTN_NORM);
 
-                                       self.hagar_loadstep = time + autocvar_g_balance_hagar_secondary_load_speed;
+                                       self.hagar_loadstep = time + autocvar_g_balance_hagar_secondary_load_speed * W_WeaponRateFactor();
                                }
                        }
                        else if(!self.hagar_loadbeep && self.hagar_load) // prevents the beep from playing each frame
@@ -340,13 +347,13 @@ float w_hagar(float req)
        else if (req == WR_CHECKAMMO1)
        {
                ammo_amount = self.ammo_rockets >= autocvar_g_balance_hagar_primary_ammo;
-               ammo_amount += self.weapon_load[WEP_HAGAR] >= autocvar_g_balance_hagar_primary_ammo;
+               ammo_amount += self.(weapon_load[WEP_HAGAR]) >= autocvar_g_balance_hagar_primary_ammo;
                return ammo_amount;
        }
        else if (req == WR_CHECKAMMO2)
        {
                ammo_amount = self.ammo_rockets >= autocvar_g_balance_hagar_secondary_ammo;
-               ammo_amount += self.weapon_load[WEP_HAGAR] >= autocvar_g_balance_hagar_secondary_ammo;
+               ammo_amount += self.(weapon_load[WEP_HAGAR]) >= autocvar_g_balance_hagar_secondary_ammo;
                return ammo_amount;
        }
        else if (req == WR_RESETPLAYER)