]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Start working on a new (independent) way to handle cvars for weapons
authorSamual Lenks <samual@xonotic.org>
Tue, 11 Jun 2013 02:02:35 +0000 (22:02 -0400)
committerSamual Lenks <samual@xonotic.org>
Tue, 11 Jun 2013 02:02:35 +0000 (22:02 -0400)
qcsrc/common/weapons/w_arc.qc
qcsrc/common/weapons/weapons.qh
qcsrc/server/autocvars.qh

index 4612da7643389f2c66f329eee88c9cb0ab5d5b2a..e8072a80ced6b332d4be087ab80b0271b931b96e 100644 (file)
@@ -4,14 +4,28 @@ REGISTER_WEAPON(
 /* function  */ w_lightning,
 /* ammotype  */ IT_CELLS,
 /* impulse   */ 5,
-/* flags     */ WEP_FLAG_NORMAL | WEP_TYPE_SPLASH,
-/* rating    */ BOT_PICKUP_RATING_MID,
+/* flags     */ WEP_FLAG_NORMAL,
+/* rating    */ BOT_PICKUP_RATING_HIGH,
 /* model     */ "lightning",
-/* shortname */ "lightning",
-/* fullname  */ _("Lightning")
+/* shortname */ "arc",
+/* fullname  */ _("Arc")
 );
 
+#define ARC_SETTINGS(weapon) \
+       WEP_ADD_CVAR(weapon, MO_BOTH, float, ammo) \
+       WEP_ADD_CVAR(weapon, MO_PRI,  float, animtime) \
+       WEP_ADD_CVAR(weapon, MO_PRI,  float, damage) \
+       WEP_ADD_CVAR(weapon, MO_PRI,  float, falloff_halflifedist) \
+       WEP_ADD_CVAR(weapon, MO_PRI,  float, falloff_maxdist) \
+       WEP_ADD_CVAR(weapon, MO_PRI,  float, falloff_mindist) \
+       WEP_ADD_CVAR(weapon, MO_PRI,  float, force) \
+       WEP_ADD_CVAR(weapon, MO_PRI,  float, range) \
+       WEP_ADD_CVAR(weapon, MO_PRI,  float, refire) 
+       //WEP_ADD_PROP(weapon, float, switchdelay_raise, switchdelay_raise) \
+       //WEP_ADD_PROP(weapon, float, switchdelay_drop, switchdelay_drop)
+
 #ifdef SVQC
+ARC_SETTINGS(arc)
 void LightningInit();
 vector lightning_shotorigin[4];
 #endif
@@ -35,7 +49,7 @@ float W_Lightning_Beam_Send(entity to, float sf)
        if(sf & 1)
        {
                WriteByte(MSG_ENTITY, num_for_edict(self.owner));
-               WriteCoord(MSG_ENTITY, autocvar_g_balance_lightning_primary_range);
+               WriteCoord(MSG_ENTITY, WEP_CVAR_PRI(arc, range));
        }
        if(sf & 2)
        {
@@ -76,27 +90,27 @@ void W_Lightning_Beam_Think()
        dt = frametime;
        if not(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)
        {
-               if(autocvar_g_balance_lightning_primary_ammo)
+               if(WEP_CVAR_PRI(arc, ammo))
                {
-                       dt = min(dt, self.owner.ammo_cells / autocvar_g_balance_lightning_primary_ammo);
-                       self.owner.ammo_cells = max(0, self.owner.ammo_cells - autocvar_g_balance_lightning_primary_ammo * frametime);
+                       dt = min(dt, self.owner.ammo_cells / WEP_CVAR_PRI(arc, ammo));
+                       self.owner.ammo_cells = max(0, self.owner.ammo_cells - WEP_CVAR_PRI(arc, ammo) * frametime);
                }
        }
 
-       W_SetupShot_Range(self.owner, TRUE, 0, "", 0, autocvar_g_balance_lightning_primary_damage * dt, autocvar_g_balance_lightning_primary_range);
+       W_SetupShot_Range(self.owner, TRUE, 0, "", 0, WEP_CVAR_PRI(arc, damage) * dt, WEP_CVAR_PRI(arc, range));
        WarpZone_traceline_antilag(self.owner, w_shotorg, w_shotend, MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner));
 
        // apply the damage
        if(trace_ent)
        {
                vector force;
-               force = w_shotdir * autocvar_g_balance_lightning_primary_force;
+               force = w_shotdir * WEP_CVAR_PRI(arc, force);
 
-               f = ExponentialFalloff(autocvar_g_balance_lightning_primary_falloff_mindist, autocvar_g_balance_lightning_primary_falloff_maxdist, autocvar_g_balance_lightning_primary_falloff_halflifedist, vlen(WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos) - w_shotorg));
+               f = ExponentialFalloff(WEP_CVAR_PRI(arc, falloff_mindist), WEP_CVAR_PRI(arc, falloff_maxdist), WEP_CVAR_PRI(arc, falloff_halflifedist), vlen(WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos) - w_shotorg));
 
                if(accuracy_isgooddamage(self.owner, trace_ent))
-                       accuracy_add(self.owner, WEP_LIGHTNING, 0, autocvar_g_balance_lightning_primary_damage * dt * f);
-               Damage (trace_ent, self.owner, self.owner, autocvar_g_balance_lightning_primary_damage * dt * f, WEP_LIGHTNING, trace_endpos, force * dt);
+                       accuracy_add(self.owner, WEP_LIGHTNING, 0, WEP_CVAR_PRI(arc, damage) * dt * f);
+               Damage (trace_ent, self.owner, self.owner, WEP_CVAR_PRI(arc, damage) * dt * f, WEP_LIGHTNING, trace_endpos, force * dt);
        }
 
        // draw effect
@@ -129,7 +143,7 @@ void W_Lightning_Attack1 (void)
        beam.movetype = MOVETYPE_NONE;
        beam.shot_spread = 1;
        beam.bot_dodge = TRUE;
-       beam.bot_dodgerating = autocvar_g_balance_lightning_primary_damage;
+       beam.bot_dodgerating = WEP_CVAR_PRI(arc, damage);
        Net_LinkEntity(beam, FALSE, 0, W_Lightning_Beam_Send);
 
        oldself = self;
@@ -181,7 +195,7 @@ float w_lightning(float req)
                                /*if(self.animstate_startframe == self.anim_shoot_x && self.animstate_numframes == self.anim_shoot_y)
                                        weapon_thinkf(WFRAME_DONTCHANGE, autocvar_g_balance_lightning_primary_animtime, w_ready);
                                else*/
-                                       weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_lightning_primary_animtime, w_ready);
+                                       weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(arc, animtime), w_ready);
                        
                        if (weapon_prepareattack(0, 0))
                        {
@@ -190,7 +204,7 @@ float w_lightning(float req)
                                
                                if(!self.BUTTON_ATCK_prev)
                                {
-                                       weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_lightning_primary_animtime, w_ready);
+                                       weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(arc, animtime), w_ready);
                                        self.BUTTON_ATCK_prev = 1;
                                }
                        }
@@ -199,8 +213,8 @@ float w_lightning(float req)
                {
                        if (self.BUTTON_ATCK_prev != 0)
                        {
-                               weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_lightning_primary_animtime, w_ready);
-                               ATTACK_FINISHED(self) = time + autocvar_g_balance_lightning_primary_refire * W_WeaponRateFactor();
+                               weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(arc, animtime), w_ready);
+                               ATTACK_FINISHED(self) = time + WEP_CVAR_PRI(arc, refire) * W_WeaponRateFactor();
                        }
                        self.BUTTON_ATCK_prev = 0;
                }
@@ -230,10 +244,10 @@ float w_lightning(float req)
                weapon_setup(WEP_LIGHTNING);
        else if (req == WR_CHECKAMMO1)
        {
-               return !autocvar_g_balance_lightning_primary_ammo || (self.ammo_cells > 0);
+               return !WEP_CVAR_PRI(arc, ammo) || (self.ammo_cells > 0);
        }
        else if (req == WR_CHECKAMMO2)
-               return self.ammo_cells >= autocvar_g_balance_lightning_secondary_ammo;
+               return self.ammo_cells >= WEP_CVAR_SEC(arc, ammo);
        else if (req == WR_KILLMESSAGE)
        {
                if(w_deathtype & HITTYPE_SECONDARY)
index d4ccf2ba60657edc221ad22c0b468e3fe044bf86..706c0927e9d1dfdee0406d8fa42e6f5af22c2a45 100644 (file)
@@ -241,8 +241,41 @@ float WEP_LAST;
        REGISTER_WEAPON_2(WEP_##id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
 #endif
 
+#define MO_NONE 0
+#define MO_PRI 1
+#define MO_SEC 2
+#define MO_BOTH 3
+
+#define WEP_ADD_CVAR(weapon,mode,type,name) \
+       #if mode == MO_PRI \
+               ##type autocvar_g_balance_##weapon##_primary_##name; \
+       #endif \
+       #if mode == MO_SEC \
+               ##type autocvar_g_balance_##weapon##_secondary_##name; \
+       #endif \
+       #if mode == MO_BOTH \
+               ##type autocvar_g_balance_##weapon##_primary_##name; \
+               ##type autocvar_g_balance_##weapon##_secondary_##name; \
+       #endif \
+       #if mode == MO_NONE \
+               ##type autocvar_g_balance_##weapon##_##name; \
+       #endif
+
+#define WEP_CVAR(weapon,name) autocvar_g_balance_##weapon##_##name
+#define WEP_CVAR_PRI(weapon,name) WEP_CVAR(weapon, primary_##name)
+#define WEP_CVAR_SEC(weapon,name) WEP_CVAR(weapon, secondary_##name)
+#define WEP_CVAR_BOTH(weapon,mode,name) ((mode == MO_PRI) ? WEP_CVAR_PRI(weapon, name) : WEP_CVAR_SEC(weapon, name))
+                       
+                               
+
+#define WEP_ADD_PROP(weapon,type,prop,name) \
+       .##type prop; \
+       ##type autocvar_g_balance_##weapon##_##name;
+
 #include "all.qh"
 
+#undef WEP_ADD_CVAR
+#undef WEP_ADD_PROP
 #undef REGISTER_WEAPON
 ACCUMULATE_FUNCTION(RegisterWeapons, register_weapons_done)
 
index 2b144420d25e663c4adbd2db07ac1fe7c804abae..2ae7230128361cbd578d97235a1d6fbc25197955 100644 (file)
@@ -485,33 +485,6 @@ float autocvar_g_balance_laser_shockwave_splash_multiplier_min;
 float autocvar_g_balance_laser_shockwave_splash_radius;
 float autocvar_g_balance_laser_shockwave_spread_max;
 float autocvar_g_balance_laser_shockwave_spread_min;
-float autocvar_g_balance_lightning_primary_ammo;
-float autocvar_g_balance_lightning_primary_animtime;
-float autocvar_g_balance_lightning_primary_damage;
-//float autocvar_g_balance_lightning_primary_edgedamage;
-float autocvar_g_balance_lightning_primary_falloff_halflifedist;
-float autocvar_g_balance_lightning_primary_falloff_maxdist;
-float autocvar_g_balance_lightning_primary_falloff_mindist;
-float autocvar_g_balance_lightning_primary_force;
-//float autocvar_g_balance_lightning_primary_lifetime;
-//float autocvar_g_balance_lightning_primary_radius;
-float autocvar_g_balance_lightning_primary_range;
-float autocvar_g_balance_lightning_primary_refire;
-//float autocvar_g_balance_lightning_primary_speed;
-float autocvar_g_balance_lightning_secondary_ammo;
-//float autocvar_g_balance_lightning_secondary_animtime;
-//float autocvar_g_balance_lightning_secondary_damage;
-//float autocvar_g_balance_lightning_secondary_damageforcescale;
-//float autocvar_g_balance_lightning_secondary_edgedamage;
-//float autocvar_g_balance_lightning_secondary_flyingdamage;
-//float autocvar_g_balance_lightning_secondary_flyingforce;
-//float autocvar_g_balance_lightning_secondary_flyingradius;
-//float autocvar_g_balance_lightning_secondary_force;
-//float autocvar_g_balance_lightning_secondary_health;
-//float autocvar_g_balance_lightning_secondary_lifetime;
-//float autocvar_g_balance_lightning_secondary_radius;
-//float autocvar_g_balance_lightning_secondary_refire;
-//float autocvar_g_balance_lightning_secondary_speed;
 float autocvar_g_balance_minelayer_ammo;
 float autocvar_g_balance_minelayer_animtime;
 float autocvar_g_balance_minelayer_damage;