#e
#Title[GutԂ̉Ԃ̍v]
#Text[G̏t̔~Ԃ̍
uӁvȂāuӁvłB]
#BGM[.\bgm\bgm.wav]
#BackGround[User]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main{
	
	@Initialize{
		InitializeData();
		InitializeAction();
		LoadUserShotData(shot_all);
		
		SetLife(1000);
		SetMovePosition03(GetCenterX(),GetClipMinY() + 130,20,4);
		SetDamageRate(22,15);
		SetCollisionEx(32,16,false,300);
		SetEnemyMarker(true);
		
		TMain();
	}
	
	@MainLoop{
		yield;
	}
	
	@DrawLoop{
		DrawBoss(imgBoss_Yuuka);
	}
	
	@Finalize{
		FinalizeData();
	}
	
	task TMain(){
		Wait(60);
		
		DeclareSpell();
		
		Atack();
	}
	
	function DeclareSpell(){
		SetAction(ACT_SPELL,180);
		
		CutIn(KOUMA,"GutԂ̉Ԃ̍v",NULL,0,0,0,0);
		
		SpellCard(CUT_TIREI,imgCutin_Yuuka,0,0,256,320,-30,1);
		
		SetScore(2600000);
		SetTimer(70);
		Wait(180);
	}
	
	task Atack(){
		let angle = 202.5;
		
		FlowerShooting();
		
		loop{
			ascent(j in 0..8){
				Apricot(GetX(),GetY(),4,6,angle - j * 360 / 8,35,71,79,0,20,100 - j * 2);
				Wait(2);
			}
			
			angle = rand(0,360);
			
			Wait(280);
		}
	}
	
	task Apricot(x,y,speed1,speed2,angle,graph1,graph2,graph3,delay,bwait,swait){
		let count = 0;
		let sangle = angle;
		
		ascent(i in 0..8){
			Leaf(x,y,i * 360 / 8);
		}
		
		let obj = CreateObjShot(x,y,speed1,angle,graph1,delay);
		
		while( !Obj_BeDeleted(obj) ){
			
			if(count == bwait){
				Obj_SetSpeed(obj,0);
			}else if( count == (bwait + 90) ){
				Obj_SetSpeed(obj,speed2);
			}else if( count > (bwait + 90) ){
				if(count % 8 == 0){
					ascent(i in 0..8){
						CreateShotA(1,Obj_GetX(obj),Obj_GetY(obj),12);
						SetShotDataA(1,0,0,sangle + i * 360 / 8,0,0,0,graph2);
						SetShotDataA(1,swait,0,NULL,0,0.012,1.4,NULL);
						FireShot(1);
					}
				}
				
				swait -= 1;
			}
			
			angle += 1;
			
			count += 1;
			
			yield;
		}
		
		task Leaf(x,y,langle){
			let lobj = CreateObjShot(GetGapX(x,10,angle + langle),GetGapY(y,10,angle + langle),0,angle + langle,graph3,delay);
			
			Wait(2);
			
			while( !Obj_BeDeleted(obj) && !Obj_BeDeleted(lobj) ){
				Obj_SetPosition(lobj,GetGapX(Obj_GetX(obj),10,angle + langle),GetGapY(Obj_GetY(obj),10,angle + langle));
				Obj_SetAngle(lobj,angle + langle);
				
				yield;
			}
			
			if( !Obj_BeDeleted(lobj) ){
				Obj_Delete(lobj);
			}
		}
	}
	
	task FlowerShooting(){
		Wait(280 + 24);
		
		loop{
			alternative( rand_int(0,2) )
				case(0){
					Flower(rand(32,416),rand(-50,-70),rand(1,2),90 + rand(-2,2),56,AQUA01,0,rand(60,120),rand_int(3,6) * 2);
				}
				case(1){
					Flower(rand(32,416),rand(-50,-70),rand(1,2),90 + rand(-2,2),56,YELLOW01,0,rand(60,120),rand_int(3,6) * 2);
				}
				others{
					Flower(rand(32,416),rand(-50,-70),rand(1,2),90 + rand(-2,2),56,GREEN01,0,rand(60,120),rand_int(3,6) * 2);
				}
			
			Wait(160);
		}
	}
	
	task Flower(x,y,speed,angle,graph1,graph2,delay,rad,leafnum){
		ascent(i in 0..leafnum){
			FlowerLeaf(x,y,i * 360 / leafnum);
		}
		
		let obj = CreateObjShot(x,y,speed,angle,graph1,delay);
		Obj_SetAutoDelete(obj,false);
		ObjShot_SetBombResist(obj,true);
		
		while( !Obj_BeDeleted(obj) ){
			if( Obj_GetY(obj) > GetClipMaxY() + 128 ){
				Obj_Delete(obj);
				break;
			}
			
			angle += 1;
			
			yield;
		}
		
		task FlowerLeaf(x,y,langle){
			let lobj = CreateObjLaser(x,y,0,angle + langle,graph2,delay,rad,20,false);
			Obj_SetAutoDelete(lobj,false);
			ObjShot_SetBombResist(lobj,true);
			Obj_SetAlpha(lobj,128);
			
			Wait(2);
			
			while( !Obj_BeDeleted(obj) && !Obj_BeDeleted(lobj) ){
				Obj_SetPosition(lobj,Obj_GetX(obj),Obj_GetY(obj));
				Obj_SetAngle(lobj,angle + langle);
				
				yield;
			}
			
			if( !Obj_BeDeleted(lobj) ){
				Obj_Delete(lobj);
			}
		}
	}
	
	#include_function ".\initialize_boss.txt"
	#include_function ".\lib\lib_anime_yuka.txt"
	
	#include_function ".\lib\lib_cutin.txt"
	
	#include_function ".\lib\lib_obj.txt"
	#include_function ".\lib\lib_value.txt"
}