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 frame=0;
    let x=GetX;
    let y=GetY;
    let dir=GetAngle;
    let angle=90+GetArgument[1];
    let rot=GetArgument[0];
    let xv=cos(angle)*1.2;
    let yv=sin(angle)*1.2;
    let radius=0;
    let delay=GetSpeed*3;
    let num=GetSpeed;

    @Initialize {
	SetInvincibility(100+delay);
	SetLife(rand(20,60)+10000);
	SetDamageRate(100,100);
	shotinit;
	MainTask;
    }
    task MainTask{
	SetSpeed(0);
	let color=sin((delay/3)*(360/4))*0.5+0.5;
	let colorarray=[255,255-color*100,255];
	Wait(delay);
	Wait(100);
	let numshots=1;
	loop{
		if(GetY<GetClipMaxY-120&&numshots%3!=0&&!deleteobjects){
			SE("shot1");
			//CreateExplosionEX(3,GetX,GetY,0.01,colorarray,0.1,20);
			SetShotColor(colorarray[0],colorarray[1],colorarray[2]);
			CreateShot01(GetX,GetY,2,rot+90*dir,WHITE11,10);
			CreateShot01(GetX,GetY,2,rot-90*dir,PURPLE11,10);
			SetShotColor(255,255,255);
		}
		numshots++;
		Wait(16);
	}
    }



    @MainLoop{
	SetCollisionA(GetX,GetY,20);
	SetCollisionB(GetX,GetY,10);

	yield;
	SetX(x+cos(rot)*radius);
	SetY(y+sin(rot)*radius);
	if(delay==0){
		x+=xv;
		y+=yv;
		rot+=dir*((360/16)/16);
		if(frame<=90){
			radius=sin(frame)*(absolute(angle-90)/15*50+50);
		}
		frame++;
	}else{
		delay--;
	}

	if(GetLife<10000||GetTimer2<0.2||GetY>GetClipMaxY+20||GetCommonDataDefault("KillDoll",false)){VanishEnemy;}
    }
    @DrawLoop{
	DrawDoll(GetX,GetY,frame,1);
    }
    @Finalize{
	DollFinalize;
	let color=RainbowArray(rand(300,360),100,155);
	deleteobjects=true;
	yield;
	deleteobjects=false;
	if(GetLife<10000&&GetLife!=0){

		AddScore(500);

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

		SE("enemyexplode");

		DamageAlice(10);

		CreateExplosion(0,GetX,GetY,1,[color[0]-prand(0,100),color[1]-prand(0,100),color[2]-prand(0,100)],0.2);
		CreateExplosion(0,GetX,GetY,1,[color[0]-prand(0,100),color[1]-prand(0,100),color[2]-prand(0,100)],0.2/2);
		CreateExplosion(0,GetX,GetY,1,[color[0]-prand(0,100),color[1]-prand(0,100),color[2]-prand(0,100)],0.2/4);

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

    }
}

