SetCommonData("Boss", 0); SetCommonData("StgBkgd", 2); #include "./../FxnList.txt" let count = -150; //Counter let angle = 0; //Primary Angle let angle2 = 180; //Secondary Angle let angle3 = 180; let bullet = GetCurrentScriptDirectory~"./../sound/bullet.wav"; let laser = GetCurrentScriptDirectory~"./../sound/laser.wav"; let water = GetCurrentScriptDirectory~"./../sound/water.wav"; let charge = GetCurrentScriptDirectory~"./../sound/charge.wav"; let ZUNbullet = GetCurrentScriptDirectory~"./../ZUNshot.txt"; let objBoss; let objEnemy; let objScene=GetEnemyBossSceneObjectID(); //This is made, Dec 23, 2013 @Initialize { LoadTexture(ZUNbullet); LoadEnemyShotData(ZUNbullet); objBoss = ObjEnemy_Create(OBJ_ENEMY_BOSS); ObjEnemy_Regist(objBoss); SetDamageRateAtFrame(objBoss,80,50,90); ObjMove_SetDestAtFrame(objBoss, GetCenterX, GetCenterY-120, 60); objEnemy = ObjEnemy_Create(OBJ_ENEMY); ObjEnemy_Regist(objEnemy); SetDamageRateAtFrame(objEnemy,80,50,90); ObjRender_SetPosition(objEnemy, Obj_GetValueD(objScene,"NitoriX", 0), Obj_GetValueD(objScene,"NitoriY", 0), 1); //Above retrieves Nitori's X and Y ObjMove_SetDestAtFrame(objEnemy, GetCenterX-120, GetCenterY-120, 60); LoadSound(bullet); LoadSound(laser); LoadSound(water); LoadSound(charge); SetShotAutoDeleteClip(32,32,32,32); EnemySetup(objBoss,objEnemy); TDrawLoopR; TDrawLoopN; TFinalize; } @Event{ alternative(GetEventType()) case(EV_REQUEST_LIFE){SetScriptResult(2500);} case(EV_REQUEST_TIMER){SetScriptResult(40);} } @MainLoop { ObjEnemy_SetIntersectionCircleToShot(objBoss, ObjMove_GetX(objBoss), ObjMove_GetY(objBoss), 32); ObjEnemy_SetIntersectionCircleToPlayer(objBoss, ObjMove_GetX(objBoss), ObjMove_GetY(objBoss), 24); ObjEnemy_SetIntersectionCircleToShot(objBoss, ObjMove_GetX(objEnemy), ObjMove_GetY(objEnemy), 32); ObjEnemy_SetIntersectionCircleToPlayer(objBoss, ObjMove_GetX(objEnemy), ObjMove_GetY(objEnemy), 24); if(count > 0 && count % 180 == 0){ ObjMove_SetDestAtFrame(objEnemy, rand(GetCenterX,GetCenterX-80), rand(GetCenterY-60,GetCenterY-120), 60); } if(count > 0 && count % 180 == 90){ ObjMove_SetDestAtFrame(objBoss, rand(GetCenterX+80,GetCenterX), rand(GetCenterY-60,GetCenterY-120), 60); } if(count >= 0 && count % 180 == 90){ NitoriBurst; } if(count >= 0 && count % 180 == 0){ RaikoBlobs; } count++; yield; } task NitoriBurst{ let angleT = GetAngleToPlayer(objEnemy); loop(5){ loop(4){ ascent(i in 0..4){ ascent(j in -i..i+1){ CreateShotA1(GetEnemyX(objEnemy), GetEnemyY(objEnemy), 3, angleT+j*5, 191, i*5); } } angleT+=360/4; } PlaySE(water); loop(30){yield;} angleT+=45; } } task RaikoBlobs{ let angleT = rand(0,360); loop(15){ if(ObjEnemy_GetInfo(objBoss, INFO_LIFE) < 0){return;}//Default kill to prevent (0,0) spawning loop(3){ CreateShotA1(GetEnemyX(objBoss)-3, GetEnemyY(objBoss)+15, 3, angleT, 234, 5); CreateShotA1(GetEnemyX(objBoss)-3, GetEnemyY(objBoss)+15, 3, angleT+1, 234, 7); CreateShotA1(GetEnemyX(objBoss)-3, GetEnemyY(objBoss)+15, 3, angleT-1, 234, 7); angleT+=360/3; } PlaySE(bullet); loop(5){yield;} angleT+=24; } loop(15){ if(ObjEnemy_GetInfo(objBoss, INFO_LIFE) < 0){return;}//Default kill to prevent (0,0) spawning loop(3){ CreateShotA1(GetEnemyX(objBoss)-3, GetEnemyY(objBoss)+15, 3, angleT, 234, 5); CreateShotA1(GetEnemyX(objBoss)-3, GetEnemyY(objBoss)+15, 3, angleT+1, 234, 7); CreateShotA1(GetEnemyX(objBoss)-3, GetEnemyY(objBoss)+15, 3, angleT-1, 234, 7); angleT+=360/3; } PlaySE(bullet); loop(5){yield;} angleT-=24; } } task TDrawLoopR{ let BossImage = GetCurrentScriptDirectory~"./../img/RaikoSprite.png"; //Define path let animframe = 1; ObjPrim_SetTexture(objBoss, BossImage); ObjRender_SetScaleXYZ(objBoss, 1, 1, 1); let bossAngle = ObjMove_GetAngle(objBoss); let bossSpeed = ObjMove_GetSpeed(objBoss); ObjSprite2D_SetSourceRect(objBoss, 0, 0, 80, 96); ObjSprite2D_SetDestCenter(objBoss); while(!Obj_IsDeleted(objBoss)){ bossAngle = ObjMove_GetAngle(objBoss); bossSpeed = ObjMove_GetSpeed(objBoss); ObjSprite2D_SetSourceRect(objBoss, 0+floor(animframe/7)*80, 0, 80+floor(animframe/7)*80, 96);//Use 2nd row if(bossSpeed>0){ ObjSprite2D_SetSourceRect(objBoss, 0, 96, 80, 192);//Use 3rd row } ObjSprite2D_SetDestCenter(objBoss); animframe++; if(animframe == 28){animframe = 0;} //Reset animframe after 28 frames. Change no. depending on num. sprites yield; } } task TDrawLoopN{ let BossImage = GetCurrentScriptDirectory~"./../img/NitoriSprite.png"; //Define path let animframe = 1; ObjPrim_SetTexture(objEnemy, BossImage); ObjRender_SetScaleXYZ(objEnemy, 1, 1, 1); let bossAngle = ObjMove_GetAngle(objEnemy); let bossSpeed = ObjMove_GetSpeed(objEnemy); ObjSprite2D_SetSourceRect(objEnemy, 0, 0, 64, 80); ObjSprite2D_SetDestCenter(objEnemy); while(!Obj_IsDeleted(objEnemy)){ bossAngle = ObjMove_GetAngle(objEnemy); bossSpeed = ObjMove_GetSpeed(objEnemy); ObjSprite2D_SetSourceRect(objEnemy, 0+floor(animframe/7)*64, 0, 64+floor(animframe/7)*64, 80);//Use 1st row if(bossSpeed>0){ ObjSprite2D_SetSourceRect(objEnemy, 0, 80, 64, 160);//Use 2nd row } ObjSprite2D_SetDestCenter(objEnemy); animframe++; if(animframe == 28){animframe = 0;} //Reset animframe after 28 frames. Change no. depending on num. sprites yield; } } task TFinalize{ while(ObjEnemy_GetInfo(objBoss,INFO_LIFE)>0){yield;} Obj_SetValue(objScene,"NitoriX", ObjMove_GetX(objEnemy));//To pass on starting values Obj_SetValue(objScene,"NitoriY", ObjMove_GetY(objEnemy)); DeleteShotAll(TYPE_ALL,TYPE_ITEM); //Idk this Obj_Delete(objBoss); Obj_Delete(objEnemy); SetAutoDeleteObject(true); //Dangerous if used incorrectly DeleteShotAll(TYPE_ALL,TYPE_IMMEDIATE); CloseScript(GetOwnScriptID()); return; }