]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/weapon/hlac.qc
Add the combined damage of all shots to the HLAC shot setup calculations
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / weapon / hlac.qc
index 6511d22b572b4fab5938c035aea73d2e18dec6a2..d89cdb1287051f2d49ed6d12f89d9f66a15492f2 100644 (file)
@@ -21,17 +21,16 @@ void W_HLAC_Touch(entity this, entity toucher)
 void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity)
 {
        entity missile;
-    float spread;
 
        W_DecreaseAmmo(thiswep, actor, WEP_CVAR_PRI(hlac, ammo), weaponentity);
 
-    spread = WEP_CVAR_PRI(hlac, spread_min) + (WEP_CVAR_PRI(hlac, spread_add) * actor.(weaponentity).misc_bulletcounter);
-    spread = min(spread,WEP_CVAR_PRI(hlac, spread_max));
-    if(actor.crouch)
-        spread = spread * WEP_CVAR_PRI(hlac, spread_crouchmod);
+       float spread = WEP_CVAR_PRI(hlac, spread_min) + (WEP_CVAR_PRI(hlac, spread_add) * actor.(weaponentity).misc_bulletcounter);
+       spread = min(spread,WEP_CVAR_PRI(hlac, spread_max));
+       if(IS_DUCKED(actor))
+               spread = spread * WEP_CVAR_PRI(hlac, spread_crouchmod);
 
        W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage), thiswep.m_id);
-       Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
+       W_MuzzleFlash(thiswep, actor, weaponentity, w_shotorg, w_shotdir);
        if(!autocvar_g_norecoil)
        {
                actor.punchangle_x = random() - 0.5;
@@ -42,7 +41,7 @@ void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity)
        missile.owner = missile.realowner = actor;
        missile.bot_dodge = true;
 
-    missile.bot_dodgerating = WEP_CVAR_PRI(hlac, damage);
+       missile.bot_dodgerating = WEP_CVAR_PRI(hlac, damage);
 
        set_movetype(missile, MOVETYPE_FLY);
        PROJECTILE_MAKETRIGGER(missile);
@@ -56,7 +55,7 @@ void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity)
        settouch(missile, W_HLAC_Touch);
        setthink(missile, SUB_Remove);
 
-    missile.nextthink = time + WEP_CVAR_PRI(hlac, lifetime);
+       missile.nextthink = time + WEP_CVAR_PRI(hlac, lifetime);
 
        missile.flags = FL_PROJECTILE;
        IL_PUSH(g_projectiles, missile);
@@ -72,47 +71,54 @@ void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity)
 void W_HLAC_Attack2(Weapon thiswep, entity actor, .entity weaponentity)
 {
        entity missile;
-    float spread;
+       float spread = WEP_CVAR_SEC(hlac, spread);
 
-    spread = WEP_CVAR_SEC(hlac, spread);
+       if(IS_DUCKED(actor))
+               spread = spread * WEP_CVAR_SEC(hlac, spread_crouchmod);
 
+       W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage) * WEP_CVAR_SEC(hlac, shots), thiswep.m_id | HITTYPE_SECONDARY);
+       W_MuzzleFlash(thiswep, actor, weaponentity, w_shotorg, w_shotdir);
+       W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(hlac, ammo), weaponentity);
 
-    if(actor.crouch)
-        spread = spread * WEP_CVAR_SEC(hlac, spread_crouchmod);
+       for(int j = WEP_CVAR_SEC(hlac, shots); j > 0; --j)
+       {
+               missile = new(hlacbolt);
+               missile.owner = missile.realowner = actor;
+               missile.bot_dodge = true;
 
-       W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage), thiswep.m_id | HITTYPE_SECONDARY);
-       Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
+               missile.bot_dodgerating = WEP_CVAR_SEC(hlac, damage);
 
-       missile = new(hlacbolt);
-       missile.owner = missile.realowner = actor;
-       missile.bot_dodge = true;
+               set_movetype(missile, MOVETYPE_FLY);
+               PROJECTILE_MAKETRIGGER(missile);
 
-    missile.bot_dodgerating = WEP_CVAR_SEC(hlac, damage);
+               setorigin(missile, w_shotorg);
+               setsize(missile, '0 0 0', '0 0 0');
 
-       set_movetype(missile, MOVETYPE_FLY);
-       PROJECTILE_MAKETRIGGER(missile);
+               W_SetupProjVelocity_Basic(missile, WEP_CVAR_SEC(hlac, speed), spread);
+               //missile.angles = vectoangles(missile.velocity); // csqc
 
-       setorigin(missile, w_shotorg);
-       setsize(missile, '0 0 0', '0 0 0');
+               settouch(missile, W_HLAC_Touch);
+               setthink(missile, SUB_Remove);
 
-       W_SetupProjVelocity_Basic(missile, WEP_CVAR_SEC(hlac, speed), spread);
-       //missile.angles = vectoangles(missile.velocity); // csqc
+               missile.nextthink = time + WEP_CVAR_SEC(hlac, lifetime);
 
-       settouch(missile, W_HLAC_Touch);
-       setthink(missile, SUB_Remove);
+               missile.flags = FL_PROJECTILE;
+               IL_PUSH(g_projectiles, missile);
+               IL_PUSH(g_bot_dodge, missile);
+               missile.missile_flags = MIF_SPLASH;
+               missile.projectiledeathtype = thiswep.m_id | HITTYPE_SECONDARY;
+               missile.weaponentity_fld = weaponentity;
 
-    missile.nextthink = time + WEP_CVAR_SEC(hlac, lifetime);
+               CSQCProjectile(missile, true, PROJECTILE_HLAC, true);
 
-       missile.flags = FL_PROJECTILE;
-       IL_PUSH(g_projectiles, missile);
-       IL_PUSH(g_bot_dodge, missile);
-       missile.missile_flags = MIF_SPLASH;
-       missile.projectiledeathtype = thiswep.m_id | HITTYPE_SECONDARY;
-       missile.weaponentity_fld = weaponentity;
-
-       CSQCProjectile(missile, true, PROJECTILE_HLAC, true);
+               MUTATOR_CALLHOOK(EditProjectile, actor, missile);
+       }
 
-       MUTATOR_CALLHOOK(EditProjectile, actor, missile);
+       if(!autocvar_g_norecoil)
+       {
+               actor.punchangle_x = random() - 0.5;
+               actor.punchangle_y = random() - 0.5;
+       }
 }
 
 // weapon frames
@@ -137,7 +143,7 @@ void W_HLAC_Attack_Frame(Weapon thiswep, entity actor, .entity weaponentity, int
                ATTACK_FINISHED(actor, weaponentity) = time + WEP_CVAR_PRI(hlac, refire) * W_WeaponRateFactor(actor);
                W_HLAC_Attack(thiswep, actor, weaponentity);
                actor.(weaponentity).misc_bulletcounter = actor.(weaponentity).misc_bulletcounter + 1;
-        weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(hlac, refire), W_HLAC_Attack_Frame);
+               weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(hlac, refire), W_HLAC_Attack_Frame);
        }
        else
        {
@@ -145,22 +151,6 @@ void W_HLAC_Attack_Frame(Weapon thiswep, entity actor, .entity weaponentity, int
        }
 }
 
-void W_HLAC_Attack2_Frame(Weapon thiswep, entity actor, .entity weaponentity)
-{
-    float i;
-
-       W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(hlac, ammo), weaponentity);
-
-    for(i=WEP_CVAR_SEC(hlac, shots);i>0;--i)
-        W_HLAC_Attack2(thiswep, actor, weaponentity);
-
-       if(!autocvar_g_norecoil)
-       {
-               actor.punchangle_x = random() - 0.5;
-               actor.punchangle_y = random() - 0.5;
-       }
-}
-
 METHOD(HLAC, wr_aim, void(entity thiswep, entity actor, .entity weaponentity))
 {
     PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(hlac, speed), 0, WEP_CVAR_PRI(hlac, lifetime), false);
@@ -183,7 +173,7 @@ METHOD(HLAC, wr_think, void(entity thiswep, entity actor, .entity weaponentity,
     {
         if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(hlac, refire)))
         {
-            W_HLAC_Attack2_Frame(thiswep, actor, weaponentity);
+            W_HLAC_Attack2(thiswep, actor, weaponentity);
             weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(hlac, animtime), w_ready);
         }
     }