task StarDustReverie
{
	if(OnSpellCard==true){return;}
	if(IsPermitPlayerSpell==false){return;}
	if(SpellPoint>=20*SpellReduce)
	{
		SpellPoint-=20*SpellReduce;
	}
	else
	{
		SpellPointLack;
		return;
	}

	SetPlayerInvincibilityFrame(60);//GԂݒ
	OnSpellCard=true;
	ShotForbitTime(30);
	let objManage = GetSpellManageObject();
	TShake(8,120);
	ascent(i in 0..12)
	{
		Star(i*360/12);
	}
	wait(180);
	OnSpellCard=false;
	Obj_Delete(objManage);

	task Star(angle)
	{
	let imgBer = GetCurrentScriptDirectory() ~ "../img/Marisa_shots.png";
//	let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D);
	let obj = ObjSpell_Create;
	ObjPrim_SetTexture(obj, imgBer);
	ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
	ObjPrim_SetVertexCount(obj, 4);
	ObjRender_SetBlendType(obj, BLEND_ADD_RGB);
	Obj_SetRenderPriorityI(obj,20);

	ObjPrim_SetVertexPosition(obj, 0, -64, -64, -0);
	ObjPrim_SetVertexPosition(obj, 1,64, -64, -0);
	ObjPrim_SetVertexPosition(obj, 2, 64, 64, 0);
	ObjPrim_SetVertexPosition(obj, 3, -64, 64, 0);

	ObjPrim_SetVertexUVT(obj, 0, 0, 128);
	ObjPrim_SetVertexUVT(obj, 1, 128, 128);
	ObjPrim_SetVertexUVT(obj, 2, 128, 256);
	ObjPrim_SetVertexUVT(obj, 3, 0, 256);

	ObjRender_SetPosition(obj,GetPlayerX,GetPlayerY,0);

	let Xangle=rand(0,360)*0;
	let Yangle=rand(0,360)*0;
	let Zangle=rand(0,360);

	let XanglePlus=rand(-10,10);
	let YanglePlus=rand(-10,10);
	let ZanglePlus=rand(5,10)*(rand_int(0,1)*2-1);

	let color=SetSevenColor;
	let Alpha=0.5;
	ObjRender_SetColor(obj,color[0]*Alpha,color[1]/2*Alpha,color[2]/2*Alpha);
	let Scale=rand(0.6,1.00);
	let BScale=Scale;
	ObjRender_SetScaleXYZ(obj,Scale,Scale,Scale);

	let speed=rand(1.00,1.50);
	let Bspeed=speed;
	speed+=2;

	let Damage=floor(Status_MagicPower/20);
	let DamageMax=floor(Status_MagicPower/10);
	ObjSpell_Regist(obj);
	ObjSpell_SetDamage(obj,Damage);

	ObjSpell_SetEraseShot(obj,false);

	let S_count=0;
	loop(90)
	{
		if(Damage<DamageMax)
		{
			Damage+=DamageMax/60;
		}
		if(S_count%10==0)
		{
		DeleteShotInCircle(TYPE_SHOT,TYPE_IMMEDIATE,ObjRender_GetX(obj),ObjRender_GetY(obj),64*Scale);
		ObjSpell_SetIntersectionCircle(obj,ObjRender_GetX(obj),ObjRender_GetY(obj),64*Scale);
		}
		ObjSpell_SetDamage(obj,Damage);
		ShadowStar(ObjRender_GetX(obj),ObjRender_GetY(obj),speed,angle,Scale,Alpha,Xangle,Yangle,Zangle,color);

		ObjRender_SetX(obj, ObjRender_GetX(obj)+speed*cos(angle));
		ObjRender_SetY(obj, ObjRender_GetY(obj)+speed*sin(angle));

		if(speed>=Bspeed){speed-=0.1;}
		ObjRender_SetColor(obj,color[0]*Alpha,color[1]/2*Alpha,color[2]/2*Alpha);
		ObjRender_SetScaleXYZ(obj,Scale,Scale,Scale);
		ObjRender_SetAngleXYZ(obj,Xangle,Yangle,Zangle);
	//	Xangle+=XanglePlus;
	//	Yangle+=YanglePlus;
		Zangle+=ZanglePlus;

	//	Scale-=0.75/120;
		Alpha-=0.5/90;
		let sr=Obj_GetValue(GetPlayerObjectID,"Move_Right");
		let sl=Obj_GetValue(GetPlayerObjectID,"Move_Left");
		let su=Obj_GetValue(GetPlayerObjectID,"Move_Up");
		let sd=Obj_GetValue(GetPlayerObjectID,"Move_Down");
		if(sr!=0)
		{
			ObjRender_SetX(obj, ObjRender_GetX(obj)-sr);
		}
		if(sl!=0)
		{
			ObjRender_SetX(obj, ObjRender_GetX(obj)-sl);
		}
		if(su!=0)
		{
			ObjRender_SetY(obj, ObjRender_GetY(obj)-su);
		}
		if(sd!=0)
		{
			ObjRender_SetY(obj, ObjRender_GetY(obj)-sd);
		}
		S_count+=1;
		yield;
	}
	Obj_Delete(obj);
	}

	task ShadowStar(X,Y,speed,angle,Scale,Alpha,Xangle,Yangle,Zangle,color)
	{
	let imgBer = GetCurrentScriptDirectory() ~ "../img/Marisa_shots.png";
	let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D);
	ObjPrim_SetTexture(obj, imgBer);
	ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
	ObjPrim_SetVertexCount(obj, 4);
	ObjRender_SetBlendType(obj, BLEND_ADD_RGB);
	Obj_SetRenderPriorityI(obj,20);

	ObjPrim_SetVertexPosition(obj, 0, -64, -64, -0);
	ObjPrim_SetVertexPosition(obj, 1,64, -64, -0);
	ObjPrim_SetVertexPosition(obj, 2, 64, 64, 0);
	ObjPrim_SetVertexPosition(obj, 3, -64, 64, 0);

	ObjPrim_SetVertexUVT(obj, 0, 0, 128);
	ObjPrim_SetVertexUVT(obj, 1, 128, 128);
	ObjPrim_SetVertexUVT(obj, 2, 128, 256);
	ObjPrim_SetVertexUVT(obj, 3, 0, 256);

	ObjRender_SetPosition(obj,X,Y,0);

	ObjRender_SetColor(obj,color[0]*Alpha,color[1]/2*Alpha,color[2]/2*Alpha);
	ObjRender_SetScaleXYZ(obj,Scale,Scale,Scale);

	let BAlpha=Alpha;
	loop(5)
	{
		ObjRender_SetColor(obj,color[0]*Alpha,color[1]/2*Alpha,color[2]/2*Alpha);
		ObjRender_SetX(obj, ObjRender_GetX(obj)+speed*cos(angle));
		ObjRender_SetY(obj, ObjRender_GetY(obj)+speed*sin(angle));

		ObjRender_SetScaleXYZ(obj,Scale,Scale,Scale);
		ObjRender_SetAngleXYZ(obj,Xangle,Yangle,Zangle);

		Alpha-=BAlpha/5;

		let sr=Obj_GetValue(GetPlayerObjectID,"Move_Right");
		let sl=Obj_GetValue(GetPlayerObjectID,"Move_Left");
		let su=Obj_GetValue(GetPlayerObjectID,"Move_Up");
		let sd=Obj_GetValue(GetPlayerObjectID,"Move_Down");
		if(sr!=0)
		{
			ObjRender_SetX(obj, ObjRender_GetX(obj)-sr);
		}
		if(sl!=0)
		{
			ObjRender_SetX(obj, ObjRender_GetX(obj)-sl);
		}
		if(su!=0)
		{
			ObjRender_SetY(obj, ObjRender_GetY(obj)-su);
		}
		if(sd!=0)
		{
			ObjRender_SetY(obj, ObjRender_GetY(obj)-sd);
		}
		yield;
	}
	Obj_Delete(obj);
	}

	function SetSevenColor
	{
		alternative(rand_int(0,6))
		case(0){return([255,0,0]);}
		case(1){return([255,100,0]);}
		case(2){return([255,255,0]);}
		case(3){return([0,255,0]);}
		case(4){return([0,255,255]);}
		case(5){return([0,0,255]);}
		case(6){return([160,32,240]);}
		others{return([255,255,255]);}
	}

	task TShake(Intensity,time)
	{
		let BIntensity=Intensity;
		loop(time)
		{
			Set2DCameraFocusX(GetStgFrameWidth/2+ rand(-Intensity, Intensity));
			Set2DCameraFocusY(224 + rand(-Intensity, Intensity));
			Intensity-=BIntensity/time;
			yield;
		}
		Reset2DCamera();
	}
}