#endif
#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_hlac(void) { weapon_defaultspawnfunc(WEP_HLAC.m_id); }
+spawnfunc(weapon_hlac) { weapon_defaultspawnfunc(WEP_HLAC.m_id); }
void W_HLAC_Touch(void)
{SELFPARAM();
entity missile;
float spread;
- W_DecreaseAmmo(thiswep, WEP_CVAR_PRI(hlac, ammo));
+ W_DecreaseAmmo(thiswep, self, WEP_CVAR_PRI(hlac, ammo));
spread = WEP_CVAR_PRI(hlac, spread_min) + (WEP_CVAR_PRI(hlac, spread_add) * self.misc_bulletcounter);
spread = min(spread,WEP_CVAR_PRI(hlac, spread_max));
}
// weapon frames
-void W_HLAC_Attack_Frame(void)
-{SELFPARAM();
- if(self.weapon != self.switchweapon) // abort immediately if switching
+void W_HLAC_Attack_Frame(Weapon thiswep, entity actor, bool fire1, bool fire2)
+{
+ if(actor.weapon != actor.switchweapon) // abort immediately if switching
{
- w_ready();
+ w_ready(thiswep, actor, fire1, fire2);
return;
}
- if(self.BUTTON_ATCK)
+ if(actor.BUTTON_ATCK)
{
- if(!_WEP_ACTION(self.weapon, WR_CHECKAMMO1))
- if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
+ Weapon w = get_weaponinfo(actor.weapon);
+ if(!w.wr_checkammo1(w))
+ if(!(actor.items & IT_UNLIMITED_WEAPON_AMMO))
{
- W_SwitchWeapon_Force(self, w_getbestweapon(self));
- w_ready();
+ W_SwitchWeapon_Force(actor, w_getbestweapon(actor));
+ w_ready(thiswep, actor, fire1, fire2);
return;
}
- ATTACK_FINISHED(self) = time + WEP_CVAR_PRI(hlac, refire) * W_WeaponRateFactor();
+ ATTACK_FINISHED(actor) = time + WEP_CVAR_PRI(hlac, refire) * W_WeaponRateFactor();
W_HLAC_Attack(WEP_HLAC);
- self.misc_bulletcounter = self.misc_bulletcounter + 1;
- weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(hlac, refire), W_HLAC_Attack_Frame);
+ actor.misc_bulletcounter = actor.misc_bulletcounter + 1;
+ weapon_thinkf(actor, WFRAME_FIRE1, WEP_CVAR_PRI(hlac, refire), W_HLAC_Attack_Frame);
}
else
{
- weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(hlac, animtime), w_ready);
+ weapon_thinkf(actor, WFRAME_FIRE1, WEP_CVAR_PRI(hlac, animtime), w_ready);
}
}
{SELFPARAM();
float i;
- W_DecreaseAmmo(thiswep, WEP_CVAR_SEC(hlac, ammo));
+ W_DecreaseAmmo(thiswep, self, WEP_CVAR_SEC(hlac, ammo));
for(i=WEP_CVAR_SEC(hlac, shots);i>0;--i)
W_HLAC_Attack2();
}
}
- METHOD(HLAC, wr_aim, bool(entity thiswep))
+ METHOD(HLAC, wr_aim, void(entity thiswep))
{
self.BUTTON_ATCK = bot_aim(WEP_CVAR_PRI(hlac, speed), 0, WEP_CVAR_PRI(hlac, lifetime), false);
- return true;
}
- METHOD(HLAC, wr_think, bool(entity thiswep, bool fire1, bool fire2))
+ METHOD(HLAC, wr_think, void(entity thiswep, entity actor, bool fire1, bool fire2))
{
- if(autocvar_g_balance_hlac_reload_ammo && self.clip_load < min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo))) // forced reload
- _WEP_ACTION(self.weapon, WR_RELOAD);
- else if(fire1)
+ if(autocvar_g_balance_hlac_reload_ammo && actor.clip_load < min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo))) { // forced reload
+ Weapon w = get_weaponinfo(actor.weapon);
+ w.wr_reload(w);
+ } else if(fire1)
{
- if(weapon_prepareattack(0, WEP_CVAR_PRI(hlac, refire)))
+ if(weapon_prepareattack(actor, false, WEP_CVAR_PRI(hlac, refire)))
{
- self.misc_bulletcounter = 0;
+ actor.misc_bulletcounter = 0;
W_HLAC_Attack(thiswep);
- weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(hlac, refire), W_HLAC_Attack_Frame);
+ weapon_thinkf(actor, WFRAME_FIRE1, WEP_CVAR_PRI(hlac, refire), W_HLAC_Attack_Frame);
}
}
else if(fire2 && WEP_CVAR(hlac, secondary))
{
- if(weapon_prepareattack(1, WEP_CVAR_SEC(hlac, refire)))
+ if(weapon_prepareattack(actor, true, WEP_CVAR_SEC(hlac, refire)))
{
W_HLAC_Attack2_Frame(thiswep);
- weapon_thinkf(WFRAME_FIRE2, WEP_CVAR_SEC(hlac, animtime), w_ready);
+ weapon_thinkf(actor, WFRAME_FIRE2, WEP_CVAR_SEC(hlac, animtime), w_ready);
}
}
-
- return true;
}
- METHOD(HLAC, wr_init, bool(entity thiswep))
+ METHOD(HLAC, wr_init, void(entity thiswep))
{
HLAC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- return true;
}
METHOD(HLAC, wr_checkammo1, bool(entity thiswep))
{
ammo_amount += self.(weapon_load[WEP_HLAC.m_id]) >= WEP_CVAR_SEC(hlac, ammo);
return ammo_amount;
}
- METHOD(HLAC, wr_config, bool(entity thiswep))
+ METHOD(HLAC, wr_config, void(entity thiswep))
{
HLAC_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- return true;
}
- METHOD(HLAC, wr_reload, bool(entity thiswep))
+ METHOD(HLAC, wr_reload, void(entity thiswep))
{
- W_Reload(min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo)), SND(RELOAD));
- return true;
+ W_Reload(self, min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo)), SND(RELOAD));
}
- METHOD(HLAC, wr_suicidemessage, bool(entity thiswep))
+ METHOD(HLAC, wr_suicidemessage, int(entity thiswep))
{
return WEAPON_HLAC_SUICIDE;
}
- METHOD(HLAC, wr_killmessage, bool(entity thiswep))
+ METHOD(HLAC, wr_killmessage, int(entity thiswep))
{
return WEAPON_HLAC_MURDER;
}
#endif
#ifdef CSQC
- METHOD(HLAC, wr_impacteffect, bool(entity thiswep))
+ METHOD(HLAC, wr_impacteffect, void(entity thiswep))
{
vector org2;
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), org2, w_backoff * 1000, 1);
if(!w_issilent)
sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM);
-
- return true;
- }
- METHOD(HLAC, wr_init, bool(entity thiswep))
- {
- return true;
- }
- METHOD(HLAC, wr_zoomreticle, bool(entity thiswep))
- {
- // no weapon specific image for this weapon
- return false;
}
#endif