xmen/Iceman.c

792 lines
22 KiB
C
Raw Normal View History

2005-09-22 00:00:00 +00:00
/*
==============================================================================
iceman
==============================================================================
*/
$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
$frame stand10 stand11 stand12 stand13
$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10
$frame walk11 walk12
$frame run1 run2 run3 run4 run5 run6
$frame pain1 pain2 pain3 pain4 pain5 pain6
$frame paina1 paina2 paina3 paina4 paina5 paina6 paina7 paina8 paina9 paina10
$frame paina11 paina12 paina13 paina14 paina15 paina16 paina17 paina18 paina19 paina20
$frame paina21 paina22 paina23 paina24 paina25 paina26 paina27 paina28 paina29
$frame death1 death2 death3 death4 death5 death6 death7 death8 death9 death10
$frame death11 death12 death13 death14 death15 death16
$frame rise1 rise2 rise3 rise4 rise5 rise6 rise7 rise8 rise9
$frame rise10 rise11 rise12 rise13 rise14 rise15 rise16 rise17 rise18 rise19
$frame melt1 melt2 melt3 melt4 melt5 melt6 melt7 melt8
$frame satta1 satta2 satta3 satta4 satta5 satta6 satta7 satta8
$frame satta9 satta10 satta11 satta12
$frame sattb1 sattb2 sattb3 sattb4 sattb5 sattb6 sattb7 sattb8
$frame sattb9 sattb10 sattb11 sattb12
$frame xatta1 xatta2 xatta3 xatta4 xatta5 xatta6 xatta7 xatta8
$frame xatta9 xatta10 xatta11 xatta12
void() iceman_Laser_Touch =
{
local vector org;
if (other == self.owner)
return; // don't explode on owner
if (pointcontents(self.origin) == CONTENT_SKY)
{
remove(self);
return;
}
org = self.origin - 8*normalize(self.velocity);
if (other.health)
{
SpawnBlood (org, self.velocity*0.2, 15);
T_Damage (other, self, self.owner, 10);
}
else
{
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_GUNSHOT);
WriteCoord (MSG_BROADCAST, org_x);
WriteCoord (MSG_BROADCAST, org_y);
WriteCoord (MSG_BROADCAST, org_z);
}
remove(self);
};
void(vector org, vector vec) Ice_LaunchShard =
{
local vector vec;
vec = normalize(vec);
newmis = spawn();
newmis.owner = self;
newmis.movetype = MOVETYPE_FLY;
newmis.solid = SOLID_BBOX;
newmis.effects = EF_DIMLIGHT;
setmodel (newmis, "progs/iceshard.mdl");
setsize (newmis, '0 0 0', '0 0 0');
setorigin (newmis, org);
newmis.velocity = vec * 600;
newmis.angles = vectoangles(newmis.velocity);
newmis.nextthink = time + 3;
newmis.think = SUB_Remove;
newmis.touch = iceman_Laser_Touch;
};
void() ice_atkb1;
void() ice_xatk1;
void() ShardTouch =
{
local vector t1, t2, vec;
vec = self.old_velocity;
if (other == self.owner)
return;
if (other == world)
{
if (random() < 0.5)
sound(self, CHAN_AUTO, "weapons/tink1.wav", 1, 3);
self.state = 0;
self.avelocity_x = random()*500;
self.avelocity_y = random()*500;
self.avelocity_z = random()*500;
// give seom random upwards velocity
self.velocity_z = random() * 500 - 100;
}
if (other.takedamage == DAMAGE_AIM)
{
spawn_touchblood (20);
T_Damage(other, self, self.owner, 3);
remove(self);
return;
}
self.last_touch = time;
if (self.velocity == '0 0 0')
remove(self);
};
void(vector org, vector dir) spawn_shard =
{
local entity missile, mpuff;
local vector vect;
missile = spawn ();
missile.owner = self;
missile.movetype = MOVETYPE_BOUNCE;
missile.state = 1;
missile.solid = SOLID_SLIDEBOX;
missile.classname = "shard";
// set missile speed
vect = normalize(dir);
missile.velocity = vect * 1000;
// missile.velocity_z = 0;
missile.angles = vectoangles(missile.velocity);
missile.old_velocity = missile.velocity;
missile.touch = ShardTouch;
// set missile duration
// missile.last_idle = time;
missile.last_touch = 0;
missile.oldorigin = missile.origin;
missile.nextthink = time + 2.8;
// missile.think = GrenadeExplode;
missile.think = SUB_Remove;
setmodel (missile, "progs/iceshard.mdl");
setsize (missile, '0 0 0', '0 0 0');
setorigin (missile, org);
self.old_velocity = self.velocity;
};
void(float offs) iceman_fire =
{
local vector org, vect, ang;
ang = self.angles;
ang_y = anglemod(ang_y + offs);
makevectors (ang);
vect = v_forward;
org = self.origin + '0 0 12';
spawn_shard(org, vect);
};
void() iceballTouch =
{
if (other == self.owner)
return;
if (((other.classname == "player") || (coop && (other.flags & FL_MONSTER))) && (other.parallize_time < (time - 4)))
{
if (!deathmatch && (other.flags & FL_CLIENT))
other.parallize_time = time + 2;
else
other.parallize_time = time + 3;
other.x_flags = other.x_flags | X_PARALLIZED;
other.parallized_velocity = '0 0 0';
if (other.flags & FL_CLIENT)
{
centerprint(other, "You have been iced!");
stuffcmd(other, "v_cshift 128 128 256 180\n");
}
else
{
other.think = other.th_stand;
other.enemy = world;
}
sound(other, CHAN_BODY, "generic/frozen1.wav", 1, ATTN_NORM);
if (deathmatch)
other.skin = 1;
remove(self);
return;
}
remove(self);
};
void(vector org, vector dir) spawn_iceball =
{
local entity missile, mpuff;
local vector vect;
missile = spawn ();
missile.owner = self;
missile.movetype = MOVETYPE_FLYMISSILE;
missile.solid = SOLID_BBOX;
missile.classname = "iceblast";
// set missile speed
vect = normalize(dir);
if (self.flags & FL_MONSTER)
missile.velocity = ProjectVelocity(1400, '0 0 0');
else
missile.velocity = vect * 1400;
missile.angles = vectoangles(missile.velocity);
missile.old_velocity = missile.velocity;
missile.touch = iceballTouch;
// set missile duration
// missile.last_idle = time;
missile.last_touch = 0;
missile.oldorigin = missile.origin;
missile.nextthink = time + 2;
// missile.think = GrenadeExplode;
missile.think = SUB_Remove;
missile.avelocity_z = 300;
setmodel (missile, "progs/iceblast.mdl");
setsize (missile, '0 0 0', '0 0 0');
setorigin (missile, org);
};
void () ice_fire_iceball =
{
local vector org,o2;
makevectors (self.angles);
org = self.origin + v_forward * 1 + '0 0 12';
o2 = self.enemy.origin + v_right * ((random() * 64) - 32);
spawn_iceball(org, o2 - self.origin);
};
//============================================================================
void() ice_stand1 =[ $stand1, ice_stand2 ] {ai_stand();};
void() ice_stand2 =[ $stand2, ice_stand3 ] {ai_stand();};
void() ice_stand3 =[ $stand3, ice_stand4 ] {ai_stand();};
void() ice_stand4 =[ $stand4, ice_stand5 ] {ai_stand();};
void() ice_stand5 =[ $stand5, ice_stand6 ] {ai_stand();};
void() ice_stand6 =[ $stand6, ice_stand7 ] {ai_stand();};
void() ice_stand7 =[ $stand7, ice_stand8 ] {ai_stand();};
void() ice_stand8 =[ $stand8, ice_stand9 ] {ai_stand();};
void() ice_stand9 =[ $stand9, ice_stand10 ] {ai_stand();};
void() ice_stand10 =[ $stand10, ice_stand11 ] {ai_stand();};
void() ice_stand11 =[ $stand11, ice_stand12 ] {ai_stand();};
void() ice_stand12 =[ $stand12, ice_stand13 ] {ai_stand();};
void() ice_stand13 =[ $stand13, ice_stand1 ] {ai_stand();};
void() ice_walk1 =[ $walk1 , ice_walk2 ] {ai_walk(7);};
void() ice_walk2 =[ $walk2 , ice_walk3 ] {ai_walk(4);};
void() ice_walk3 =[ $walk3 , ice_walk4 ] {ai_walk(4);};
void() ice_walk4 =[ $walk4 , ice_walk5 ] {ai_walk(4);};
void() ice_walk5 =[ $walk5 , ice_walk6 ] {ai_walk(4);};
void() ice_walk6 =[ $walk6 , ice_walk7 ] {ai_walk(5);};
void() ice_walk7 =[ $walk7 , ice_walk8 ] {ai_walk(5);};
void() ice_walk8 =[ $walk8 , ice_walk9 ] {ai_walk(4);};
void() ice_walk9 =[ $walk9 , ice_walk10 ] {ai_walk(7);};
void() ice_walk10 =[ $walk10, ice_walk11 ] {ai_walk(4);};
void() ice_walk11 =[ $walk11, ice_walk12 ] {ai_walk(0);};
void() ice_walk12 =[ $walk12, ice_walk1 ] {ai_walk(5);};
void() ice_run1 =[ $run1 , ice_run2 ] {
ai_run(14);};
void() ice_run2 =[ $run2 , ice_run3 ] {ai_run(16);};
void() ice_run3 =[ $run3 , ice_run4 ] {ai_run(16);};
void() ice_run4 =[ $run4 , ice_run5 ] {ai_run(16);};
void() ice_run5 =[ $run5 , ice_run6 ] {ai_run(16);};
void() ice_run6 =[ $run6 , ice_run1 ] {ai_run(16);};
void() ice_pain1 =[ $pain1, ice_pain2 ] {};
void() ice_pain2 =[ $pain2, ice_pain3 ] {};
void() ice_pain3 =[ $pain3, ice_pain4 ] {};
void() ice_pain4 =[ $pain4, ice_pain5 ] {};
void() ice_pain5 =[ $pain5, ice_pain6 ] {};
void() ice_pain6 =[ $pain6, ice_run1 ] {};
void() ice_melt1 =[ $melt1, ice_melt2 ] {};
void() ice_melt2 =[ $melt2, ice_melt3 ] {};
void() ice_melt3 =[ $melt3, ice_melt4 ] {};
void() ice_melt4 =[ $melt4, ice_melt5 ] {};
void() ice_melt5 =[ $melt5, ice_melt6 ] {};
void() ice_melt6 =[ $melt6, ice_melt7 ] {};
void() ice_melt7 =[ $melt7, ice_melt8 ] {};
void() ice_melt8 =[ $melt8, ice_melt8 ] {
setmodel(self, "progs/puddle.mdl");
self.skin = 0;
self.solid = SOLID_NOT;
self.deadflag = DEAD_DEAD;
self.think = SUB_Remove;
self.nextthink = time + 120 + random() * 30;
};
void() ice_paina1 =[ $paina1, ice_paina2 ] {};
void() ice_paina2 =[ $paina2, ice_paina3 ] {};
void() ice_paina3 =[ $paina3, ice_paina4 ] {};
void() ice_paina4 =[ $paina4, ice_paina5 ] {};
void() ice_paina5 =[ $paina5, ice_paina6 ] {};
void() ice_paina6 =[ $paina6, ice_paina7 ] {};
void() ice_paina7 =[ $paina7, ice_paina8 ] {};
void() ice_paina8 =[ $paina8, ice_paina9 ] {};
void() ice_paina9 =[ $paina9, ice_paina10 ] {};
void() ice_paina10 =[ $paina10, ice_paina11 ] {};
void() ice_paina11 =[ $paina11, ice_paina12 ] {};
void() ice_paina12 =[ $paina12, ice_paina13 ] {};
void() ice_paina13 =[ $paina12, ice_paina14 ] {};
void() ice_paina14 =[ $paina12, ice_paina15 ] {};
void() ice_paina15 =[ $paina13, ice_paina16 ] {};
void() ice_paina16 =[ $paina14, ice_paina17 ] {};
void() ice_paina17 =[ $paina15, ice_paina18 ] {};
void() ice_paina18 =[ $paina16, ice_paina19 ] {};
void() ice_paina19 =[ $paina16, ice_paina20 ] {};
void() ice_paina20 =[ $paina16, ice_paina21 ] {};
void() ice_paina21 =[ $paina17, ice_paina22 ] {};
void() ice_paina22 =[ $paina18, ice_paina23 ] {};
void() ice_paina23 =[ $paina19, ice_paina24 ] {};
void() ice_paina24 =[ $paina20, ice_paina25 ] {};
void() ice_paina25 =[ $paina21, ice_paina26 ] {};
void() ice_paina26 =[ $paina22, ice_paina27 ] {};
void() ice_paina27 =[ $paina23, ice_paina28 ] {};
void() ice_paina28 =[ $paina24, ice_paina29 ] {};
void() ice_paina29 =[ $paina25, ice_paina30 ] {};
void() ice_paina30 =[ $paina26, ice_paina31 ] {};
void() ice_paina31 =[ $paina27, ice_paina32 ] {};
void() ice_paina32 =[ $paina28, ice_paina33 ] {};
void() ice_paina33 =[ $paina29, ice_run1 ] {};
//============================================================================
void(entity attacker, float damage) ice_pain;
void() ice_atk1 =[ $satta1, ice_atk2 ]
{
ai_face();
self.start_attack_health = self.health;
if (self.count) ai_forward(24);
};
void() ice_atk2 =[ $satta2, ice_atk3 ]
{
ai_face();
iceman_fire(-15);
if (self.count) ai_forward(14);
};
void() ice_atk3 =[ $satta3, ice_atk4 ]
{
ai_face();
iceman_fire(-9);
if (self.count) ai_forward(8);
};
void() ice_atk4 =[ $satta4, ice_atk5 ]
{
ai_face();
iceman_fire(-3);
if (self.count) ai_forward(4);
};
void() ice_atk5 =[ $satta5, ice_atk6 ]
{
ai_face();
iceman_fire(3);
if (self.count) ai_forward(2);
self.count = 0;
};
void() ice_atk6 =[ $satta6, ice_atk7 ] {iceman_fire(9);};
void() ice_atk7 =[ $satta7, ice_atk8 ]
{
iceman_fire(15);
if (self.health < self.start_attack_health)
{
ice_pain(self.enemy, self.start_attack_health - self.health);
}
};
void() ice_atk8 =[ $satta8, ice_atk9 ] {};
void() ice_atk9 =[ $satta9, ice_atk10 ] {};
void() ice_atk10 =[ $satta10, ice_atk11 ] {};
void() ice_atk11 =[ $satta11, ice_atk12 ] {};
void() ice_atk12 =[ $satta12, ice_run1 ] {};
void() ice_xatk1 =[ $xatta1, ice_xatk2 ]
{
ai_face();
self.start_attack_health = self.health;
if (self.count) ai_forward(24);
};
void() ice_xatk2 =[ $xatta2, ice_xatk3 ]
{
ai_face();
if (self.count) ai_forward(14);
};
void() ice_xatk3 =[ $xatta3, ice_xatk4 ]
{
ai_face();
if (self.count) ai_forward(8);
};
void() ice_xatk4 =[ $xatta4, ice_xatk5 ]
{
ai_face();
if (self.count) ai_forward(4);
};
void() ice_xatk5 =[ $xatta5, ice_xatk6 ]
{
ai_face();
if (self.count) ai_forward(2);
self.count = 0;
};
void() ice_xatk6 =[ $xatta6, ice_xatk7 ] {ai_face();};
void() ice_xatk7 =[ $xatta7, ice_xatk8 ]
{ai_face();
if (self.health < self.start_attack_health) {
ice_pain(self.enemy, self.start_attack_health - self.health);
}
};
void() ice_xatk8 =[ $xatta8, ice_xatk9 ] {ai_face();};
void() ice_xatk9 =[ $xatta9, ice_xatk10 ] {ai_face();};
void() ice_xatk10 =[ $xatta10, ice_xatk11 ] {ai_face();};
void() ice_xatk11 =[ $xatta11, ice_xatk12 ] {ai_face();};
void() ice_xatk12 =[ $xatta12, ice_run1 ] {ai_face();
ice_fire_iceball();
};
void(entity attacker, float damage) ice_pain =
{
local float r;
if (self.enemy.weapon == IT_SUPER_NAILGUN)
return;
r = random ();
if (self.pain_finished > time)
return;
if (random()*40 > damage)
return; // didn't flinch
MalePainSound(2);
if ((random()*10 < 8) || ((damage > 50) && (random() < 0.5)))
{
self.pain_finished = time + 2;
ice_pain1 ();
}
else
{
self.pain_finished = time + 4;
ice_paina1 ();
}
};
void() ice_atkb1 =[ $sattb1, ice_atkb2 ]
{
ai_face();
self.start_attack_health = self.health;
if (self.count) ai_forward(32);
};
void() ice_atkb2 =[ $sattb2, ice_atkb3 ]
{
ai_face();
iceman_fire(15);
if (self.count) ai_forward(24);
};
void() ice_atkb3 =[ $sattb3, ice_atkb4 ]
{
ai_face();
iceman_fire(9);
if (self.count) ai_forward(16);
};
void() ice_atkb4 =[ $sattb4, ice_atkb5 ]
{
ai_face();
iceman_fire(3);
if (self.count) ai_forward(8);
};
void() ice_atkb5 =[ $sattb5, ice_atkb6 ]
{
ai_face();
iceman_fire(-3);
if (self.count) ai_forward(8);
self.count = 0;
};
void() ice_atkb6 =[ $sattb6, ice_atkb7 ] {iceman_fire(-9);};
void() ice_atkb7 =[ $sattb7, ice_atkb8 ] {
if (self.health < self.start_attack_health) {
ice_pain(self.enemy, self.start_attack_health - self.health);
iceman_fire(-15);
}
};
void() ice_atkb8 =[ $sattb8, ice_atkb9 ] {};
void() ice_atkb9 =[ $sattb9, ice_atkb10 ] {};
void() ice_atkb10 =[ $sattb10, ice_atkb11 ] {};
void() ice_atkb11 =[ $sattb11, ice_atkb12 ] {};
void() ice_atkb12 =[ $sattb12, ice_run1 ] {};
void() ice_attack =
{
local float rnd;
rnd = random();
if (rnd < 0.3)
ice_atk1();
else if (rnd < 0.6)
ice_atkb1();
else if (self.last_special < (time - 8)) {
self.last_special = time;
ice_xatk1();
}
else {
ice_atk1();
}
};
//============================================================================
void () iceman_melt_go =
{
self.deadflag = DEAD_DYING;
self.pain_finished = time + 99;
ice_melt1();
};
void (entity e) iceman_melt =
{
//e.health = 1;
e.think = iceman_melt_go;
e.nextthink = time + 0.1;
// up the kill count, since he is now officially DEAD
killed_monsters = killed_monsters + 1;
WriteByte (MSG_ALL, SVC_KILLEDMONSTER);
};
void () ice_getup =
{
self.takedamage = DAMAGE_AIM;
self.solid = SOLID_SLIDEBOX;
if (!walkmove(0,0))
{
self.think = ice_getup;
self.solid = SOLID_NOT;
self.nextthink = time + 0.5;
return;
}
self.health = self.start_health;
ice_run1();
};
void() ice_rise1 =[ $rise1, ice_rise2 ]
{
self.solid = SOLID_SLIDEBOX;
if (!walkmove(0,0))
{
self.think = ice_rise1;
self.solid = SOLID_NOT;
self.nextthink = time + 0.5;
return;
}
};
void() ice_rise2 =[ $rise2, ice_rise3 ] {};
void() ice_rise3 =[ $rise3, ice_rise4 ] {};
void() ice_rise4 =[ $rise4, ice_rise5 ] {};
void() ice_rise5 =[ $rise5, ice_rise6 ] {};
void() ice_rise6 =[ $rise6, ice_rise7 ] {};
void() ice_rise7 =[ $rise7, ice_rise8 ] {};
void() ice_rise8 =[ $rise8, ice_rise9 ] {};
void() ice_rise9 =[ $rise9, ice_rise10 ] {};
void() ice_rise10 =[ $rise10, ice_rise11 ] {};
void() ice_rise11 =[ $rise11, ice_rise12 ] {};
void() ice_rise12 =[ $rise12, ice_rise13 ] {};
void() ice_rise13 =[ $rise13, ice_rise14 ] {};
void() ice_rise14 =[ $rise14, ice_rise15 ] {};
void() ice_rise15 =[ $rise15, ice_rise16 ] {};
void() ice_rise16 =[ $rise16, ice_rise17 ] {};
void() ice_rise17 =[ $rise17, ice_rise18 ] {};
void() ice_rise18 =[ $rise18, ice_rise19 ] {};
void() ice_rise19 =[ $rise19, ice_getup ] {};
void() ice_die1 =[ $death1, ice_die2 ] {};
void() ice_die2 =[ $death2, ice_die3 ] {};
void() ice_die3 =[ $death3, ice_die4 ] {self.solid = SOLID_NOT;self.ammo_cells = 5;};
void() ice_die4 =[ $death4, ice_die5 ] {};
void() ice_die5 =[ $death5, ice_die6 ] {};
void() ice_die6 =[ $death6, ice_die7 ] {};
void() ice_die7 =[ $death7, ice_die8 ] {};
void() ice_die8 =[ $death8, ice_die9 ] {};
void() ice_die9 =[ $death9, ice_die10 ] {};
void() ice_die10 =[ $death10, ice_die11 ] {};
void() ice_die11 =[ $death11, ice_die12 ] {};
void() ice_die12 =[ $death12, ice_die13 ] {};
void() ice_die13 =[ $death13, ice_die14 ] {};
void() ice_die14 =[ $death14, ice_die15 ] {};
void() ice_die15 =[ $death15, ice_die16 ] {};
void() ice_die16 =[ $death16, ice_die16 ] {
if (!(self.spawnflags & SPAWNFLAG_CLONE)) {
self.solid = SOLID_NOT;
self.think = ice_rise1;
self.takedamage = DAMAGE_NO;
self.nextthink = time + 20 + random() * 20;
}
};
void() GibShardThink =
{
if (self.velocity_z == 0)
remove(self);
else
self.nextthink = time + 0.2;
};
void(entity ent, float num_gibs) IcemanShardGib =
{
local entity shard;
local float num;
local vector vect;
if (damage_inflictor.classname == "guided_rocket") {
vect = normalize(damage_inflictor.velocity);
}
else {
vect = '0 0 0';
}
num = num_gibs;
while (num > 0) {
shard = spawn();
shard.movetype = MOVETYPE_BOUNCE;
shard.velocity_x = random() * 150 - 75;
shard.velocity_y = random() * 150 - 75;
shard.velocity_z = 220 + random() * 150;
shard.velocity = shard.velocity + vect * 200;
shard.angles = shard.velocity;
shard.avelocity = '200 200 200';
setsize(shard, '0 0 0', '0 0 0');
setmodel(shard, "progs/iceshard.mdl");
setorigin(shard, ent.origin + shard.velocity * 0.1);
shard.frame = 1;
shard.think = GibShardThink;
shard.nextthink = time + 1;
num = num - 1;
}
};
void() ice_die =
{
// check for shard gib
if ((damage_inflictor.classname == "guided_rocket") ||
(damage_inflictor.classname == "orb") ||
(damage_inflictor.classname == "prox_missile") ||
(damage_inflictor.classname == "proximity_ball")) {
IcemanShardGib(self, 15);
remove(self);
return;
}
ice_die1 ();
};
/*QUAKED monster_iceman (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
void() monster_zombie =
{
remove(self);
};
void() xmen_iceman =
{
if ((deathmatch) || (self.spawnflags & 1))
{
remove(self);
return;
}
precache_model2 ("progs/iceshard.mdl");
precache_model2 ("progs/puddle.mdl");
precache_model2 ("progs/iceblast.mdl");
precache_sound ("generic/frozen1.wav");
self.solid = SOLID_SLIDEBOX;
self.movetype = MOVETYPE_STEP;
if ((self.map == "green") || (self.map == ""))
{
precache_model2("progs/ice1.mdl");
setmodel (self, "progs/ice1.mdl");
}
if (self.map == "blue")
{
precache_model2("progs/ice2.mdl");
setmodel (self, "progs/ice2.mdl");
}
if (self.map == "purple")
{
precache_model2("progs/ice3.mdl");
setmodel (self, "progs/ice3.mdl");
}
if (self.map == "brown")
{
precache_model2("progs/ice4.mdl");
setmodel (self, "progs/ice4.mdl");
}
if (self.map == "gold")
{
precache_model2("progs/ice5.mdl");
setmodel (self, "progs/ice5.mdl");
}
setsize (self, '-16 -16 -24', '16 16 40');
self.health = 80 + cvar("skill") * 10;
self.th_stand = ice_stand1;
self.th_walk = ice_walk1;
self.th_run = ice_run1;
self.th_pain = ice_pain;
self.th_die = ice_die;
self.th_missile = ice_attack;
self.count = 0;
walkmonster_start();
};