846 lines
26 KiB
C++
846 lines
26 KiB
C++
/*
|
|
==============================================================================
|
|
|
|
Boss Form 2
|
|
coded by Michael Rogers a.k.a Xsniper
|
|
http://xsniper.virtualave.net/
|
|
|
|
==============================================================================
|
|
*/
|
|
|
|
$cd /models/enemies
|
|
$origin 0 0 32
|
|
$base base
|
|
$skin base
|
|
|
|
$frame ataka01 ataka02 ataka03 ataka04 ataka05 ataka06 ataka07 ataka08 ataka09 ataka10
|
|
$frame ataka11 ataka12
|
|
|
|
$frame atakb01 atakb02 atakb03 atakb04 atakb05 atakb06 atakb07 atakb08 atakb09 atakb10
|
|
$frame atakb11 atakb12
|
|
|
|
$frame jatak01 jatak02 jatak03 jatak04 jatak05 jatak06 jatak07 jatak08 jatak09 jatak10
|
|
$frame jatak11 jatak12 jatak13 jatak14 jatak15 jatak16 jatak17
|
|
|
|
$frame jump
|
|
|
|
$frame land
|
|
|
|
$frame pain
|
|
|
|
$frame painl
|
|
|
|
$frame roar01 roar02 roar03 roar04 roar05 roar06 roar07 roar08 roar09 roar10
|
|
$frame roar11 roar12 roar13 roar14 roar15
|
|
|
|
$frame run01 run02 run03 run04 run05 run06 run07 run08 run09 run10
|
|
|
|
$frame stand01 stand02 stand03 stand04 stand05 stand06 stand07 stand08 stand09 stand10
|
|
$frame stand11 stand12
|
|
|
|
$frame walk01 walk02 walk03 walk04 walk05 walk06 walk07 walk08 walk09 walk10
|
|
$frame walk11 walk12
|
|
|
|
$frame wataka01 wataka02 wataka03 wataka04 wataka05 wataka06 wataka07 wataka08 wataka09 wataka10
|
|
$frame wataka11 wataka12
|
|
|
|
$frame watakb01 watakb02 watakb03 watakb04 watakb05 watakb06 watakb07 watakb08 watakb09 watakb10
|
|
$frame watakb11 watakb12
|
|
|
|
void() bossf2_painsound;
|
|
void() bossf2_tauntsound;
|
|
void() bossf2_run1;
|
|
void() bossf2_change_gravity;
|
|
void() bossf2_create_hole;
|
|
//=================================================================================================
|
|
|
|
/*
|
|
==========================
|
|
Abilities Code
|
|
==========================
|
|
*/
|
|
|
|
void() bossf2_JumpTouch =
|
|
{
|
|
local float ldmg;
|
|
|
|
if (self.health <= 0)
|
|
return;
|
|
|
|
if (other.takedamage)
|
|
{
|
|
if ( vlen(self.velocity) > 300 )
|
|
{
|
|
ldmg = 30 + 10*random();
|
|
T_Damage (other, self, self, ldmg);
|
|
}
|
|
}
|
|
|
|
if (!checkbottom(self))
|
|
{
|
|
if (self.flags & FL_ONGROUND)
|
|
{ // jump randomly to not get hung up
|
|
//dprint ("popjump\n");
|
|
self.touch = SUB_Null;
|
|
self.think = hhound_leap1;
|
|
self.nextthink = time + 0.1;
|
|
}
|
|
return; // not on ground yet
|
|
}
|
|
|
|
self.touch = SUB_Null;
|
|
self.think = bossf2_run1;
|
|
self.nextthink = time + 0.1;
|
|
};
|
|
|
|
//=================================================================================================
|
|
|
|
/*
|
|
==========================
|
|
Animation Frames
|
|
==========================
|
|
*/
|
|
|
|
void() bossf2_stand1 =[ $stand01, bossf2_stand2 ] {ai_stand();};
|
|
void() bossf2_stand2 =[ $stand02, bossf2_stand3 ] {ai_stand();};
|
|
void() bossf2_stand3 =[ $stand03, bossf2_stand4 ] {ai_stand();};
|
|
void() bossf2_stand4 =[ $stand04, bossf2_stand5 ] {ai_stand();};
|
|
void() bossf2_stand5 =[ $stand05, bossf2_stand6 ] {ai_stand();};
|
|
void() bossf2_stand6 =[ $stand06, bossf2_stand7 ] {ai_stand();};
|
|
void() bossf2_stand7 =[ $stand07, bossf2_stand8 ] {ai_stand();};
|
|
void() bossf2_stand8 =[ $stand08, bossf2_stand9 ] {ai_stand();};
|
|
void() bossf2_stand9 =[ $stand09, bossf2_stand10 ] {ai_stand();};
|
|
void() bossf2_stand10 =[ $stand10, bossf2_stand11 ] {ai_stand();};
|
|
void() bossf2_stand11 =[ $stand11, bossf2_stand12 ] {ai_stand();};
|
|
void() bossf2_stand12 =[ $stand12, bossf2_stand1 ] {ai_stand();};
|
|
|
|
//=================================================================================================
|
|
|
|
void() bossf2_walk1 =[ $walk01, bossf2_walk2 ] {ai_walk(10);};
|
|
void() bossf2_walk2 =[ $walk02, bossf2_walk3 ] {ai_walk(8);};
|
|
void() bossf2_walk3 =[ $walk03, bossf2_walk4 ] {ai_walk(6);};
|
|
void() bossf2_walk4 =[ $walk04, bossf2_walk5 ] {ai_walk(5);};
|
|
void() bossf2_walk5 =[ $walk05, bossf2_walk6 ] {ai_walk(10);};
|
|
void() bossf2_walk6 =[ $walk06, bossf2_walk7 ] {ai_walk(8);};
|
|
void() bossf2_walk7 =[ $walk07, bossf2_walk8 ] {ai_walk(6);};
|
|
void() bossf2_walk8 =[ $walk08, bossf2_walk9 ] {ai_walk(5);};
|
|
void() bossf2_walk9 =[ $walk09, bossf2_walk10 ] {ai_walk(10);};
|
|
void() bossf2_walk10 =[ $walk10, bossf2_walk11 ] {ai_walk(8);};
|
|
void() bossf2_walk11 =[ $walk11, bossf2_walk12 ] {ai_walk(6);};
|
|
void() bossf2_walk12 =[ $walk12, bossf2_walk1 ] {ai_walk(5);};
|
|
|
|
//=================================================================================================
|
|
|
|
void() bossf2_run1 =[ $run01, bossf2_run2 ]
|
|
{
|
|
ai_face();
|
|
ai_run(20);
|
|
bossf2_tauntsound();
|
|
|
|
//if we can't see our enemy then teleport to center arena
|
|
// if (!visible(self.enemy))
|
|
// boss_teleport(1);
|
|
|
|
//change the gravity
|
|
bossf2_change_gravity();
|
|
};
|
|
void() bossf2_run2 =[ $run02, bossf2_run3 ] {ai_run(16);};
|
|
void() bossf2_run3 =[ $run03, bossf2_run4 ] {ai_run(12);};
|
|
void() bossf2_run4 =[ $run04, bossf2_run5 ] {ai_run(10);};
|
|
void() bossf2_run5 =[ $run05, bossf2_run6 ] {ai_run(20);};
|
|
void() bossf2_run6 =[ $run06, bossf2_run7 ] {ai_run(16);};
|
|
void() bossf2_run7 =[ $run07, bossf2_run8 ] {ai_run(12);};
|
|
void() bossf2_run8 =[ $run08, bossf2_run9 ] {ai_run(10);};
|
|
void() bossf2_run9 =[ $run09, bossf2_run10 ] {ai_run(20);};
|
|
void() bossf2_run10 =[ $run10, bossf2_run1 ] {ai_run(16);};
|
|
|
|
//=================================================================================================
|
|
|
|
/*
|
|
==========================
|
|
Missile Attacks
|
|
==========================
|
|
*/
|
|
|
|
//carniv's fireball attack
|
|
void() bossf2_ataka1 =[ $ataka01, bossf2_ataka2 ] {ai_face();};
|
|
void() bossf2_ataka2 =[ $ataka02, bossf2_ataka3 ] {ai_face();CreateFireball((v_right * 30) - '0 0 20');};
|
|
void() bossf2_ataka3 =[ $ataka03, bossf2_ataka4 ] {ai_face();};
|
|
void() bossf2_ataka4 =[ $ataka04, bossf2_ataka5 ] {ai_face();};
|
|
void() bossf2_ataka5 =[ $ataka05, bossf2_ataka6 ] {ai_face();};
|
|
void() bossf2_ataka6 =[ $ataka06, bossf2_ataka7 ] {ai_face();};
|
|
void() bossf2_ataka7 =[ $ataka07, bossf2_ataka8 ] {ai_face();};
|
|
void() bossf2_ataka8 =[ $ataka08, bossf2_ataka9 ] {ai_face();};
|
|
void() bossf2_ataka9 =[ $ataka09, bossf2_ataka10 ] {ai_face();};
|
|
void() bossf2_ataka10 =[ $ataka10, bossf2_ataka11 ] {ai_face();};
|
|
void() bossf2_ataka11 =[ $ataka11, bossf2_ataka12 ] {ai_face();};
|
|
void() bossf2_ataka12 =[ $ataka12, bossf2_run1 ] {ai_face();};
|
|
|
|
//=================================================================================================
|
|
|
|
//torment's hell staff attack
|
|
void() bossf2_atakb1 =[ $atakb01, bossf2_atakb2 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb2 =[ $atakb02, bossf2_atakb3 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb3 =[ $atakb03, bossf2_atakb4 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb4 =[ $atakb04, bossf2_atakb5 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb5 =[ $atakb05, bossf2_atakb6 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb6 =[ $atakb06, bossf2_atakb7 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb7 =[ $atakb07, bossf2_atakb8 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb8 =[ $atakb08, bossf2_atakb9 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb9 =[ $atakb09, bossf2_atakb10 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb10 =[ $atakb10, bossf2_atakb11 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb11 =[ $atakb11, bossf2_atakb12 ] {ai_face();HellStaff();};
|
|
void() bossf2_atakb12 =[ $atakb12, bossf2_run1 ] {ai_face();HellStaff();};
|
|
|
|
//=================================================================================================
|
|
|
|
//jump attack
|
|
void() bossf2_jatak1 =[ $jatak01, bossf2_jatak2 ] {ai_face();};
|
|
void() bossf2_jatak2 =[ $jatak02, bossf2_jatak3 ]
|
|
{
|
|
ai_face();
|
|
|
|
self.touch = bossf2_JumpTouch;
|
|
makevectors (self.angles);
|
|
self.origin_z = self.origin_z + 1;
|
|
self.velocity = v_forward * 600 + '0 0 300';
|
|
if (self.flags & FL_ONGROUND)
|
|
self.flags = self.flags - FL_ONGROUND;
|
|
};
|
|
void() bossf2_jatak3 =[ $jatak03, bossf2_jatak4 ] {};
|
|
void() bossf2_jatak4 =[ $jatak04, bossf2_jatak5 ] {};
|
|
void() bossf2_jatak5 =[ $jatak05, bossf2_jatak6 ] {};
|
|
void() bossf2_jatak6 =[ $jatak06, bossf2_jatak7 ] {};
|
|
void() bossf2_jatak7 =[ $jatak07, bossf2_jatak8 ] {};
|
|
void() bossf2_jatak8 =[ $jatak08, bossf2_jatak9 ] {};
|
|
void() bossf2_jatak9 =[ $jatak09, bossf2_jatak10 ] {};
|
|
void() bossf2_jatak10 =[ $jatak10, bossf2_jatak11 ] {};
|
|
void() bossf2_jatak11 =[ $jatak11, bossf2_jatak12 ] {};
|
|
void() bossf2_jatak12 =[ $jatak12, bossf2_jatak13 ] {};
|
|
void() bossf2_jatak13 =[ $jatak13, bossf2_jatak14 ] {};
|
|
void() bossf2_jatak14 =[ $jatak14, bossf2_jatak15 ] {};
|
|
void() bossf2_jatak15 =[ $jatak15, bossf2_jatak16 ] {};
|
|
void() bossf2_jatak16 =[ $jatak16, bossf2_jatak17 ] {};
|
|
void() bossf2_jatak17 =[ $jatak17, bossf2_jatak17 ] {};
|
|
|
|
//=================================================================================================
|
|
|
|
/*
|
|
==========================
|
|
Melee Attacks
|
|
==========================
|
|
*/
|
|
|
|
void() bossf2_atakc1 =[ $ataka01, bossf2_atakc2 ] {ai_face();ai_charge(30);};
|
|
void() bossf2_atakc2 =[ $ataka02, bossf2_atakc3 ] {ai_charge(26);ai_melee();};
|
|
void() bossf2_atakc3 =[ $ataka03, bossf2_atakc4 ] {ai_charge(22);ai_melee();};
|
|
void() bossf2_atakc4 =[ $ataka04, bossf2_atakc5 ] {ai_charge(20);ai_melee();};
|
|
void() bossf2_atakc5 =[ $ataka05, bossf2_atakc6 ] {ai_charge(30);ai_melee();};
|
|
void() bossf2_atakc6 =[ $ataka06, bossf2_atakc7 ] {ai_charge(26);ai_melee();};
|
|
void() bossf2_atakc7 =[ $ataka07, bossf2_atakc8 ] {};
|
|
void() bossf2_atakc8 =[ $ataka08, bossf2_atakc9 ] {};
|
|
void() bossf2_atakc9 =[ $ataka09, bossf2_atakc10 ] {};
|
|
void() bossf2_atakc10 =[ $ataka10, bossf2_atakc11 ] {};
|
|
void() bossf2_atakc11 =[ $ataka11, bossf2_atakc12 ] {};
|
|
void() bossf2_atakc12 =[ $ataka12, bossf2_run1 ] {};
|
|
|
|
//=================================================================================================
|
|
|
|
void() bossf2_atakd1 =[ $atakb01, bossf2_atakd2 ] {ai_face();ai_charge(30);};
|
|
void() bossf2_atakd2 =[ $atakb02, bossf2_atakd3 ] {ai_charge(26);ai_melee();};
|
|
void() bossf2_atakd3 =[ $atakb03, bossf2_atakd4 ] {ai_charge(22);ai_melee();};
|
|
void() bossf2_atakd4 =[ $atakb04, bossf2_atakd5 ] {ai_charge(20);ai_melee();};
|
|
void() bossf2_atakd5 =[ $atakb05, bossf2_atakd6 ] {ai_charge(30);ai_melee();};
|
|
void() bossf2_atakd6 =[ $atakb06, bossf2_atakd7 ] {ai_charge(26);ai_melee();};
|
|
void() bossf2_atakd7 =[ $atakb07, bossf2_atakd8 ] {};
|
|
void() bossf2_atakd8 =[ $atakb08, bossf2_atakd9 ] {};
|
|
void() bossf2_atakd9 =[ $atakb09, bossf2_atakd10 ] {};
|
|
void() bossf2_atakd10 =[ $atakb10, bossf2_atakd11 ] {};
|
|
void() bossf2_atakd11 =[ $atakb11, bossf2_atakd12 ] {};
|
|
void() bossf2_atakd12 =[ $atakb12, bossf2_run1 ] {};
|
|
|
|
//=================================================================================================
|
|
void(vector spot, float continue, float x, float antix) create_fire_column
|
|
/*
|
|
==========================
|
|
Our Grand Entrance!
|
|
==========================
|
|
*/
|
|
|
|
void(float fdist) bossf2_create_fire =
|
|
{
|
|
local float firecount, anticount, firetime;
|
|
local vector start, plus;
|
|
|
|
//set up angles stuff
|
|
makevectors (self.angles);
|
|
self.v_angle = self.angles;
|
|
|
|
//set the starting height
|
|
start = '0 0 -10';
|
|
|
|
//set the increment amount
|
|
plus = '0 0 20';
|
|
|
|
//initialize firecount and anticount
|
|
firecount = 7;
|
|
anticount = 0;
|
|
|
|
//create fire columns
|
|
while(firecount > 0)
|
|
{
|
|
//to his left
|
|
create_fire_column(((self.origin - (v_right * fdist)) + start),0,firecount,anticount);
|
|
|
|
//to his right
|
|
create_fire_column(((self.origin + (v_right * fdist)) + start),0,firecount,anticount);
|
|
|
|
start = start + plus;
|
|
firecount = firecount - 1;
|
|
}
|
|
};
|
|
|
|
void(float fdist) bossf2_create_fire2 =
|
|
{
|
|
local float firecount, anticount, firetime;
|
|
local vector start, plus;
|
|
|
|
//set up angles stuff
|
|
makevectors (self.angles);
|
|
self.v_angle = self.angles;
|
|
|
|
//set the starting height
|
|
start = '0 0 -10';
|
|
|
|
//set the increment amount
|
|
plus = '0 0 20';
|
|
|
|
//initialize firecount and anticount
|
|
firecount = 7;
|
|
anticount = 0;
|
|
|
|
//create fire columns
|
|
while(firecount > 0)
|
|
{
|
|
//infront
|
|
create_fire_column(((self.origin - (v_forward * fdist)) + start),0,firecount,anticount);
|
|
|
|
//behind
|
|
create_fire_column(((self.origin + (v_forward * fdist)) + start),0,firecount,anticount);
|
|
|
|
start = start + plus;
|
|
firecount = firecount - 1;
|
|
}
|
|
};
|
|
|
|
void() bossf2_roara1 =[ $roar01, bossf2_roara2 ]
|
|
{
|
|
//lets become untouchable ^_-
|
|
self.solid = SOLID_NOT;
|
|
|
|
//face the player
|
|
ai_face_player();
|
|
|
|
//lets go slow motion for this!
|
|
adjust_speed(3,0);
|
|
|
|
//make some noise
|
|
sound (self, CHAN_VOICE, "boss2/bf2sightslow.wav", 1, ATTN_NORM);
|
|
|
|
//lets create some fire
|
|
bossf2_create_fire(80);
|
|
};
|
|
void() bossf2_roara2 =[ $roar02, bossf2_roara3 ] {};
|
|
void() bossf2_roara3 =[ $roar03, bossf2_roara4 ] {};
|
|
void() bossf2_roara4 =[ $roar04, bossf2_roara5 ] {};
|
|
void() bossf2_roara5 =[ $roar05, bossf2_roara6 ] {};
|
|
void() bossf2_roara6 =[ $roar06, bossf2_roara7 ] {};
|
|
void() bossf2_roara7 =[ $roar07, bossf2_roara8 ] {};
|
|
void() bossf2_roara8 =[ $roar08, bossf2_roara9 ] {};
|
|
void() bossf2_roara9 =[ $roar09, bossf2_roara10 ] {};
|
|
void() bossf2_roara10 =[ $roar10, bossf2_roara11 ] {};
|
|
void() bossf2_roara11 =[ $roar11, bossf2_roara12 ] {};
|
|
void() bossf2_roara12 =[ $roar12, bossf2_roara13 ] {};
|
|
void() bossf2_roara13 =[ $roar13, bossf2_roara14 ] {};
|
|
void() bossf2_roara14 =[ $roar14, bossf2_roara15 ] {};
|
|
void() bossf2_roara15 =[ $roar15, bossf2_run1 ]
|
|
{
|
|
//lets become solid again
|
|
self.solid = SOLID_SLIDEBOX;
|
|
|
|
//set game speed back to normal
|
|
adjust_speed(0,0);
|
|
|
|
//grand entrance is done
|
|
entered = 1;
|
|
|
|
//create a black hole in the center of the arena
|
|
bossf2_create_hole();
|
|
};
|
|
|
|
//=================================================================================================
|
|
|
|
/*
|
|
void() bossf2_cataka1 =[ $cataka01, bossf2_cataka2 ] {ai_face();ai_charge(30);};
|
|
void() bossf2_cataka2 =[ $cataka02, bossf2_cataka3 ] {ai_charge(26);ai_melee();};
|
|
void() bossf2_cataka3 =[ $cataka03, bossf2_cataka4 ] {ai_charge(22);ai_melee();};
|
|
void() bossf2_cataka4 =[ $cataka04, bossf2_cataka5 ] {ai_charge(20);ai_melee();};
|
|
void() bossf2_cataka5 =[ $cataka05, bossf2_cataka6 ] {ai_charge(30);ai_melee();};
|
|
void() bossf2_cataka6 =[ $cataka06, bossf2_cataka7 ] {ai_charge(26);ai_melee();};
|
|
void() bossf2_cataka7 =[ $cataka07, bossf2_cataka8 ] {};
|
|
void() bossf2_cataka8 =[ $cataka08, bossf2_cataka9 ] {};
|
|
void() bossf2_cataka9 =[ $cataka09, bossf2_cataka10 ] {};
|
|
void() bossf2_cataka10 =[ $cataka10, bossf2_cataka11 ] {};
|
|
void() bossf2_cataka11 =[ $cataka11, bossf2_cataka12 ] {};
|
|
void() bossf2_cataka12 =[ $cataka12, bossf2_run ] {};
|
|
|
|
//=================================================================================================
|
|
|
|
void() bossf2_catakb1 =[ $catakb01, bossf2_catakb2 ] {ai_face();ai_charge(30);};
|
|
void() bossf2_catakb2 =[ $catakb02, bossf2_catakb3 ] {ai_charge(26);};
|
|
void() bossf2_catakb3 =[ $catakb03, bossf2_catakb4 ] {ai_charge(22);ai_melee();};
|
|
void() bossf2_catakb4 =[ $catakb04, bossf2_catakb5 ] {ai_charge(20);ai_melee();};
|
|
void() bossf2_catakb5 =[ $catakb05, bossf2_catakb6 ] {ai_charge(30);ai_melee();};
|
|
void() bossf2_catakb6 =[ $catakb06, bossf2_catakb7 ] {ai_charge(26);ai_melee();};
|
|
void() bossf2_catakb7 =[ $catakb07, bossf2_catakb8 ] {};
|
|
void() bossf2_catakb8 =[ $catakb08, bossf2_catakb9 ] {};
|
|
void() bossf2_catakb9 =[ $catakb09, bossf2_catakb10 ] {};
|
|
void() bossf2_catakb10 =[ $catakb10, bossf2_run ] {};
|
|
*/
|
|
|
|
//=================================================================================================
|
|
|
|
void() bossf2_paina1 =[ $pain, bossf2_run1 ] {};
|
|
|
|
void() bossf2_painb1 =[ $painl, bossf2_run1 ] {};
|
|
|
|
void(entity attacker, float damage) bossf2_pain =
|
|
{
|
|
if (self.pain_finished > time)
|
|
return;
|
|
|
|
if (entered == 0)
|
|
return;
|
|
|
|
self.pain_finished = time + 0.1;
|
|
|
|
//make some noise
|
|
bossf2_painsound();
|
|
|
|
//select pain frame at random
|
|
if (random() <= 0.5)
|
|
bossf2_paina1();
|
|
else
|
|
bossf2_painb1();
|
|
};
|
|
|
|
//=================================================================================================
|
|
|
|
void() bossf2_timer_think =
|
|
{
|
|
IncrementDifficulty();
|
|
|
|
//put us back in sp mode
|
|
set_deathmatch(0);
|
|
|
|
changelevel("ending");
|
|
|
|
remove(self);
|
|
}
|
|
|
|
void() bossf2_timer =
|
|
{
|
|
local entity bf2timer
|
|
|
|
bf2timer = spawn();
|
|
bf2timer.nextthink = time + 2;
|
|
bf2timer.think = bossf2_timer_think;
|
|
}
|
|
|
|
void() bossf2_blowup =
|
|
{
|
|
T_RadiusDamage (self, self, 120, world);
|
|
|
|
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
|
|
WriteByte (MSG_BROADCAST, TE_TAREXPLOSION);
|
|
WriteCoord (MSG_BROADCAST, self.origin_x);
|
|
WriteCoord (MSG_BROADCAST, self.origin_y);
|
|
WriteCoord (MSG_BROADCAST, self.origin_z);
|
|
|
|
bossf2_timer();
|
|
|
|
BecomeExplosion ();
|
|
};
|
|
|
|
void() bossf2_delay_blowup =
|
|
{
|
|
//time to die
|
|
if (time > self.ltime)
|
|
{
|
|
self.nextthink = time + 0.1;
|
|
self.think = bossf2_blowup;
|
|
}
|
|
else
|
|
{
|
|
bossf2_create_fire(60 * (random() * 10));
|
|
bossf2_create_fire2(60 * (random() * 10));
|
|
self.nextthink = time + 1;
|
|
self.think = bossf2_delay_blowup;
|
|
}
|
|
};
|
|
|
|
void() bossf2_die1 =[ $roar01, bossf2_die2 ] {};
|
|
void() bossf2_die2 =[ $roar02, bossf2_die3 ] {};
|
|
void() bossf2_die3 =[ $roar03, bossf2_die4 ] {};
|
|
void() bossf2_die4 =[ $roar04, bossf2_die5 ] {};
|
|
void() bossf2_die5 =[ $roar05, bossf2_die6 ] {};
|
|
void() bossf2_die6 =[ $roar06, bossf2_die7 ] {};
|
|
void() bossf2_die7 =[ $roar07, bossf2_die8 ] {};
|
|
void() bossf2_die8 =[ $roar08, bossf2_die9 ] {};
|
|
void() bossf2_die9 =[ $roar09, bossf2_die10 ] {};
|
|
void() bossf2_die10 =[ $roar09, bossf2_die11 ] {};
|
|
void() bossf2_die11 =[ $roar09, bossf2_die12 ] {};
|
|
void() bossf2_die12 =[ $roar09, bossf2_die13 ] {};
|
|
void() bossf2_die13 =[ $roar09, bossf2_die14 ] {};
|
|
void() bossf2_die14 =[ $roar09, bossf2_die15 ] {};
|
|
void() bossf2_die15 =[ $roar09, bossf2_die15 ]
|
|
{
|
|
//set up angles stuff
|
|
makevectors(self.angles);
|
|
|
|
//create some explosions
|
|
create_explosion((self.origin - (v_right * 20)),0.5,0,40);
|
|
create_explosion((self.origin - (v_right * 40)),1,0,40);
|
|
create_explosion((self.origin - (v_right * 25) + '0 0 10'),1.5,0,40);
|
|
create_explosion((self.origin - (v_right * 35) + '0 0 5'),2,0,40);
|
|
create_explosion((self.origin + (v_right * 20)),0.5,0,40);
|
|
create_explosion((self.origin + (v_right * 40)),1,0,40);
|
|
create_explosion((self.origin + (v_right * 25) + '0 0 10'),1.5,0,40);
|
|
create_explosion((self.origin + (v_right * 35) + '0 0 5'),2,0,40);
|
|
create_explosion((self.origin - (v_right * 20)),2.5,0,40);
|
|
create_explosion((self.origin + (v_right * 20)),3,0,40);
|
|
create_explosion((self.origin - (v_right * 20) - '0 0 10'),3,1,40); //this is the big one
|
|
create_explosion((self.origin - (v_right * 20)),3.5,0,40);
|
|
create_explosion((self.origin - (v_right * 40)),4,0,40);
|
|
create_explosion((self.origin - (v_right * 25) + '0 0 10'),4.5,0,40);
|
|
create_explosion((self.origin - (v_right * 35) + '0 0 5'),5,0,40);
|
|
create_explosion((self.origin + (v_right * 20)),3.5,0,40);
|
|
create_explosion((self.origin + (v_right * 40)),4,0,40);
|
|
create_explosion((self.origin + (v_right * 25) + '0 0 10'),4.5,0,40);
|
|
create_explosion((self.origin + (v_right * 35) + '0 0 5'),5,0,40);
|
|
create_explosion((self.origin - (v_right * 20)),5.5,0,40);
|
|
create_explosion((self.origin + (v_right * 20)),6,0,40);
|
|
create_explosion((self.origin + (v_right * 20) - '0 0 10'),6,1,40); //this is the big one
|
|
create_explosion((self.origin - (v_right * 20)),6.5,0,40);
|
|
create_explosion((self.origin - (v_right * 40)),7,0,40);
|
|
create_explosion((self.origin - (v_right * 25) + '0 0 10'),7.5,0,40);
|
|
create_explosion((self.origin - (v_right * 35) + '0 0 5'),8,0,40);
|
|
create_explosion((self.origin + (v_right * 20)),6.5,0,40);
|
|
create_explosion((self.origin + (v_right * 40)),7,0,40);
|
|
create_explosion((self.origin + (v_right * 25) + '0 0 10'),7.5,0,40);
|
|
create_explosion((self.origin + (v_right * 35) + '0 0 5'),8,0,40);
|
|
create_explosion((self.origin - (v_right * 20)),8.5,0,40);
|
|
create_explosion((self.origin + (v_right * 20)),9,0,40);
|
|
create_explosion((self.origin - '0 0 10'),9,1,40); //this is the big one
|
|
|
|
//make firecolumns
|
|
bossf2_create_fire(160);
|
|
bossf2_create_fire2(160);
|
|
|
|
//now its time for us to blow up!
|
|
self.ltime = time + 10;
|
|
self.nextthink = time + 1;
|
|
self.think = bossf2_delay_blowup;
|
|
};
|
|
|
|
void() bossf2_die =
|
|
{
|
|
//teleport player to death area
|
|
boss_teleport(2);
|
|
|
|
//set up angles stuff
|
|
makevectors(self.angles);
|
|
|
|
//set game speed back to normal
|
|
adjust_speed(0,0);
|
|
|
|
//set gravity back to normal
|
|
adjust_gravity(0,0);
|
|
|
|
//lets teleport to center arena
|
|
boss_teleport(1);
|
|
|
|
//face the player
|
|
ai_face_player();
|
|
|
|
//this seemed important
|
|
self.solid = SOLID_NOT;
|
|
|
|
//make some noise
|
|
sound (self, CHAN_VOICE, "boss2/bf2death3.wav", 1, ATTN_NORM);
|
|
|
|
//i'm dead now
|
|
bf2_dead = 1;
|
|
|
|
//make firecolumns
|
|
bossf2_create_fire(80);
|
|
bossf2_create_fire2(80);
|
|
|
|
//go into death animation
|
|
bossf2_die1();
|
|
};
|
|
|
|
//=================================================================================================
|
|
|
|
void() bossf2_painsound =
|
|
{
|
|
if (random() <= 0.5)
|
|
sound (self, CHAN_VOICE, "boss2/bf2pain2.wav", 1, ATTN_NORM);
|
|
else
|
|
sound (self, CHAN_VOICE, "boss2/bf2pain.wav", 1, ATTN_NORM);
|
|
};
|
|
|
|
void() bossf2_attacksound =
|
|
{
|
|
if (random() <= 0.5)
|
|
sound (self, CHAN_VOICE, "boss2/bf2claw2.wav", 1, ATTN_NORM);
|
|
else
|
|
sound (self, CHAN_VOICE, "boss2/bf2claw.wav", 1, ATTN_NORM);
|
|
};
|
|
|
|
void() bossf2_tauntsound =
|
|
{
|
|
//don't always want to make this sound
|
|
if (random() <= 0.3)
|
|
sound (self, CHAN_VOICE, "boss2/bf2walk.wav", 1, ATTN_NORM);
|
|
};
|
|
|
|
void() bossf2_melee =
|
|
{
|
|
//make some noise
|
|
bossf2_attacksound();
|
|
|
|
if (random() <= 0.5)
|
|
bossf2_atakc1();
|
|
else
|
|
bossf2_atakd1();
|
|
};
|
|
|
|
void() bossf2_missile =
|
|
{
|
|
local float r;
|
|
|
|
r = random();
|
|
|
|
if (r <= 0.33)
|
|
{
|
|
sound (self, CHAN_VOICE, "boss2/bf2sight.wav", 1, ATTN_NORM);
|
|
bossf2_ataka1(); //carniv's fireball
|
|
}
|
|
else if (r <= 0.66)
|
|
bossf2_atakb1(); //torment's hellstaff
|
|
else
|
|
bossf2_jatak1(); //jump attack
|
|
};
|
|
|
|
float gravity_toggle;
|
|
|
|
void() bossf2_change_gravity =
|
|
{
|
|
local float gtime;
|
|
local entity holecheck;
|
|
|
|
//check to see if we can change gravity
|
|
if (world_gravity == 1)
|
|
return;
|
|
|
|
//set up gravity toggle
|
|
gravity_toggle = gravity_toggle + 1;
|
|
|
|
//set up gtime
|
|
gtime = 5;
|
|
|
|
//set game gravity by gravity toggle
|
|
if (gravity_toggle == 1) //normal gravity
|
|
adjust_gravity(0,gtime);
|
|
else if (gravity_toggle == 2) //almost no gravity
|
|
adjust_gravity(1,gtime);
|
|
else //super gravity
|
|
{
|
|
adjust_gravity(2,gtime);
|
|
gravity_toggle = 0;
|
|
}
|
|
|
|
//see if we need to create another black hole
|
|
holecheck = find(world, classname, "blackhole");
|
|
|
|
if (holecheck == world) //couldnt find a black hole so lets make one
|
|
{
|
|
//make sure we've waited atleast 5 seconds
|
|
if ((time - bhtime) > 5)
|
|
bossf2_create_hole();
|
|
}
|
|
};
|
|
|
|
void() bossf2_create_hole =
|
|
{
|
|
local entity telespot;
|
|
|
|
//find the center of the arena
|
|
telespot = find(world, targetname, "centerarena");
|
|
|
|
//create the black hole here, but up in the air some
|
|
create_black_hole(telespot.origin + '0 0 224');
|
|
};
|
|
|
|
//=================================================================================================
|
|
|
|
/*EWED monster_bossf2 (1 0 0) (-16 -16 -24) (16 16 40) Ambush
|
|
*/
|
|
void() monster_bossf2 =
|
|
{
|
|
if (deathmatch)
|
|
{
|
|
remove(self);
|
|
return;
|
|
}
|
|
|
|
//boss form2 precaches
|
|
precache_model ("models/enemies/bossform2.md2");
|
|
precache_model ("models/enemies/demonorb.md2");
|
|
precache_model ("models/weapons/gfx/fireball.mdl");
|
|
precache_model ("progs/flame2.mdl");
|
|
|
|
//boss form2 sound precaches
|
|
precache_sound ("weapons/demon/firehit.wav");
|
|
precache_sound ("weapons/demon/hellstafffire.wav");
|
|
precache_sound ("weapons/lock4.wav"); //used for missile touch function
|
|
|
|
precache_sound ("boss2/bf2claw2.wav");
|
|
precache_sound ("boss2/bf2claw.wav");
|
|
precache_sound ("boss2/bf2death3.wav");
|
|
precache_sound ("boss2/bf2pain2.wav");
|
|
precache_sound ("boss2/bf2pain.wav");
|
|
precache_sound ("boss2/bf2roar.wav");
|
|
precache_sound ("boss2/bf2sight.wav");
|
|
precache_sound ("boss2/bf2sightslow.wav");
|
|
precache_sound ("boss2/bf2walk.wav");
|
|
precache_sound ("weapons/lstart.wav");
|
|
|
|
self.solid = SOLID_SLIDEBOX;
|
|
self.movetype = MOVETYPE_STEP;
|
|
|
|
setmodel (self, "models/enemies/bossform2.md2");
|
|
|
|
setsize (self, '-16 -16 -24', '16 16 40');
|
|
// setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
|
|
self.health = set_health(2000);
|
|
self.speed = set_speed(500);
|
|
self.dtype = 0; //sidestep baby!
|
|
entered = 0; //we haven't entered yet
|
|
bf2_dead = 0; //not dead yet
|
|
|
|
self.th_stand = bossf2_stand1;
|
|
self.th_walk = bossf2_walk1;
|
|
self.th_run = bossf2_run1;
|
|
self.th_melee = bossf2_melee;
|
|
self.th_missile = bossf2_missile;
|
|
self.th_pain = bossf2_pain;
|
|
self.th_die = bossf2_die;
|
|
|
|
//my new classname is?
|
|
self.classname = "monster_bossf2";
|
|
|
|
//set up our monflag
|
|
self.monflag = "TRUE";
|
|
|
|
walkmonster_start ();
|
|
};
|
|
|
|
/*
|
|
=================
|
|
create_bossf2bot
|
|
|
|
Creates a monster_bossf2 at the specified spot.
|
|
This is used for bringing in boss form 2 after boss form 1 dies.
|
|
=================
|
|
*/
|
|
void() create_bossf2bot =
|
|
{
|
|
local entity bot;
|
|
|
|
// start entity and place it in world
|
|
bot = spawn();
|
|
bot.angles = self.angles;
|
|
setorigin (bot, self.origin);
|
|
bot.fixangle = TRUE;
|
|
spawn_tfog (bot.origin);
|
|
spawn_tdeath (bot.origin, bot);
|
|
|
|
// set size and shape
|
|
bot.solid = SOLID_SLIDEBOX;
|
|
bot.movetype = MOVETYPE_STEP;
|
|
setmodel (bot, "models/enemies/bossform2.md2");
|
|
setsize (bot, '-16 -16 -24', '16 16 40');
|
|
bot.flags = bot.flags | FL_MONSTER;
|
|
bot.takedamage = DAMAGE_AIM;
|
|
|
|
// define his animation
|
|
bot.th_stand = bossf2_stand1;
|
|
bot.th_walk = bossf2_walk1;
|
|
bot.th_run = bossf2_run1;
|
|
bot.th_die = bossf2_die;
|
|
bot.th_melee = bossf2_melee;
|
|
bot.th_missile = bossf2_missile;
|
|
bot.th_pain = bossf2_pain;
|
|
bot.health = set_health(2000);
|
|
bot.speed = set_speed(500);
|
|
bot.dtype = 0; //sidestep baby!
|
|
entered = 0; //we havent made our grand entrance yet!
|
|
bf2_dead = 0; //not dead yet
|
|
|
|
// polish him up
|
|
bot.classname = "monster_bossf2";
|
|
bot.ideal_yaw = bot.angles * '0 1 0';
|
|
bot.yaw_speed = 120;
|
|
bot.view_ofs = '0 0 22';
|
|
|
|
//set up our monflag
|
|
bot.monflag = "TRUE";
|
|
|
|
// begin his thinking
|
|
bot.nextthink = time + 0.1 + random();
|
|
bot.think = bossf2_roara1;
|
|
|
|
// get rid of the placeholder
|
|
remove(self);
|
|
|
|
};
|
|
|
|
/*
|
|
=================
|
|
delay_bossf2bot
|
|
|
|
Creates a monster_bossf2 at the specified spot after a certain amount of time has passed.
|
|
|
|
vector spot: spot to create bossf2bot at
|
|
float x: amount of time in seconds to wait before creating bot
|
|
=================
|
|
*/
|
|
|
|
void(vector spot, float x) delay_bossf2bot =
|
|
{
|
|
local entity placeholder;
|
|
|
|
// start entity and place it in world
|
|
placeholder = spawn();
|
|
setorigin (placeholder, spot);
|
|
|
|
// set size and shape
|
|
placeholder.solid = SOLID_SLIDEBOX;
|
|
setmodel (placeholder, "");
|
|
setsize (placeholder, '-8 -8 -12', '8 8 20');
|
|
placeholder.nextthink = time + x;
|
|
placeholder.think = create_bossf2bot;
|
|
};
|
|
|