#TouhouDanmakufu[Single]
#ScriptVersion[3]
#Title["vs Border Team non-spell 01 lunatic"]
#Text["vs Border Team non-card 01 lunatic"]

#include "script/thdcs/system/shotlibrary.txt"
#include "script/thdcs/functions/function_common.txt"
#include "script/thdcs/functions/function_global.txt"
#include "script/thdcs/functions/function_bosseff.txt"

@Initialize {
    SetCommonData("isDuet", true);
	SetCommonData("bossCircleType",0);
	SetCommonData("bossAttackType",1);
	renderBoss(31);
	renderBoss2(32);
    bossMagicCircle2;
	ObjMove_SetPosition(bossObj,bossX,bossY);
	ObjMove_SetPosition(boss2Obj,GetCommonData("boss2X",boss2X),GetCommonData("boss2Y",boss2Y));
	
	ObjMove_SetDestAtSpeed(bossObj,GetCenterX-64,120,5);
	ObjMove_SetDestAtSpeed(boss2Obj,GetCenterX+64,120,5);
	
	setAura(bossObj,255,92,92);
	setAura(boss2Obj,128,32,255);
	setInvulnerableTime(bossObj,120);
	setInvulnerableTime(boss2Obj,120);
	
	SetAutoDeleteObject(true);
	mainTask;
} 

@Event { 
	alternative(GetEventType()) 
	case(EV_REQUEST_LIFE) { 
		SetScriptResult(300);
	}
	case(EV_REQUEST_TIMER) { 
		SetScriptResult(43);
	}
} 

@MainLoop { yield; } 
@Finalize { } 

task mainTask { 
	yield;
	scriptEnding;	
	wait(90);
	reimuMovement;
	yukariMovement;
} 

// Reimu movement random
task reimuMovement { 
	while(! Obj_IsDeleted(bossObj)) {	
		reimuAmuletCirc;
		reimuBallCirc;
		reimuAmuletShot;
		wait(25);
		ObjMove_RandomPosWeight(bossObj,rand_int(30,60),rand_int(10,15),15,30,GetClipMinX+128,GetClipMinY+64,GetClipMaxX-128,GetClipMinY+120);
		wait(80);
		ObjMove_RandomPosWeight(bossObj,rand_int(30,60),rand_int(10,15),15,30,GetClipMinX+128,GetClipMinY+64,GetClipMaxX-128,GetClipMinY+120);		
		wait(80);
	}
}

// Yukari arcing movement
task yukariMovement { 
	let dir = 180;
	ObjMove_SetDestAtSpeed(boss2Obj,GetCenterX-128,120,3);
	while(ObjMove_GetSpeed(boss2Obj) > 0) { yield; } 
	yukariKunaiShot;
	wait(90);	
	while(!Obj_IsDeleted(bossObj)) {
		loop(180) { ObjMove_SetPosition(boss2Obj,GetCenterX+128*cos(dir),120+64*sin(dir)); ObjMove_SetSpeed(boss2Obj,1); dir++; yield; } 
		ObjMove_SetSpeed(boss2Obj,0); 
		yukariKunaiShot;
		wait(90);
		loop(180) { ObjMove_SetPosition(boss2Obj,GetCenterX+128*cos(dir),120+64*sin(dir)); ObjMove_SetSpeed(boss2Obj,1); dir--; yield; } 
		ObjMove_SetSpeed(boss2Obj,0); 
		yukariKunaiShot;		
		wait(90);
	}	
} 

// Reimu circular amulet shot
task reimuAmuletCirc {
	let dir = 0;
	ascent(i in 0..5) { 
		PlaySFX(SFX_TAN00);
		ascent(j in 0..24) { 
			CreateShotA1(bossX,bossY,1+(i/3),dir,95,10); 
			dir+=360/24;
		} 
		dir+=24;
		wait(3);
	}
}

// Reimu circular amulet shot
task reimuBallCirc {
	let dir = 0;
	ascent(i in 0..2) { 
		dir = rand_int(0,360);
		PlaySFX(SFX_TAN00);
		ascent(j in 0..24) { 
			CreateShotA1(bossX,bossY,rand(1.0,2)+(i/2),dir,202,10); 
			dir+=360/24;
		} 
		dir+=27;
		wait(5);
	}
}


// Reimu amulet homed 3-way
task reimuAmuletShot {
	let dir = 0;
	PlaySFX(SFX_KIRA00);
	ascent(i in 0..7) { 
		dir = GetAngleToPlayer(bossObj);
		CreateShotA1(bossX,bossY,1+i/3,dir-9,96,10); 
		CreateShotA1(bossX,bossY,1+i/3,dir,96,10); 
		CreateShotA1(bossX,bossY,1+i/3,dir+9,96,10); 
		wait(5);
	}
}

// Yukari's kunai shot 8-way homed
task yukariKunaiShot { 
	let dir = 0;
	ascent(i in 0..16) {
		PlaySFX(SFX_TAN01);
		dir = GetAngleToPlayer(boss2Obj);
		ascent(j in 0..6) {
			CreateShotA1(boss2X+16*cos(dir),boss2Y+16*sin(dir),4,dir-45,72,10); 
			dir+=90/6;
		}
		wait(9);
	}
}

task scriptEnding {
	while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > 0) {
		yield;
	}

	DeleteShotAll(TYPE_ALL, TYPE_ITEM);
	Obj_Delete(bossObj);

	CloseScript(GetOwnScriptID());
}
 