2 const vector TARBABY_MIN = '-16 -16 -24';
3 const vector TARBABY_MAX = '16 16 16';
6 string TARBABY_MODEL = "models/monsters/slime.dpm";
10 float autocvar_g_monster_tarbaby;
11 float autocvar_g_monster_tarbaby_health;
12 float autocvar_g_monster_tarbaby_speed_walk;
13 float autocvar_g_monster_tarbaby_speed_run;
16 const float tarbaby_anim_walk = 0;
17 const float tarbaby_anim_idle = 1;
18 const float tarbaby_anim_jump = 2;
19 const float tarbaby_anim_fly = 3;
20 const float tarbaby_anim_die = 4;
21 const float tarbaby_anim_pain = 5;
25 self.think = tarbaby_think;
26 self.nextthink = time + self.ticrate;
28 monster_move(autocvar_g_monster_tarbaby_speed_run, autocvar_g_monster_tarbaby_speed_walk, 20, tarbaby_anim_walk, tarbaby_anim_walk, tarbaby_anim_idle);
36 if(vlen(self.velocity) > 200)
38 // make the monster die
39 self.event_damage(self, self, self.health + self.max_health + 200, DEATH_MONSTER_TARBABY, self.origin, '0 0 0');
44 if (trace_dphitcontents)
46 self.touch = MonsterTouch;
47 self.movetype = MOVETYPE_WALK;
53 self.movetype = MOVETYPE_BOUNCE;
54 makevectors(self.angles);
55 monster_leap(tarbaby_anim_jump, Tar_JumpTouch, v_forward * 600 + '0 0 200', 0.5);
64 void tarbaby_blowup ()
66 RadiusDamage(self, self, 250 * monster_skill, 15, 250 * (monster_skill * 0.7), world, 250, DEATH_MONSTER_TARBABY, world);
67 pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
68 sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
70 Monster_CheckDropCvars ("tarbaby"); // drop items after exploding to prevent player picking up item before dying
75 void tarbaby_explode()
79 self.think = Monster_Fade;
80 self.nextthink = time + 0.1;
84 self.event_damage = func_null; // reset by monster_hook_death
85 self.takedamage = DAMAGE_NO;
90 self.think = tarbaby_explode;
91 self.nextthink = time + 0.1;
92 self.event_damage = func_null;
93 self.movetype = MOVETYPE_NONE;
97 WaypointSprite_Kill(self.sprite);
99 self.SendFlags |= MSF_MOVE | MSF_STATUS;
102 void tarbaby_spawn ()
105 self.health = autocvar_g_monster_tarbaby_health;
107 self.damageforcescale = 0.003;
108 self.classname = "monster_tarbaby";
109 self.checkattack = GenericCheckAttack;
110 self.attack_ranged = tbaby_jump;
111 self.attack_melee = tarbaby_jump;
112 self.nextthink = time + random() * 0.5 + 0.1;
113 self.think = tarbaby_think;
115 monsters_setframe(tarbaby_anim_idle);
117 monster_setupsounds("tarbaby");
119 monster_hook_spawn(); // for post-spawn mods
122 void spawnfunc_monster_tarbaby ()
124 if not(autocvar_g_monster_tarbaby) { remove(self); return; }
126 self.monster_spawnfunc = spawnfunc_monster_tarbaby;
128 if(Monster_CheckAppearFlags(self))
131 if not (monster_initialize(
132 "Slime", MONSTER_TARBABY,
133 TARBABY_MIN, TARBABY_MAX,
135 tarbaby_die, tarbaby_spawn))