2 const vector SLIME_MIN = '-16 -16 -24';
3 const vector SLIME_MAX = '16 16 16';
6 string SLIME_MODEL = "models/monsters/slime.dpm";
10 float autocvar_g_monster_slime;
11 float autocvar_g_monster_slime_health;
12 float autocvar_g_monster_slime_speed_walk;
13 float autocvar_g_monster_slime_speed_run;
16 const float slime_anim_walk = 0;
17 const float slime_anim_idle = 1;
18 const float slime_anim_jump = 2;
19 const float slime_anim_fly = 3;
20 const float slime_anim_die = 4;
21 const float slime_anim_pain = 5;
27 self.think = slime_think;
28 self.nextthink = time + self.ticrate;
30 monster_move(autocvar_g_monster_slime_speed_run, autocvar_g_monster_slime_speed_walk, 20, slime_anim_walk, slime_anim_walk, slime_anim_idle);
33 void slime_touch_jump()
38 if(vlen(self.velocity) > 200)
45 if(trace_dphitcontents)
47 self.touch = MonsterTouch;
48 self.movetype = MOVETYPE_WALK;
52 float slime_attack(float attack_type)
56 case MONSTER_ATTACK_MELEE:
57 case MONSTER_ATTACK_RANGED:
59 makevectors(self.angles);
60 if(monster_leap(slime_anim_jump, slime_touch_jump, v_forward * 600 + '0 0 200', 0.5))
70 RadiusDamage(self, self, 250 * monster_skill, 15, 250 * (monster_skill * 0.7), world, 250, DEATH_MONSTER_SLIME, world);
71 pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
72 sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
74 Monster_CheckDropCvars ("slime"); // drop items after exploding to prevent player picking up item before dying
81 self.health = -100; // gibbed
84 self.think = Monster_Fade;
85 self.nextthink = time;
89 self.event_damage = func_null; // reset by monster_hook_death
90 self.takedamage = DAMAGE_NO;
95 self.think = slime_dead;
96 self.nextthink = time;
97 self.event_damage = func_null;
98 self.movetype = MOVETYPE_NONE;
102 self.SendFlags |= MSF_MOVE | MSF_STATUS;
108 self.health = autocvar_g_monster_slime_health;
110 self.damageforcescale = 0.003;
111 self.classname = "monster_slime";
112 self.monster_attackfunc = slime_attack;
113 self.nextthink = time + random() * 0.5 + 0.1;
114 self.think = slime_think;
116 monsters_setframe(slime_anim_idle);
118 monster_setupsounds("slime");
120 monster_hook_spawn(); // for post-spawn mods
123 void spawnfunc_monster_slime()
125 if not(autocvar_g_monster_slime) { remove(self); return; }
127 self.monster_spawnfunc = spawnfunc_monster_slime;
129 if(Monster_CheckAppearFlags(self))
132 if not (monster_initialize(
133 "Slime", MONSTER_SLIME,
134 SLIME_MIN, SLIME_MAX,
136 slime_die, slime_spawn))
143 // compatibility with old spawns
144 void spawnfunc_monster_tarbaby() { spawnfunc_monster_slime(); }