]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/w_fireball.qc
Add weaponstartoverride property to weapons
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / w_fireball.qc
index c547b8c634176e99805c3e91ab8ed5feb00433f3..179559712a3a8abba8c53e6dd882b357d7811682 100644 (file)
@@ -10,34 +10,40 @@ REGISTER_WEAPON(
 /* netname  */ "fireball",
 /* fullname */ _("Fireball")
 );
-#define FIREBALL_SETTINGS(weapon) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, animtime) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, refire) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, damage) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, damageforcescale) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, speed) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, lifetime) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, laserburntime) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, laserdamage) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, laseredgedamage) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, laserradius) \
-       WEP_ADD_CVAR(weapon, MO_PRI,  edgedamage) \
-       WEP_ADD_CVAR(weapon, MO_PRI,  force) \
-       WEP_ADD_CVAR(weapon, MO_PRI,  radius) \
-       WEP_ADD_CVAR(weapon, MO_PRI,  health) \
-       WEP_ADD_CVAR(weapon, MO_PRI,  refire2) \
-       WEP_ADD_CVAR(weapon, MO_PRI,  bfgdamage) \
-       WEP_ADD_CVAR(weapon, MO_PRI,  bfgforce) \
-       WEP_ADD_CVAR(weapon, MO_PRI,  bfgradius) \
-       WEP_ADD_CVAR(weapon, MO_SEC,  damagetime) \
-       WEP_ADD_CVAR(weapon, MO_SEC,  speed_up) \
-       WEP_ADD_PROP(weapon, reloading_ammo, reload_ammo) \
-       WEP_ADD_PROP(weapon, reloading_time, reload_time) \
-       WEP_ADD_PROP(weapon, switchdelay_raise, switchdelay_raise) \
-       WEP_ADD_PROP(weapon, switchdelay_drop, switchdelay_drop)
+
+#define FIREBALL_SETTINGS(w_cvar,w_prop) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, animtime) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, refire) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, damage) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, damageforcescale) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, speed) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, spread) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, lifetime) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, laserburntime) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, laserdamage) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, laseredgedamage) \
+       w_cvar(WEP_FIREBALL, fireball, MO_BOTH, laserradius) \
+       w_cvar(WEP_FIREBALL, fireball, MO_PRI,  edgedamage) \
+       w_cvar(WEP_FIREBALL, fireball, MO_PRI,  force) \
+       w_cvar(WEP_FIREBALL, fireball, MO_PRI,  radius) \
+       w_cvar(WEP_FIREBALL, fireball, MO_PRI,  health) \
+       w_cvar(WEP_FIREBALL, fireball, MO_PRI,  refire2) \
+       w_cvar(WEP_FIREBALL, fireball, MO_PRI,  bfgdamage) \
+       w_cvar(WEP_FIREBALL, fireball, MO_PRI,  bfgforce) \
+       w_cvar(WEP_FIREBALL, fireball, MO_PRI,  bfgradius) \
+       w_cvar(WEP_FIREBALL, fireball, MO_SEC,  damagetime) \
+       w_cvar(WEP_FIREBALL, fireball, MO_SEC,  speed_up) \
+       w_cvar(WEP_FIREBALL, fireball, MO_SEC,  speed_z) \
+       w_prop(WEP_FIREBALL, fireball, float,  reloading_ammo, reload_ammo) \
+       w_prop(WEP_FIREBALL, fireball, float,  reloading_time, reload_time) \
+       w_prop(WEP_FIREBALL, fireball, float,  switchdelay_raise, switchdelay_raise) \
+       w_prop(WEP_FIREBALL, fireball, float,  switchdelay_drop, switchdelay_drop) \
+       w_prop(WEP_FIREBALL, fireball, string, weaponreplace, weaponreplace) \
+       w_prop(WEP_FIREBALL, fireball, float,  weaponstart, weaponstart) \
+       w_prop(WEP_FIREBALL, fireball, float,  weaponstartoverride, weaponstartoverride)
 
 #ifdef SVQC
-FIREBALL_SETTINGS(fireball)
+FIREBALL_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
 .float bot_primary_fireballmooth; // whatever a mooth is
 .vector fireball_impactvec;
 .float fireball_primarytime;
@@ -68,7 +74,7 @@ void W_Fireball_Explode (void)
                // 2. bfg effect
                // NOTE: this cannot be made warpzone aware by design. So, better intentionally ignore warpzones here.
                for(e = findradius(self.origin, WEP_CVAR_PRI(fireball, bfgradius)); e; e = e.chain)
-               if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(!IS_PLAYER(e) || !self.realowner || IsDifferentTeam(e, self))
+               if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(!IS_PLAYER(e) || !self.realowner || DIFF_TEAM(e, self))
                {
                        // can we see fireball?
                        traceline(e.origin + e.view_ofs, self.origin, MOVE_NORMAL, e);
@@ -113,7 +119,7 @@ void W_Fireball_LaserPlay(float dt, float dist, float damage, float edgedamage,
 
        RandomSelection_Init();
        for(e = WarpZone_FindRadius(self.origin, dist, TRUE); e; e = e.chain)
-       if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(!IS_PLAYER(e) || !self.realowner || IsDifferentTeam(e, self))
+       if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(!IS_PLAYER(e) || !self.realowner || DIFF_TEAM(e, self))
        {
                p = e.origin;
                p_x += e.mins_x + random() * (e.maxs_x - e.mins_x);
@@ -155,10 +161,10 @@ void W_Fireball_Damage (entity inflictor, entity attacker, float damage, float d
 {
        if(self.health <= 0)
                return;
-               
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions
                return; // g_projectiles_damage says to halt
-               
+
        self.health = self.health - damage;
        if (self.health <= 0)
        {
@@ -194,13 +200,13 @@ void W_Fireball_Attack1()
        setorigin(proj, w_shotorg);
 
        proj.movetype = MOVETYPE_FLY;
-       W_SETUPPROJECTILEVELOCITY(proj, g_balance_fireball_primary);
+       WEP_SETUPPROJVELOCITY_PRI(proj, fireball);
        proj.angles = vectoangles(proj.velocity);
        proj.touch = W_Fireball_TouchExplode;
        setsize(proj, '-16 -16 -16', '16 16 16');
        proj.flags = FL_PROJECTILE;
     proj.missile_flags = MIF_SPLASH | MIF_PROXY;
-    
+
        CSQCProjectile(proj, TRUE, PROJECTILE_FIREBALL, TRUE);
 
        other = proj; MUTATOR_CALLHOOK(EditProjectile);
@@ -240,7 +246,7 @@ void W_Fireball_Attack1_Frame1()
 void W_Fireball_Attack1_Frame0()
 {
        W_Fireball_AttackEffect(0, '-1.25 -3.75 0');
-       sound (self, CH_WEAPON_SINGLE, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM);
+       sound (self, CH_WEAPON_SINGLE, "weapons/fireball_prefire2.wav", VOL_BASE, ATTEN_NORM);
        weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(fireball, animtime), W_Fireball_Attack1_Frame1);
 }
 
@@ -326,12 +332,12 @@ void W_Fireball_Attack2()
        proj.nextthink = time;
        proj.damageforcescale = WEP_CVAR_SEC(fireball, damageforcescale);
        proj.pushltime = time + WEP_CVAR_SEC(fireball, lifetime);
-       W_SETUPPROJECTILEVELOCITY_UP(proj, g_balance_fireball_secondary);
+       WEP_SETUPPROJVELOCITY_UP_SEC(proj, fireball);
 
        proj.angles = vectoangles(proj.velocity);
        proj.flags = FL_PROJECTILE;
     proj.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_ARC;
-    
+
        CSQCProjectile(proj, TRUE, PROJECTILE_FIREMINE, TRUE);
 
        other = proj; MUTATOR_CALLHOOK(EditProjectile);
@@ -395,7 +401,7 @@ float w_fireball(float req)
                        precache_sound ("weapons/fireball_fire.wav");
                        precache_sound ("weapons/fireball_fire2.wav");
                        precache_sound ("weapons/fireball_prefire2.wav");
-                       WEP_SET_PROPS(FIREBALL_SETTINGS(fireball), WEP_FIREBALL)
+                       FIREBALL_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP)
                        return TRUE;
                }
                case WR_SETUP:
@@ -410,7 +416,7 @@ float w_fireball(float req)
                }
                case WR_CONFIG:
                {
-                       WEP_CONFIG_SETTINGS(FIREBALL_SETTINGS(fireball))
+                       FIREBALL_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS)
                        return TRUE;
                }
                case WR_RESETPLAYER:
@@ -453,7 +459,7 @@ float w_fireball(float req)
                                org2 = w_org + w_backoff * 16;
                                pointparticles(particleeffectnum("fireball_explode"), org2, '0 0 0', 1);
                                if(!w_issilent)
-                                       sound(self, CH_SHOTS, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom
+                                       sound(self, CH_SHOTS, "weapons/fireball_impact2.wav", VOL_BASE, ATTEN_NORM * 0.25); // long range boom
                        }
                        
                        return TRUE;