#ifdef REGISTER_WEAPON
REGISTER_WEAPON(
/* WEP_##id */ SHOTGUN,
-/* function */ w_shotgun,
+/* function */ W_Shotgun,
/* ammotype */ ammo_none,
/* impulse */ 2,
/* flags */ WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN | WEP_FLAG_MUTATORBLOCKED,
/* rating */ BOT_PICKUP_RATING_LOW,
-/* model */ "shotgun",
-/* shortname */ "shotgun",
-/* fullname */ _("Shotgun")
+/* color */ '0.5 0.25 0',
+/* modelname */ "shotgun",
+/* simplemdl */ "foobar",
+/* crosshair */ "gfx/crosshairshotgun 0.65",
+/* wepimg */ "weaponshotgun",
+/* refname */ "shotgun",
+/* wepname */ _("Shotgun")
);
#define SHOTGUN_SETTINGS(w_cvar,w_prop) SHOTGUN_SETTINGS_LIST(w_cvar, w_prop, SHOTGUN, shotgun)
w_cvar(id, sn, BOTH, animtime) \
w_cvar(id, sn, BOTH, refire) \
w_cvar(id, sn, PRI, bullets) \
- w_cvar(id, sn, PRI, bulletconstant) \
w_cvar(id, sn, BOTH, damage) \
w_cvar(id, sn, BOTH, force) \
+ w_cvar(id, sn, PRI, solidpenetration) \
w_cvar(id, sn, PRI, spread) \
- w_cvar(id, sn, PRI, speed) \
w_cvar(id, sn, NONE, secondary) \
w_cvar(id, sn, SEC, melee_time) \
w_cvar(id, sn, SEC, melee_no_doubleslap) \
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)
+ w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
+ w_prop(id, sn, float, weaponthrowable, weaponthrowable)
#ifdef SVQC
SHOTGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#endif
#else
#ifdef SVQC
+void spawnfunc_weapon_shotgun(void) { weapon_defaultspawnfunc(WEP_SHOTGUN); }
void W_Shotgun_Attack (void)
{
W_SetupShot (self, TRUE, 5, "weapons/shotgun_fire.wav", CH_WEAPON_A, WEP_CVAR_PRI(shotgun, damage) * WEP_CVAR_PRI(shotgun, bullets));
for (sc = 0;sc < WEP_CVAR_PRI(shotgun, bullets);sc = sc + 1)
- fireBallisticBullet(w_shotorg, w_shotdir, WEP_CVAR_PRI(shotgun, spread), WEP_CVAR_PRI(shotgun, speed), 5, WEP_CVAR_PRI(shotgun, damage), WEP_CVAR_PRI(shotgun, force), WEP_SHOTGUN, 0, WEP_CVAR_PRI(shotgun, bulletconstant));
- endFireBallisticBullet();
+ fireBullet(w_shotorg, w_shotdir, WEP_CVAR_PRI(shotgun, spread), WEP_CVAR_PRI(shotgun, solidpenetration), WEP_CVAR_PRI(shotgun, damage), WEP_CVAR_PRI(shotgun, force), WEP_SHOTGUN, 0);
pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, WEP_CVAR_PRI(shotgun, ammo));
.float swing_prev;
.entity swing_alreadyhit;
-void shotgun_meleethink (void)
+void W_Shotgun_Melee_Think()
{
// declarations
float i, f, swing, swing_factor, swing_damage, meleetime, is_player;
entity meleetemp;
meleetemp = spawn();
meleetemp.realowner = self;
- meleetemp.think = shotgun_meleethink;
+ meleetemp.think = W_Shotgun_Melee_Think;
meleetemp.nextthink = time + WEP_CVAR_SEC(shotgun, melee_delay) * W_WeaponRateFactor();
W_SetupShot_Range(self, TRUE, 0, "", 0, WEP_CVAR_SEC(shotgun, damage), WEP_CVAR_SEC(shotgun, melee_range));
}
-void spawnfunc_weapon_shotgun(); // defined in t_items.qc
-
.float shotgun_primarytime;
-float w_shotgun(float req)
+float W_Shotgun(float req)
{
switch(req)
{
if(WEP_CVAR(shotgun, reload_ammo) && self.clip_load < WEP_CVAR_PRI(shotgun, ammo)) // forced reload
{
// don't force reload an empty shotgun if its melee attack is active
- if (!(WEP_CVAR(shotgun, secondary) && self.ammo_shells < WEP_CVAR_PRI(shotgun, ammo)))
+ if (!WEP_CVAR(shotgun, secondary))
WEP_ACTION(self.weapon, WR_RELOAD);
}
else
precache_sound ("misc/itempickup.wav");
precache_sound ("weapons/shotgun_fire.wav");
precache_sound ("weapons/shotgun_melee.wav");
- SHOTGUN_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP)
+ SHOTGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP)
return TRUE;
}
case WR_SETUP:
{
- self.current_ammo = ammo_none;
+ self.ammo_field = ammo_none;
return TRUE;
}
case WR_CHECKAMMO1:
return WEAPON_SHOTGUN_MURDER;
}
}
-
- return TRUE;
+ return FALSE;
}
#endif
#ifdef CSQC
.float prevric;
-float w_shotgun(float req)
+float W_Shotgun(float req)
{
switch(req)
{
precache_sound("weapons/ric3.wav");
return TRUE;
}
+ case WR_ZOOMRETICLE:
+ {
+ // no weapon specific image for this weapon
+ return FALSE;
+ }
}
- return TRUE;
+ return FALSE;
}
#endif
#endif