/* ============================================================================== Boss Form 1 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 atakc01 atakc02 atakc03 atakc04 atakc05 atakc06 atakc07 atakc08 atakc09 atakc10 $frame atakc11 atakc12 $frame block01 $frame cataka01 cataka02 cataka03 cataka04 cataka05 cataka06 cataka07 cataka08 cataka09 cataka10 $frame cataka11 cataka12 $frame catakb01 catakb02 catakb03 catakb04 catakb05 catakb06 catakb07 catakb08 catakb09 catakb10 $frame cblock01 $frame cpain01 $frame cwalk01 cwalk02 cwalk03 cwalk04 cwalk05 cwalk06 cwalk07 cwalk08 cwalk09 cwalk10 $frame cwalk11 cwalk12 $frame crouch01 crouch02 crouch03 crouch04 crouch05 crouch06 crouch07 crouch08 crouch09 crouch10 $frame crouch11 crouch12 $frame deatha01 deatha02 deatha03 deatha04 deatha05 deatha06 deatha07 deatha08 deatha09 deatha10 $frame deatha11 deatha12 deatha13 deatha14 deatha15 deatha16 deatha17 deatha18 deatha19 deatha20 $frame jump01 $frame jumpb01 jumpb02 jumpb03 jumpb04 jumpb05 jumpb06 jumpb07 jumpb08 jumpb09 jumpb10 $frame jumpb11 $frame land01 $frame painh01 $frame painl01 $frame painlg01 $frame painr01 $frame run01 run02 run03 run04 run05 run06 run07 run08 run09 run10 $frame search01 $frame standa01 standa02 standa03 standa04 standa05 standa06 standa07 standa08 standa09 standa10 $frame standa11 standa12 $frame standb01 standb02 standb03 standb04 standb05 standb06 standb07 standb08 standb09 standb10 $frame standb11 standb12 $frame use01 $frame walka01 walka02 walka03 walka04 walka05 walka06 walka07 walka08 walka09 walka10 $frame walka11 walka12 $frame walkb01 walkb02 walkb03 walkb04 walkb05 walkb06 walkb07 walkb08 walkb09 walkb10 $frame walkb11 walkb12 void() bossf1_stand; void() bossf1_walk; void() bossf1_run1; void() bossf1_run; void() bossf1_crouch1; void() boss_change_speed; void() bossf1_painsound; void() bossf1_tauntsound; void(vector spot) create_bossf1bot; void(vector spot, float x) delay_bossf2bot; void() bossf1_cwalk1; //================================================================================================= /* ========================== Abilities Code ========================== */ void() CastLightning = { local vector org, dir; self.effects = self.effects | EF_MUZZLEFLASH; ai_face (); //take some ammo away from bots if (self.classname == "xsniperbot") { //take ammo based on wmode if (self.wmode == 1) self.currentammo = self.ammo_mana_green = self.ammo_mana_green - 1; else self.currentammo = self.ammo_mana_green = self.ammo_mana_green - 10; } org = self.origin + '0 0 10'; dir = self.enemy.origin + '0 0 16' - org; dir = normalize (dir); traceline (org, self.origin + dir*600, TRUE, self); WriteByte (MSG_BROADCAST, SVC_TEMPENTITY); if (self.classname != "xsniperbot") WriteByte (MSG_BROADCAST, TE_LIGHTNING1); else WriteByte (MSG_BROADCAST, TE_LIGHTNING2); WriteEntity (MSG_BROADCAST, self); WriteCoord (MSG_BROADCAST, org_x); WriteCoord (MSG_BROADCAST, org_y); WriteCoord (MSG_BROADCAST, org_z); WriteCoord (MSG_BROADCAST, trace_endpos_x); WriteCoord (MSG_BROADCAST, trace_endpos_y); WriteCoord (MSG_BROADCAST, trace_endpos_z); if (self.classname != "xsniperbot") LightningDamage (org, trace_endpos, self, 6); else { if (self.wmode == 2) LightningArcDamage2 (org, trace_endpos + v_forward*4, self, 55); else LightningDamage (org, trace_endpos, self, 45); } //knock the enemy back //self.enemy.velocity = dir * 600; }; /* ==================== bossf1_check_summon Check to see if we can summon float stype: summon type 0: left 1: right ==================== */ float(float stype) bossf1_check_summon = { return monster_check_teleport(stype); }; /* ==================== bossf1_summon The first Boss Form will summon shadow clones ==================== */ void() bossf1_summon = { //don't summon anymore clones if we are over the maximum allowed clones if (num_clones >= 3) return; //set up angles stuff self.v_angle = self.angles; makevectors (self.angles); //create him where we were earlier create_bossf1bot(self.oldorigin); }; //================================================================================================= /* ========================== Animation Frames ========================== */ void() bossf1_standa1 =[ $standa01, bossf1_standa2 ] {ai_stand();ai_face_player();}; void() bossf1_standa2 =[ $standa02, bossf1_standa3 ] {ai_stand();ai_face_player();}; void() bossf1_standa3 =[ $standa03, bossf1_standa4 ] {ai_stand();ai_face_player();}; void() bossf1_standa4 =[ $standa04, bossf1_standa5 ] {ai_stand();ai_face_player();}; void() bossf1_standa5 =[ $standa05, bossf1_standa6 ] {ai_stand();ai_face_player();}; void() bossf1_standa6 =[ $standa06, bossf1_standa7 ] {ai_stand();ai_face_player();}; void() bossf1_standa7 =[ $standa07, bossf1_standa8 ] {ai_stand();ai_face_player();}; void() bossf1_standa8 =[ $standa08, bossf1_standa9 ] {ai_stand();ai_face_player();}; void() bossf1_standa9 =[ $standa09, bossf1_standa10 ] {ai_stand();ai_face_player();}; void() bossf1_standa10 =[ $standa10, bossf1_standa11 ] {ai_stand();ai_face_player();}; void() bossf1_standa11 =[ $standa11, bossf1_standa12 ] {ai_stand();ai_face_player();}; void() bossf1_standa12 =[ $standa12, bossf1_stand ] {ai_stand();ai_face_player();}; //================================================================================================= void() bossf1_standb1 =[ $standb01, bossf1_standb2 ] {ai_stand();ai_face_player();}; void() bossf1_standb2 =[ $standb02, bossf1_standb3 ] {ai_stand();ai_face_player();}; void() bossf1_standb3 =[ $standb03, bossf1_standb4 ] {ai_stand();ai_face_player();}; void() bossf1_standb4 =[ $standb04, bossf1_standb5 ] {ai_stand();ai_face_player();}; void() bossf1_standb5 =[ $standb05, bossf1_standb6 ] {ai_stand();ai_face_player();}; void() bossf1_standb6 =[ $standb06, bossf1_standb7 ] {ai_stand();ai_face_player();}; void() bossf1_standb7 =[ $standb07, bossf1_standb8 ] {ai_stand();ai_face_player();}; void() bossf1_standb8 =[ $standb08, bossf1_standb9 ] {ai_stand();ai_face_player();}; void() bossf1_standb9 =[ $standb09, bossf1_standb10 ] {ai_stand();ai_face_player();}; void() bossf1_standb10 =[ $standb10, bossf1_standb11 ] {ai_stand();ai_face_player();}; void() bossf1_standb11 =[ $standb11, bossf1_standb12 ] {ai_stand();ai_face_player();}; void() bossf1_standb12 =[ $standb12, bossf1_stand ] {ai_stand();ai_face_player();}; void() bossf1_stand = { //make some noise bossf1_tauntsound(); //check our health, if we are hurt badly then crouch instead if (self.health <= 200 && self.classname != "monster_shadowclone") bossf1_crouch1(); else { if (random() <= 0.5) bossf1_standa1(); else bossf1_standb1(); } }; //================================================================================================= void() bossf1_walka1 =[ $walka01, bossf1_walka2 ] {ai_walk(10);}; void() bossf1_walka2 =[ $walka02, bossf1_walka3 ] {ai_walk(8);}; void() bossf1_walka3 =[ $walka03, bossf1_walka4 ] {ai_walk(6);}; void() bossf1_walka4 =[ $walka04, bossf1_walka5 ] {ai_walk(5);}; void() bossf1_walka5 =[ $walka05, bossf1_walka6 ] {ai_walk(10);}; void() bossf1_walka6 =[ $walka06, bossf1_walka7 ] {ai_walk(8);}; void() bossf1_walka7 =[ $walka07, bossf1_walka8 ] {ai_walk(6);}; void() bossf1_walka8 =[ $walka08, bossf1_walka9 ] {ai_walk(5);}; void() bossf1_walka9 =[ $walka09, bossf1_walka10 ] {ai_walk(10);}; void() bossf1_walka10 =[ $walka10, bossf1_walka11 ] {ai_walk(8);}; void() bossf1_walka11 =[ $walka11, bossf1_walka12 ] {ai_walk(6);}; void() bossf1_walka12 =[ $walka12, bossf1_walk ] {ai_walk(5);}; //================================================================================================= void() bossf1_walkb1 =[ $walkb01, bossf1_walkb2 ] {ai_walk(10);}; void() bossf1_walkb2 =[ $walkb02, bossf1_walkb3 ] {ai_walk(8);}; void() bossf1_walkb3 =[ $walkb03, bossf1_walkb4 ] {ai_walk(6);}; void() bossf1_walkb4 =[ $walkb04, bossf1_walkb5 ] {ai_walk(5);}; void() bossf1_walkb5 =[ $walkb05, bossf1_walkb6 ] {ai_walk(10);}; void() bossf1_walkb6 =[ $walkb06, bossf1_walkb7 ] {ai_walk(8);}; void() bossf1_walkb7 =[ $walkb07, bossf1_walkb8 ] {ai_walk(6);}; void() bossf1_walkb8 =[ $walkb08, bossf1_walkb9 ] {ai_walk(5);}; void() bossf1_walkb9 =[ $walkb09, bossf1_walkb10 ] {ai_walk(10);}; void() bossf1_walkb10 =[ $walkb10, bossf1_walkb11 ] {ai_walk(8);}; void() bossf1_walkb11 =[ $walkb11, bossf1_walkb12 ] {ai_walk(6);}; void() bossf1_walkb12 =[ $walkb12, bossf1_walk ] {ai_walk(5);}; void() bossf1_walk = { //make some noise bossf1_tauntsound(); //check our health, if we are hurt badly then crouch instead if (self.health <= 200 && self.classname != "monster_shadowclone") bossf1_cwalk1(); else { if (random() <= 0.5) bossf1_walka1(); else bossf1_walkb1(); } }; //================================================================================================= void() bossf1_run1 =[ $run01, bossf1_run2 ] { ai_face(); ai_run(20); }; void() bossf1_run2 =[ $run02, bossf1_run3 ] {ai_run(16);}; void() bossf1_run3 =[ $run03, bossf1_run4 ] {ai_run(12);}; void() bossf1_run4 =[ $run04, bossf1_run5 ] {ai_run(10);}; void() bossf1_run5 =[ $run05, bossf1_run6 ] {ai_run(20);}; void() bossf1_run6 =[ $run06, bossf1_run7 ] {ai_run(16);}; void() bossf1_run7 =[ $run07, bossf1_run8 ] {ai_run(12);}; void() bossf1_run8 =[ $run08, bossf1_run9 ] {ai_run(10);}; void() bossf1_run9 =[ $run09, bossf1_run10 ] {ai_run(20);}; void() bossf1_run10 =[ $run10, bossf1_run ] {ai_run(16);}; //================================================================================================= /* ========================== Missile Attacks ========================== */ //apprentice and necro's skull attack void() bossf1_ataka1 =[ $ataka01, bossf1_ataka2 ] { ai_face(); Apprent_StartMissile(1); }; void() bossf1_ataka2 =[ $ataka02, bossf1_ataka3 ] {ai_face();}; void() bossf1_ataka3 =[ $ataka03, bossf1_ataka4 ] {ai_face();}; void() bossf1_ataka4 =[ $ataka04, bossf1_ataka5 ] {ai_face();}; void() bossf1_ataka5 =[ $ataka05, bossf1_ataka6 ] {ai_face();}; void() bossf1_ataka6 =[ $ataka06, bossf1_ataka7 ] {ai_face();}; void() bossf1_ataka7 =[ $ataka07, bossf1_ataka8 ] {ai_face();}; void() bossf1_ataka8 =[ $ataka08, bossf1_ataka9 ] {ai_face();}; void() bossf1_ataka9 =[ $ataka09, bossf1_ataka10 ] {ai_face();}; void() bossf1_ataka10 =[ $ataka10, bossf1_ataka11 ] {ai_face();}; void() bossf1_ataka11 =[ $ataka11, bossf1_ataka12 ] {ai_face();}; void() bossf1_ataka12 =[ $ataka12, bossf1_run ] {ai_face();}; //================================================================================================= //casts lightning from his hand at the player void() bossf1_use1 =[ $use01, bossf1_use2 ] { ai_face(); sound (self, CHAN_WEAPON, "weapons/holy/lightarc.wav", 1, ATTN_NORM); CastLightning(); }; void() bossf1_use2 =[ $use01, bossf1_use3 ] {ai_face();CastLightning();}; void() bossf1_use3 =[ $use01, bossf1_run ] {ai_face();CastLightning();}; //================================================================================================= /* ========================== Melee Attacks ========================== */ void() bossf1_atakb1 =[ $ataka01, bossf1_atakb2 ] {ai_face();ai_charge(30);}; void() bossf1_atakb2 =[ $ataka02, bossf1_atakb3 ] {ai_charge(26);ai_melee();}; void() bossf1_atakb3 =[ $ataka03, bossf1_atakb4 ] {ai_charge(22);ai_melee();}; void() bossf1_atakb4 =[ $ataka04, bossf1_atakb5 ] {ai_charge(20);ai_melee();}; void() bossf1_atakb5 =[ $ataka05, bossf1_atakb6 ] {ai_charge(30);ai_melee();}; void() bossf1_atakb6 =[ $ataka06, bossf1_atakb7 ] {ai_charge(26);ai_melee();}; void() bossf1_atakb7 =[ $ataka07, bossf1_atakb8 ] {}; void() bossf1_atakb8 =[ $ataka08, bossf1_atakb9 ] {}; void() bossf1_atakb9 =[ $ataka09, bossf1_atakb10 ] {}; void() bossf1_atakb10 =[ $ataka10, bossf1_atakb11 ] {}; void() bossf1_atakb11 =[ $ataka11, bossf1_atakb12 ] {}; void() bossf1_atakb12 =[ $ataka12, bossf1_run ] {}; //================================================================================================= void() bossf1_atakc1 =[ $atakb01, bossf1_atakc2 ] {ai_face();ai_charge(30);}; void() bossf1_atakc2 =[ $atakb02, bossf1_atakc3 ] {ai_charge(26);}; void() bossf1_atakc3 =[ $atakb03, bossf1_atakc4 ] {ai_charge(22);ai_melee();}; void() bossf1_atakc4 =[ $atakb04, bossf1_atakc5 ] {ai_charge(20);ai_melee();}; void() bossf1_atakc5 =[ $atakb05, bossf1_atakc6 ] {ai_charge(30);ai_melee();}; void() bossf1_atakc6 =[ $atakb06, bossf1_atakc7 ] {ai_charge(26);ai_melee();}; void() bossf1_atakc7 =[ $atakb07, bossf1_atakc8 ] {}; void() bossf1_atakc8 =[ $atakb08, bossf1_atakc9 ] {}; void() bossf1_atakc9 =[ $atakb09, bossf1_atakc10 ] {}; void() bossf1_atakc10 =[ $atakb10, bossf1_run ] {}; //================================================================================================= /* ========================== Crouching When Hurt Badly ========================== */ //don't want to go into pain frame while flipping, just doesnt look right float flipping; //0 means I'm not flipping, 1 means I am. void() bossf1_flipa1 =[ $jumpb01, bossf1_flipa2 ] { //hey I'm flipping! flipping = 1; sound (self, CHAN_VOICE, "boss1/bf1jumpback.wav", 1, ATTN_NORM); ai_face(); }; void() bossf1_flipa2 =[ $jumpb02, bossf1_flipa3 ] {ai_back(10);}; void() bossf1_flipa3 =[ $jumpb03, bossf1_flipa4 ] {ai_back(8);}; void() bossf1_flipa4 =[ $jumpb04, bossf1_flipa5 ] {ai_back(6);}; void() bossf1_flipa5 =[ $jumpb05, bossf1_flipa6 ] {ai_back(10);}; void() bossf1_flipa6 =[ $jumpb06, bossf1_flipa7 ] {ai_back(8);}; void() bossf1_flipa7 =[ $jumpb07, bossf1_flipa8 ] {ai_back(6);}; void() bossf1_flipa8 =[ $jumpb08, bossf1_flipa9 ] {ai_back(10);}; void() bossf1_flipa9 =[ $jumpb09, bossf1_flipa10 ] {ai_back(8);}; void() bossf1_flipa10 =[ $jumpb10, bossf1_flipa11 ] {ai_back(6);}; void() bossf1_flipa11 =[ $jumpb11, bossf1_flipa12 ] {ai_back(10);}; void() bossf1_flipa12 =[ $land01, bossf1_flipa13 ] {}; void() bossf1_flipa13 =[ $land01, bossf1_flipa14 ] {}; void() bossf1_flipa14 =[ $land01, bossf1_flipa15 ] {}; void() bossf1_flipa15 =[ $land01, bossf1_run ] { //ok not flipping anymore flipping = 0; //set game speed at random sound (self, CHAN_VOICE, "artifact/power.wav", 1, ATTN_NORM); boss_change_speed(); }; //================================================================================================= void() bossf1_crouch1 =[ $crouch01, bossf1_crouch2 ] {ai_stand();}; void() bossf1_crouch2 =[ $crouch02, bossf1_crouch3 ] {ai_stand();}; void() bossf1_crouch3 =[ $crouch03, bossf1_crouch4 ] {ai_stand();}; void() bossf1_crouch4 =[ $crouch04, bossf1_crouch5 ] {ai_stand();}; void() bossf1_crouch5 =[ $crouch05, bossf1_crouch6 ] {ai_stand();}; void() bossf1_crouch6 =[ $crouch06, bossf1_crouch7 ] {ai_stand();}; void() bossf1_crouch7 =[ $crouch07, bossf1_crouch8 ] {ai_stand();}; void() bossf1_crouch8 =[ $crouch08, bossf1_crouch9 ] {ai_stand();}; void() bossf1_crouch9 =[ $crouch09, bossf1_crouch10 ] {ai_stand();}; void() bossf1_crouch10 =[ $crouch10, bossf1_crouch11 ] {ai_stand();}; void() bossf1_crouch11 =[ $crouch11, bossf1_crouch12 ] {ai_stand();}; void() bossf1_crouch12 =[ $crouch12, bossf1_stand ] {ai_stand();}; //================================================================================================= void() bossf1_cwalk1 =[ $cwalk01, bossf1_cwalk2 ] {ai_walk(5);}; void() bossf1_cwalk2 =[ $cwalk02, bossf1_cwalk3 ] {ai_walk(4);}; void() bossf1_cwalk3 =[ $cwalk03, bossf1_cwalk4 ] {ai_walk(3);}; void() bossf1_cwalk4 =[ $cwalk04, bossf1_cwalk5 ] {ai_walk(2);}; void() bossf1_cwalk5 =[ $cwalk05, bossf1_cwalk6 ] {ai_walk(5);}; void() bossf1_cwalk6 =[ $cwalk06, bossf1_cwalk7 ] {ai_walk(4);}; void() bossf1_cwalk7 =[ $cwalk07, bossf1_cwalk8 ] {ai_walk(3);}; void() bossf1_cwalk8 =[ $cwalk08, bossf1_cwalk9 ] {ai_walk(2);}; void() bossf1_cwalk9 =[ $cwalk09, bossf1_cwalk10 ] {ai_walk(5);}; void() bossf1_cwalk10 =[ $cwalk10, bossf1_cwalk11 ] {ai_walk(4);}; void() bossf1_cwalk11 =[ $cwalk11, bossf1_cwalk12 ] {ai_walk(3);}; void() bossf1_cwalk12 =[ $cwalk12, bossf1_walk ] {ai_walk(2);}; //================================================================================================= void() bossf1_crun1 =[ $cwalk01, bossf1_crun2 ] {ai_run(10);}; void() bossf1_crun2 =[ $cwalk02, bossf1_crun3 ] {ai_run(8);}; void() bossf1_crun3 =[ $cwalk03, bossf1_crun4 ] {ai_run(6);}; void() bossf1_crun4 =[ $cwalk04, bossf1_crun5 ] {ai_run(5);}; void() bossf1_crun5 =[ $cwalk05, bossf1_crun6 ] {ai_run(10);}; void() bossf1_crun6 =[ $cwalk06, bossf1_crun7 ] {ai_run(8);}; void() bossf1_crun7 =[ $cwalk07, bossf1_crun8 ] {ai_run(6);}; void() bossf1_crun8 =[ $cwalk08, bossf1_crun9 ] {ai_run(5);}; void() bossf1_crun9 =[ $cwalk09, bossf1_crun10 ] {ai_run(10);}; void() bossf1_crun10 =[ $cwalk10, bossf1_crun11 ] {ai_run(8);}; void() bossf1_crun11 =[ $cwalk11, bossf1_crun12 ] {ai_run(6);}; void() bossf1_crun12 =[ $cwalk12, bossf1_run ] {ai_run(5);}; float hurtbad; void() bossf1_run = { //make some noise bossf1_tauntsound(); //check our health, if we are hurt badly then crouch instead if (self.health <= 200 && self.classname != "monster_shadowclone") { if (hurtbad == 0) { bossf1_flipa1(); hurtbad = 1; } else bossf1_crun1(); } else bossf1_run1(); }; //================================================================================================= void() bossf1_cataka1 =[ $cataka01, bossf1_cataka2 ] {ai_face();ai_charge(30);}; void() bossf1_cataka2 =[ $cataka02, bossf1_cataka3 ] {ai_charge(26);ai_melee();}; void() bossf1_cataka3 =[ $cataka03, bossf1_cataka4 ] {ai_charge(22);ai_melee();}; void() bossf1_cataka4 =[ $cataka04, bossf1_cataka5 ] {ai_charge(20);ai_melee();}; void() bossf1_cataka5 =[ $cataka05, bossf1_cataka6 ] {ai_charge(30);ai_melee();}; void() bossf1_cataka6 =[ $cataka06, bossf1_cataka7 ] {ai_charge(26);ai_melee();}; void() bossf1_cataka7 =[ $cataka07, bossf1_cataka8 ] {}; void() bossf1_cataka8 =[ $cataka08, bossf1_cataka9 ] {}; void() bossf1_cataka9 =[ $cataka09, bossf1_cataka10 ] {}; void() bossf1_cataka10 =[ $cataka10, bossf1_cataka11 ] {}; void() bossf1_cataka11 =[ $cataka11, bossf1_cataka12 ] {}; void() bossf1_cataka12 =[ $cataka12, bossf1_run ] {}; //================================================================================================= void() bossf1_catakb1 =[ $catakb01, bossf1_catakb2 ] {ai_face();ai_charge(30);}; void() bossf1_catakb2 =[ $catakb02, bossf1_catakb3 ] {ai_charge(26);}; void() bossf1_catakb3 =[ $catakb03, bossf1_catakb4 ] {ai_charge(22);ai_melee();}; void() bossf1_catakb4 =[ $catakb04, bossf1_catakb5 ] {ai_charge(20);ai_melee();}; void() bossf1_catakb5 =[ $catakb05, bossf1_catakb6 ] {ai_charge(30);ai_melee();}; void() bossf1_catakb6 =[ $catakb06, bossf1_catakb7 ] {ai_charge(26);ai_melee();}; void() bossf1_catakb7 =[ $catakb07, bossf1_catakb8 ] {}; void() bossf1_catakb8 =[ $catakb08, bossf1_catakb9 ] {}; void() bossf1_catakb9 =[ $catakb09, bossf1_catakb10 ] {}; void() bossf1_catakb10 =[ $catakb10, bossf1_run ] {}; //================================================================================================= /* ========================================= Backflip Dodging and Time Alteration ========================================= */ void() bossf1_flipb1 =[ $jumpb01, bossf1_flipb2 ] { //hey I'm flipping! flipping = 1; sound (self, CHAN_VOICE, "boss1/bf1jumpback.wav", 1, ATTN_NORM); ai_face(); }; void() bossf1_flipb2 =[ $jumpb02, bossf1_flipb3 ] {ai_back(10);}; void() bossf1_flipb3 =[ $jumpb03, bossf1_flipb4 ] {ai_back(8);}; void() bossf1_flipb4 =[ $jumpb04, bossf1_flipb5 ] {ai_back(6);}; void() bossf1_flipb5 =[ $jumpb05, bossf1_flipb6 ] {ai_back(10);}; void() bossf1_flipb6 =[ $jumpb06, bossf1_flipb7 ] {ai_back(8);}; void() bossf1_flipb7 =[ $jumpb07, bossf1_flipb8 ] {ai_back(6);}; void() bossf1_flipb8 =[ $jumpb08, bossf1_flipb9 ] {ai_back(10);}; void() bossf1_flipb9 =[ $jumpb09, bossf1_flipb10 ] {ai_back(8);}; void() bossf1_flipb10 =[ $jumpb10, bossf1_flipb11 ] {ai_back(6);}; void() bossf1_flipb11 =[ $jumpb11, bossf1_flipb12 ] {ai_back(10);}; void() bossf1_flipb12 =[ $land01, bossf1_flipb13 ] { //lets teleport right here boss_teleport(0); }; void() bossf1_flipb13 =[ $land01, bossf1_flipb14 ] {}; void() bossf1_flipb14 =[ $land01, bossf1_flipb15 ] {}; void() bossf1_flipb15 =[ $land01, bossf1_run ] { //ok not flipping anymore flipping = 0; //set game speed at random sound (self, CHAN_VOICE, "artifact/power.wav", 1, ATTN_NORM); boss_change_speed(); }; //================================================================================================= /* ========================================= Summoning Shadow Clones ========================================= */ void() bossf1_atakd1 =[ $atakc01, bossf1_atakd2 ] { ai_face(); //set our old origin equal to our current one self.oldorigin = self.origin; //teleport boss_teleport(0); }; void() bossf1_atakd2 =[ $atakc02, bossf1_atakd3 ] {ai_face();}; void() bossf1_atakd3 =[ $atakc03, bossf1_atakd4 ] {ai_face();}; void() bossf1_atakd4 =[ $atakc04, bossf1_atakd5 ] {ai_face();}; void() bossf1_atakd5 =[ $atakc05, bossf1_atakd6 ] {ai_face();}; void() bossf1_atakd6 =[ $atakc06, bossf1_atakd7 ] {ai_face();}; void() bossf1_atakd7 =[ $atakc07, bossf1_atakd8 ] {ai_face();}; void() bossf1_atakd8 =[ $atakc08, bossf1_atakd9 ] {ai_face();bossf1_summon();}; void() bossf1_atakd9 =[ $atakc09, bossf1_atakd10 ] {ai_face();}; void() bossf1_atakd10 =[ $atakc10, bossf1_atakd11 ] {ai_face();}; void() bossf1_atakd11 =[ $atakc11, bossf1_atakd12 ] {ai_face();}; void() bossf1_atakd12 =[ $atakc12, bossf1_run ] {ai_face();}; //================================================================================================= /* ========================================= Blocking - commented out for now ========================================= void() bossf1_block1 =[ $block01, bossf1_run ] {ai_face();}; void() bossf1_cblock1 =[ $cblock01, bossf1_run ] {ai_face();}; void() bossf1_block = { }; */ //================================================================================================= void() bossf1_paina1 =[ $painh01, bossf1_run ] {}; void() bossf1_painb1 =[ $painl01, bossf1_run ] {}; void() bossf1_painc1 =[ $painlg01, bossf1_run ] {}; void() bossf1_paind1 =[ $painr01, bossf1_run ] {}; void(entity attacker, float damage) bossf1_pain = { local float r; r = random(); //don't want to go into pain frame while flipping, just doesnt look right if (flipping == 1) return; if (self.pain_finished > time) return; self.pain_finished = time + 0.1; //make some noise bossf1_painsound(); //select pain frame at random if (r <= 0.25) bossf1_paina1(); else if (r <= 0.5) bossf1_painb1(); else if (r <= 0.75) bossf1_painc1(); else bossf1_paind1(); }; //================================================================================================= void() bossf1_blowup = { /* local entity telespot; //search for center of the arena telespot = find(world, targetname, "centerarena"); //spawn bf2 in the center if(telespot.targetname == "centerarena") create_bossf2bot(telespot.origin); */ //Create Boss Form 2 after 1.5 seconds delay_bossf2bot(self.origin,1.5); 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); BecomeExplosion (); }; void() bossf1_deathfinished = { //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 - '0 0 10'),3,1,40); //this is the big one create_explosion((self.origin - (v_right * 20)),2.5,0,40); create_explosion((self.origin + (v_right * 20)),3,0,40); //now its time for us to blow up! self.nextthink = time + 2.9; self.think = bossf1_blowup; }; void() bossf1_die1 =[ $deatha01, bossf1_die2 ] {}; void() bossf1_die2 =[ $deatha02, bossf1_die3 ] {}; void() bossf1_die3 =[ $deatha03, bossf1_die4 ] {}; void() bossf1_die4 =[ $deatha04, bossf1_die5 ] {}; void() bossf1_die5 =[ $deatha05, bossf1_die6 ] {}; void() bossf1_die6 =[ $deatha06, bossf1_die7 ] {}; void() bossf1_die7 =[ $deatha07, bossf1_die8 ] {}; void() bossf1_die8 =[ $deatha08, bossf1_die9 ] {}; void() bossf1_die9 =[ $deatha09, bossf1_die10 ] {}; void() bossf1_die10 =[ $deatha10, bossf1_die11 ] {}; void() bossf1_die11 =[ $deatha11, bossf1_die12 ] {}; void() bossf1_die12 =[ $deatha12, bossf1_die13 ] {}; void() bossf1_die13 =[ $deatha13, bossf1_die14 ] {}; void() bossf1_die14 =[ $deatha14, bossf1_die14 ] { //create bf2 bot at centerarena bossf1_deathfinished(); }; void() bossf1_die15 =[ $deatha15, bossf1_die16 ] {}; void() bossf1_die16 =[ $deatha16, bossf1_die17 ] {}; void() bossf1_die17 =[ $deatha17, bossf1_die18 ] {}; void() bossf1_die18 =[ $deatha18, bossf1_die19 ] {}; void() bossf1_die19 =[ $deatha19, bossf1_die20 ] {}; void() bossf1_die20 =[ $deatha20, bossf1_die20 ] {}; void() bossf1_die = { //teleport player to death area boss_teleport(2); //set game speed back to normal adjust_speed(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, "boss1/bf1die2.wav", 1, ATTN_NORM); //kill the clones bf1_dead = 1; //go into death animation bossf1_die1(); }; //================================================================================================= void() bossf1_painsound = { if (random() <= 0.5) sound (self, CHAN_VOICE, "boss1/bf1hit1.wav", 1, ATTN_NORM); else sound (self, CHAN_VOICE, "boss1/bf1hit2.wav", 1, ATTN_NORM); }; void() bossf1_attacksound = { if (random() <= 0.5) sound (self, CHAN_VOICE, "boss1/bf1die3.wav", 1, ATTN_NORM); else sound (self, CHAN_VOICE, "boss1/bf1hit3.wav", 1, ATTN_NORM); }; void() bossf1_tauntsound = { //don't always want to make this sound if (random() <= 0.3) { if (random() <= 0.5) sound (self, CHAN_VOICE, "boss1/bf1laugh1.wav", 1, ATTN_NORM); else sound (self, CHAN_VOICE, "boss1/bf1laugh2.wav", 1, ATTN_NORM); } }; float speed_toggle; void() boss_change_speed = { local float stime; //check to see if we can change speed if (world_speed == 1) return; //set up speed toggle speed_toggle = speed_toggle + 1; //set game speed by speed toggle if (speed_toggle == 1) //normal speed { //set up stime stime = 3; adjust_speed(0,stime); gamespeed = 0; } else if (speed_toggle == 2) //double speed { //set up stime stime = 6; adjust_speed(1,stime); gamespeed = 1; } else //slow motion { //set up stime stime = 1.5; adjust_speed(3,stime); gamespeed = 3; speed_toggle = 0; } }; void() bossf1_melee = { //make some noise bossf1_attacksound(); //check our health, if we are hurt badly then use crouch attacks if (self.health <= 200) { if (random() <= 0.5) bossf1_cataka1(); else bossf1_catakb1(); } else { if (random() <= 0.5) bossf1_atakb1(); else bossf1_atakc1(); } }; void() bossf1_missile = { local float r; r = random(); //check our health, if we are hurt badly then no more missile attacks if (self.health <= 200 && self.classname != "monster_shadowclone") return; else { if (r <= 0.5) bossf1_ataka1(); //skull blast else { if (time > lightning_wait) bossf1_use1(); //lightning attack } } }; //================================================================================================= /*EWED monster_bossf1 (1 0 0) (-16 -16 -24) (16 16 40) Ambush */ void() monster_bossf1 = { if (deathmatch) { remove(self); return; } //boss form1 precaches precache_model ("models/enemies/bossform1.md2"); precache_model ("models/weapons/gfx/skullblast.md2"); //boss form1 sound precaches precache_sound ("enemy/apprent/ability.wav"); precache_sound ("weapons/holy/lightarc.wav"); precache_sound ("artifact/power.wav"); precache_sound ("weapons/lock4.wav"); //used for missile touch function precache_sound ("boss1/bf1die2.wav"); precache_sound ("boss1/bf1die3.wav"); precache_sound ("boss1/bf1hit1.wav"); precache_sound ("boss1/bf1hit2.wav"); precache_sound ("boss1/bf1hit3.wav"); precache_sound ("boss1/bf1jumpback.wav"); precache_sound ("boss1/bf1laugh1.wav"); precache_sound ("boss1/bf1laugh2.wav"); //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 ("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/bossform1.md2"); setsize (self, '-16 -16 -24', '16 16 40'); // setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX); self.health = set_health(1000); self.speed = set_speed(600); self.dtype = 5; //special dodge type, cause he be da boss man ;) hurtbad = 0; //not hurt badly yet, start it at 0 bf1_dead = 0; //not dead yet, start it at 0 num_clones = 0; //aren't any shadow clones yet self.th_stand = bossf1_stand; self.th_walk = bossf1_walk; self.th_run = bossf1_run1; self.th_melee = bossf1_melee; self.th_missile = bossf1_missile; self.th_pain = bossf1_pain; self.th_die = bossf1_die; //my new classname is? self.classname = "monster_bossf1"; //set up our monflag self.monflag = "TRUE"; walkmonster_start (); }; /* ========================================= Shadow Clones ========================================= */ void() bossf1bot_die = { //decrement number of shadow clones num_clones = num_clones - 1; //this seemed important self.solid = SOLID_NOT; //make some noise sound (self, CHAN_VOICE, "boss1/bf1die2.wav", 1, ATTN_NORM); //teleport out spawn_tfog (self.origin); //spawn_tdeath (self.origin, self); remove(self); return; }; void() search_for_boss = { local entity boss; //need to make sure the boss is still alive if (bf1_dead == 1) self.think = self.th_die; }; /* ================= create_bossf1bot Creates a weaker partially transparent version of the first Boss form at the specified 'spot'. This is used by Boss Form 1. ================= */ void(vector spot) create_bossf1bot = { local entity bot; // start entity and place it in world bot = spawn(); bot.angles = self.angles; setorigin (bot, spot); 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/bossform1.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 = bossf1_stand; bot.th_walk = bossf1_walk; bot.th_run = bossf1_run; bot.th_die = bossf1bot_die; bot.th_melee = bossf1_melee; bot.th_missile = bossf1_missile; bot.th_pain = bossf1_pain; bot.health = 10; bot.speed = set_speed(600); bot.dtype = 5; //special dodge type, cause he be da boss man ;) //Tomaz Special Effects bot.alpha = 0.5; //make him transparent // polish him up bot.classname = "monster_shadowclone"; 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 = bot.th_run; };