#e
#Title[_eVY ver1.00]
#Text[]
#Image[.]
#BackGround[User]
#Player[FREE]
#ScriptVersion[2]
script_enemy_main {
    let name    = "_eVY";
let csd = GetCurrentScriptDirectory;
    let imgBoss =csd ~ "lib/patchouli_dot.png"; 
    let imgFam  = csd ~ "img\familiar.png";
	let imgShot=csd~"img\shot_All.png";
SetRateScoreSystemEnable(false);
    // ʒu
    let xIni    = 100;
    let yIni    = GetClipMinY + 64;
let imgLetter =csd ~ "img/border.png"; 
	let MinLineY=400;
	let MaxLineY=100;
	let MinLineX=169;
	let MaxLineX=294;
let PuyoExist=[];
ascent(let i in 0..84)
{
	PuyoExist=PuyoExist ~ [0];
}

let PuyoExistCheck=[];
ascent(let i in 0..84)
{
	PuyoExistCheck=PuyoExistCheck ~ [0];
}

ascent(let i in 79..84)
{
	PuyoExist[i]=1;
	PuyoExistCheck[i]=1;
}

let NEXT=true;
    @Initialize {
	Expert;
	ExtendPlayer(-GetPlayerLife+1);
       LoadUserShotData(GetCurrentScriptDirectory~".\..\img\shot_All.txt");
	ForbidShot(true);
ForbidBomb(true);
        SetLife(1600);
        SetDamageRate(5, 5);
        LoadGraphic(imgBoss);
        LoadGraphic(imgFam);
        LoadGraphic(imgShot);
        LoadGraphic(imgLetter);
        SetTexture(imgBoss);
	InitializeAction();
	PuyoDraw;
        TMain;
    }

    @MainLoop {
        SetCollisionA(GetX, GetY, 32);
        SetCollisionB(GetX, GetY, 16);
        yield;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
	DrawBoss( imgBoss );
    }

    @Finalize {
        DeleteGraphic(imgBoss);
    }

    // C^XN
task TMain 
{
	yield;
	RankDisplay;
	PlayerPosition;
	standBy;
	lineY(155,112,90);
	lineX(155,437,0);
	shot;

}

task PlayerPosition
{
loop
{
SetPlayerX(100);
SetPlayerY(GetClipMaxY-32);
yield;
}
}

task lineY(let x,let y,let angle)
{
ascent(let i in 0..7)
{
LASER(x+i*25,y,angle,325);
}
}

task lineX(let x,let y,let angle)
{
ascent(let i in 0..14)
{
LASER(x,y-i*25,angle,150);
}
}

sub standBy//ʒu
{
	SetAction(ACT_MOVE, 60);
	let wIni = 60;
	SetMovePosition02(xIni, yIni, wIni);
	SetInvincibility(wIni);
	//wait(wIni);
}


task LASER(let x,let y,let angle,let length)
{
		let obj= Obj_Create(OBJ_LASER);
		Obj_SetPosition(obj,x,y);
		ObjLaser_SetWidth(obj,5);
		ObjLaser_SetLength(obj,length);
		ObjLaser_SetSource(obj,false);
        	ObjShot_SetGraphic(obj,161); 
		if(x==155 && y==137)
		{
			ObjShot_SetGraphic(obj,153); 
		}
		Obj_SetAngle(obj, angle);
		Obj_SetAutoDelete(obj,false);
		ObjLaser_SetSource(obj,false);
		loop
		{
		if(x==155 && y==137)
		{
			break;
		}
		ObjShot_SetDelay(obj,100);
		yield;
		}
}

task shot
{
let i=0;
Yokokupuyo(PuyoColor[i],PuyoColor[i+1]);
Yokokupuyo2(PuyoColor[i+2],PuyoColor[i+3]);
wait(60);
loop
{
while(NEXT==false){yield;}
if(PuyoExist[8]!=0)
{
break;
}
puyo(PuyoColor[i],PuyoColor[i+1]);
Yokokupuyo(PuyoColor[i+2],PuyoColor[i+3]);
Yokokupuyo2(PuyoColor[i+4],PuyoColor[i+5]);
i+=2;
if(i>=250)
{
i=0;
}
NEXT=false;
yield;
}
CreateLaserA(0,GetX,GetY,700,150,RED01,30);
SetLaserDataA(0,0,90,0,0,0,0);
FireShot(0);
}

let PuyoColor=[];
loop(256)
{
	PuyoColor=PuyoColor~[rand_int(1,4)]
}

task Yokokupuyo(color1,color2)
{
  		let obj = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj,MinLineX+100,MaxLineY-25);
		ObjEffect_SetTexture(obj, imgShot);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj, ADD);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -15, -15);
		ObjEffect_SetVertexXY(obj, 1,  15, -15);
		ObjEffect_SetVertexXY(obj, 2,  15,  15);
		ObjEffect_SetVertexXY(obj, 3, -15,  15);
		
		ObjEffect_SetVertexUV(obj, 0,  30*color1-30,  49);
		ObjEffect_SetVertexUV(obj, 1,  30*color1, 49);
		ObjEffect_SetVertexUV(obj, 2, 30*color1, 80);
		ObjEffect_SetVertexUV(obj, 3, 30*color1-30, 80);

		ObjEffect_SetLayer(obj, 4);
		ObjEffect_SetAngle(obj, 0,0,0);

		let obj2 = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj2,MinLineX+100,MaxLineY-50);
		ObjEffect_SetTexture(obj2, imgShot);
		ObjEffect_SetPrimitiveType(obj2, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj2, ADD);
		ObjEffect_CreateVertex(obj2, 4);
		ObjEffect_SetVertexXY(obj2, 0, -15, -15);
		ObjEffect_SetVertexXY(obj2, 1,  15, -15);
		ObjEffect_SetVertexXY(obj2, 2,  15,  15);
		ObjEffect_SetVertexXY(obj2, 3, -15,  15);
		
		ObjEffect_SetVertexUV(obj2, 0,  30*color2-30,  49);
		ObjEffect_SetVertexUV(obj2, 1,  30*color2, 49);
		ObjEffect_SetVertexUV(obj2, 2, 30*color2, 80);
		ObjEffect_SetVertexUV(obj2, 3, 30*color2-30, 80);

		ObjEffect_SetLayer(obj2, 4);
		ObjEffect_SetAngle(obj2, 0,0,0);
}

task Yokokupuyo2(color1,color2)
{
  		let obj = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj,MinLineX+125,MaxLineY-25);
		ObjEffect_SetTexture(obj, imgShot);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj, ADD);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -15, -15);
		ObjEffect_SetVertexXY(obj, 1,  15, -15);
		ObjEffect_SetVertexXY(obj, 2,  15,  15);
		ObjEffect_SetVertexXY(obj, 3, -15,  15);
		
		ObjEffect_SetVertexUV(obj, 0,  30*color1-30,  49);
		ObjEffect_SetVertexUV(obj, 1,  30*color1, 49);
		ObjEffect_SetVertexUV(obj, 2, 30*color1, 80);
		ObjEffect_SetVertexUV(obj, 3, 30*color1-30, 80);

		ObjEffect_SetLayer(obj, 4);
		ObjEffect_SetAngle(obj, 0,0,0);
		ObjEffect_SetScale(obj,0.6,0.6);

		let obj2 = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj2,MinLineX+125,MaxLineY-50);
		ObjEffect_SetTexture(obj2, imgShot);
		ObjEffect_SetPrimitiveType(obj2, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj2, ADD);
		ObjEffect_CreateVertex(obj2, 4);
		ObjEffect_SetVertexXY(obj2, 0, -15, -15);
		ObjEffect_SetVertexXY(obj2, 1,  15, -15);
		ObjEffect_SetVertexXY(obj2, 2,  15,  15);
		ObjEffect_SetVertexXY(obj2, 3, -15,  15);
		
		ObjEffect_SetVertexUV(obj2, 0,  30*color2-30,  49);
		ObjEffect_SetVertexUV(obj2, 1,  30*color2, 49);
		ObjEffect_SetVertexUV(obj2, 2, 30*color2, 80);
		ObjEffect_SetVertexUV(obj2, 3, 30*color2-30, 80);

		ObjEffect_SetLayer(obj2, 4);
		ObjEffect_SetAngle(obj2, 0,0,0);
		ObjEffect_SetScale(obj2,0.6,0.6);
}

task puyo(color1,color2)
{
let PosX=2;
let PosY=2;
let speed=1;
let hispeed=5;
let lowspeed=1;
let YMoveCount=0;
let PuyoFormation=100;
  		let obj = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj,MinLineX+PosX*25,MaxLineY+25);
		ObjEffect_SetTexture(obj, imgShot);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj, ADD);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -15, -15);
		ObjEffect_SetVertexXY(obj, 1,  15, -15);
		ObjEffect_SetVertexXY(obj, 2,  15,  15);
		ObjEffect_SetVertexXY(obj, 3, -15,  15);
		
		ObjEffect_SetVertexUV(obj, 0,  30*color1-30,  49);
		ObjEffect_SetVertexUV(obj, 1,  30*color1, 49);
		ObjEffect_SetVertexUV(obj, 2, 30*color1, 80);
		ObjEffect_SetVertexUV(obj, 3, 30*color1-30, 80);

		ObjEffect_SetLayer(obj, 4);
		ObjEffect_SetAngle(obj, 0,0,0);

  		let objE = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(objE,MinLineX+PosX*25,MaxLineY+25);
		ObjEffect_SetTexture(objE, imgShot);
		ObjEffect_SetPrimitiveType(objE, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj, ADD);
		ObjEffect_CreateVertex(objE, 4);
		ObjEffect_SetVertexXY(objE, 0, -15, -15);
		ObjEffect_SetVertexXY(objE, 1,  15, -15);
		ObjEffect_SetVertexXY(objE, 2,  15,  15);
		ObjEffect_SetVertexXY(objE, 3, -15,  15);
		
		ObjEffect_SetVertexUV(objE, 0,  30*8-30,  49);
		ObjEffect_SetVertexUV(objE, 1,  30*8, 49);
		ObjEffect_SetVertexUV(objE, 2, 30*8, 80);
		ObjEffect_SetVertexUV(objE, 3, 30*8-30, 80);

		ObjEffect_SetLayer(objE, 2);
		ObjEffect_SetAngle(objE, 0,0,0);
		ObjEffect_SetScale(objE,1.3,1.3);

		let obj2 = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj2,MinLineX+PosX*25,MaxLineY);
		ObjEffect_SetTexture(obj2, imgShot);
		ObjEffect_SetPrimitiveType(obj2, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj2, ADD);
		ObjEffect_CreateVertex(obj2, 4);
		ObjEffect_SetVertexXY(obj2, 0, -15, -15);
		ObjEffect_SetVertexXY(obj2, 1,  15, -15);
		ObjEffect_SetVertexXY(obj2, 2,  15,  15);
		ObjEffect_SetVertexXY(obj2, 3, -15,  15);
		
		ObjEffect_SetVertexUV(obj2, 0,  30*color2-30,  49);
		ObjEffect_SetVertexUV(obj2, 1,  30*color2, 49);
		ObjEffect_SetVertexUV(obj2, 2, 30*color2, 80);
		ObjEffect_SetVertexUV(obj2, 3, 30*color2-30, 80);

		ObjEffect_SetLayer(obj2, 4);
		ObjEffect_SetAngle(obj2, 0,0,0);

loop
{

Obj_SetPosition(obj,MinLineX+PosX*25,MaxLineY+PosY*25);
Obj_SetPosition(objE,MinLineX+PosX*25,MaxLineY+PosY*25);

if(GetKeyState(VK_SHOT) == KEY_PUSH)
{
	PuyoFormation+=1;
	if(PosX==5 && PuyoFormation%4==1)
	{
			PuyoFormation-=1;
	}
	if(PosX==0 && PuyoFormation%4==3)
	{
			PuyoFormation-=1;
	}
	if(PuyoFormation%4==1 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25+1]!=0)
	{
			PuyoFormation-=1;
	}
	if(PuyoFormation%4==3 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-1]!=0)
	{
			PuyoFormation-=1;
	}

	if(PuyoFormation%4==2 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25+6]!=0)
	{
			PuyoFormation-=1;
	}

	if((Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25<=72)
	{
	if(PuyoFormation%4==2 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25+6]!=0)
	{
			PuyoFormation-=1;
	}
	}
}
if(GetKeyState(VK_BOMB) == KEY_PUSH)
{
	PuyoFormation-=1;
	if(PosX==5 && PuyoFormation%4==1)
	{
			PuyoFormation+=1;
	}
	if(PosX==0 && PuyoFormation%4==3)
	{
			PuyoFormation+=1;
	}
	if(PuyoFormation%4==3 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-1]!=0)
	{
			PuyoFormation+=1;
	}
	if(PuyoFormation%4==1 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25+1]!=0)
	{
			PuyoFormation+=1;
	}

	if(PuyoFormation%4==2 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25+6]!=0)
	{
			PuyoFormation+=1;
	}

	if((Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25<=71)
	{
	if(PuyoFormation%4==2 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25+6]!=0)
	{
			PuyoFormation+=1;
	}
	}
}

alternative(PuyoFormation%4)
case(0)
{
	Obj_SetPosition(obj2,MinLineX+PosX*25,MaxLineY+PosY*25-25);
}
case(1)
{
	Obj_SetPosition(obj2,MinLineX+PosX*25+25,MaxLineY+PosY*25);
}
case(2)
{
	Obj_SetPosition(obj2,MinLineX+PosX*25,MaxLineY+PosY*25+25);
}
case(3)
{
	Obj_SetPosition(obj2,MinLineX+PosX*25-25,MaxLineY+PosY*25);
}
YMoveCount+=YMoveCountTask;
if(GetKeyState(VK_DOWN) == KEY_PUSH || GetKeyState(VK_DOWN) == KEY_HOLD)
{
	YMoveCount+=30;
	AddScore(Rank);
}
if(YMoveCount>=60)
{
alternative(PuyoFormation%4)
case(0)
{
	if(PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25]==0)
	{
		PosY+=1;
	}
	else
	{
		PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-6]=color1;
		PuyoExist[(Obj_GetY(obj2)-MaxLineY)*6/25+(Obj_GetX(obj2)-MinLineX)/25-6]=color2;
		break;
	}
}
case(1)
{
	if(PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25]==0 && PuyoExist[(Obj_GetY(obj2)-MaxLineY)*6/25+(Obj_GetX(obj2)-MinLineX)/25]==0)
	{
		PosY+=1;
	}
	else
	{
		PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-6]=color1;
		PuyoExist[(Obj_GetY(obj2)-MaxLineY)*6/25+(Obj_GetX(obj2)-MinLineX)/25-6]=color2;
		break;
	}
}
case(2)
{
	if(PuyoExist[(Obj_GetY(obj2)-MaxLineY)*6/25+(Obj_GetX(obj2)-MinLineX)/25]==0)
	{
		PosY+=1;
	}
	else
	{
		PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-6]=color1;
		PuyoExist[(Obj_GetY(obj2)-MaxLineY)*6/25+(Obj_GetX(obj2)-MinLineX)/25-6]=color2;
		break;
	}
}
case(3)
{
	if(PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25]==0 && PuyoExist[(Obj_GetY(obj2)-MaxLineY)*6/25+(Obj_GetX(obj2)-MinLineX)/25]==0)
	{
		PosY+=1;
	}
	else
	{
		PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-6]=color1;
		PuyoExist[(Obj_GetY(obj2)-MaxLineY)*6/25+(Obj_GetX(obj2)-MinLineX)/25-6]=color2;
		break;
	}
}
	YMoveCount=0;
}

if(GetKeyState(VK_RIGHT) == KEY_PUSH && PosX<=4  && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-5]==0)
{
	PosX+=1;
	if(PuyoFormation%4==2 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25+1])
	{
			PosX-=1;
	}
	if(PuyoFormation%4==1 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25+2])
	{
			PosX-=1;
	}
	if(PuyoFormation%4==1 && PosX==5)
	{
			PosX-=1;
	}
}
if(GetKeyState(VK_LEFT) == KEY_PUSH && PosX>=1  && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-7]==0)
{
	PosX-=1;
	if(PuyoFormation%4==2 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-1])
	{
			PosX+=1;
	}
	if(PuyoFormation%4==3 && PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-2])
	{
			PosX-=1;
	}
	if(PuyoFormation%4==3 && PosX==0)
	{
			PosX+=1;
	}

}
if(Obj_GetY(obj)>=425 || Obj_GetY(obj2)>=425)
{
PuyoExist[(Obj_GetY(obj)-MaxLineY)*6/25+(Obj_GetX(obj)-MinLineX)/25-6]=color1;
PuyoExist[(Obj_GetY(obj2)-MaxLineY)*6/25+(Obj_GetX(obj2)-MinLineX)/25-6]=color2;
break;
}
NEXT=false;
yield;
}
wait(10);
Obj_Delete(obj);
Obj_Delete(objE);
Obj_Delete(obj2);
while(ErazeFlag==true)
{
Chain++;
ErazeFlag=false;
PuyoFall;
wait(30);
PuyoExistChecking;
PuyoEraze;
wait(30);
}
NEXT=true;
ErazeFlag=true;
Chain=0;
}

let Chain=0;

function YMoveCountTask
{
if(GetPoint<=50)
{
return(1);
}
else if(GetPoint<=150)
{
return(2);
}
else if(GetPoint<=300)
{
return(4);
}
else if(GetPoint<=500)
{
return(6);
}
else if(GetPoint<=750)
{
return(8);
}
else
{
return(10);
}
}

function Rank
{
if(GetPoint<=50)
{
return(1);
}
else if(GetPoint<=150)
{
return(2);
}
else if(GetPoint<=300)
{
return(3);
}
else if(GetPoint<=500)
{
return(4);
}
else if(GetPoint<=750)
{
return(5);
}
else
{
return(10);
}
}

task RankDisplay
{
AddGraze(1);
while(GetPoint<=50){yield;}
AddGraze(1);
while(GetPoint<=150){yield;}
AddGraze(1);
while(GetPoint<=300){yield;}
AddGraze(1);
while(GetPoint<=500){yield;}
AddGraze(1);
while(GetPoint<=750){yield;}
AddGraze(5);
}

task PuyoDraw
{
ascent(let i in 0..79)
{
PuyoDrawing(i);
}
}

task PuyoDrawing(No)
{
  		let obj = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj,MinLineX+(No%6)*25,MaxLineY+trunc(No/6)*25+25);
		ObjEffect_SetTexture(obj, imgShot);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj, ADD);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -15, -15);
		ObjEffect_SetVertexXY(obj, 1,  15, -15);
		ObjEffect_SetVertexXY(obj, 2,  15,  15);
		ObjEffect_SetVertexXY(obj, 3, -15,  15);
		
		ObjEffect_SetVertexUV(obj, 0,  0,  49);
		ObjEffect_SetVertexUV(obj, 1,  30, 49);
		ObjEffect_SetVertexUV(obj, 2, 30, 80);
		ObjEffect_SetVertexUV(obj, 3, 0, 80);
		ObjEffect_SetLayer(obj, 4);
		ObjEffect_SetAngle(obj, 0,0,0);
		loop
		{
		if(PuyoExist[No]==0 || No<=5)
		{
			ObjEffect_SetVertexColor(obj,0,0,255,255,255);
			ObjEffect_SetVertexColor(obj,1,0,255,255,255);
			ObjEffect_SetVertexColor(obj,2,0,255,255,255);
			ObjEffect_SetVertexColor(obj,3,0,255,255,255);
		}
		else
		{
			ObjEffect_SetVertexColor(obj,0,255,255,255,255);
			ObjEffect_SetVertexColor(obj,1,255,255,255,255);
			ObjEffect_SetVertexColor(obj,2,255,255,255,255);
			ObjEffect_SetVertexColor(obj,3,255,255,255,255);
		}

		if(PuyoExist[No]==1)
		{
			ObjEffect_SetVertexUV(obj, 0,  0,  49);
			ObjEffect_SetVertexUV(obj, 1,  30, 49);
			ObjEffect_SetVertexUV(obj, 2, 30, 80);
			ObjEffect_SetVertexUV(obj, 3, 0, 80);
		}
		if(PuyoExist[No]==2)
		{
			ObjEffect_SetVertexUV(obj, 0,  30,  49);
			ObjEffect_SetVertexUV(obj, 1,  60, 49);
			ObjEffect_SetVertexUV(obj, 2, 60, 80);
			ObjEffect_SetVertexUV(obj, 3, 30, 80);
		}
		if(PuyoExist[No]==3)
		{
			ObjEffect_SetVertexUV(obj, 0,  60,  49);
			ObjEffect_SetVertexUV(obj, 1,  90, 49);
			ObjEffect_SetVertexUV(obj, 2, 90, 80);
			ObjEffect_SetVertexUV(obj, 3, 60, 80);
		}
		if(PuyoExist[No]==4)
		{
			ObjEffect_SetVertexUV(obj, 0,  90,  49);
			ObjEffect_SetVertexUV(obj, 1,  120, 49);
			ObjEffect_SetVertexUV(obj, 2, 120, 80);
			ObjEffect_SetVertexUV(obj, 3, 90, 80);
		}
		if(PuyoExist[No]==5)
		{
			ObjEffect_SetVertexUV(obj, 0,  120,  49);
			ObjEffect_SetVertexUV(obj, 1,  150, 49);
			ObjEffect_SetVertexUV(obj, 2, 150, 80);
			ObjEffect_SetVertexUV(obj, 3, 120, 80);
		}
		yield;
		}
}

sub PuyoFall
{
loop(200)
{
ascent(let i in 0..72)
{
PuyoFalling(i);
}
}
}

task PuyoFalling(No)
{
if(PuyoExist[No]!=0 && PuyoExist[No+6]==0)
{
PuyoExist[No+6]=PuyoExist[No];
PuyoExist[No]=0;
}
}

task PuyoExistChecking
{
ascent(let i in 0..79)
{
	PuyoExistCheck[i]=PuyoExist[i];
}
}

task PuyoEraze
{
PuyoJointScan;
ascent(let i in 0..79)
{
	PuyoErazing(i);
}
}

task PuyoErazing(No)
{
	if(PuyoExistJoin[No]>=4)
	{
		ErazeEffect(No,PuyoExist[No],PuyoExistJoin[No]);
		PuyoExist[No]=0;
		ErazeFlag=true;
	}
}

let ErazeFlag=true;
let PuyoExistJoin=[];

ascent(let i in 0..79)
{
	PuyoExistJoin=PuyoExistJoin ~ [0];
}

task PuyoJointScan
{
ascent(let i in 0..79)
{
	PuyoExistJoin[i]=0;
}
ascent(let i in 0..78)
{
	if(PuyoExist[i]!=0)
	{
	PuyoScan(i,PuyoExist[i]);
	}
}
}

function PuyoScan(let No,let color)
{
	PuyoExistJoin[No]=PuyoExistJoin[No]+1;
	PuyoExistCheck[No]=0;
	if((No)%6!=5)
	{
		if(PuyoExistCheck[No+1]==color)
		{
			PuyoScan(No+1,color);
		}
	}
	if(No<=72)
	{
		if(PuyoExistCheck[No+6]==color)
		{
			PuyoScan(No+6,color);
		}
	}
	if((No)%6!=0)
	{
		if(PuyoExistCheck[No-1]==color)
		{
			PuyoScan(No-1,color);
		}
	}
	if(No>=6)
	{
		if(PuyoExistCheck[No-6]==color)
		{
			PuyoScan(No-6,color);
		}
	}
	PuyoExistCheck[No]=color;
}

task ErazeEffect(No,color,join)
{
ChainNumDraw(450,400,join);
ChainNumDraw(500,400,40);
ChainNumDraw(565,400,Chain);
KakeruDisplay(465,400,255,255,200,200);
KakeruDisplay(525,400,255,255,200,200);
AddScore(40*Chain*Rank);
AddPoint(Chain);
ChainNumDraw(450,280,Chain);
ChainDisplay(550,280,255,255,200,200);
ascent(let i in 0..8)
{
	ErazeEffectstar(No,color,i*45+45);
}
}

task ErazeEffectstar(No,color,angle)
{
  		let obj = Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj,MinLineX+(No%6)*25,MaxLineY+trunc(No/6)*25+25);
		ObjEffect_SetTexture(obj, imgShot);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		//ObjEffect_SetRenderState(obj, ADD);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -10, -10);
		ObjEffect_SetVertexXY(obj, 1,  10, -10);
		ObjEffect_SetVertexXY(obj, 2,  10,  10);
		ObjEffect_SetVertexXY(obj, 3, -10,  10);
		
		ObjEffect_SetVertexUV(obj, 0,  20*color-20,  317);
		ObjEffect_SetVertexUV(obj, 1,  20*color, 317);
		ObjEffect_SetVertexUV(obj, 2, 20*color, 338);
		ObjEffect_SetVertexUV(obj, 3, 20*color-20, 338);
		ObjEffect_SetLayer(obj, 4);
		ObjEffect_SetAngle(obj, 0,0,0);
		Obj_SetSpeed(obj,5);
		Obj_SetAngle(obj,angle);
		wait(10);
		Obj_Delete(obj);
}

task ChainNumDraw(let x,let y,let number)
{
let num=[];
ascent(let k in 0..6)
{
num = num ~ [k];
}
	num[0]=trunc(number);
	num[1]=trunc(number%10);
	num[2]=trunc(number%100/10);
	num[3]=trunc(number%1000/100);
	num[4]=trunc(number%10000/1000);
	num[5]=trunc(number%100000/10000);
	ascent(let i in 1..3)
	{
		if(num[0]>=10^(i-1))
		{
			NumDisplay(x-(i-1)*15,y,num[i],255,255,200,200);
		}
	}
}

task NumDisplay(let x,let y,let num,Alpha,R,G,B)
{
		let scx=1.2;
		let scy=1.2;
		let obj0 = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj0,imgLetter);
		ObjEffect_SetPrimitiveType(obj0, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj0, ADD); 
		ObjEffect_CreateVertex(obj0, 4);
		ObjEffect_SetVertexXY(obj0, 0, -7, -8);
		ObjEffect_SetVertexXY(obj0, 1, 7,  -8);
		ObjEffect_SetVertexXY(obj0, 2, 7, 8);
		ObjEffect_SetVertexXY(obj0, 3,  -7,  8);
		
		ObjEffect_SetVertexUV(obj0, 0,  2+14*num,  114);
		ObjEffect_SetVertexUV(obj0, 1,  14+14*num, 114);
		ObjEffect_SetVertexUV(obj0, 2, 14+14*num,  131);
		ObjEffect_SetVertexUV(obj0, 3, 2+14*num, 131);

		ObjEffect_SetVertexColor(obj0,0,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,1,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,2,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,3,Alpha,R,G,B);
		
		ObjEffect_SetScale(obj0, scx,scy);
		Obj_SetPosition(obj0,x,y+5);
		ObjEffect_SetLayer(obj0,8);
		wait(60);
		Obj_Delete(obj0);
}

task ChainDisplay(let x,let y,Alpha,R,G,B)
{
		let scx=1.2;
		let scy=1.2;
		let obj0 = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj0,imgLetter);
		ObjEffect_SetPrimitiveType(obj0, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj0, ADD); 
		ObjEffect_CreateVertex(obj0, 4);
		ObjEffect_SetVertexXY(obj0, 0, -40, -8);
		ObjEffect_SetVertexXY(obj0, 1, 40,  -8);
		ObjEffect_SetVertexXY(obj0, 2, 40, 8);
		ObjEffect_SetVertexXY(obj0, 3,  -40,  8);
		
		ObjEffect_SetVertexUV(obj0, 0,  0,  144);
		ObjEffect_SetVertexUV(obj0, 1,  80, 144);
		ObjEffect_SetVertexUV(obj0, 2, 80,  160);
		ObjEffect_SetVertexUV(obj0, 3, 0, 160);

		ObjEffect_SetVertexColor(obj0,0,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,1,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,2,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,3,Alpha,R,G,B);
		
		ObjEffect_SetScale(obj0, scx,scy);
		Obj_SetPosition(obj0,x,y+5);
		ObjEffect_SetLayer(obj0,8);
		wait(60);
		Obj_Delete(obj0);
}


task KakeruDisplay(let x,let y,Alpha,R,G,B)
{
		let scx=1.2;
		let scy=1.2;
		let obj0 = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj0,imgLetter);
		ObjEffect_SetPrimitiveType(obj0, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj0, ADD); 
		ObjEffect_CreateVertex(obj0, 4);
		ObjEffect_SetVertexXY(obj0, 0, -5, -4);
		ObjEffect_SetVertexXY(obj0, 1, 5,  -4);
		ObjEffect_SetVertexXY(obj0, 2, 5, 4);
		ObjEffect_SetVertexXY(obj0, 3,  -5,  4);
		
		ObjEffect_SetVertexUV(obj0, 0,  90,  155);
		ObjEffect_SetVertexUV(obj0, 1,  100, 155);
		ObjEffect_SetVertexUV(obj0, 2, 100,  163);
		ObjEffect_SetVertexUV(obj0, 3, 90, 163);

		ObjEffect_SetVertexColor(obj0,0,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,1,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,2,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj0,3,Alpha,R,G,B);
		
		ObjEffect_SetScale(obj0, scx,scy);
		Obj_SetPosition(obj0,x,y+5);
		ObjEffect_SetLayer(obj0,8);
		wait(60);
		Obj_Delete(obj0);
}

#include_function ".\data.txt"
#include_function ".\lib/lib_anime_Patchouli.txt"
}
