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

#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(33);
	renderBoss2(34);
	bossMagicCircle2;
	setAura(bossObj,180,180,32);
	setAura(boss2Obj,64,64,255);
	setInvulnerableTime(bossObj,120);
	setInvulnerableTime(boss2Obj,120);
	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);

	SetAutoDeleteObject(true);
	mainTask;
} 

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

@MainLoop { yield; } 
@Finalize { } 

task mainTask { 
	yield;
	scriptEnding;	
	wait(60);
	control;
} 

// Marisa movement
task control {
	while(! Obj_IsDeleted(bossObj)) {	
		marisaShotCirc;
		wait(30);
		ObjMove_RandomPosWeight(bossObj,rand_int(30,60),rand_int(10,15),20,35,GetClipMinX+128,GetClipMinY+64,GetClipMaxX-128,GetClipMinY+120);
		wait(15);
		ObjMove_RandomPosWeight(boss2Obj,rand_int(30,60),rand_int(10,15),20,35,GetClipMinX+128,GetClipMinY+64,GetClipMaxX-128,GetClipMinY+120);
		wait(120);
		arisuLance(boss2X,boss2Y);
		wait(180);
		ObjMove_RandomPosWeight(boss2Obj,rand_int(30,60),rand_int(10,15),20,35,GetClipMinX+128,GetClipMinY+64,GetClipMaxX-128,GetClipMinY+120);
		marisaShotCirc2;
		wait(30);
		ObjMove_RandomPosWeight(bossObj,rand_int(45,70),rand_int(20,30),20,35,GetClipMinX+128,GetClipMinY+64,GetClipMaxX-128,GetClipMinY+120);			
		wait(120);
		arisuLance(boss2X,boss2Y);
		wait(180);
	}
}

// Star shot large circ
task marisaShotCirc {
	let dir = 0;
	let kleur = 194;
	ascent(i in 0..6) {
		PlaySFX(SFX_TAN00);
		ascent(j in 0..16) { 
			CreateShotA1(bossX,bossY,2,dir,kleur,10);
			dir+=360/16;
		}
		kleur++;
		if(kleur > 200) { kleur = 194; } 
		dir+=8;
		wait(15);
	}	
}

// Star shot large circ 2
task marisaShotCirc2 {
	let dir = 0;
	let kleur = 195;
	ascent(i in 0..6) {
		PlaySFX(SFX_TAN00);
		ascent(j in 0..16) { 
			CreateShotA1(bossX,bossY,2,dir,kleur,10);
			dir-=360/16;
		}
		kleur++;
		if(kleur > 200) { kleur = 195; } 
		dir-=8;
		wait(15);
	}	
}

// Arisu Lance (from dolls)
task arisuLance(x,y) {
	let mx = 0;
	let my = 0;
	let dir = 0;
	
	ascent(j in 0..3) {
		PlaySFX(SFX_LANCE);
		mx = GetPlayerX; my = GetPlayerY;
		dir = GetPointToPointAngle(mx,my,boss2X,boss2Y);
		CreateStraightLaserA1(boss2X,boss2Y,dir,640,8,0,2,60);
		let minX = min(mx,x);
		let minY = min(my,y);
		let dX = absolute(mx-x);	
		let dY = absolute(my-y);
		let s = 1/10;
		ascent(i in 0..10) {
			PlaySFX(SFX_TAN00);
			let lanceShot00 = CreateShotA1(x+i*s*512*cos(dir),y+i*s*512*sin(dir),0,dir,9,30);
			lanceShotHandler(lanceShot00,dir);
			wait(1);
		}
		wait(30);
	}
}

// Lance split shot
task lanceShotHandler(obj,dir) {
	wait(60);
	PlaySFX(SFX_KIRA00);
	if(!Obj_IsDeleted(obj)) { 
		ascent(i in 0..4) { 
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,15,30);
			dir+=360/4;
		}
		Obj_Delete(obj);
	}
}

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

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

	CloseScript(GetOwnScriptID());
}
 