ew-progs/ew/monsters/carniv.qc
2011-09-06 00:00:00 +00:00

503 lines
20 KiB
C++

/*
==============================================================================
Carnivore
coded by Michael Rogers a.k.a Xsniper
http://xsniper.virtualave.net/
some code done by iD software
==============================================================================
*/
$cd /models/enemies
$origin 0 0 32
$base base
$skin base
$frame idle101 idle102 idle103 idle104 idle105 idle106 idle107 idle108 idle109
$frame idle201 idle202 idle203 idle204 idle205 idle206 idle207 idle208 idle209 idle210
$frame idle211 idle212 idle213 idle214 idle215 idle216 idle217 idle218 idle219 idle220
$frame idle221 idle222 idle223 idle224 idle225 idle226 idle227 idle228 idle229 idle230
$frame idle231 idle232 idle233 idle234 idle235 idle236 idle237 idle238 idle239
$frame idle301 idle302 idle303 idle304 idle305 idle306
$frame walk01 walk02 walk03 walk04 walk05 walk06 walk07 walk08 walk09 walk10
$frame walk11 walk12
$frame attack101 attack102 attack103 attack104 attack105 attack106 attack107 attack108
$frame attack201 attack202 attack203 attack204 attack205 attack206 attack207 attack208 attack209 attack210
$frame attack211
$frame pain101 pain102 pain103 pain104 pain105 pain106
$frame pain201 pain202 pain203 pain204 pain205
$frame pain301 pain302 pain303 pain304 pain305 pain306 pain307 pain308 pain309 pain310
$frame pain311
$frame death101 death102 death103 death104 death105 death106 death107 death108 death109 death110
$frame death111 death112 death113 death114 death115 death015 death117 death118 death119 death120
$frame death121 death122 death123 death124 death125 death126 death127 death128 death129 death130
$frame death131
$frame death201 death202 death203 death204 death205 death206 death207 death208 death209 death210
$frame death211 death212 death213 death214 death215 death216 death217 death218 death219 death220
$frame death221 death222 death223 death224 death225 death226 death227 death228 death229 death230
$frame death231 death232 death233 death234 death235 death236 death237 death238 death239 death240
//=============================================================================
void() carnivFireTouch =
{
if (other == self.owner)
return; // don't explode on owner
//set everything but the world on fire
if (other != world && random() <= 0.2)
{
other.onfire = 1;
other.burningtime = time + 2 + random() * 2;
other.burninflictor = self.owner;
}
T_RadiusDamage (self, self.owner, 40, world);
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_EXPLOSION);
WriteCoord (MSG_BROADCAST, self.origin_x);
WriteCoord (MSG_BROADCAST, self.origin_y);
WriteCoord (MSG_BROADCAST, self.origin_z);
BecomeExplosion();
};
/*
================
CreateFireball
================
*/
void(vector spot) CreateFireball =
{
local entity fire;
fire = spawn ();
fire.owner = self;
fire.movetype = MOVETYPE_FLYMISSILE;
fire.solid = SOLID_BBOX;
fire.classname = "fireball";
// set fire duration
fire.nextthink = time + 5;
fire.think = carnivFireTouch;
makevectors (self.angles);
setorigin (fire, self.origin - spot); //28 units to his left
setmodel (fire, "models/weapons/gfx/fireball.mdl");
setsize (fire, '0 0 0', '0 0 0');
//Tomaz special effects
fire.scale = 3; //triple the size
fire.glow_size = 250;
fire.glow_red = 1;
fire.glow_green = 0.5;
fire.glow_blue = 0;
// set fire speed
fire.velocity = normalize(self.enemy.origin - fire.origin);
fire.velocity = fire.velocity * 600;
fire.angles = vectoangles(fire.velocity);
fire.touch = carnivFireTouch;
};
void() carniv_idlesound;
void() carniv_step;
//=============================================================================
void() carniv_stand1 =[ $idle101, carniv_stand2 ] {ai_stand();carniv_idlesound();};
void() carniv_stand2 =[ $idle102, carniv_stand3 ] {ai_stand();};
void() carniv_stand3 =[ $idle103, carniv_stand4 ] {ai_stand();};
void() carniv_stand4 =[ $idle104, carniv_stand5 ] {ai_stand();};
void() carniv_stand5 =[ $idle105, carniv_stand6 ] {ai_stand();};
void() carniv_stand6 =[ $idle106, carniv_stand7 ] {ai_stand();};
void() carniv_stand7 =[ $idle107, carniv_stand8 ] {ai_stand();};
void() carniv_stand8 =[ $idle108, carniv_stand9 ] {ai_stand();};
void() carniv_stand9 =[ $idle109, carniv_stand10 ] {ai_stand();};
void() carniv_stand10 =[ $idle201, carniv_stand11 ] {ai_stand();};
void() carniv_stand11 =[ $idle202, carniv_stand12 ] {ai_stand();};
void() carniv_stand12 =[ $idle203, carniv_stand13 ] {ai_stand();};
void() carniv_stand13 =[ $idle204, carniv_stand14 ] {ai_stand();};
void() carniv_stand14 =[ $idle205, carniv_stand15 ] {ai_stand();};
void() carniv_stand15 =[ $idle206, carniv_stand16 ] {ai_stand();};
void() carniv_stand16 =[ $idle207, carniv_stand17 ] {ai_stand();};
void() carniv_stand17 =[ $idle208, carniv_stand18 ] {ai_stand();};
void() carniv_stand18 =[ $idle209, carniv_stand19 ] {ai_stand();};
void() carniv_stand19 =[ $idle210, carniv_stand20 ] {ai_stand();};
void() carniv_stand20 =[ $idle211, carniv_stand21 ] {ai_stand();};
void() carniv_stand21 =[ $idle212, carniv_stand22 ] {ai_stand();};
void() carniv_stand22 =[ $idle213, carniv_stand23 ] {ai_stand();};
void() carniv_stand23 =[ $idle214, carniv_stand24 ] {ai_stand();};
void() carniv_stand24 =[ $idle215, carniv_stand25 ] {ai_stand();};
void() carniv_stand25 =[ $idle216, carniv_stand26 ] {ai_stand();};
void() carniv_stand26 =[ $idle217, carniv_stand27 ] {ai_stand();};
void() carniv_stand27 =[ $idle218, carniv_stand28 ] {ai_stand();};
void() carniv_stand28 =[ $idle219, carniv_stand29 ] {ai_stand();};
void() carniv_stand29 =[ $idle220, carniv_stand30 ] {ai_stand();};
void() carniv_stand30 =[ $idle221, carniv_stand31 ] {ai_stand();};
void() carniv_stand31 =[ $idle222, carniv_stand32 ] {ai_stand();};
void() carniv_stand32 =[ $idle223, carniv_stand33 ] {ai_stand();};
void() carniv_stand33 =[ $idle224, carniv_stand34 ] {ai_stand();};
void() carniv_stand34 =[ $idle225, carniv_stand35 ] {ai_stand();};
void() carniv_stand35 =[ $idle226, carniv_stand36 ] {ai_stand();};
void() carniv_stand36 =[ $idle227, carniv_stand37 ] {ai_stand();};
void() carniv_stand37 =[ $idle228, carniv_stand38 ] {ai_stand();};
void() carniv_stand38 =[ $idle229, carniv_stand39 ] {ai_stand();};
void() carniv_stand39 =[ $idle230, carniv_stand40 ] {ai_stand();};
void() carniv_stand40 =[ $idle231, carniv_stand41 ] {ai_stand();};
void() carniv_stand41 =[ $idle232, carniv_stand42 ] {ai_stand();};
void() carniv_stand42 =[ $idle233, carniv_stand43 ] {ai_stand();};
void() carniv_stand43 =[ $idle234, carniv_stand44 ] {ai_stand();};
void() carniv_stand44 =[ $idle235, carniv_stand45 ] {ai_stand();};
void() carniv_stand45 =[ $idle236, carniv_stand46 ] {ai_stand();};
void() carniv_stand46 =[ $idle237, carniv_stand47 ] {ai_stand();};
void() carniv_stand47 =[ $idle238, carniv_stand48 ] {ai_stand();};
void() carniv_stand48 =[ $idle239, carniv_stand49 ] {ai_stand();};
void() carniv_stand49 =[ $idle301, carniv_stand50 ] {ai_stand();};
void() carniv_stand50 =[ $idle302, carniv_stand51 ] {ai_stand();};
void() carniv_stand51 =[ $idle303, carniv_stand52 ] {ai_stand();};
void() carniv_stand52 =[ $idle304, carniv_stand53 ] {ai_stand();};
void() carniv_stand53 =[ $idle305, carniv_stand54 ] {ai_stand();};
void() carniv_stand54 =[ $idle306, carniv_stand1 ] {ai_stand();};
//=============================================================================
void() carniv_walk1 =[ $walk01, carniv_walk2 ] {ai_walk(3);carniv_step();};
void() carniv_walk2 =[ $walk02, carniv_walk3 ] {ai_walk(2);};
void() carniv_walk3 =[ $walk03, carniv_walk4 ] {ai_walk(2);carniv_idlesound();};
void() carniv_walk4 =[ $walk04, carniv_walk5 ] {ai_walk(2);};
void() carniv_walk5 =[ $walk05, carniv_walk6 ] {ai_walk(2);};
void() carniv_walk6 =[ $walk06, carniv_walk7 ] {ai_walk(5);};
void() carniv_walk7 =[ $walk07, carniv_walk8 ] {ai_walk(3);carniv_step();};
void() carniv_walk8 =[ $walk08, carniv_walk9 ] {ai_walk(2);};
void() carniv_walk9 =[ $walk09, carniv_walk10 ] {ai_walk(3);};
void() carniv_walk10 =[ $walk10, carniv_walk11 ] {ai_walk(1);};
void() carniv_walk11 =[ $walk11, carniv_walk12 ] {ai_walk(2);};
void() carniv_walk12 =[ $walk12, carniv_walk1 ] {ai_walk(3);};
//=============================================================================
void() carniv_run1 =[ $walk01, carniv_run2 ] {ai_run(9);carniv_idlesound();carniv_step();};
void() carniv_run2 =[ $walk02, carniv_run3 ] {ai_run(12);};
void() carniv_run3 =[ $walk03, carniv_run4 ] {ai_run(8);};
void() carniv_run4 =[ $walk04, carniv_run5 ] {ai_run(22);};
void() carniv_run5 =[ $walk05, carniv_run6 ] {ai_run(16);};
void() carniv_run6 =[ $walk06, carniv_run7 ] {ai_run(4);};
void() carniv_run7 =[ $walk07, carniv_run8 ] {ai_run(13);carniv_step();};
void() carniv_run8 =[ $walk08, carniv_run9 ] {ai_run(24);};
void() carniv_run9 =[ $walk09, carniv_run10 ] {ai_run(8);};
void() carniv_run10 =[ $walk10, carniv_run11 ] {ai_run(22);};
void() carniv_run11 =[ $walk11, carniv_run12 ] {ai_run(16);};
void() carniv_run12 =[ $walk12, carniv_run1 ] {ai_run(4);};
//=============================================================================
void() carniv_swing1 =[ $attack201, carniv_swing2 ] {ai_charge(11);};
void() carniv_swing2 =[ $attack202, carniv_swing3 ] {ai_charge(5);};
void() carniv_swing3 =[ $attack203, carniv_swing4 ] {ai_charge(4);ai_melee();};
void() carniv_swing4 =[ $attack204, carniv_swing5 ] {ai_charge(9);ai_melee();};
void() carniv_swing5 =[ $attack205, carniv_swing6 ] {ai_charge(12);ai_melee();};
void() carniv_swing6 =[ $attack206, carniv_swing7 ] {ai_charge(7);ai_melee();};
void() carniv_swing7 =[ $attack207, carniv_swing8 ] {ai_charge(6);ai_melee();};
void() carniv_swing8 =[ $attack208, carniv_swing9 ] {ai_charge(13);ai_melee();};
void() carniv_swing9 =[ $attack209, carniv_swing10 ] {ai_charge(5);ai_melee();};
void() carniv_swing10 =[ $attack210, carniv_swing11 ] {ai_charge(10);};
void() carniv_swing11 =[ $attack211, carniv_run1 ] {ai_charge(9);};
//=============================================================================
void() carniv_fire1 =[ $attack101, carniv_fire2 ] {ai_face();};
void() carniv_fire2 =[ $attack102, carniv_fire3 ] {ai_face();};
void() carniv_fire3 =[ $attack103, carniv_fire4 ] {ai_face();};
void() carniv_fire4 =[ $attack104, carniv_fire5 ] {ai_face();};
void() carniv_fire5 =[ $attack105, carniv_fire6 ] {ai_face();CreateFireball((v_right * 28) - '0 0 10');};
void() carniv_fire6 =[ $attack106, carniv_fire7 ] {ai_face();};
void() carniv_fire7 =[ $attack107, carniv_fire8 ] {ai_face();};
void() carniv_fire8 =[ $attack108, carniv_run1 ] {ai_face();};
//=============================================================================
void() carniv_pain1 =[ $pain101, carniv_pain2 ] {};
void() carniv_pain2 =[ $pain102, carniv_pain3 ] {};
void() carniv_pain3 =[ $pain103, carniv_pain4 ] {};
void() carniv_pain4 =[ $pain104, carniv_pain5 ] {};
void() carniv_pain5 =[ $pain105, carniv_pain6 ] {};
void() carniv_pain6 =[ $pain106, carniv_run1 ] {};
//=============================================================================
void() carniv_painb1 =[ $pain201, carniv_painb2 ] {};
void() carniv_painb2 =[ $pain202, carniv_painb3 ] {};
void() carniv_painb3 =[ $pain203, carniv_painb4 ] {};
void() carniv_painb4 =[ $pain204, carniv_painb5 ] {};
void() carniv_painb5 =[ $pain205, carniv_run1 ] {};
//=============================================================================
void() carniv_painc1 =[ $pain301, carniv_painc2 ] {};
void() carniv_painc2 =[ $pain302, carniv_painc3 ] {};
void() carniv_painc3 =[ $pain303, carniv_painc4 ] {};
void() carniv_painc4 =[ $pain304, carniv_painc5 ] {};
void() carniv_painc5 =[ $pain305, carniv_painc6 ] {};
void() carniv_painc6 =[ $pain306, carniv_painc7 ] {};
void() carniv_painc7 =[ $pain307, carniv_painc8 ] {};
void() carniv_painc8 =[ $pain308, carniv_painc9 ] {};
void() carniv_painc9 =[ $pain309, carniv_painc10 ] {};
void() carniv_painc10 =[ $pain310, carniv_painc11 ] {};
void() carniv_painc11 =[ $pain311, carniv_run1 ] {};
//=============================================================================
float carniv_pain_type;
void(entity attacker, float damage) carniv_pain =
{
local float r;
// don't make multiple pain sounds right after each other
if (self.pain_finished > time)
return;
//controls which pain animation to show
carniv_pain_type = carniv_pain_type + 1;
if (carniv_pain_type == 1)
{
sound (self, CHAN_VOICE, "enemy/carnivean/pain.wav", 1, ATTN_NORM);
carniv_pain1 ();
self.pain_finished = time + 1;
}
else if (carniv_pain_type == 2)
{
sound (self, CHAN_VOICE, "enemy/carnivean/pain.wav", 1, ATTN_NORM);
carniv_painb1 ();
self.pain_finished = time + 1;
}
else if (carniv_pain_type == 3)
{
sound (self, CHAN_VOICE, "enemy/carnivean/car_pn1.wav", 1, ATTN_NORM);
carniv_painc1 ();
self.pain_finished = time + 1;
carniv_pain_type = 0;
}
};
//=============================================================================
void() carniv_die1 =[ $death101, carniv_die2 ] {};
void() carniv_die2 =[ $death102, carniv_die3 ] {};
void() carniv_die3 =[ $death103, carniv_die4 ] {self.solid = SOLID_NOT;};
void() carniv_die4 =[ $death104, carniv_die5 ] {};
void() carniv_die5 =[ $death105, carniv_die6 ] {};
void() carniv_die6 =[ $death106, carniv_die7 ] {};
void() carniv_die7 =[ $death107, carniv_die8 ] {};
void() carniv_die8 =[ $death108, carniv_die9 ] {};
void() carniv_die9 =[ $death109, carniv_die10 ] {};
void() carniv_die10 =[ $death110, carniv_die11 ] {};
void() carniv_die11 =[ $death111, carniv_die12 ] {};
void() carniv_die12 =[ $death112, carniv_die13 ] {};
void() carniv_die13 =[ $death113, carniv_die14 ] {};
void() carniv_die14 =[ $death114, carniv_die15 ] {};
void() carniv_die15 =[ $death115, carniv_die16 ] {};
void() carniv_die16 =[ $death015, carniv_die17 ] {};
void() carniv_die17 =[ $death117, carniv_die18 ] {};
void() carniv_die18 =[ $death118, carniv_die19 ] {};
void() carniv_die19 =[ $death119, carniv_die20 ] {};
void() carniv_die20 =[ $death120, carniv_die21 ] {};
void() carniv_die21 =[ $death121, carniv_die22 ] {};
void() carniv_die22 =[ $death122, carniv_die23 ] {};
void() carniv_die23 =[ $death123, carniv_die24 ] {};
void() carniv_die24 =[ $death124, carniv_die25 ] {};
void() carniv_die25 =[ $death125, carniv_die26 ] {};
void() carniv_die26 =[ $death126, carniv_die27 ] {};
void() carniv_die27 =[ $death127, carniv_die28 ] {};
void() carniv_die28 =[ $death128, carniv_die29 ] {};
void() carniv_die29 =[ $death129, carniv_die30 ] {};
void() carniv_die30 =[ $death130, carniv_die31 ] {};
void() carniv_die31 =[ $death131, carniv_die31 ] {banish_monster();};
//=============================================================================
void() carniv_bdie1 =[ $death201, carniv_bdie2 ] {};
void() carniv_bdie2 =[ $death202, carniv_bdie3 ] {};
void() carniv_bdie3 =[ $death203, carniv_bdie4 ] {self.solid = SOLID_NOT;};
void() carniv_bdie4 =[ $death204, carniv_bdie5 ] {};
void() carniv_bdie5 =[ $death205, carniv_bdie6 ] {};
void() carniv_bdie6 =[ $death206, carniv_bdie7 ] {};
void() carniv_bdie7 =[ $death207, carniv_bdie8 ] {};
void() carniv_bdie8 =[ $death208, carniv_bdie9 ] {};
void() carniv_bdie9 =[ $death209, carniv_bdie10 ] {};
void() carniv_bdie10 =[ $death210, carniv_bdie11 ] {};
void() carniv_bdie11 =[ $death211, carniv_bdie12 ] {};
void() carniv_bdie12 =[ $death212, carniv_bdie13 ] {};
void() carniv_bdie13 =[ $death213, carniv_bdie14 ] {};
void() carniv_bdie14 =[ $death214, carniv_bdie15 ] {};
void() carniv_bdie15 =[ $death215, carniv_bdie16 ] {};
void() carniv_bdie16 =[ $death216, carniv_bdie17 ] {};
void() carniv_bdie17 =[ $death217, carniv_bdie18 ] {};
void() carniv_bdie18 =[ $death218, carniv_bdie19 ] {};
void() carniv_bdie19 =[ $death219, carniv_bdie20 ] {};
void() carniv_bdie20 =[ $death220, carniv_bdie21 ] {};
void() carniv_bdie21 =[ $death221, carniv_bdie22 ] {};
void() carniv_bdie22 =[ $death222, carniv_bdie23 ] {};
void() carniv_bdie23 =[ $death223, carniv_bdie24 ] {};
void() carniv_bdie24 =[ $death224, carniv_bdie25 ] {};
void() carniv_bdie25 =[ $death225, carniv_bdie26 ] {};
void() carniv_bdie26 =[ $death226, carniv_bdie27 ] {};
void() carniv_bdie27 =[ $death227, carniv_bdie28 ] {};
void() carniv_bdie28 =[ $death228, carniv_bdie29 ] {};
void() carniv_bdie29 =[ $death229, carniv_bdie30 ] {};
void() carniv_bdie30 =[ $death230, carniv_bdie31 ] {};
void() carniv_bdie31 =[ $death231, carniv_bdie32 ] {};
void() carniv_bdie32 =[ $death232, carniv_bdie33 ] {};
void() carniv_bdie33 =[ $death233, carniv_bdie34 ] {};
void() carniv_bdie34 =[ $death234, carniv_bdie35 ] {};
void() carniv_bdie35 =[ $death235, carniv_bdie36 ] {};
void() carniv_bdie36 =[ $death236, carniv_bdie37 ] {};
void() carniv_bdie37 =[ $death237, carniv_bdie38 ] {};
void() carniv_bdie38 =[ $death238, carniv_bdie39 ] {};
void() carniv_bdie39 =[ $death239, carniv_bdie40 ] {};
void() carniv_bdie40 =[ $death240, carniv_bdie40 ] {banish_monster();};
//=============================================================================
void() carniv_die =
{
if (random() < 0.5)
{
sound (self, CHAN_VOICE, "enemy/carnivean/death1.wav", 1, ATTN_NORM);
carniv_die1 ();
}
else
{
sound (self, CHAN_VOICE, "enemy/carnivean/death2.wav", 1, ATTN_NORM);
carniv_bdie1 ();
}
};
void() carniv_melee =
{
sound (self, CHAN_VOICE, "enemy/carnivean/miss.wav", 1, ATTN_NORM);
carniv_swing1 ();
};
void() carniv_missile =
{
//Don't rely on fireball attack too much
if (random() <= 0.65)
{
sound (self, CHAN_VOICE, "enemy/carnivean/scream.wav", 1, ATTN_NORM);
carniv_fire1 ();
}
}
void() carniv_idlesound =
{
local float r;
if (random() <= 0.2)
{
r = random();
if (r <= 0.3)
sound (self, CHAN_VOICE, "enemy/carnivean/idle.wav", 1, ATTN_NORM);
else if (r <= 0.6)
sound (self, CHAN_VOICE, "enemy/carnivean/taunt1.wav", 1, ATTN_NORM);
else
sound (self, CHAN_VOICE, "enemy/carnivean/taunt2.wav", 1, ATTN_NORM);
}
};
float carniv_stepsound;
void() carniv_step =
{
//play step sounds in sequence, step1, step2, step1, step2, etc
carniv_stepsound = carniv_stepsound + 1;
if (carniv_stepsound == 1)
sound (self, CHAN_WEAPON, "enemy/carnivean/step2.wav", 1, ATTN_NORM);
else
{
sound (self, CHAN_WEAPON, "enemy/carnivean/step.wav", 1, ATTN_NORM);
carniv_stepsound = 0;
}
};
//=============================================================================
/*QUAKED monster_carnivore (1 0 0) (-32 -32 -24) (32 32 64) Ambush
*/
void() monster_carnivore =
{
if (deathmatch)
{
remove(self);
return;
}
precache_model ("models/enemies/carniv.md2");
precache_model ("models/weapons/gfx/fireball.mdl");
precache_sound ("enemy/carnivean/alert.wav");
precache_sound ("enemy/carnivean/car_pn1.wav");
precache_sound ("enemy/carnivean/death1.wav");
precache_sound ("enemy/carnivean/death2.wav");
precache_sound ("enemy/carnivean/idle.wav");
precache_sound ("enemy/carnivean/miss.wav");
precache_sound ("enemy/carnivean/pain.wav");
precache_sound ("enemy/carnivean/scream.wav");
precache_sound ("enemy/carnivean/step2.wav");
precache_sound ("enemy/carnivean/step.wav");
precache_sound ("enemy/carnivean/taunt1.wav");
precache_sound ("enemy/carnivean/taunt2.wav");
self.solid = SOLID_SLIDEBOX;
self.movetype = MOVETYPE_STEP;
setmodel (self, "models/enemies/carniv.md2");
setsize (self, '-32 -32 -24', '32 32 64');
// setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
self.health = set_health(200);
self.speed = set_speed(100);
self.dtype = 1; //dodge type back_strafe
self.alpha = 1; //we aren't transparent
self.th_stand = carniv_stand1;
self.th_walk = carniv_walk1;
self.th_run = carniv_run1;
self.th_die = carniv_die;
self.th_melee = carniv_melee;
self.th_missile = carniv_missile;
self.th_pain = carniv_pain;
//my new classname is?
self.classname = "monster_carnivore";
//set up our monflag
self.monflag = "TRUE";
walkmonster_start();
};