#TouhouDanmakufu[Single]
#ScriptVersion[3]
#Title["Afro spell 04 normal"]
#Text["Afro spell 04 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("spellScriptID",GetOwnScriptID);
	renderBoss(2);
	setAura(bossObj,64,64,255);
	SetCommonData("bossCircleType",2);
	SetCommonData("bossAttackType",2);
	SetCommonData("bossBgType",2);
	if(GetAreaCommonData("system","gameLang",0) == 0) { SetCommonData("cardName","xXUuXs^X̑́v"); } 
	if(GetAreaCommonData("system","gameLang",0) == 1) { SetCommonData("cardName","96% uGreat Galaxy of Spiritusv"); } 		
	setInvulnerableTime(bossObj,180);	
	
	concenEffect(bossObj,15,4,64,64,255);
	concenEffect(bossObj,15,4,255,64,64);
	concenEffect(bossObj,15,4,64,255,64);
	concenEffect(bossObj,15,4,255,255,64);

	concenEffect(bossObj,30,3,155,32,255);
	concenEffect(bossObj,30,3,255,255,255);
	concenEffect(bossObj,30,3,255,255,64);	

	ObjMove_SetDestAtSpeed(bossObj,192,120,5);
	
	SetShotAutoDeleteClip(6,6,6,6);
	
	SetAutoDeleteObject(true);
	mainTask;
} 

@Event { 
	alternative(GetEventType()) 
	case(EV_REQUEST_LIFE) { 
		SetScriptResult(420);
	}
	case(EV_REQUEST_TIMER) { 
		SetScriptResult(72);
	}
	case(EV_REQUEST_SPELL_SCORE) {
	    let spellCardBonus = calculateAndGetSpellCardBonus();
		SetScriptResult(spellCardBonus);
	}	
	case(EV_USER+9999) {
		SetCommonData("spellcardID","tenji04norm"); 
	}
} 

@MainLoop { yield; } 
@Finalize { } 


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

task control { 
	let beginPosY = 0;
	while(!Obj_IsDeleted(bossObj)) { 
		beginPosY = rand_int(GetClipMinY,64);
		ascent(i in 0..6) { 
			vuur(beginPosY+(i*16),i);
			wait(10);
		}
		ringring;
		wait(240);
	}
}

task vuur(beginY,row) { 
	let xpos = 0;
	let ypos = beginY + row * 60;
	let kleur = 263;
	ascent(i in 0..30) { 
		if(kleur == 265) { kleur = 263; }	
		let spiritusShot = CreateShotA(xpos,ypos,10);
		ObjShot_SetSpellResist(spiritusShot,true);
		SetShotDataA(spiritusShot,0,0,0,0,0,0,kleur);
		if(kleur == 263) { SetShotDataA(spiritusShot,180,0,270,0,0.02,0.8,kleur); }		// red (up)
		if(kleur == 264) { SetShotDataA(spiritusShot,90,0,90,0,0.02,0.8,kleur); }		// blue (down)
		
		let effShot00 = CreateShotA(xpos,ypos,30);
		SetShotDataA(effShot00,0,0,0,0,0,0,kleur);
		DeleteShotA(effShot00,0);
		
		xpos+=(GetClipMaxX+12)/30;	
		kleur++;
		PlaySFX(SFX_TAN00);
		wait(3);
	}
} 

task ringring {
	wait(90);
	loop(32){ 
		PlaySFX(SFX_KIRA00);
		wait(5);
	}
}

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

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

	CloseScript(GetOwnScriptID());
}
 