-// size
const vector KNIGHT_MIN = '-20 -20 -32';
const vector KNIGHT_MAX = '20 20 41';
-// model
string KNIGHT_MODEL = "models/monsters/hknight.mdl";
#ifdef SVQC
-// cvars
float autocvar_g_monster_knight;
float autocvar_g_monster_knight_health;
float autocvar_g_monster_knight_melee_damage;
float autocvar_g_monster_knight_jump_damage;
float autocvar_g_monster_knight_jump_dist;
-// animations
const float knight_anim_stand = 0;
const float knight_anim_walk = 1;
const float knight_anim_run = 2;
void knight_inferno()
{
- self.monster_delayedattack = func_null;
- self.delay = -1;
if not(self.enemy)
return;
monster_makevectors(self.enemy);
- self.monster_delayedattack = func_null;
- self.delay = -1;
-
self.effects |= EF_MUZZLEFLASH;
sound(self, CHAN_WEAPON, "weapons/fireball2.wav", 1, ATTN_NORM);
void knight_spikes()
{
- self.monster_delayedattack = knight_spikes;
- self.delay = time + 0.1;
self.knight_cycles += 1;
knight_spike();
- if(self.knight_cycles >= 7)
- {
- self.monster_delayedattack = func_null;
- self.delay = -1;
- }
+
+ if(self.knight_cycles <= 7)
+ defer(0.1, knight_spikes);
}
float knight_attack_ranged()
case 1:
{
monsters_setframe(knight_anim_magic2);
- self.delay = time + 0.4;
- self.monster_delayedattack = knight_fireball;
self.attack_finished_single = time + 2;
+ defer(0.4, knight_fireball);
return TRUE;
}
case 2:
{
- self.monster_delayedattack = knight_inferno;
- self.delay = time + 0.5;
self.attack_finished_single = time + 3;
+ defer(0.5, knight_inferno);
return TRUE;
}
case 3:
{
monsters_setframe(knight_anim_magic3);
- self.monster_delayedattack = knight_spikes;
- self.delay = time + 0.4;
self.attack_finished_single = time + 3;
+ defer(0.4, knight_spikes);
return TRUE;
}
}
void spawnfunc_monster_knight()
-{
+{
if not(autocvar_g_monster_knight) { remove(self); return; }
self.monster_spawnfunc = spawnfunc_monster_knight;