#ifdef SVQC
// button and multiple button
-void() button_wait;
-void() button_return;
+void button_wait(entity this);
+void button_return(entity this);
-void button_wait()
-{SELFPARAM();
+void button_wait(entity this)
+{
self.state = STATE_TOP;
self.SUB_NEXTTHINK = self.SUB_LTIME + self.wait;
- self.SUB_THINK = button_return;
+ SUB_THINK(self, button_return);
SUB_UseTargets(self, self.enemy, NULL);
self.frame = 1; // use alternate textures
}
-void button_done()
-{SELFPARAM();
+void button_done(entity this)
+{
self.state = STATE_BOTTOM;
}
-void button_return()
-{SELFPARAM();
+void button_return(entity this)
+{
self.state = STATE_DOWN;
- SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, button_done);
+ SUB_CalcMove (self, self.pos1, TSPEED_LINEAR, self.speed, button_done);
self.frame = 0; // use normal textures
if (self.health)
self.takedamage = DAMAGE_YES; // can be shot again
}
-void button_fire()
-{SELFPARAM();
+void button_fire(entity this)
+{
self.health = self.max_health;
self.takedamage = DAMAGE_NO; // will be reset upon return
_sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
self.state = STATE_UP;
- SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, button_wait);
+ SUB_CalcMove (self, self.pos2, TSPEED_LINEAR, self.speed, button_wait);
}
void button_reset(entity this)
return;
this.enemy = actor;
- WITHSELF(this, button_fire());
+ WITHSELF(this, button_fire(this));
}
-void button_touch()
-{SELFPARAM();
+void button_touch(entity this)
+{
if (!other)
return;
if (!other.iscreature)
self.enemy = other;
if (other.owner)
self.enemy = other.owner;
- button_fire ();
+ button_fire (self);
}
void button_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
if (this.health <= 0)
{
this.enemy = damage_attacker;
- WITHSELF(this, button_fire());
+ WITHSELF(this, button_fire(this));
}
}