#ifdef REGISTER_WEAPON
REGISTER_WEAPON(
-/* WEP_##id */ CRYLINK,
-/* function */ w_crylink,
-/* ammotype */ IT_CELLS,
-/* impulse */ 6,
-/* flags */ WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH,
-/* rating */ BOT_PICKUP_RATING_MID,
-/* model */ "crylink",
-/* netname */ "crylink",
-/* fullname */ _("Crylink")
+/* WEP_##id */ CRYLINK,
+/* function */ W_Crylink,
+/* ammotype */ ammo_cells,
+/* impulse */ 6,
+/* flags */ WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH,
+/* rating */ BOT_PICKUP_RATING_MID,
+/* color */ '1 0.5 1',
+/* modelname */ "crylink",
+/* simplemdl */ "foobar",
+/* crosshair */ "gfx/crosshaircrylink 0.4",
+/* refname */ "crylink",
+/* wepname */ _("Crylink")
);
-#define CRYLINK_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, edgedamage) \
- WEP_ADD_CVAR(weapon, MO_BOTH, radius) \
- WEP_ADD_CVAR(weapon, MO_BOTH, force) \
- WEP_ADD_CVAR(weapon, MO_BOTH, spread) \
- WEP_ADD_CVAR(weapon, MO_BOTH, refire) \
- WEP_ADD_CVAR(weapon, MO_BOTH, speed) \
- WEP_ADD_CVAR(weapon, MO_BOTH, shots) \
- WEP_ADD_CVAR(weapon, MO_BOTH, bounces) \
- WEP_ADD_CVAR(weapon, MO_BOTH, bouncedamagefactor) \
- WEP_ADD_CVAR(weapon, MO_BOTH, middle_lifetime) \
- WEP_ADD_CVAR(weapon, MO_BOTH, middle_fadetime) \
- WEP_ADD_CVAR(weapon, MO_BOTH, other_lifetime) \
- WEP_ADD_CVAR(weapon, MO_BOTH, other_fadetime) \
- WEP_ADD_CVAR(weapon, MO_BOTH, linkexplode) \
- WEP_ADD_CVAR(weapon, MO_BOTH, joindelay) \
- WEP_ADD_CVAR(weapon, MO_BOTH, joinspread) \
- WEP_ADD_CVAR(weapon, MO_BOTH, joinexplode) \
- WEP_ADD_CVAR(weapon, MO_BOTH, joinexplode_damage) \
- WEP_ADD_CVAR(weapon, MO_BOTH, joinexplode_edgedamage) \
- WEP_ADD_CVAR(weapon, MO_BOTH, joinexplode_radius) \
- WEP_ADD_CVAR(weapon, MO_BOTH, joinexplode_force) \
- WEP_ADD_CVAR(weapon, MO_SEC, spreadtype) \
- 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 CRYLINK_SETTINGS(w_cvar,w_prop) CRYLINK_SETTINGS_LIST(w_cvar, w_prop, CRYLINK, crylink)
+#define CRYLINK_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, edgedamage) \
+ w_cvar(id, sn, BOTH, radius) \
+ w_cvar(id, sn, BOTH, force) \
+ w_cvar(id, sn, BOTH, spread) \
+ w_cvar(id, sn, BOTH, refire) \
+ w_cvar(id, sn, BOTH, speed) \
+ w_cvar(id, sn, BOTH, shots) \
+ w_cvar(id, sn, BOTH, bounces) \
+ w_cvar(id, sn, BOTH, bouncedamagefactor) \
+ w_cvar(id, sn, BOTH, middle_lifetime) \
+ w_cvar(id, sn, BOTH, middle_fadetime) \
+ w_cvar(id, sn, BOTH, other_lifetime) \
+ w_cvar(id, sn, BOTH, other_fadetime) \
+ w_cvar(id, sn, BOTH, linkexplode) \
+ w_cvar(id, sn, BOTH, joindelay) \
+ w_cvar(id, sn, BOTH, joinspread) \
+ w_cvar(id, sn, BOTH, joinexplode) \
+ w_cvar(id, sn, BOTH, joinexplode_damage) \
+ w_cvar(id, sn, BOTH, joinexplode_edgedamage) \
+ w_cvar(id, sn, BOTH, joinexplode_radius) \
+ w_cvar(id, sn, BOTH, joinexplode_force) \
+ w_cvar(id, sn, SEC, spreadtype) \
+ w_cvar(id, sn, NONE, secondary) \
+ 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
-CRYLINK_SETTINGS(crylink)
+CRYLINK_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float gravity;
.float crylink_waitrelease;
.entity crylink_lastgroup;
if(WEP_CVAR_BOTH(crylink, isprimary, joinexplode))
{
n /= WEP_CVAR_BOTH(crylink, isprimary, shots);
- RadiusDamage(e, e.realowner, WEP_CVAR_BOTH(crylink, isprimary, joinexplode_damage) * n,
- WEP_CVAR_BOTH(crylink, isprimary, joinexplode_edgedamage) * n,
- WEP_CVAR_BOTH(crylink, isprimary, joinexplode_radius) * n, e.realowner, world,
- WEP_CVAR_BOTH(crylink, isprimary, joinexplode_force) * n, e.projectiledeathtype, other);
+ RadiusDamage(
+ e,
+ e.realowner,
+ WEP_CVAR_BOTH(crylink, isprimary, joinexplode_damage) * n,
+ WEP_CVAR_BOTH(crylink, isprimary, joinexplode_edgedamage) * n,
+ WEP_CVAR_BOTH(crylink, isprimary, joinexplode_radius) * n,
+ e.realowner,
+ world,
+ WEP_CVAR_BOTH(crylink, isprimary, joinexplode_force) * n,
+ e.projectiledeathtype,
+ other
+ );
pointparticles(particleeffectnum("crylink_joinexplode"), self.origin, '0 0 0', n);
}
}
vector forward, right, up;
float maxdmg;
- W_DecreaseAmmo(ammo_cells, autocvar_g_balance_crylink_primary_ammo, autocvar_g_balance_crylink_reload_ammo);
+ W_DecreaseAmmo(WEP_CVAR_PRI(crylink, ammo));
maxdmg = WEP_CVAR_PRI(crylink, damage) * WEP_CVAR_PRI(crylink, shots);
maxdmg *= 1 + WEP_CVAR_PRI(crylink, bouncedamagefactor) * WEP_CVAR_PRI(crylink, bounces);
s_z = v_forward_y;
}
s = s * WEP_CVAR_PRI(crylink, spread) * g_weaponspreadfactor;
- W_SetupProjectileVelocityEx(proj, w_shotdir + right * s_y + up * s_z, v_up, WEP_CVAR_PRI(crylink, speed), 0, 0, 0, FALSE);
+ W_SetupProjVelocity_Explicit(proj, w_shotdir + right * s_y + up * s_z, v_up, WEP_CVAR_PRI(crylink, speed), 0, 0, 0, FALSE);
proj.touch = W_Crylink_Touch;
proj.think = W_Crylink_Fadethink;
//proj.glow_size = 20;
proj.flags = FL_PROJECTILE;
- proj.missile_flags = MIF_SPLASH;
+ proj.missile_flags = MIF_SPLASH;
CSQCProjectile(proj, TRUE, (proj.cnt ? PROJECTILE_CRYLINK_BOUNCING : PROJECTILE_CRYLINK), TRUE);
vector forward, right, up;
float maxdmg;
- W_DecreaseAmmo(ammo_cells, autocvar_g_balance_crylink_secondary_ammo, autocvar_g_balance_crylink_reload_ammo);
+ W_DecreaseAmmo(WEP_CVAR_SEC(crylink, ammo));
maxdmg = WEP_CVAR_SEC(crylink, damage) * WEP_CVAR_SEC(crylink, shots);
maxdmg *= 1 + WEP_CVAR_SEC(crylink, bouncedamagefactor) * WEP_CVAR_SEC(crylink, bounces);
s = (w_shotdir + (((counter + 0.5) / shots) * 2 - 1) * v_right * WEP_CVAR_SEC(crylink, spread) * g_weaponspreadfactor);
}
- W_SetupProjectileVelocityEx(proj, s, v_up, WEP_CVAR_SEC(crylink, speed), 0, 0, 0, FALSE);
+ W_SetupProjVelocity_Explicit(proj, s, v_up, WEP_CVAR_SEC(crylink, speed), 0, 0, 0, FALSE);
proj.touch = W_Crylink_Touch;
proj.think = W_Crylink_Fadethink;
if(counter == (shots - 1) / 2)
}
}
-float w_crylink(float req)
+float W_Crylink(float req)
{
float ammo_amount;
switch(req)
}
case WR_THINK:
{
- if(autocvar_g_balance_crylink_reload_ammo && self.clip_load < min(autocvar_g_balance_crylink_primary_ammo, autocvar_g_balance_crylink_secondary_ammo)) // forced reload
+ if(autocvar_g_balance_crylink_reload_ammo && self.clip_load < min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo))) // forced reload
WEP_ACTION(self.weapon, WR_RELOAD);
if (self.BUTTON_ATCK)
setorigin(linkjoineffect, pos);
}
self.crylink_waitrelease = 0;
- if(!w_crylink(WR_CHECKAMMO1) && !w_crylink(WR_CHECKAMMO2))
- if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+ if(!W_Crylink(WR_CHECKAMMO1) && !W_Crylink(WR_CHECKAMMO2))
+ if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
// ran out of ammo!
self.cnt = WEP_CRYLINK;
precache_sound ("weapons/crylink_fire.wav");
precache_sound ("weapons/crylink_fire2.wav");
precache_sound ("weapons/crylink_linkjoin.wav");
- WEP_SET_PROPS(CRYLINK_SETTINGS(crylink), WEP_CRYLINK)
- return TRUE;
- }
- case WR_SETUP:
- {
- self.current_ammo = ammo_cells;
+ CRYLINK_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP)
return TRUE;
}
case WR_CHECKAMMO1:
if(self.crylink_lastgroup && self.crylink_waitrelease)
return TRUE;
- ammo_amount = self.ammo_cells >= autocvar_g_balance_crylink_primary_ammo;
- ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= autocvar_g_balance_crylink_primary_ammo;
+ ammo_amount = self.WEP_AMMO(CRYLINK) >= WEP_CVAR_PRI(crylink, ammo);
+ ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= WEP_CVAR_PRI(crylink, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
if(self.crylink_lastgroup && self.crylink_waitrelease)
return TRUE;
- ammo_amount = self.ammo_cells >= autocvar_g_balance_crylink_secondary_ammo;
- ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= autocvar_g_balance_crylink_secondary_ammo;
+ ammo_amount = self.WEP_AMMO(CRYLINK) >= WEP_CVAR_SEC(crylink, ammo);
+ ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= WEP_CVAR_SEC(crylink, ammo);
return ammo_amount;
}
case WR_CONFIG:
{
- WEP_CONFIG_SETTINGS(CRYLINK_SETTINGS(crylink))
+ CRYLINK_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS)
return TRUE;
}
case WR_RELOAD:
{
- W_Reload(min(autocvar_g_balance_crylink_primary_ammo, autocvar_g_balance_crylink_secondary_ammo), "weapons/reload.wav");
+ W_Reload(min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo)), "weapons/reload.wav");
return TRUE;
}
case WR_SUICIDEMESSAGE:
}
#endif
#ifdef CSQC
-float w_crylink(float req)
+float W_Crylink(float req)
{
switch(req)
{
precache_sound("weapons/crylink_impact.wav");
return TRUE;
}
+ case WR_ZOOMRETICLE:
+ {
+ // no weapon specific image for this weapon
+ return FALSE;
+ }
}
return TRUE;
}