#ifdef REGISTER_WEAPON
REGISTER_WEAPON(
-/* WEP_##id */ NEX,
-/* function */ w_nex,
-/* ammotype */ IT_CELLS,
-/* impulse */ 7,
-/* flags */ WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN,
-/* rating */ BOT_PICKUP_RATING_HIGH,
-/* model */ "nex",
-/* shortname */ "nex",
-/* fullname */ _("Nex")
+/* WEP_##id */ NEX,
+/* function */ w_nex,
+/* ammotype */ ammo_cells,
+/* impulse */ 7,
+/* flags */ WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN,
+/* rating */ BOT_PICKUP_RATING_HIGH,
+/* color */ '0.5 1 1',
+/* model */ "nex",
+/* netname */ "nex",
+/* fullname */ _("Vortex")
);
-#define NEX_SETTINGS(weapon) \
- WEP_ADD_CVAR(weapon, MO_BOTH, ammo) \
- WEP_ADD_CVAR(weapon, MO_BOTH, animtime) \
- WEP_ADD_CVAR(weapon, MO_BOTH, damage) \
- WEP_ADD_CVAR(weapon, MO_BOTH, force) \
- WEP_ADD_CVAR(weapon, MO_BOTH, damagefalloff_mindist) \
- WEP_ADD_CVAR(weapon, MO_BOTH, damagefalloff_maxdist) \
- WEP_ADD_CVAR(weapon, MO_BOTH, damagefalloff_halflife) \
- WEP_ADD_CVAR(weapon, MO_BOTH, damagefalloff_forcehalflife) \
- WEP_ADD_CVAR(weapon, MO_BOTH, ammo) \
- WEP_ADD_CVAR(weapon, MO_BOTH, refire) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_mindmg) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_shot_multiplier) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_animlimit) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_limit) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_rate) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_rot_rate) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_rot_pause) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_start) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_minspeed) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_maxspeed) \
- WEP_ADD_CVAR(weapon, MO_NONE, charge_velocity_rate) \
- WEP_ADD_CVAR(weapon, MO_SEC, chargepool) \
- WEP_ADD_CVAR(weapon, MO_SEC, chargepool_regen) \
- WEP_ADD_CVAR(weapon, MO_SEC, chargepool_pause_regen) \
- 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 NEX_SETTINGS(w_cvar,w_prop) NEX_SETTINGS_LIST(w_cvar, w_prop, NEX, nex)
+#define NEX_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
+ w_cvar(id, sn, BOTH, ammo) \
+ w_cvar(id, sn, BOTH, animtime) \
+ w_cvar(id, sn, BOTH, damage) \
+ w_cvar(id, sn, BOTH, force) \
+ w_cvar(id, sn, BOTH, damagefalloff_mindist) \
+ w_cvar(id, sn, BOTH, damagefalloff_maxdist) \
+ w_cvar(id, sn, BOTH, damagefalloff_halflife) \
+ w_cvar(id, sn, BOTH, damagefalloff_forcehalflife) \
+ w_cvar(id, sn, BOTH, refire) \
+ w_cvar(id, sn, NONE, charge) \
+ w_cvar(id, sn, NONE, charge_mindmg) \
+ w_cvar(id, sn, NONE, charge_shot_multiplier) \
+ w_cvar(id, sn, NONE, charge_animlimit) \
+ w_cvar(id, sn, NONE, charge_limit) \
+ w_cvar(id, sn, NONE, charge_rate) \
+ w_cvar(id, sn, NONE, charge_rot_rate) \
+ w_cvar(id, sn, NONE, charge_rot_pause) \
+ w_cvar(id, sn, NONE, charge_start) \
+ w_cvar(id, sn, NONE, charge_minspeed) \
+ w_cvar(id, sn, NONE, charge_maxspeed) \
+ w_cvar(id, sn, NONE, charge_velocity_rate) \
+ w_cvar(id, sn, NONE, secondary) \
+ w_cvar(id, sn, SEC, chargepool) \
+ w_cvar(id, sn, SEC, chargepool_regen) \
+ w_cvar(id, sn, SEC, chargepool_pause_regen) \
+ w_prop(id, sn, float, reloading_ammo, reload_ammo) \
+ w_prop(id, sn, float, reloading_time, reload_time) \
+ w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
+ w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
+ w_prop(id, sn, string, weaponreplace, weaponreplace) \
+ w_prop(id, sn, float, weaponstart, weaponstart) \
+ w_prop(id, sn, float, weaponstartoverride, weaponstartoverride)
#ifdef SVQC
-NEX_SETTINGS(nex)
-void spawnfunc_weapon_nex (void) { weapon_defaultspawnfunc(WEP_NEX); }
+NEX_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#endif
#else
#ifdef SVQC
+void spawnfunc_weapon_nex (void) { weapon_defaultspawnfunc(WEP_NEX); }
void SendCSQCNexBeamParticle(float charge) {
vector v;
//beam and muzzle flash done on client
SendCSQCNexBeamParticle(charge);
- W_DecreaseAmmo(ammo_cells, myammo, autocvar_g_balance_nex_reload_ammo);
+ W_DecreaseAmmo(myammo);
}
void spawnfunc_weapon_nex (void); // defined in t_items.qc
self.pauseregen_finished = max(self.pauseregen_finished, time + WEP_CVAR_SEC(nex, chargepool_pause_regen));
}
- if(autocvar_g_balance_nex_reload_ammo && self.clip_load < min(autocvar_g_balance_nex_primary_ammo, autocvar_g_balance_nex_secondary_ammo)) // forced reload
+ if(autocvar_g_balance_nex_reload_ammo && self.clip_load < min(WEP_CVAR_PRI(nex, ammo), WEP_CVAR_SEC(nex, ammo))) // forced reload
WEP_ACTION(self.weapon, WR_RELOAD);
else
{
weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(nex, animtime), w_ready);
}
}
- if ((WEP_CVAR(nex, charge) && !autocvar_g_balance_nex_secondary) ? (self.BUTTON_ZOOM | self.BUTTON_ZOOMSCRIPT) : self.BUTTON_ATCK2)
+ if ((WEP_CVAR(nex, charge) && !WEP_CVAR(nex, secondary)) ? (self.BUTTON_ZOOM | self.BUTTON_ZOOMSCRIPT) : self.BUTTON_ATCK2)
{
if(WEP_CVAR(nex, charge))
{
if(self.BUTTON_ATCK2) // only eat ammo when the button is pressed
{
dt = min(dt, (1 - self.nex_charge) / WEP_CVAR(nex, charge_rate));
- if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+ if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
// if this weapon is reloadable, decrease its load. Else decrease the player's ammo
if(autocvar_g_balance_nex_reload_ammo)
}
else
{
- dt = min(dt, (self.ammo_cells - WEP_CVAR_PRI(nex, ammo)) / WEP_CVAR_SEC(nex, ammo));
+ dt = min(dt, (self.AMMO_VAL(WEP_NEX) - WEP_CVAR_PRI(nex, ammo)) / WEP_CVAR_SEC(nex, ammo));
dt = max(0, dt);
if(dt > 0)
{
- self.ammo_cells = max(WEP_CVAR_SEC(nex, ammo), self.ammo_cells - WEP_CVAR_SEC(nex, ammo) * dt);
+ self.AMMO_VAL(WEP_NEX) = max(WEP_CVAR_SEC(nex, ammo), self.AMMO_VAL(WEP_NEX) - WEP_CVAR_SEC(nex, ammo) * dt);
}
}
}
}
}
}
- else if(autocvar_g_balance_nex_secondary)
+ else if(WEP_CVAR(nex, secondary))
{
if (weapon_prepareattack(0, WEP_CVAR_SEC(nex, refire)))
{
return TRUE;
}
- case WR_PRECACHE:
+ case WR_INIT:
{
precache_model ("models/nexflash.md3");
precache_model ("models/weapons/g_nex.md3");
precache_sound ("weapons/nexwhoosh1.wav");
precache_sound ("weapons/nexwhoosh2.wav");
precache_sound ("weapons/nexwhoosh3.wav");
- #define WEP_ADD_CVAR(weapon,mode,name) /*nothing*/
- #define WEP_ADD_PROP(weapon,prop,name) get_weaponinfo(WEP_NEX).##prop = autocvar_g_balance_##weapon##_##name;
- NEX_SETTINGS(nex)
- #undef WEP_ADD_CVAR
- #undef WEP_ADD_PROP
- return TRUE;
- }
- case WR_SETUP:
- {
- weapon_setup(WEP_NEX);
- self.current_ammo = ammo_cells;
+ NEX_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP)
return TRUE;
}
case WR_CHECKAMMO1:
{
- ammo_amount = self.ammo_cells >= WEP_CVAR_PRI(nex, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_NEX) >= WEP_CVAR_PRI(nex, ammo);
ammo_amount += (autocvar_g_balance_nex_reload_ammo && self.(weapon_load[WEP_NEX]) >= WEP_CVAR_PRI(nex, ammo));
return ammo_amount;
}
case WR_CHECKAMMO2:
{
- if(autocvar_g_balance_nex_secondary)
+ if(WEP_CVAR(nex, secondary))
{
// don't allow charging if we don't have enough ammo
- ammo_amount = self.ammo_cells >= WEP_CVAR_SEC(nex, ammo);
- ammo_amount += self.(weapon_load[WEP_NEX]) >= WEP_CVAR_SEC(nex, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_NEX) >= WEP_CVAR_SEC(nex, ammo);
+ ammo_amount += self.(weapon_load[WEP_NEX]) >= WEP_CVAR_SEC(nex, ammo);
return ammo_amount;
}
else
return FALSE; // zoom is not a fire mode
}
}
+ case WR_CONFIG:
+ {
+ NEX_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS)
+ return TRUE;
+ }
case WR_RELOAD:
{
- W_Reload(min(WEP_CVAR_PRI(nex, ammo), WEP_CVAR_SEC(nex, ammo)), autocvar_g_balance_nex_reload_ammo, autocvar_g_balance_nex_reload_time, "weapons/reload.wav");
+ W_Reload(min(WEP_CVAR_PRI(nex, ammo), WEP_CVAR_SEC(nex, ammo)), "weapons/reload.wav");
return TRUE;
}
case WR_SUICIDEMESSAGE:
return TRUE;
}
- case WR_PRECACHE:
+ case WR_INIT:
{
precache_sound("weapons/neximpact.wav");
return TRUE;