xmen/rogue.c
2005-09-22 00:00:00 +00:00

275 lines
No EOL
10 KiB
C

/*
==============================================================================
Rogue
==============================================================================
*/
$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 walk13
$frame run1 run2 run3 run4 run5 run6 run7 run8 run9 run10 run11 run12
$frame pain1 pain2 pain3 pain4 pain5 pain6
$frame death1 death2 death3 death4 death5 death6 death7 death8 death9 death10
$frame death11 death12
$frame deata1 deata2 deata3 deata4 deata5 deata6 deata7 deata8 deata9 deata10
$frame deata11 deata12
$frame punch1 punch2 punch3 punch4 punch5 punch6 punch7 punch8
$frame punch9 punch10 punch11 punch12
$frame atta1 atta2 atta3 atta4 atta5 atta6 atta7 atta8
$frame atta9 atta10 atta11 atta12
//=====================================================================
void() rogue_stand1 = [ $stand1, rogue_stand2 ] {ai_stand();};
void() rogue_stand2 = [ $stand2, rogue_stand3 ] {ai_stand();};
void() rogue_stand3 = [ $stand3, rogue_stand4 ] {ai_stand();};
void() rogue_stand4 = [ $stand4, rogue_stand5 ] {ai_stand();};
void() rogue_stand5 = [ $stand5, rogue_stand6 ] {ai_stand();};
void() rogue_stand6 = [ $stand6, rogue_stand7 ] {ai_stand();};
void() rogue_stand7 = [ $stand7, rogue_stand8 ] {ai_stand();};
void() rogue_stand8 = [ $stand8, rogue_stand9 ] {ai_stand();};
void() rogue_stand9 = [ $stand9, rogue_stand10 ] {ai_stand();};
void() rogue_stand10 = [ $stand10, rogue_stand11 ] {ai_stand();};
void() rogue_stand11 = [ $stand11, rogue_stand12 ] {ai_stand();};
void() rogue_stand12 = [ $stand12, rogue_stand13 ] {ai_stand();};
void() rogue_stand13 = [ $stand13, rogue_stand1 ] {ai_stand();};
//=====================================================================
void() rogue_walk1 = [ $walk1, rogue_walk2 ] {ai_walk(10);};
void() rogue_walk2 = [ $walk2, rogue_walk3 ] {ai_walk(10);};
void() rogue_walk3 = [ $walk3, rogue_walk4 ] {ai_walk(10);};
void() rogue_walk4 = [ $walk4, rogue_walk5 ] {ai_walk(10);};
void() rogue_walk5 = [ $walk5, rogue_walk6 ] {ai_walk(10);};
void() rogue_walk6 = [ $walk6, rogue_walk7 ] {ai_walk(10);};
void() rogue_walk7 = [ $walk7, rogue_walk8 ] {ai_walk(10);};
void() rogue_walk8 = [ $walk8, rogue_walk9 ] {ai_walk(10);};
void() rogue_walk9 = [ $walk9, rogue_walk10 ] {ai_walk(10);};
void() rogue_walk10 = [ $walk10, rogue_walk11 ] {ai_walk(10);};
void() rogue_walk11 = [ $walk11, rogue_walk12 ] {ai_walk(10);};
void() rogue_walk12 = [ $walk12, rogue_walk13 ] {ai_walk(10);};
void() rogue_walk13 = [ $walk13, rogue_walk1 ] {ai_walk(10);};
//=====================================================================
void() rogue_run1 = [ $run1, rogue_run2 ] {ai_run(15);};
void() rogue_run2 = [ $run2, rogue_run3 ] {ai_run(15);};
void() rogue_run3 = [ $run3, rogue_run4 ] {ai_run(15);};
void() rogue_run4 = [ $run4, rogue_run5 ] {ai_run(15);};
void() rogue_run5 = [ $run5, rogue_run6 ] {ai_run(15);};
void() rogue_run6 = [ $run6, rogue_run7 ] {ai_run(15);};
void() rogue_run7 = [ $run7, rogue_run8 ] {ai_run(15);};
void() rogue_run8 = [ $run8, rogue_run9 ] {ai_run(15);};
void() rogue_run9 = [ $run9, rogue_run10 ] {ai_run(15);};
void() rogue_run10 = [ $run10, rogue_run11 ] {ai_run(15);};
void() rogue_run11 = [ $run11, rogue_run12 ] {ai_run(15);};
void() rogue_run12 = [ $run12, rogue_run1 ] {ai_run(15);};
//=====================================================================
void() rogue_pain1 = [ $pain1, rogue_pain2 ] {};
void() rogue_pain2 = [ $pain2, rogue_pain3 ] {};
void() rogue_pain3 = [ $pain3, rogue_pain4 ] {};
void() rogue_pain4 = [ $pain4, rogue_pain5 ] {};
void() rogue_pain5 = [ $pain5, rogue_pain6 ] {};
void() rogue_pain6 = [ $pain6, rogue_run1 ] {};
void() rogue_pain =
{
if (self.pain_finished > time)
return;
// play a sound here
FemalePainSound();
self.pain_finished = time + 2.5;
rogue_pain1();
};
//=====================================================================
void() rogue_death1 = [ $death1, rogue_death2 ] {};
void() rogue_death2 = [ $death2, rogue_death3 ] {};
void() rogue_death3 = [ $death3, rogue_death4 ] {self.solid = SOLID_NOT;};
void() rogue_death4 = [ $death4, rogue_death5 ] {};
void() rogue_death5 = [ $death5, rogue_death6 ] {};
void() rogue_death6 = [ $death6, rogue_death7 ] {};
void() rogue_death7 = [ $death7, rogue_death8 ] {};
void() rogue_death8 = [ $death8, rogue_death9 ] {};
void() rogue_death9 = [ $death9, rogue_death10 ] {};
void() rogue_death10 = [ $death10, rogue_death11 ] {};
void() rogue_death11 = [ $death11, rogue_death12 ] {};
void() rogue_death12 = [ $death12, rogue_death12 ] {if (self.angles_x != 0) AngelPitch();};
void() rogue_deata1 = [ $deata1, rogue_deata2 ] {};
void() rogue_deata2 = [ $deata2, rogue_deata3 ] {};
void() rogue_deata3 = [ $deata3, rogue_deata4 ] {self.solid = SOLID_NOT;};
void() rogue_deata4 = [ $deata4, rogue_deata5 ] {};
void() rogue_deata5 = [ $deata5, rogue_deata6 ] {};
void() rogue_deata6 = [ $deata6, rogue_deata7 ] {};
void() rogue_deata7 = [ $deata7, rogue_deata8 ] {};
void() rogue_deata8 = [ $deata8, rogue_deata9 ] {};
void() rogue_deata9 = [ $deata9, rogue_deata10 ] {};
void() rogue_deata10 = [ $deata10, rogue_deata11 ] {};
void() rogue_deata11 = [ $deata11, rogue_deata12 ] {};
void() rogue_deata12 = [ $deata12, rogue_deata12 ] {if (self.angles_x != 0) AngelPitch();};
void() rogue_die =
{
FemaleDeathSound();
self.velocity_x = -200 + 400*random();
self.velocity_y = -200 + 400*random();
self.velocity_z = 100 + 100*random();
self.flags = self.flags - (self.flags & FL_ONGROUND);
self.enemy = world;
if (random() < 0.5)
rogue_death1 ();
else
rogue_deata1 ();
};
//=====================================================================
void() rogue_punch4;
float(float move_dist) RogueCheckPunch =
{
ai_face();
if (!ai_forward(move_dist)) { // abort
self.think = self.th_run;
return FALSE;
}
self.nextthink = time + 0.05;
if (!infront(self.enemy)) { // abort attack
self.think = self.th_run;
return FALSE;
}
if (vlen(self.enemy.origin - self.origin) > 96)
return FALSE;
// striking distance!
return TRUE;
};
void() RoguePunchPosition =
{
local float distance1;
distance1 = vlen(self.enemy.origin - self.origin);
ai_back(5);
};
void() rogue_punch1 = [ $punch1, rogue_punch2 ] {RoguePunchPosition(); self.attack_finished = time + 4;};
void() rogue_punch2 = [ $punch2, rogue_punch3 ] {RoguePunchPosition();};
void() rogue_punch3 = [ $punch3, rogue_punch3 ] {if (RogueCheckPunch(35)) rogue_punch4();};
void() rogue_punch4 = [ $punch4, rogue_punch5 ] {ai_forward(15); ai_face();};
void() rogue_punch5 = [ $punch5, rogue_punch6 ] {ai_forward(12); ai_face();};
void() rogue_punch6 = [ $punch6, rogue_punch7 ] {ai_forward(8); ai_face();};
void() rogue_punch7 = [ $punch7, rogue_punch8 ]
{
local vector vect;
if (RogueCheckPunch(0)) {
// hit em
sound(self, CHAN_WEAPON, "generic/punch2.wav", 1, ATTN_NORM);
T_Damage(self.enemy, self, self, 25);
vect = normalize(self.enemy.origin - self.origin);
self.enemy.velocity = vect * 300;
self.enemy.velocity_z = 300;
self.enemy.punchangle_x = -15;
}
};
void() rogue_punch8 = [ $punch8, rogue_punch9 ] {};
void() rogue_punch9 = [ $punch9, rogue_punch10 ] {};
void() rogue_punch10 = [ $punch10, rogue_punch11 ] {};
void() rogue_punch11 = [ $punch11, rogue_punch12 ] {};
void() rogue_punch12 = [ $punch12, rogue_run1 ] {};
//=================================================================
void() rogue_atta1 = [ $atta1, rogue_atta2 ]
{
ai_face();
if (vlen(self.enemy.origin - self.origin) < 64)
ai_forward(-10);
};
void() rogue_atta2 = [ $atta2, rogue_atta3 ] {ai_face();};
void() rogue_atta3 = [ $atta3, rogue_atta4 ] {ai_face();};
void() rogue_atta4 = [ $atta4, rogue_atta5 ] {ai_face();};
void() rogue_atta5 = [ $atta5, rogue_atta6 ] {ai_face();};
void() rogue_atta6 = [ $atta6, rogue_atta7 ] {ai_face();};
void() rogue_atta7 = [ $atta7, rogue_atta8 ]
{
ai_face();
if (RogueCheckPunch(0)) {
sound(self, CHAN_WEAPON, "generic/punch2.wav", 1, ATTN_NORM);
self.enemy.punchangle_x = -7;
T_Damage(self.enemy, self, self, 10);
}
};
void() rogue_atta8 = [ $atta8, rogue_atta9 ] {ai_face();};
void() rogue_atta9 = [ $atta9, rogue_atta10 ] {ai_face();};
void() rogue_atta10 = [ $atta10, rogue_atta11 ] {ai_face();};
void() rogue_atta11 = [ $atta11, rogue_atta12 ] {ai_face();};
void() rogue_atta12 = [ $atta12, rogue_run1 ] {ai_face();};
//=================================================================
/*QUAKED monster_ogre (1 0 0) (-32 -32 -24) (32 32 48) Ambush
*/
void() monster_ogre =
{
remove(self);
};
void() xmen_rogue =
{
if (deathmatch)
{
remove(self);
return;
}
precache_model ("progs/rogue.mdl");
precache_sound ("generic/punch2.wav");
self.solid = SOLID_SLIDEBOX;
self.movetype = MOVETYPE_STEP;
setmodel (self, "progs/rogue.mdl");
setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
self.health = 210 + cvar("skill")*10;
self.yaw_speed = 10;
self.th_stand = rogue_stand1;
self.th_walk = rogue_walk1;
self.th_run = rogue_run1;
self.th_die = rogue_die;
self.th_pain = rogue_pain;
self.th_melee = rogue_atta1;
self.th_missile = rogue_punch1;
self.think = flymonster_start;
self.nextthink = time + 0.1 + random ()*0.1;
};