From: Samual Lenks <samual@xonotic.org>
Date: Tue, 11 Jun 2013 02:02:35 +0000 (-0400)
Subject: Start working on a new (independent) way to handle cvars for weapons
X-Git-Tag: xonotic-v0.8.0~152^2~395
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=87790e35c953018f81b0a1d5c607234853f8f047;p=xonotic%2Fxonotic-data.pk3dir.git

Start working on a new (independent) way to handle cvars for weapons
---

diff --git a/qcsrc/common/weapons/w_arc.qc b/qcsrc/common/weapons/w_arc.qc
index 4612da7643..e8072a80ce 100644
--- a/qcsrc/common/weapons/w_arc.qc
+++ b/qcsrc/common/weapons/w_arc.qc
@@ -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)
diff --git a/qcsrc/common/weapons/weapons.qh b/qcsrc/common/weapons/weapons.qh
index d4ccf2ba60..706c0927e9 100644
--- a/qcsrc/common/weapons/weapons.qh
+++ b/qcsrc/common/weapons/weapons.qh
@@ -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)
 
diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh
index 2b144420d2..2ae7230128 100644
--- a/qcsrc/server/autocvars.qh
+++ b/qcsrc/server/autocvars.qh
@@ -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;