script_enemy_main{
    let GCSD=GetCurrentScriptDirectory;
    #include_function ".\..\ShotSheet\shot_replace.dnh"
    #include_function ".\..\functions.txt"
    #include_function ".\alice_functions_doll.txt"

    function Wait(frames){loop(frames){yield;}}

    let angvel;
    let angle;
    let cx;
    let cy;
    let frame=0;
    let color=GetArgument;
    let alpha=0;

    @Initialize {
	SetInvincibility(70);
	SetLife(100+10000);
	SetDamageRate(100,100);
	shotinit;
	MainTask;
    }

task MainTask{
	let spin=GetSign(GetSpeed);
	SetSpeed(absolute(GetSpeed));
	if(GetArgument==0){
		Shoot0;
	}else if(GetArgument==1){
		Shoot1;
	}else if(GetArgument==2){
		Shoot2;
	}else if(GetArgument==3){
		Shoot3;
	}else if(GetArgument==4){
		Shoot4;
	}
	loop(30){
		SetAngle(GetAngle+spin*0.5);
		alpha+=255/30;
		yield;
	}
	alpha=255;
	loop(150){
		SetAngle(GetAngle+spin*0.5);
		yield;
	}
}
task Shoot0{
	loop{
		CreateShot01(GetX,GetY,1.5,GetAngle+180,RED01,0);
		Wait(10);
	}
}
task Shoot1{
	loop{
		Wait(20);
		CreateShot01(GetX,GetY,1,GetAngle+90,YELLOW02,0);
		CreateShot01(GetX,GetY,1,GetAngle-90,YELLOW02,0);
	}
}
task Shoot2{
	let delay=1;
	loop{
		Wait(20);
		loop(5){
			CreateShot01(GetX,GetY,1,GetAngle+110,GREEN11,0);
			CreateShot01(GetX,GetY,1,GetAngle-110,GREEN11,0);
			delay=-delay;
			Wait(2);
		}
	}
}
task Shoot3{
	let k=0;
	loop{
		Wait(30);
		k=0;
		loop(6){
			CreateShot01(GetX,GetY,1,GetAngle+k,BLUE21,0);
			k+=360/6;
		}
	}
}
task Shoot4{
	loop{
		Wait(30);
		CreateShot02(GetX,GetY,0,GetAngleToPlayer,1.5/60,1.5,PURPLE56,0);
	}
}

    @MainLoop{
	if(alpha>=255){
		SetCollisionA(GetX,GetY,20);
		SetCollisionB(GetX,GetY,10);
	}

	frame++;
	if(GetLife<10000||GetTimer2<0.2||OffScreen(GetX,GetY,20)||GetCommonDataDefault("KillDoll",false)){VanishEnemy;}	

	yield;
    }
    @DrawLoop{
	DrawDoll(GetX,GetY,frame,alpha/255);
    }
    @Finalize{
	let expcolor=RainbowArray([0,60,180,240,320][GetArgument],100,155);
	deleteobjects=true;
	yield;
	deleteobjects=false;
	if(GetLife<10000&&GetLife>1){

		AddScore(500);

		if(GetCommonDataDefault("NoSpawnPoints",0)==0){
			CreateItems(GetX,GetY,0,1,0,0,0);
		}

		SE("enemyexplode");

		CreateExplosion(0,GetX,GetY,1,[expcolor[0]-prand(0,100),expcolor[1]-prand(0,100),expcolor[2]-prand(0,100)],0.2);
		CreateExplosion(0,GetX,GetY,1,[expcolor[0]-prand(0,100),expcolor[1]-prand(0,100),expcolor[2]-prand(0,100)],0.2/2);
		CreateExplosion(0,GetX,GetY,1,[expcolor[0]-prand(0,100),expcolor[1]-prand(0,100),expcolor[2]-prand(0,100)],0.2/4);
		SetCommonData("Alicedamage",-50);

	}
	if(GetTimer2<0.5||GetLife<=1){
		CreateExplosion(0,GetX,GetY,1,[expcolor[0]-prand(0,100),expcolor[1]-prand(0,100),expcolor[2]-prand(0,100)],0.1);
	}

    }
}

