..entity weaponentity_fld;
.float m_alpha;
-void CL_Weaponentity_Think()
+void CL_Weaponentity_Think(entity this)
{
- SELFPARAM();
this.nextthink = time;
if (intermission_running) this.frame = this.anim_idle.x;
.entity weaponentity = this.weaponentity_fld;
remove(this);
return;
}
- if (IS_DEAD(self.owner))
+ if (IS_DEAD(this.owner))
{
// owner died; disappear
this.model = "";
}
}
-void CL_ExteriorWeaponentity_Think()
+void CL_ExteriorWeaponentity_Think(entity this)
{
- SELFPARAM();
this.nextthink = time;
if (this.owner.exteriorweaponentity != this)
{
remove(this);
return;
}
- if (IS_DEAD(self.owner))
+ if (IS_DEAD(this.owner))
{
this.model = "";
return;
setmodel(view, MDL_Null); // precision set when changed
setorigin(view, '0 0 0');
view.weaponentity_fld = weaponentity;
- view.think = CL_Weaponentity_Think;
+ setthink(view, CL_Weaponentity_Think);
view.nextthink = time;
view.viewmodelforclient = actor;
view.customizeentityforclient = CL_Weaponentity_CustomizeEntityForClient;
exterior.solid = SOLID_NOT;
exterior.owner = actor;
setorigin(exterior, '0 0 0');
- exterior.think = CL_ExteriorWeaponentity_Think;
+ setthink(exterior, CL_ExteriorWeaponentity_Think);
exterior.nextthink = time;
CSQCMODEL_AUTOINIT(exterior);
.float prevwarntime;
bool weapon_prepareattack_checkammo(Weapon thiswep, entity actor, bool secondary)
{
- SELFPARAM();
if ((actor.items & IT_UNLIMITED_WEAPON_AMMO)) return true;
bool ammo = false;
- if (secondary) WITH(entity, self, actor, ammo = thiswep.wr_checkammo2(thiswep));
- else WITH(entity, self, actor, ammo = thiswep.wr_checkammo1(thiswep));
+ if (secondary) ammo = thiswep.wr_checkammo2(thiswep, actor);
+ else ammo = thiswep.wr_checkammo1(thiswep, actor);
if (ammo) return true;
// always keep the Mine Layer if we placed mines, so that we can detonate them
if (thiswep == WEP_MINE_LAYER)
// check if the other firing mode has enough ammo
bool ammo_other = false;
- if (secondary) WITH(entity, self, actor, ammo_other = thiswep.wr_checkammo1(thiswep));
- else WITH(entity, self, actor, ammo_other = thiswep.wr_checkammo2(thiswep));
+ if (secondary) ammo_other = thiswep.wr_checkammo1(thiswep, actor);
+ else ammo_other = thiswep.wr_checkammo2(thiswep, actor);
if (ammo_other)
{
if (time - actor.prevwarntime > 1)
void W_WeaponFrame(Player actor)
{
TC(Player, actor);
+ TC(PlayerState, PS(actor));
.entity weaponentity = weaponentities[0]; // TODO: unhardcode
entity this = actor.(weaponentity);
if (frametime) actor.weapon_frametime = frametime;
else
{
if (key_pressed && PS(actor).m_switchweapon != WEP_HOOK && !actor.hook_switchweapon)
- W_SwitchWeapon(WEP_HOOK);
+ W_SwitchWeapon(actor, WEP_HOOK);
actor.hook_switchweapon = key_pressed;
Weapon h = WEP_HOOK;
block_weapon = (PS(actor).m_weapon == h && (PHYS_INPUT_BUTTON_ATCK(actor) || key_pressed));
if (!block_weapon)
{
Weapon e = PS(actor).m_weapon;
+ TC(Weapon, e);
if (w != WEP_Null)
{
e.wr_think(e, actor, weaponentity, PHYS_INPUT_BUTTON_ATCK(actor) | (PHYS_INPUT_BUTTON_ATCK2(actor) << 1));
}
- else
+ else if (e)
{
e.wr_gonethink(e);
}
}
// switch away if the amount of ammo is not enough to keep using this weapon
Weapon w = PS(actor).m_weapon;
- if (!(w.wr_checkammo1(w) + w.wr_checkammo2(w)))
+ if (!(w.wr_checkammo1(w, actor) + w.wr_checkammo2(w, actor)))
{
actor.clip_load = -1; // reload later
W_SwitchToOtherWeapon(actor);
void W_DropEvent(.void(Weapon) event, entity player, float weapon_type, entity weapon_item)
{
- SELFPARAM();
Weapon w = Weapons_from(weapon_type);
weapon_dropevent_item = weapon_item;
- WITH(entity, self, player, w.event(w));
+ WITHSELF(player, w.event(w));
}