]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/weapon/blaster.qc
Simplify REGISTER_WEAPON (and avoid adding redundant globals), now possible thanks...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / weapon / blaster.qc
index 3c134a3db37b85bb21848a322098b4ba81ba7c19..4bace41d14637e9d368e45a925478cb1003aa9b7 100644 (file)
@@ -14,14 +14,14 @@ void W_Blaster_Touch(entity this, entity toucher)
                (this.origin + (this.mins + this.maxs) * 0.5),
                this.velocity,
                this.realowner,
-               WEP_CVAR_BOTH(blaster, isprimary, damage),
-               WEP_CVAR_BOTH(blaster, isprimary, edgedamage),
-               WEP_CVAR_BOTH(blaster, isprimary, radius),
+               WEP_CVAR_BOTH(this.real_weapon, isprimary, damage),
+               WEP_CVAR_BOTH(this.real_weapon, isprimary, edgedamage),
+               WEP_CVAR_BOTH(this.real_weapon, isprimary, radius),
                NULL,
                NULL,
                false,
-               WEP_CVAR_BOTH(blaster, isprimary, force),
-               WEP_CVAR_BOTH(blaster, isprimary, force_zscale),
+               WEP_CVAR_BOTH(this.real_weapon, isprimary, force),
+               WEP_CVAR_BOTH(this.real_weapon, isprimary, force_zscale),
                this.projectiledeathtype,
                this.weaponentity_fld,
                toucher
@@ -35,24 +35,26 @@ void W_Blaster_Think(entity this)
        set_movetype(this, MOVETYPE_FLY);
        setthink(this, SUB_Remove);
        bool isprimary = !(this.projectiledeathtype & HITTYPE_SECONDARY);
-       this.nextthink = time + WEP_CVAR_BOTH(blaster, isprimary, lifetime);
+       this.nextthink = time + WEP_CVAR_BOTH(WEP_BLASTER, isprimary, lifetime);
        CSQCProjectile(this, true, PROJECTILE_BLASTER, true);
 }
 
 void W_Blaster_Attack(
        entity actor,
+       entity real_wpn,
        .entity weaponentity,
        float atk_deathtype)
 {
        bool isprimary = !(atk_deathtype & HITTYPE_SECONDARY);
-       float atk_shotangle = WEP_CVAR_BOTH(blaster, isprimary, shotangle);
-       float atk_damage = WEP_CVAR_BOTH(blaster, isprimary, damage);
+       float atk_shotangle = WEP_CVAR_BOTH(WEP_BLASTER, isprimary, shotangle);
+       float atk_damage = WEP_CVAR_BOTH(WEP_BLASTER, isprimary, damage);
        vector s_forward = v_forward * cos(atk_shotangle * DEG2RAD) + v_up * sin(atk_shotangle * DEG2RAD);
 
        W_SetupShot_Dir(actor, weaponentity, s_forward, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_B, atk_damage, atk_deathtype);
        W_MuzzleFlash(WEP_BLASTER, actor, weaponentity, w_shotorg, w_shotdir);
 
        entity missile = new(blasterbolt);
+       missile.real_weapon = real_wpn;
        missile.owner = missile.realowner = actor;
        missile.bot_dodge = true;
        missile.bot_dodgerating = atk_damage;
@@ -61,8 +63,8 @@ void W_Blaster_Attack(
        setorigin(missile, w_shotorg);
        setsize(missile, '0 0 0', '0 0 0');
 
-       float atk_speed = WEP_CVAR_BOTH(blaster, isprimary, speed);
-       float atk_spread = WEP_CVAR_BOTH(blaster, isprimary, spread);
+       float atk_speed = WEP_CVAR_BOTH(WEP_BLASTER, isprimary, speed);
+       float atk_spread = WEP_CVAR_BOTH(WEP_BLASTER, isprimary, spread);
        W_SetupProjVelocity_Explicit(missile, w_shotdir, v_up, atk_speed, 0, 0, atk_spread, false);
 
        missile.angles = vectoangles(missile.velocity);
@@ -78,7 +80,7 @@ void W_Blaster_Attack(
        missile.projectiledeathtype = atk_deathtype;
        missile.weaponentity_fld = weaponentity;
        setthink(missile, W_Blaster_Think);
-       missile.nextthink = time + WEP_CVAR_BOTH(blaster, isprimary, delay);
+       missile.nextthink = time + WEP_CVAR_BOTH(WEP_BLASTER, isprimary, delay);
 
        MUTATOR_CALLHOOK(EditProjectile, actor, missile);
 
@@ -90,30 +92,30 @@ void W_Blaster_Attack(
 
 METHOD(Blaster, wr_aim, void(entity thiswep, entity actor, .entity weaponentity))
 {
-    if(WEP_CVAR(blaster, secondary))
+    if(WEP_CVAR(WEP_BLASTER, secondary))
     {
-        if((random() * (WEP_CVAR_PRI(blaster, damage) + WEP_CVAR_SEC(blaster, damage))) > WEP_CVAR_PRI(blaster, damage))
-            { PHYS_INPUT_BUTTON_ATCK2(actor) = bot_aim(actor, weaponentity, WEP_CVAR_SEC(blaster, speed), 0, WEP_CVAR_SEC(blaster, lifetime), false, true); }
+        if((random() * (WEP_CVAR_PRI(WEP_BLASTER, damage) + WEP_CVAR_SEC(WEP_BLASTER, damage))) > WEP_CVAR_PRI(WEP_BLASTER, damage))
+            { PHYS_INPUT_BUTTON_ATCK2(actor) = bot_aim(actor, weaponentity, WEP_CVAR_SEC(WEP_BLASTER, speed), 0, WEP_CVAR_SEC(WEP_BLASTER, lifetime), false, true); }
         else
-            { PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(blaster, speed), 0, WEP_CVAR_PRI(blaster, lifetime), false, true); }
+            { PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(WEP_BLASTER, speed), 0, WEP_CVAR_PRI(WEP_BLASTER, lifetime), false, true); }
     }
     else
-        { PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(blaster, speed), 0, WEP_CVAR_PRI(blaster, lifetime), false, true); }
+        { PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(WEP_BLASTER, speed), 0, WEP_CVAR_PRI(WEP_BLASTER, lifetime), false, true); }
 }
 
 METHOD(Blaster, wr_think, void(Blaster thiswep, entity actor, .entity weaponentity, int fire))
 {
     if(fire & 1)
     {
-        if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(blaster, refire)))
+        if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(WEP_BLASTER, refire)))
         {
-            W_Blaster_Attack(actor, weaponentity, WEP_BLASTER.m_id);
-            weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(blaster, animtime), w_ready);
+            W_Blaster_Attack(actor, thiswep, weaponentity, WEP_BLASTER.m_id);
+            weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(WEP_BLASTER, animtime), w_ready);
         }
     }
     else if(fire & 2)
     {
-        switch(WEP_CVAR(blaster, secondary))
+        switch(WEP_CVAR(WEP_BLASTER, secondary))
         {
             case 0: // switch to last used weapon
             {
@@ -124,10 +126,10 @@ METHOD(Blaster, wr_think, void(Blaster thiswep, entity actor, .entity weaponenti
 
             case 1: // normal projectile secondary
             {
-                if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(blaster, refire)))
+                if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(WEP_BLASTER, refire)))
                 {
-                    W_Blaster_Attack(actor, weaponentity, WEP_BLASTER.m_id | HITTYPE_SECONDARY);
-                    weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(blaster, animtime), w_ready);
+                    W_Blaster_Attack(actor, thiswep, weaponentity, WEP_BLASTER.m_id | HITTYPE_SECONDARY);
+                    weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(WEP_BLASTER, animtime), w_ready);
                 }
 
                 break;
@@ -162,10 +164,10 @@ METHOD(OffhandBlaster, offhand_think, void(OffhandBlaster this, entity actor, bo
        {
                return;
        }
-       actor.jump_interval = time + WEP_CVAR_SEC(blaster, refire) * W_WeaponRateFactor(actor);
+       actor.jump_interval = time + WEP_CVAR_SEC(WEP_BLASTER, refire) * W_WeaponRateFactor(actor);
        .entity weaponentity = weaponentities[1];
        makevectors(actor.v_angle);
-       W_Blaster_Attack(actor, weaponentity, WEP_BLASTER.m_id | HITTYPE_SECONDARY);
+       W_Blaster_Attack(actor, this, weaponentity, WEP_BLASTER.m_id | HITTYPE_SECONDARY);
 }
 
 #endif