task ThunderWool(x,y,angle,w,d1,speed,shote,delay){
	let id		= Obj_Create(OBJ_SHOT);
	let d0		= 0;
	let frame	= trunc(rand(-179,-119));
	
	Obj_SetPosition(id,x,y);
	Obj_SetAngle(id,angle);
	Obj_SetSpeed(id,speed);
	ObjShot_SetBombResist(id,true);
	ObjShot_SetDelay(id,delay);
	ObjShot_SetGraphic(id,shote);
	Obj_SetAutoDelete(id,true);
	Obj_SetAlpha(id,255);
	
	loop{
		let sgx		= Obj_GetX(id);
		let sgy		= Obj_GetY(id);
		
		d0++;
		Obj_SetAngle(id,angle+w*sin(d0*d1));
		
		frame++;
		if(frame==1){
			SetShotDirectionType(PLAYER);
			CreateShotA(0,sgx,sgy,10);
			SetShotDataA(0,0,0,180,0,0,0,kYELLOW50);
			SetShotDataA(0,120,NULL,NULL,0,0.01,3,kYELLOW50);
			FireShot(0);
			CreateShotA(0,sgx,sgy,10);
			SetShotDataA(0,0,0,0,0,0,0,kYELLOW50);
			SetShotDataA(0,120,NULL,NULL,0,0.01,3,kYELLOW50);
			FireShot(0);
			PlaySE(kira);
			frame=trunc(rand(-179,-119));
		}
		if(sgx<MinX-128||sgx>MaxX+128||sgy<MinY-128||sgy>MaxY+128){
			Obj_Delete(id);
			break;
		}
		yield;
	}
}

task ArmillarySphereOfIkarugaDera(distance,angle,shot,delay,long,spin,sp){
	let ost		= Obj_Create(OBJ_SHOT);
	let frag	= false;
	let frame	= 0;
	let count	= 0;
	let base	= 0;
	let kill	= 0;
	let alpha	= 0;
	let sp1		= 0;
	let sp2		= 0;
	let spA		= 0;
	let spB		= 0;
	
	Obj_SetPosition(ost,GetEnemyX-distance*sin(angle),GetEnemyY+distance*cos(angle));
	Obj_SetAngle(ost,angle);
	ObjShot_SetBombResist(ost,true);
	Obj_SetAlpha(ost,alpha);
	Obj_SetCollisionToPlayer(ost,false);
	ObjShot_SetGraphic(ost,shot);
	Obj_SetAutoDelete(ost,false);
	
	loop{
		let sgx = Obj_GetX(ost);
		let sgy = Obj_GetY(ost);
		
		if(frame<=delay&&alpha<100){alpha+=15;}
		
		Obj_SetPosition(ost,GetEnemyX-distance*sin(angle),GetEnemyY+distance*cos(angle));
		Obj_SetAlpha(ost,alpha);
		
		Obj_SetAngle(ost,angle);
		
		if(GetCommonData("ANGLE")=="LEFT"){
			if(sp1<sp){spA+=1;}
			sp1=sp*sin(spA);
			if(sp2>0){spB+=1;}
			if(sp2<=0){sp2=0;spB=0;}
			sp2=0*sin(spB);
			angle+=(sp1-sp2);
		}
		if(GetCommonData("ANGLE")=="RIGHT"){
			if(sp1>0){spA+=1;}
			if(sp1<=0){sp1=0;spA=0;}
			sp1=0*sin(spA);
			if(sp2<sp){spB+=1;}
			sp2=sp*sin(spB);
			angle+=(sp1-sp2);
		}
		
		frame++;
		if(frame>=delay){
			if(alpha<255){alpha+=15}
			Obj_SetCollisionToPlayer(ost,true);
			ObjShot_SetBombResist(ost,false);
		}
		yield;
	}
}

task NuclearShot(type,x,y,nangle,speed,maxscale,distance,minscale,color,kill,bomb,ch){
	/*
	type@1:ʔˌ^@2:GǏ]]^@3:kˌ^
	xy@@ݒuWorˍW
	nangl ˎpx(type2̏ꍇ͏)
	speed x(type2̏ꍇ͉]xB-1Ȃt]ɂȂA_Ȃ猸)
	mxsc@ő̑傫
	dista Ǐ]]̓G̋(type2ȊȌꍇ0w肷鎖)
	misc@ŏ̑傫(type3ȊȌꍇ0w肷鎖)
	color Fw(""t鎖)
	kill  ȍŏ(}CiXwŏłȂ)
	bomb  {ϐ
	*/
	let nuff2 = Obj_Create(OBJ_EFFECT);
	let nuff  = Obj_Create(OBJ_EFFECT);
	let shff  = Obj_Create(OBJ_SHOT);
	let img   = GetCurrentScriptDirectory~".\enm7_2img\Nuclear.png";
	let uv1   = [0,256,512,768,0,256,512,768];
	let uv2   = [0,0,0,0,256,256,256,256];
	let uv3   = [256,512,768,1024,256,512,768,1024];
	let uv4   = [256,256,256,256,512,512,512,512];
	//01234567
	let colorC;
	
	let r=255;
	let g=255;
	let b=255;
	let scale = 0;
	let scp   = 0;
	let killC = 0;
	let distanceC = 0;
	let grazeF = false;
	let frame	= 0;
	
	LoadGraphic(img);
	
	alternative(color)
	case("RED"){colorC=0}
	case("ORANGE"){colorC=1}
	case("YELLOW"){colorC=2}
	case("GREEN"){colorC=3}
	case("AQUA"){colorC=4}
	case("BLUE"){colorC=5}
	case("PURPLE"){colorC=6}
	case("WHITE"){colorC=7}
	
	Obj_SetPosition(nuff,Obj_GetX(shff),Obj_GetY(shff));
	ObjEffect_SetTexture(nuff,img);
	ObjEffect_SetRenderState(nuff,ADD);
	ObjEffect_SetPrimitiveType(nuff,PRIMITIVE_TRIANGLESTRIP);
	ObjEffect_SetScale(nuff,scale,scale);
	Obj_SetSpeed(nuff,0);
	Obj_SetAngle(nuff,nangle);
	ObjEffect_SetAngle(nuff,0,0,nangle);
	ObjEffect_SetLayer(nuff,3);
	ObjEffect_CreateVertex(nuff,4);
	ObjEffect_SetVertexXY(nuff,0,-128,-128);
	ObjEffect_SetVertexXY(nuff,1,-128,128);
	ObjEffect_SetVertexXY(nuff,2,128,-128);
	ObjEffect_SetVertexXY(nuff,3,128,128);
	ObjEffect_SetVertexColor(nuff,0,125,r,g,b);
	ObjEffect_SetVertexColor(nuff,1,125,r,g,b);
	ObjEffect_SetVertexColor(nuff,2,125,r,g,b);
	ObjEffect_SetVertexColor(nuff,3,125,r,g,b);
	ObjEffect_SetVertexUV(nuff,0,uv1[colorC],uv2[colorC]);
	ObjEffect_SetVertexUV(nuff,1,uv1[colorC],uv4[colorC]);
	ObjEffect_SetVertexUV(nuff,2,uv3[colorC],uv2[colorC]);
	ObjEffect_SetVertexUV(nuff,3,uv3[colorC],uv4[colorC]);
	
	Obj_SetPosition(nuff2,Obj_GetX(shff),Obj_GetY(shff));
	ObjEffect_SetTexture(nuff2,img);
	ObjEffect_SetRenderState(nuff2,ADD);
	ObjEffect_SetPrimitiveType(nuff2,PRIMITIVE_TRIANGLESTRIP);
	ObjEffect_SetScale(nuff2,scale,scale);
	Obj_SetSpeed(nuff2,0);
	Obj_SetAngle(nuff2,nangle);
	ObjEffect_SetAngle(nuff2,0,0,nangle);
	ObjEffect_SetLayer(nuff2,3);
	ObjEffect_CreateVertex(nuff2,4);
	ObjEffect_SetVertexXY(nuff2,0,-128,-128);
	ObjEffect_SetVertexXY(nuff2,1,-128,128);
	ObjEffect_SetVertexXY(nuff2,2,128,-128);
	ObjEffect_SetVertexXY(nuff2,3,128,128);
	ObjEffect_SetVertexColor(nuff2,0,125,r,g,b);
	ObjEffect_SetVertexColor(nuff2,1,125,r,g,b);
	ObjEffect_SetVertexColor(nuff2,2,125,r,g,b);
	ObjEffect_SetVertexColor(nuff2,3,125,r,g,b);
	ObjEffect_SetVertexUV(nuff2,0,uv1[colorC],uv2[colorC]);
	ObjEffect_SetVertexUV(nuff2,1,uv1[colorC],uv4[colorC]);
	ObjEffect_SetVertexUV(nuff2,2,uv3[colorC],uv2[colorC]);
	ObjEffect_SetVertexUV(nuff2,3,uv3[colorC],uv4[colorC]);
	
	Obj_SetPosition(shff,x,y);
	Obj_SetSpeed(shff,speed);
	Obj_SetAngle(shff,nangle);
	Obj_SetAlpha(shff,0);
	Obj_SetCollisionToPlayer(shff,false);
	Obj_SetAutoDelete(shff,false);
	ObjShot_SetBombResist(shff,bomb);
	ObjShot_SetGraphic(shff,WHITE01);
	
	loop(15){
		Obj_SetPosition(nuff,Obj_GetX(shff),Obj_GetY(shff));
		Obj_SetPosition(nuff2,Obj_GetX(shff),Obj_GetY(shff));
		if(type!=2){
			scale+=(maxscale/15);
			ObjEffect_SetScale(nuff,scale,scale);
			ObjEffect_SetScale(nuff2,scale,scale);
		}
		if(type==3){
			Obj_SetSpeed(shff,speed);
		}
		yield;
	}
	loop{
		let gnx = Obj_GetX(nuff);
		let gny = Obj_GetY(nuff);
		let gsx = Obj_GetX(shff);
		let gsy = Obj_GetY(shff);
		
		frame++;
		if(frame==1){
			CreateShotA(0,gsx,gsy,0);
			SetShotDataA(0,0,4,90,0,-0.1,1,kYELLOW01);
			SetShotDataA(0,60,NULL,NULL,0,0.01,3,kYELLOW01);
			FireShot(0);
			CreateShotA(0,gsx,gsy,0);
			SetShotDataA(0,0,4,270,0,-0.1,1,kYELLOW01);
			SetShotDataA(0,60,NULL,NULL,0,0.01,3,kYELLOW01);
			FireShot(0);
			PlaySE(kira);
			frame=-9;
		}
		
		if(gsx<MinX||gsx>MaxX||gsy<MinY||gsy>MaxY){
			let ang = 0;
			if(ch==0){SetCommonData("ANGLE","LEFT");}
			else{SetCommonData("ANGLE","RIGHT");}
			loop(30){
				CreateShotA(0,gsx,gsy,0);
				SetShotDataA(0,0,4,ang,0,-0.1,1,kPURPLE51);
				SetShotDataA(0,60,NULL,NULL,0,0.01,3,kPURPLE51);
				FireShot(0);
				CreateShotA(0,gsx,gsy,0);
				SetShotDataA(0,0,4,ang+6,0,-0.1,0,kGREEN51);
				SetShotDataA(0,60,NULL,NULL,0,0.01,3,kGREEN51);
				FireShot(0);
				ang+=12;
			}
			PlaySE(kaku);
			Obj_Delete(nuff);
			Obj_Delete(nuff2);
			Obj_Delete(shff);
			break;
		}
		
		Obj_SetPosition(nuff,Obj_GetX(shff),Obj_GetY(shff));
		Obj_SetPosition(nuff2,Obj_GetX(shff),Obj_GetY(shff));
		
		if(type==2&&maxscale>scale){
			scale+=(maxscale/500);
			ObjEffect_SetScale(nuff,scale,scale);
			ObjEffect_SetScale(nuff2,scale,scale);
		}
		SetCollisionB(gsx,gsy,scale*120);
		
		scp++;
		ObjEffect_SetScale(nuff,scale+0.03*sin(scp*10),scale+0.03*sin(scp*10));
		
		alternative(type)
		case(1){
			Obj_SetSpeed(shff,speed);
			Obj_SetPosition(nuff2,gnx,gny);
		}
		case(2){
			if(distance>distanceC){distanceC++;}
			Obj_SetPosition(shff,GetEnemyX+distanceC*sin(nangle+(scp/2*speed)),GetEnemyY+distanceC*cos(nangle+(scp/2*speed)));
			Obj_SetPosition(nuff,gsx,gsy);
			Obj_SetPosition(nuff2,gsx,gsy);
		}
		case(3){
			Obj_SetSpeed(shff,speed);
			Obj_SetPosition(nuff,gsx,gsy);
			Obj_SetPosition(nuff2,gsx,gsy);
			if(minscale<scale){scale-=0.005;}
			ObjEffect_SetScale(nuff,scale,scale);
			ObjEffect_SetScale(nuff2,scale,scale);
		}
		
		killC++;
		if(killC>kill&&kill>=0){
			Obj_Delete(nuff);
			Obj_Delete(nuff2);
			Obj_Delete(shff);
			break;
		}
		if(scale<=0){
			Obj_Delete(nuff);
			Obj_Delete(nuff2);
			Obj_Delete(shff);
			break;
		}
		if(OnBomb==true&&bomb==false){
			Obj_Delete(nuff);
			Obj_Delete(nuff2);
			Obj_Delete(shff);
			break;
		}
		if(type!=2){
			if(gny>=MaxY+250||gny<=MinY-250||gnx>=MaxX+250||gny<=MinY-250){
				Obj_Delete(nuff);
				Obj_Delete(nuff2);
				Obj_Delete(shff);
				break;
			}
		}
		if(Obj_BeDeleted(nuff)==true){break;}
		if(Obj_BeDeleted(shff)==true){
			Obj_Delete(nuff2);
			Obj_Delete(nuff);
			break;
		}
		yield;
	}
}