#ifdef REGISTER_WEAPON
REGISTER_WEAPON(
-/* WEP_##id */ MACHINEGUN,
-/* function */ W_MachineGun,
-/* ammotype */ ammo_nails,
-/* impulse */ 3,
-/* flags */ WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN,
-/* rating */ BOT_PICKUP_RATING_MID,
-/* color */ '1 1 0',
-/* model */ "uzi",
-/* netname */ "uzi",
-/* fullname */ _("Machine Gun")
+/* WEP_##id */ MACHINEGUN,
+/* function */ W_MachineGun,
+/* ammotype */ ammo_nails,
+/* impulse */ 3,
+/* flags */ WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN,
+/* rating */ BOT_PICKUP_RATING_MID,
+/* color */ '1 1 0',
+/* modelname */ "uzi",
+/* simplemdl */ "foobar",
+/* crosshair */ "gfx/crosshairuzi 0.6",
+/* wepimg */ "weaponuzi",
+/* refname */ "machinegun",
+/* wepname */ _("Machine Gun")
);
#define MACHINEGUN_SETTINGS(w_cvar,w_prop) MACHINEGUN_SETTINGS_LIST(w_cvar, w_prop, MACHINEGUN, machinegun)
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
MACHINEGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#else
#ifdef SVQC
-void spawnfunc_weapon_machinegun()
+void spawnfunc_weapon_machinegun(void)
{
if(autocvar_sv_q3acompat_machineshotgunswap)
if(self.classname != "droppedweapon")
}
weapon_defaultspawnfunc(WEP_MACHINEGUN);
}
-void spawnfunc_weapon_uzi() { spawnfunc_weapon_machinegun(); }
+void spawnfunc_weapon_uzi(void) { spawnfunc_weapon_machinegun(); }
-void W_MachineGun_MuzzleFlash_Think()
+void W_MachineGun_MuzzleFlash_Think(void)
{
self.frame = self.frame + 2;
self.scale = self.scale * 0.5;
self.alpha = self.alpha - 0.25;
self.nextthink = time + 0.05;
- if (self.alpha <= 0)
+ if(self.alpha <= 0)
{
self.think = SUB_Remove;
self.nextthink = time;
}
-void W_MachineGun_MuzzleFlash()
+void W_MachineGun_MuzzleFlash(void)
{
- if (self.muzzle_flash == world)
+ if(self.muzzle_flash == world)
self.muzzle_flash = spawn();
// muzzle flash for 1st person view
void W_MachineGun_Attack(float deathtype)
{
- W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? WEP_CVAR(machinegun, first_damage) : WEP_CVAR(machinegun, sustained_damage)));
- if (!autocvar_g_norecoil)
+ W_SetupShot(self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? WEP_CVAR(machinegun, first_damage) : WEP_CVAR(machinegun, sustained_damage)));
+ if(!autocvar_g_norecoil)
{
- self.punchangle_x = random () - 0.5;
- self.punchangle_y = random () - 0.5;
+ self.punchangle_x = random() - 0.5;
+ self.punchangle_y = random() - 0.5;
}
// this attack_finished just enforces a cooldown at the end of a burst
ATTACK_FINISHED(self) = time + WEP_CVAR(machinegun, first_refire) * W_WeaponRateFactor();
- if (self.misc_bulletcounter == 1)
+ if(self.misc_bulletcounter == 1)
fireBullet(w_shotorg, w_shotdir, WEP_CVAR(machinegun, first_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, first_damage), WEP_CVAR(machinegun, first_force), deathtype, 0);
else
fireBullet(w_shotorg, w_shotdir, WEP_CVAR(machinegun, sustained_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), deathtype, 0);
W_AttachToShotorg(self.muzzle_flash, '5 0 0');
// casing code
- if (autocvar_g_casings >= 2)
- SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
+ if(autocvar_g_casings >= 2)
+ SpawnCasing(((random() * 50 + 50) * v_right) - (v_forward * (random() * 25 + 25)) - ((random() * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
- if (self.misc_bulletcounter == 1)
+ if(self.misc_bulletcounter == 1)
W_DecreaseAmmo(WEP_CVAR(machinegun, first_ammo));
else
W_DecreaseAmmo(WEP_CVAR(machinegun, sustained_ammo));
}
// weapon frames
-void W_MachineGun_Attack_Frame()
+void W_MachineGun_Attack_Frame(void)
{
if(self.weapon != self.switchweapon) // abort immediately if switching
{
w_ready();
return;
}
- if (self.BUTTON_ATCK)
+ if(self.BUTTON_ATCK)
{
- if (!WEP_ACTION(self.weapon, WR_CHECKAMMO2))
- if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
+ if(!WEP_ACTION(self.weapon, WR_CHECKAMMO2))
+ if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
W_SwitchWeapon_Force(self, w_getbestweapon(self));
w_ready();
}
-void W_MachineGun_Attack_Auto()
+void W_MachineGun_Attack_Auto(void)
{
float machinegun_spread;
- if (!self.BUTTON_ATCK)
+ if(!self.BUTTON_ATCK)
{
w_ready();
return;
}
- if (!WEP_ACTION(self.weapon, WR_CHECKAMMO1))
- if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
+ if(!WEP_ACTION(self.weapon, WR_CHECKAMMO1))
+ if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
W_SwitchWeapon_Force(self, w_getbestweapon(self));
w_ready();
W_DecreaseAmmo(WEP_CVAR(machinegun, sustained_ammo));
- W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage));
- if (!autocvar_g_norecoil)
+ W_SetupShot(self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage));
+ if(!autocvar_g_norecoil)
{
- self.punchangle_x = random () - 0.5;
- self.punchangle_y = random () - 0.5;
+ self.punchangle_x = random() - 0.5;
+ self.punchangle_y = random() - 0.5;
}
machinegun_spread = bound(WEP_CVAR(machinegun, spread_min), WEP_CVAR(machinegun, spread_min) + (WEP_CVAR(machinegun, spread_add) * self.misc_bulletcounter), WEP_CVAR(machinegun, spread_max));
W_MachineGun_MuzzleFlash();
W_AttachToShotorg(self.muzzle_flash, '5 0 0');
- if (autocvar_g_casings >= 2) // casing code
- SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
+ if(autocvar_g_casings >= 2) // casing code
+ SpawnCasing(((random() * 50 + 50) * v_right) - (v_forward * (random() * 25 + 25)) - ((random() * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
ATTACK_FINISHED(self) = time + WEP_CVAR(machinegun, first_refire) * W_WeaponRateFactor();
weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(machinegun, sustained_refire), W_MachineGun_Attack_Auto);
}
-void W_MachineGun_Attack_Burst()
+void W_MachineGun_Attack_Burst(void)
{
- W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage));
- if (!autocvar_g_norecoil)
+ W_SetupShot(self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage));
+ if(!autocvar_g_norecoil)
{
- self.punchangle_x = random () - 0.5;
- self.punchangle_y = random () - 0.5;
+ self.punchangle_x = random() - 0.5;
+ self.punchangle_y = random() - 0.5;
}
fireBullet(w_shotorg, w_shotdir, WEP_CVAR(machinegun, burst_speed), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), WEP_MACHINEGUN, 0);
W_MachineGun_MuzzleFlash();
W_AttachToShotorg(self.muzzle_flash, '5 0 0');
- if (autocvar_g_casings >= 2) // casing code
- SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
+ if(autocvar_g_casings >= 2) // casing code
+ SpawnCasing(((random() * 50 + 50) * v_right) - (v_forward * (random() * 25 + 25)) - ((random() * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
self.misc_bulletcounter = self.misc_bulletcounter + 1;
- if (self.misc_bulletcounter == 0)
+ if(self.misc_bulletcounter == 0)
{
ATTACK_FINISHED(self) = time + WEP_CVAR(machinegun, burst_refire2) * W_WeaponRateFactor();
weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(machinegun, burst_animtime), w_ready);
WEP_ACTION(self.weapon, WR_RELOAD);
else if(WEP_CVAR(machinegun, mode) == 1)
{
- if (self.BUTTON_ATCK)
- if (weapon_prepareattack(0, 0))
+ if(self.BUTTON_ATCK)
+ if(weapon_prepareattack(0, 0))
{
self.misc_bulletcounter = 0;
W_MachineGun_Attack_Auto();
if(self.BUTTON_ATCK2)
if(weapon_prepareattack(1, 0))
{
- if (!WEP_ACTION(self.weapon, WR_CHECKAMMO2))
- if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
+ if(!WEP_ACTION(self.weapon, WR_CHECKAMMO2))
+ if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
W_SwitchWeapon_Force(self, w_getbestweapon(self));
w_ready();
else
{
- if (self.BUTTON_ATCK)
- if (weapon_prepareattack(0, 0))
+ if(self.BUTTON_ATCK)
+ if(weapon_prepareattack(0, 0))
{
self.misc_bulletcounter = 1;
W_MachineGun_Attack(WEP_MACHINEGUN); // sets attack_finished
weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(machinegun, sustained_refire), W_MachineGun_Attack_Frame);
}
- if (self.BUTTON_ATCK2 && WEP_CVAR(machinegun, first))
- if (weapon_prepareattack(1, 0))
+ if(self.BUTTON_ATCK2 && WEP_CVAR(machinegun, first))
+ if(weapon_prepareattack(1, 0))
{
self.misc_bulletcounter = 1;
W_MachineGun_Attack(WEP_MACHINEGUN | HITTYPE_SECONDARY); // sets attack_finished
}
case WR_INIT:
{
- precache_model ("models/uziflash.md3");
- precache_model ("models/weapons/g_uzi.md3");
- precache_model ("models/weapons/v_uzi.md3");
- precache_model ("models/weapons/h_uzi.iqm");
- precache_sound ("weapons/uzi_fire.wav");
- MACHINEGUN_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP)
+ precache_model("models/uziflash.md3");
+ precache_model("models/weapons/g_uzi.md3");
+ precache_model("models/weapons/v_uzi.md3");
+ precache_model("models/weapons/h_uzi.iqm");
+ precache_sound("weapons/uzi_fire.wav");
+ MACHINEGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP)
return TRUE;
}
case WR_CHECKAMMO1:
{
if(WEP_CVAR(machinegun, mode) == 1)
- ammo_amount = self.AMMO_VAL(WEP_MACHINEGUN) >= WEP_CVAR(machinegun, sustained_ammo);
+ ammo_amount = self.WEP_AMMO(MACHINEGUN) >= WEP_CVAR(machinegun, sustained_ammo);
else
- ammo_amount = self.AMMO_VAL(WEP_MACHINEGUN) >= WEP_CVAR(machinegun, first_ammo);
+ ammo_amount = self.WEP_AMMO(MACHINEGUN) >= WEP_CVAR(machinegun, first_ammo);
if(WEP_CVAR(machinegun, reload_ammo))
{
case WR_CHECKAMMO2:
{
if(WEP_CVAR(machinegun, mode) == 1)
- ammo_amount = self.AMMO_VAL(WEP_MACHINEGUN) >= WEP_CVAR(machinegun, burst_ammo);
+ ammo_amount = self.WEP_AMMO(MACHINEGUN) >= WEP_CVAR(machinegun, burst_ammo);
else
- ammo_amount = self.AMMO_VAL(WEP_MACHINEGUN) >= WEP_CVAR(machinegun, first_ammo);
+ ammo_amount = self.WEP_AMMO(MACHINEGUN) >= WEP_CVAR(machinegun, first_ammo);
if(WEP_CVAR(machinegun, reload_ammo))
{
return WEAPON_MACHINEGUN_MURDER_SPRAY;
}
}
- return TRUE;
+ return FALSE;
}
#endif
#ifdef CSQC
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