#e
#Title[KuN[o[n[cv]
#Text[ŋߎltĂ܂
ltoƂƂ邩H]
#BGM[.\bgm\bgm.wav]
#BackGround[User]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main{
	
	//N[o[̗t̊Av100ɂȂ悤ɂĂ
	// leaf3 Ot
	// leaf4 lt
	// leaf5 ܂t
	let leaf3 = 75        ; //   75
	let leaf4 =  5 + leaf3; //   80
	let leaf5 = 20 + leaf4; //  100
	
	let extnum = 1;
	
	@Initialize{
		InitializeData();
		InitializeAction();
		LoadUserShotData(shot_heart);
		
		SetLife(1000);
		SetMovePosition03(GetCenterX(),GetClipMinY() + 130,20,4);
		SetDamageRate(45,15);
		SetCollisionEx(32,16,false,300);
		SetEnemyMarker(true);
		
		TMain();
	}
	
	@MainLoop{
		yield;
	}
	
	@DrawLoop{
		DrawBoss(imgBoss_Tewi);
	}
	
	@Finalize{
		FinalizeData();
		
		CreateItemEx(ITEM_1UP,40,extnum);
	}
	
	task TMain(){
		Wait(60);
		
		DeclareSpell();
		
		Atack();
	}
	
	function DeclareSpell(){
		SetAction(ACT_SPELL,180);
		
		CutIn(KOUMA,"KuN[o[n[cv",NULL,0,0,0,0);
		
		SetScore(2600000);
		SetTimer(48);
		Wait(180);
	}
	
	task Atack(){
		let rnd = rand(0,100);
		let leaf = 3;
		
		loop{
			leaf = 3;
			rnd = rand(0,100);
			
			if(rnd <= leaf3){
				leaf = 3;
			}else if(rnd <= leaf4){
				leaf = 4;
			}else if(rnd <= leaf5){
				leaf = 5;
			}else{
				leaf = 3;
			}
			
			if(leaf == 4 && extnum == 1){
				PlaySE(se_1up);
				extnum = 3;
			}
			
			Clover(leaf);
			
			Wait(120);
			
			SetMovePositionRandom01(rand(15,50),rand(15,50),rand(3,4),32 + 50,16 + 50,416 - 50,146 + 50);
			
			Wait(120);
		}
	}
	
	task Clover(leafnum){
		let speed = 3.8;
		let angle = GetAngleToPlayer();
		
		let rad = 120;
		
		let px = GetX();
		let py = GetY();
		
		let sx = 0;
		let sy = 0;
		
		let langle = 0;
		let n = 0;
		
		let leafangle = langle;
		let leafroll = 4;
		
		let count = 0;
		
		let shotspan = truncate(1.7 * leafnum);
		
		let onmove = true;
		let onshot = false;
		
		n = leafnum / 2;
		
		let objdummy = CreateObjShot(px,py,0,angle,GREEN12,0);
		Obj_SetAlpha(objdummy,0);
		Obj_SetCollisionToPlayer(objdummy,false);
		
		while(langle < 360){
			loop(8){
				sx = cos(n * langle) * cos(langle) * rad + px;
				sy = cos(n * langle) * sin(langle) * rad + py;
				
				CloverLeaf(sx,sy,0,langle + (i * 360 / leafnum),GREEN12,20);
				
				langle += 3 / n;
			}
			
			yield;
		}
		
		Wait(60);
		
		angle = GetAngleToPlayer();
		
		Obj_SetAngle(objdummy,angle);
		Obj_SetSpeed(objdummy,speed);
		
		onshot = true;
		
		while( !Obj_BeDeleted(objdummy) ){
			px = Obj_GetX(objdummy);
			py = Obj_GetY(objdummy);
			
			if(count % shotspan == 0){
				ascent(i in 0..leafnum){
					MiniClover(GetGapX(px,rad,leafangle + i * 360 / leafnum),GetGapY(py,rad,leafangle + i * 360 / leafnum),2.4,leafangle + i * 360 / leafnum + 180,3,20,4 - leafnum % 2);
				}
			}
			
			leafangle += leafroll;
			
			count += 1;
			
			yield;
		}
		
		onmove = false;
		
		Wait(2);
		
		task CloverLeaf(tx,ty,tspeed,tangle,tgraph,tdelay){
			let myrad = GetGapLength(tx,ty,px,py);
			
			let obj = CreateObjShot(tx,ty,0,tangle,tgraph,tdelay);
			
			while( onmove ){
				tx = GetGapX(px,myrad,tangle);
				ty = GetGapY(py,myrad,tangle);
				
				Obj_SetPosition(obj,tx,ty);
				Obj_SetAngle(obj,tangle + 180);
				
				if( onshot ){
					tangle += leafroll;
				}
				
				yield;
			}
			
			if( !Obj_BeDeleted(obj) ){
				Obj_Delete(obj);
			}
		}
	}
	
	task MiniClover(x,y,speed,angle,graph,delay,leafnum){
		let vx = x;
		let vy = y;
		
		let shotsize = 14;
		
		let sx = x;
		let sy = y;
		
		let onmove = true;
		
		let langle = angle;
		
		let rollangle = 2;
		
		ascent(i in 0..leafnum){
			sx = GetGapX(vx,shotsize,langle);
			sy = GetGapY(vy,shotsize,langle);
			
			MiniCloverLeaf(sx,sy,speed,langle - 180,graph,delay);
			
			langle += 360 / leafnum;
		}
		
		let objdummy = CreateObjShot(vx,vy,speed,angle,graph,delay);
		Obj_SetAlpha(objdummy,0);
		Obj_SetCollisionToPlayer(objdummy,false);
		
		while( !Obj_BeDeleted(objdummy) ){
			vx = Obj_GetX(objdummy);
			vy = Obj_GetY(objdummy);
			
			angle += rollangle;
			
			yield;
		}
		
		onmove = false;
		
		Wait(2);
		
		task MiniCloverLeaf(tx,ty,tspeed,tangle,tgraph,tdelay){
			let count = 0;
			
			SetShotColor(128,255,128);
			let obj = CreateObjShot(tx,ty,0,tangle,tgraph,tdelay);
			Obj_SetAutoDelete(obj,false);
			SetShotColor(255,255,255);
			
			while( onmove ){
				tx = GetGapX(vx,shotsize,tangle);
				ty = GetGapY(vy,shotsize,tangle);
				
				Obj_SetPosition(obj,tx,ty);
				Obj_SetAngle(obj,tangle + 180);
				
				tangle += rollangle;
				
				count += 1;
				
				if(count == 60){
					Obj_SetAutoDelete(obj,true);
				}
				
				yield;
			}
			
			if( !Obj_BeDeleted(obj) ){
				Obj_Delete(obj);
			}
		}
	}
	
	#include_function ".\initialize_boss.txt"
	#include_function ".\lib\lib_anime_tewi.txt"
	
	#include_function ".\lib\lib_cutin.txt"
	
	#include_function ".\lib\lib_obj.txt"
	#include_function ".\lib\lib_value.txt"
}