From: Samual Lenks 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 4612da764..e8072a80c 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 d4ccf2ba6..706c0927e 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 2b144420d..2ae723012 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;