1 #ifdef REGISTER_MONSTER
4 /* function */ m_slime,
6 /* mins,maxs */ '-16 -16 -24', '16 16 16',
7 /* model */ "slime.dpm",
9 /* fullname */ _("Slime")
14 float autocvar_g_monster_slime;
15 float autocvar_g_monster_slime_health;
16 float autocvar_g_monster_slime_speed_walk;
17 float autocvar_g_monster_slime_speed_run;
19 const float slime_anim_walk = 0;
20 const float slime_anim_idle = 1;
21 const float slime_anim_jump = 2;
22 const float slime_anim_fly = 3;
23 const float slime_anim_die = 4;
24 const float slime_anim_pain = 5;
26 void slime_touch_jump()
31 if(vlen(self.velocity) > 200)
33 Damage (self, world, world, self.health + self.max_health + 200, DEATH_MONSTER_SLIME, self.origin, '0 0 0');
38 if(trace_dphitcontents)
40 self.touch = MonsterTouch;
41 self.movetype = MOVETYPE_WALK;
45 float slime_attack(float attack_type)
49 case MONSTER_ATTACK_MELEE:
50 case MONSTER_ATTACK_RANGED:
52 makevectors(self.angles);
53 if(monster_leap(slime_anim_jump, slime_touch_jump, v_forward * 600 + '0 0 200', 0.5))
63 RadiusDamage(self, self, 250 * monster_skill, 15, 250 * (monster_skill * 0.7), world, 250, DEATH_MONSTER_SLIME, world);
64 pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
65 sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
72 self.health = -100; // gibbed
75 Monster_CheckDropCvars ("slime"); // TODO: add a special function to drop items after death
77 self.deadflag = DEAD_DEAD;
78 self.think = Monster_Fade;
79 self.nextthink = time + 0.1;
82 void spawnfunc_monster_slime()
84 if not(autocvar_g_monster_slime) { remove(self); return; }
86 self.classname = "monster_slime";
88 self.monster_spawnfunc = spawnfunc_monster_slime;
90 if(Monster_CheckAppearFlags(self))
93 if not(monster_initialize(MON_SLIME, FALSE)) { remove(self); return; }
96 // compatibility with old spawns
97 void spawnfunc_monster_tarbaby() { spawnfunc_monster_slime(); }
99 float m_slime(float req)
105 monster_move(autocvar_g_monster_slime_speed_run, autocvar_g_monster_slime_speed_walk, 20, slime_anim_walk, slime_anim_walk, slime_anim_idle);
110 self.think = slime_dead;
111 self.nextthink = time;
112 self.event_damage = func_null;
113 self.movetype = MOVETYPE_NONE;
114 self.takedamage = DAMAGE_NO;
118 self.SendFlags |= MSF_MOVE | MSF_STATUS;
124 if not(self.health) self.health = autocvar_g_monster_slime_health;
126 self.monster_attackfunc = slime_attack;
127 monsters_setframe(slime_anim_idle);
143 float m_slime(float req)
154 precache_model ("models/monsters/slime.dpm");
163 #endif // REGISTER_MONSTER