1 #ifdef REGISTER_MONSTER
4 /* function */ m_animus,
5 /* spawnflags */ MONSTER_SIZE_BROKEN,
6 /* mins,maxs */ '-41 -41 -31', '41 41 31',
7 /* model */ "demon.mdl",
8 /* netname */ "animus",
9 /* fullname */ _("Animus")
12 #define ANIMUS_SETTINGS(monster) \
13 MON_ADD_CVAR(monster, health) \
14 MON_ADD_CVAR(monster, attack_jump_damage) \
15 MON_ADD_CVAR(monster, attack_melee_damage) \
16 MON_ADD_CVAR(monster, speed_stop) \
17 MON_ADD_CVAR(monster, speed_run) \
18 MON_ADD_CVAR(monster, speed_walk)
21 ANIMUS_SETTINGS(animus)
25 const float animus_anim_stand = 0;
26 const float animus_anim_walk = 1;
27 const float animus_anim_run = 2;
28 const float animus_anim_leap = 3;
29 const float animus_anim_pain = 4;
30 const float animus_anim_death = 5;
31 const float animus_anim_attack = 6;
33 void animus_touch_jump()
38 if (monster_isvalidtarget(other, self))
40 if (vlen(self.velocity) > 300)
42 Damage(other, self, self, MON_CVAR(animus, attack_jump_damage) * monster_skill, DEATH_MONSTER_ANIMUS, other.origin, normalize(other.origin - self.origin));
43 self.touch = MonsterTouch; // instantly turn it off to stop damage spam
47 if(trace_dphitcontents)
48 self.touch = MonsterTouch;
51 float animus_attack(float attack_type)
55 case MONSTER_ATTACK_MELEE:
57 monsters_setframe(animus_anim_attack);
58 self.attack_finished_single = time + 1;
59 monster_melee(self.enemy, MON_CVAR(animus, attack_melee_damage), self.attack_range, DEATH_MONSTER_ANIMUS, TRUE);
63 case MONSTER_ATTACK_RANGED:
65 makevectors(self.angles);
66 if(monster_leap(animus_anim_leap, animus_touch_jump, v_forward * 700 + '0 0 300', 0.8))
74 void spawnfunc_monster_animus()
76 self.classname = "monster_animus";
78 self.monster_spawnfunc = spawnfunc_monster_animus;
80 if(Monster_CheckAppearFlags(self))
83 if not(monster_initialize(MON_ANIMUS, FALSE)) { remove(self); return; }
86 // compatibility with old spawns
87 void spawnfunc_monster_demon1() { spawnfunc_monster_animus(); }
88 void spawnfunc_monster_demon() { spawnfunc_monster_animus(); }
90 float m_animus(float req)
96 monster_move(MON_CVAR(animus, speed_run), MON_CVAR(animus, speed_walk), MON_CVAR(animus, speed_stop), animus_anim_run, animus_anim_walk, animus_anim_stand);
101 monsters_setframe(animus_anim_death);
106 if not(self.health) self.health = MON_CVAR(animus, health);
108 self.monster_loot = spawnfunc_item_health_medium;
109 self.monster_attackfunc = animus_attack;
110 monsters_setframe(animus_anim_stand);
121 MON_CONFIG_SETTINGS(ANIMUS_SETTINGS(animus))
131 float m_animus(float req)
142 precache_model ("models/monsters/demon.mdl");
151 #endif // REGISTER_MONSTER