]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Clean blaster code up to reduce code and fields
authorterencehill <piuntn@gmail.com>
Mon, 6 Feb 2023 17:43:11 +0000 (18:43 +0100)
committerterencehill <piuntn@gmail.com>
Mon, 6 Feb 2023 17:43:11 +0000 (18:43 +0100)
qcsrc/common/weapons/weapon/blaster.qc
qcsrc/common/weapons/weapon/blaster.qh

index 6902f48532d0e13ea3f1deb4c148530a28e63a2c..690fa891c40cc43677dff45b60366c1471efee76 100644 (file)
@@ -7,20 +7,21 @@ void W_Blaster_Touch(entity this, entity toucher)
        PROJECTILE_TOUCH(this, toucher);
 
        this.event_damage = func_null;
+       bool isprimary = !(this.projectiledeathtype & HITTYPE_SECONDARY);
 
        RadiusDamageForSource(
                this,
                (this.origin + (this.mins + this.maxs) * 0.5),
                this.velocity,
                this.realowner,
-               this.blaster_damage,
-               this.blaster_edgedamage,
-               this.blaster_radius,
+               WEP_CVAR_BOTH(blaster, isprimary, damage),
+               WEP_CVAR_BOTH(blaster, isprimary, edgedamage),
+               WEP_CVAR_BOTH(blaster, isprimary, radius),
                NULL,
                NULL,
                false,
-               this.blaster_force,
-               this.blaster_force_zscale,
+               WEP_CVAR_BOTH(blaster, isprimary, force),
+               WEP_CVAR_BOTH(blaster, isprimary, force_zscale),
                this.projectiledeathtype,
                this.weaponentity_fld,
                toucher
@@ -33,25 +34,19 @@ void W_Blaster_Think(entity this)
 {
        set_movetype(this, MOVETYPE_FLY);
        setthink(this, SUB_Remove);
-       this.nextthink = time + this.blaster_lifetime;
+       bool isprimary = !(this.projectiledeathtype & HITTYPE_SECONDARY);
+       this.nextthink = time + WEP_CVAR_BOTH(blaster, isprimary, lifetime);
        CSQCProjectile(this, true, PROJECTILE_BLASTER, true);
 }
 
 void W_Blaster_Attack(
        entity actor,
        .entity weaponentity,
-       float atk_deathtype,
-       float atk_shotangle,
-       float atk_damage,
-       float atk_edgedamage,
-       float atk_radius,
-       float atk_force,
-       float atk_force_zscale,
-       float atk_speed,
-       float atk_spread,
-       float atk_delay,
-       float atk_lifetime)
+       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);
        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);
@@ -63,26 +58,12 @@ void W_Blaster_Attack(
        missile.bot_dodgerating = atk_damage;
        PROJECTILE_MAKETRIGGER(missile);
 
-       missile.blaster_damage = atk_damage;
-       missile.blaster_edgedamage = atk_edgedamage;
-       missile.blaster_radius = atk_radius;
-       missile.blaster_force = atk_force;
-       missile.blaster_force_zscale = atk_force_zscale;
-       missile.blaster_lifetime = atk_lifetime;
-
        setorigin(missile, w_shotorg);
        setsize(missile, '0 0 0', '0 0 0');
 
-       W_SetupProjVelocity_Explicit(
-               missile,
-               w_shotdir,
-               v_up,
-               atk_speed,
-               0,
-               0,
-               atk_spread,
-               false
-       );
+       float atk_speed = WEP_CVAR_BOTH(blaster, isprimary, speed);
+       float atk_spread = WEP_CVAR_BOTH(blaster, isprimary, spread);
+       W_SetupProjVelocity_Explicit(missile, w_shotdir, v_up, atk_speed, 0, 0, atk_spread, false);
 
        missile.angles = vectoangles(missile.velocity);
 
@@ -97,7 +78,7 @@ void W_Blaster_Attack(
        missile.projectiledeathtype = atk_deathtype;
        missile.weaponentity_fld = weaponentity;
        setthink(missile, W_Blaster_Think);
-       missile.nextthink = time + atk_delay;
+       missile.nextthink = time + WEP_CVAR_BOTH(blaster, isprimary, delay);
 
        MUTATOR_CALLHOOK(EditProjectile, actor, missile);
 
@@ -126,21 +107,7 @@ METHOD(Blaster, wr_think, void(Blaster thiswep, entity actor, .entity weaponenti
     {
         if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(blaster, refire)))
         {
-            W_Blaster_Attack(
-                actor,
-                weaponentity,
-                WEP_BLASTER.m_id,
-                WEP_CVAR_PRI(blaster, shotangle),
-                WEP_CVAR_PRI(blaster, damage),
-                WEP_CVAR_PRI(blaster, edgedamage),
-                WEP_CVAR_PRI(blaster, radius),
-                WEP_CVAR_PRI(blaster, force),
-                WEP_CVAR_PRI(blaster, force_zscale),
-                WEP_CVAR_PRI(blaster, speed),
-                WEP_CVAR_PRI(blaster, spread),
-                WEP_CVAR_PRI(blaster, delay),
-                WEP_CVAR_PRI(blaster, lifetime)
-            );
+            W_Blaster_Attack(actor, weaponentity, WEP_BLASTER.m_id);
             weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(blaster, animtime), w_ready);
         }
     }
@@ -159,21 +126,7 @@ METHOD(Blaster, wr_think, void(Blaster thiswep, entity actor, .entity weaponenti
             {
                 if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(blaster, refire)))
                 {
-                    W_Blaster_Attack(
-                        actor,
-                        weaponentity,
-                        WEP_BLASTER.m_id | HITTYPE_SECONDARY,
-                        WEP_CVAR_SEC(blaster, shotangle),
-                        WEP_CVAR_SEC(blaster, damage),
-                        WEP_CVAR_SEC(blaster, edgedamage),
-                        WEP_CVAR_SEC(blaster, radius),
-                        WEP_CVAR_SEC(blaster, force),
-                        WEP_CVAR_SEC(blaster, force_zscale),
-                        WEP_CVAR_SEC(blaster, speed),
-                        WEP_CVAR_SEC(blaster, spread),
-                        WEP_CVAR_SEC(blaster, delay),
-                        WEP_CVAR_SEC(blaster, lifetime)
-                    );
+                    W_Blaster_Attack(actor, weaponentity, WEP_BLASTER.m_id | HITTYPE_SECONDARY);
                     weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(blaster, animtime), w_ready);
                 }
 
index 6eebd4c39e6d6b60e34b4b051910c89430ce0f97..8e95559d1b8a2b6c03f4d31568aa1500a6f8e8af 100644 (file)
@@ -57,30 +57,9 @@ OffhandBlaster OFFHAND_BLASTER;
 STATIC_INIT(OFFHAND_BLASTER) { OFFHAND_BLASTER = NEW(OffhandBlaster); }
 
 #ifdef SVQC
-.float blaster_damage;
-.float blaster_edgedamage;
-.float blaster_radius;
-.float blaster_force;
-.float blaster_force_zscale;
-.float blaster_lifetime;
-
 // Will be demacroed after WEP_CVAR macros are also demacroed.
 #define BLASTER_SECONDARY_ATTACK(weapon_name, actor, weaponentity) \
        makevectors(actor.v_angle); \
-       W_Blaster_Attack( \
-               actor, \
-               weaponentity, \
-               WEP_BLASTER.m_id | HITTYPE_SECONDARY, \
-               WEP_CVAR_SEC(weapon_name, shotangle), \
-               WEP_CVAR_SEC(weapon_name, damage), \
-               WEP_CVAR_SEC(weapon_name, edgedamage), \
-               WEP_CVAR_SEC(weapon_name, radius), \
-               WEP_CVAR_SEC(weapon_name, force), \
-               WEP_CVAR_SEC(weapon_name, force_zscale), \
-               WEP_CVAR_SEC(weapon_name, speed), \
-               WEP_CVAR_SEC(weapon_name, spread), \
-               WEP_CVAR_SEC(weapon_name, delay), \
-               WEP_CVAR_SEC(weapon_name, lifetime) \
-       );
+       W_Blaster_Attack(actor, weaponentity, WEP_BLASTER.m_id | HITTYPE_SECONDARY);
 
 #endif