1 #ifdef REGISTER_MONSTER
3 /* MON_##id */ CERBERUS,
4 /* function */ m_cerberus,
5 /* mins,maxs */ '-16 -16 -24', '16 16 12',
7 /* netname */ "cerberus",
8 /* fullname */ _("Cerberus")
13 float autocvar_g_monster_cerberus;
14 float autocvar_g_monster_cerberus_health;
15 float autocvar_g_monster_cerberus_bite_damage;
16 float autocvar_g_monster_cerberus_attack_jump_damage;
17 float autocvar_g_monster_cerberus_speed_walk;
18 float autocvar_g_monster_cerberus_speed_run;
20 const float cerberus_anim_idle = 0;
21 const float cerberus_anim_walk = 1;
22 const float cerberus_anim_run = 2;
23 const float cerberus_anim_attack = 3;
24 const float cerberus_anim_die = 4;
25 const float cerberus_anim_pain = 5;
27 void cerberus_touch_jump()
30 if (vlen(self.velocity) > 300)
32 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));
33 self.touch = MonsterTouch;
36 if(trace_dphitcontents)
37 self.touch = MonsterTouch;
40 float cerberus_attack(float attack_type)
44 case MONSTER_ATTACK_MELEE:
46 monsters_setframe(cerberus_anim_attack);
47 self.attack_finished_single = time + 0.7;
48 monster_melee(self.enemy, autocvar_g_monster_cerberus_bite_damage, 0.2, DEATH_MONSTER_CERBERUS_BITE, TRUE);
52 case MONSTER_ATTACK_RANGED:
54 makevectors(self.angles);
55 if(monster_leap(cerberus_anim_attack, cerberus_touch_jump, v_forward * 300 + '0 0 200', 0.8))
63 void spawnfunc_monster_cerberus()
65 if not(autocvar_g_monster_cerberus) { remove(self); return; }
67 self.classname = "monster_cerberus";
69 self.monster_spawnfunc = spawnfunc_monster_cerberus;
71 if(Monster_CheckAppearFlags(self))
74 if not(monster_initialize(MON_CERBERUS, FALSE, 0)) { remove(self); return; }
77 // compatibility with old spawns
78 void spawnfunc_monster_dog() { spawnfunc_monster_cerberus(); }
80 float m_cerberus(float req)
86 monster_move(autocvar_g_monster_cerberus_speed_run, autocvar_g_monster_cerberus_speed_walk, 50, cerberus_anim_run, cerberus_anim_walk, cerberus_anim_idle);
91 monsters_setframe(cerberus_anim_die);
96 if not(self.health) self.health = autocvar_g_monster_cerberus_health;
98 self.monster_attackfunc = cerberus_attack;
99 monsters_setframe(cerberus_anim_idle);
115 float m_cerberus(float req)
126 precache_model ("models/monsters/dog.dpm");
135 #endif // REGISTER_MONSTER