1 #ifdef REGISTER_MONSTER
4 /* function */ m_slime,
5 /* mins,maxs */ '-16 -16 -24', '16 16 16',
6 /* model */ "slime.dpm",
8 /* fullname */ _("Slime")
13 float autocvar_g_monster_slime;
14 float autocvar_g_monster_slime_health;
15 float autocvar_g_monster_slime_speed_walk;
16 float autocvar_g_monster_slime_speed_run;
18 const float slime_anim_walk = 0;
19 const float slime_anim_idle = 1;
20 const float slime_anim_jump = 2;
21 const float slime_anim_fly = 3;
22 const float slime_anim_die = 4;
23 const float slime_anim_pain = 5;
25 void slime_touch_jump()
30 if(vlen(self.velocity) > 200)
32 Damage (self, world, world, self.health + self.max_health + 200, DEATH_MONSTER_SLIME, self.origin, '0 0 0');
37 if(trace_dphitcontents)
39 self.touch = MonsterTouch;
40 self.movetype = MOVETYPE_WALK;
44 float slime_attack(float attack_type)
48 case MONSTER_ATTACK_MELEE:
49 case MONSTER_ATTACK_RANGED:
51 makevectors(self.angles);
52 if(monster_leap(slime_anim_jump, slime_touch_jump, v_forward * 600 + '0 0 200', 0.5))
62 RadiusDamage(self, self, 250 * monster_skill, 15, 250 * (monster_skill * 0.7), world, 250, DEATH_MONSTER_SLIME, world);
63 pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
64 sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
71 self.health = -100; // gibbed
74 Monster_CheckDropCvars ("slime"); // TODO: add a special function to drop items after death
76 self.deadflag = DEAD_DEAD;
77 self.think = Monster_Fade;
78 self.nextthink = time + 0.1;
81 void spawnfunc_monster_slime()
83 if not(autocvar_g_monster_slime) { remove(self); return; }
85 self.classname = "monster_slime";
87 self.monster_spawnfunc = spawnfunc_monster_slime;
89 if(Monster_CheckAppearFlags(self))
92 if not(monster_initialize(MON_SLIME, FALSE, 0)) { remove(self); return; }
95 // compatibility with old spawns
96 void spawnfunc_monster_tarbaby() { spawnfunc_monster_slime(); }
98 float m_slime(float req)
104 monster_move(autocvar_g_monster_slime_speed_run, autocvar_g_monster_slime_speed_walk, 20, slime_anim_walk, slime_anim_walk, slime_anim_idle);
109 self.think = slime_dead;
110 self.nextthink = time;
111 self.event_damage = func_null;
112 self.movetype = MOVETYPE_NONE;
113 self.takedamage = DAMAGE_NO;
117 self.SendFlags |= MSF_MOVE | MSF_STATUS;
123 if not(self.health) self.health = autocvar_g_monster_slime_health;
125 self.monster_attackfunc = slime_attack;
126 monsters_setframe(slime_anim_idle);
142 float m_slime(float req)
153 precache_model ("models/monsters/slime.dpm");
162 #endif // REGISTER_MONSTER