1 const vector CERBERUS_MIN = '-16 -16 -24';
2 const vector CERBERUS_MAX = '16 16 12';
4 string CERBERUS_MODEL = "models/monsters/dog.dpm";
7 float autocvar_g_monster_cerberus;
8 float autocvar_g_monster_cerberus_health;
9 float autocvar_g_monster_cerberus_bite_damage;
10 float autocvar_g_monster_cerberus_attack_jump_damage;
11 float autocvar_g_monster_cerberus_speed_walk;
12 float autocvar_g_monster_cerberus_speed_run;
14 const float cerberus_anim_idle = 0;
15 const float cerberus_anim_walk = 1;
16 const float cerberus_anim_run = 2;
17 const float cerberus_anim_attack = 3;
18 const float cerberus_anim_die = 4;
19 const float cerberus_anim_pain = 5;
23 self.think = cerberus_think;
24 self.nextthink = time + self.ticrate;
26 monster_move(autocvar_g_monster_cerberus_speed_run, autocvar_g_monster_cerberus_speed_walk, 50, cerberus_anim_run, cerberus_anim_walk, cerberus_anim_idle);
29 void cerberus_touch_jump()
32 if (vlen(self.velocity) > 300)
34 Damage(self.enemy, self, self, autocvar_g_monster_cerberus_attack_jump_damage * monster_skill, DEATH_MONSTER_CERBERUS_JUMP, self.enemy.origin, normalize(self.enemy.origin - self.origin));
35 self.touch = MonsterTouch;
38 if(trace_dphitcontents)
39 self.touch = MonsterTouch;
42 float cerberus_attack(float attack_type)
46 case MONSTER_ATTACK_MELEE:
48 monsters_setframe(cerberus_anim_attack);
49 self.attack_finished_single = time + 0.7;
50 monster_melee(self.enemy, autocvar_g_monster_cerberus_bite_damage, 0.2, DEATH_MONSTER_CERBERUS_BITE, TRUE);
54 case MONSTER_ATTACK_RANGED:
56 makevectors(self.angles);
57 if(monster_leap(cerberus_anim_attack, cerberus_touch_jump, v_forward * 300 + '0 0 200', 0.8))
67 Monster_CheckDropCvars ("cerberus");
69 self.think = monster_dead_think;
70 self.nextthink = time + self.ticrate;
71 self.ltime = time + 5;
72 monsters_setframe(cerberus_anim_die);
74 monster_hook_death(); // for post-death mods
80 self.health = autocvar_g_monster_cerberus_health;
82 self.damageforcescale = 0;
83 self.classname = "monster_cerberus";
84 self.monster_attackfunc = cerberus_attack;
85 self.nextthink = time + random() * 0.5 + 0.1;
86 self.think = cerberus_think;
88 monsters_setframe(cerberus_anim_idle);
90 monster_setupsounds("cerberus");
92 monster_hook_spawn(); // for post-spawn mods
95 void spawnfunc_monster_cerberus()
97 if not(autocvar_g_monster_cerberus) { remove(self); return; }
99 self.monster_spawnfunc = spawnfunc_monster_cerberus;
101 if(Monster_CheckAppearFlags(self))
104 if not (monster_initialize(
105 "Cerberus", MONSTER_CERBERUS,
106 CERBERUS_MIN, CERBERUS_MAX,
108 cerberus_die, cerberus_spawn))
115 // compatibility with old spawns
116 void spawnfunc_monster_dog() { spawnfunc_monster_cerberus(); }