REGISTER_WEAPON(
/* WEP_##id */ DEVASTATOR,
/* function */ W_Devastator,
-/* ammotype */ IT_ROCKETS,
+/* ammotype */ ammo_rockets,
/* impulse */ 9,
/* flags */ WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_FLAG_CANCLIMB | WEP_TYPE_SPLASH,
/* rating */ BOT_PICKUP_RATING_HIGH,
+/* color */ '1 1 0',
/* model */ "rl",
/* netname */ "devastator",
/* fullname */ _("Devastator")
);
-#define DEVASTATOR_SETTINGS(w_cvar,w_prop) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, ammo) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, animtime) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, damage) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, damageforcescale) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, detonatedelay) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, edgedamage) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, force) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, guidedelay) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, guidegoal) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, guiderate) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, guideratedelay) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, guidestop) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, health) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, lifetime) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, radius) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, refire) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, remote_damage) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, remote_edgedamage) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, remote_force) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, remote_radius) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, speed) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, speedaccel) \
- w_cvar(WEP_DEVASTATOR, devastator, MO_NONE, speedstart) \
- w_prop(WEP_DEVASTATOR, devastator, float, reloading_ammo, reload_ammo) \
- w_prop(WEP_DEVASTATOR, devastator, float, reloading_time, reload_time) \
- w_prop(WEP_DEVASTATOR, devastator, float, switchdelay_raise, switchdelay_raise) \
- w_prop(WEP_DEVASTATOR, devastator, float, switchdelay_drop, switchdelay_drop) \
- w_prop(WEP_DEVASTATOR, devastator, string, weaponreplace, weaponreplace) \
- w_prop(WEP_DEVASTATOR, devastator, float, weaponstart, weaponstart)
+#define DEVASTATOR_SETTINGS(w_cvar,w_prop) DEVASTATOR_SETTINGS_LIST(w_cvar, w_prop, DEVASTATOR, devastator)
+#define DEVASTATOR_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
+ w_cvar(id, sn, NONE, ammo) \
+ w_cvar(id, sn, NONE, animtime) \
+ w_cvar(id, sn, NONE, damage) \
+ w_cvar(id, sn, NONE, damageforcescale) \
+ w_cvar(id, sn, NONE, detonatedelay) \
+ w_cvar(id, sn, NONE, edgedamage) \
+ w_cvar(id, sn, NONE, force) \
+ w_cvar(id, sn, NONE, guidedelay) \
+ w_cvar(id, sn, NONE, guidegoal) \
+ w_cvar(id, sn, NONE, guiderate) \
+ w_cvar(id, sn, NONE, guideratedelay) \
+ w_cvar(id, sn, NONE, guidestop) \
+ w_cvar(id, sn, NONE, health) \
+ w_cvar(id, sn, NONE, lifetime) \
+ w_cvar(id, sn, NONE, radius) \
+ w_cvar(id, sn, NONE, refire) \
+ w_cvar(id, sn, NONE, remote_damage) \
+ w_cvar(id, sn, NONE, remote_edgedamage) \
+ w_cvar(id, sn, NONE, remote_force) \
+ w_cvar(id, sn, NONE, remote_radius) \
+ w_cvar(id, sn, NONE, speed) \
+ w_cvar(id, sn, NONE, speedaccel) \
+ w_cvar(id, sn, NONE, speedstart) \
+ 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
DEVASTATOR_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
if (self.realowner.weapon == WEP_DEVASTATOR)
{
- if(self.realowner.ammo_rockets < WEP_CVAR(devastator, ammo))
+ if(self.realowner.AMMO_VAL(WEP_DEVASTATOR) < WEP_CVAR(devastator, ammo))
{
self.realowner.cnt = WEP_DEVASTATOR;
ATTACK_FINISHED(self.realowner) = time;
if (self.realowner.weapon == WEP_DEVASTATOR)
{
- if(self.realowner.ammo_rockets < WEP_CVAR(devastator, ammo))
+ if(self.realowner.AMMO_VAL(WEP_DEVASTATOR) < WEP_CVAR(devastator, ammo))
{
self.realowner.cnt = WEP_DEVASTATOR;
ATTACK_FINISHED(self.realowner) = time;
entity missile;
entity flash;
- W_DecreaseAmmo(ammo_rockets, WEP_CVAR(devastator, ammo), WEP_CVAR(devastator, reload_ammo));
+ W_DecreaseAmmo(WEP_CVAR(devastator, ammo));
W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 5, "weapons/rocket_fire.wav", CH_WEAPON_A, WEP_CVAR(devastator, damage));
pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
setorigin (missile, w_shotorg - v_forward * 3); // move it back so it hits the wall at the right point
- W_SetupProjectileVelocity(missile, WEP_CVAR(devastator, speedstart), 0);
+ W_SetupProjVelocity_Basic(missile, WEP_CVAR(devastator, speedstart), 0);
missile.angles = vectoangles (missile.velocity);
missile.touch = W_Devastator_Touch;
}
case WR_SETUP:
{
- self.current_ammo = ammo_rockets;
self.rl_release = 1;
return TRUE;
}
ammo_amount = FALSE;
if(WEP_CVAR(devastator, reload_ammo))
{
- if(self.ammo_rockets < WEP_CVAR(devastator, ammo) && self.(weapon_load[WEP_DEVASTATOR]) < WEP_CVAR(devastator, ammo))
+ if(self.AMMO_VAL(WEP_DEVASTATOR) < WEP_CVAR(devastator, ammo) && self.(weapon_load[WEP_DEVASTATOR]) < WEP_CVAR(devastator, ammo))
ammo_amount = TRUE;
}
- else if(self.ammo_rockets < WEP_CVAR(devastator, ammo))
+ else if(self.AMMO_VAL(WEP_DEVASTATOR) < WEP_CVAR(devastator, ammo))
ammo_amount = TRUE;
return !ammo_amount;
}