script_enemy_main {
	#include_function ".\..\ShotSheet\shot_replace.dnh"
	#include_function ".\..\functions.txt"

	SpellID=-1;

	let frame = 0;

	let imgMeteo=GPSD~"img\meteo.png";

    @Initialize {
	if(GetArgument>=0){
	        SetLife([500,500,500,500,700,700,900][GetArgument]+10000);
	}else{
		SetLife(500+10000);
	}
	SetDamageRate(180,100);
	color=RainbowArray(GetSpeed,127,128);
	color2=RainbowArray(GetAngle,127,128);
	colorhalf=[(color[0]+color2[0])/2,(color[1]+color2[1])/2,(color[2]+color2[2])/2];
	SetSpeed(0);
	SetAngle(0);
	SetX(GetX-1000);
	shotinit;
	SpawnAnimation;
	if(GetArgument==0){Shoot0;}
	if(GetArgument==1){Shoot1;}
	if(GetArgument==2){Shoot2;}
	if(GetArgument==3){Shoot3;}
	if(GetArgument==4){Shoot4;}
	if(GetArgument==5){Shoot5;}
    }

	let color=[0,0,0];
	let color2=[0,0,0];
	let colorhalf=[0,0,0];

	let BeDeleted=1;
	let MaxGraze=0;
	let prevlife=0;
	let totallife=0;
	let ii=0;
	let initialized=0;

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

task Shoot0{
	while(initialized<1){yield;}
	let k;
	let angle;
	let color=rand_int(0,2);
	let colors=[0,5,6];
	let shapes=[RED02,RED01,RED11];
	loop{
		angle=rand(0,360);
		loop(3){
			k=2;
			loop(3){
				CreateShot01Delay(GetX+cos(angle)*30,GetY+sin(angle)*30,2-k/8,angle,shapes[k]+colors[color%3],20+k*2,40,20,k*15);
				k--;
			}
			angle+=120;
		}
		color++;
		loop(2){
			SE("shot1");
			Wait(10);
		}
	}
}
task Shoot1{
	while(initialized<1){yield;}
	let k;
	let angle;
	let angle2;
	let color=rand_int(0,2);
	let colors=[1,4,7];
	let shapes=[RED02,RED01,RED11];
	loop{
		angle=GetAngleToPlayer+rand(-30,30);
		angle2=-6;
		loop(3){
			k=2;
			loop(3){
				CreateShot01Delay(GetX+cos(angle)*30,GetY+sin(angle)*30,2-k/8-absolute(angle2)/14,angle+angle2,shapes[k]+colors[color%3],20+k*2,40,20,k*15);
				k--;
			}
			angle2+=6;
		}
		color++;
		loop(3){
			SE("shot1");
			Wait(15);
		}
		Wait(5);
	}
}
task Shoot2{
	while(initialized<1){yield;}
	let angle=0;
	loop{
		SE("shot1");
		CreateShot01Delay(GetX+cos(angle)*50,GetY+sin(angle)*50,1,angle-90,PURPLE21,20,40,16,20);
		angle+=rand(20,30);
		Wait(10);
	}
}
task Shoot3{
	while(initialized<1){yield;}
	let angle=0;
	let k=0;
	loop{
		SE("laser1");
		angle=90+rand(-60,60);
		CreateLaser01(GetX,GetY,2.4,angle,200,30,SP03,0);
		Wait(50);
	}
}
task Shoot4{
	let color=[0,1,4,5,6][rand_int(0,4)];
	while(initialized<1){yield;}
	let angle=0;
	let k=0;
	loop{
		SE("shot1");
		angle=GetAngleToPlayer+rand(-5,5);
		CreateShot01Delay(GetX+cos(angle)*30,GetY+sin(angle)*30,rand(1.5,2.5),angle,RED01+color,30,60,20,20);
		Wait(20);
	}
}
task Shoot5{
	let color=[0,1,4,5,6][rand_int(0,4)];
	while(initialized<1){yield;}
	let angle=0;
	let k=0;
	let v;
	loop{
		SE("shot1");
		v=rand(1.5,2.2);
		angle=GetAngleToPlayer+rand(-7,7);
		CreateShot01Delay(GetX+cos(angle)*30,GetY+sin(angle)*30,v,angle,RED01+color,30,60,20,20);
		CreateShot01Delay(GetX+cos(angle)*30,GetY+sin(angle)*30,v*0.8,angle+3,RED11+color,30,60,20,20);
		CreateShot01Delay(GetX+cos(angle)*30,GetY+sin(angle)*30,v*0.8,angle-3,RED11+color,30,60,20,20);
		Wait(40);
	}
}


    @MainLoop {

	AddScore(((prevlife - (upper(GetLife-10000,0)) )/totallife)*(10000));
	prevlife=upper(GetLife-10000,0);

	if(initialized==1){
	        SetCollisionA(GetX, GetY, 30);
		SetCollisionB(GetX, GetY, 15);
	}

	if((GetX<GetClipMinX-64||GetX>GetClipMaxX+64||GetY<GetClipMinY-64||GetY>GetClipMaxY+64)&&BeDeleted==1){
		VanishEnemy;
	}

	if(GetLife<10000){VanishEnemy;}	
	if(frame%2==0){
		let i=frame/2;
		let dir=rand(0,360);
		let offset=rand(0,30);
		sparksx[i%8]=GetX+cos(dir)*offset;
		sparksy[i%8]=GetY+sin(dir)*offset;
		sparkst[i%8]=rand_int(0,7);
		sparksxv[i%8]=rand(-20,20);
		sparksyv[i%8]=rand(40,90);
		sparksa[i%8]=rand(0,360);
		sparkss[i%8]=frame;
	}
	yield;
	frame++;
}

	let frame=rand_int(0,1000);
	let sparksx=[0,0,0,0,0,0,0,0];
	let sparksy=[0,0,0,0,0,0,0,0];
	let sparksa=[0,0,0,0,0,0,0,0];
	let sparksxv=[0,0,0,0,0,0,0,0];
	let sparksyv=[0,0,0,0,0,0,0,0];
	let sparkss=[0,0,0,0,0,0,0,0];	//spawned frame
	let sparkst=[-1,-1,-1,-1,-1,-1,-1,-1];

    @DrawLoop {
	if(BeDeleted==0){
		SetX(GetX+1000);
	}
	SetTexture(imgMeteo);
	SetRenderState(ADD);
	SetGraphicScale(1.5,1.5);

	let i=0;
	let percentage;
	loop(8){
		if(sparkst[i]>-1){
			percentage=(frame-sparkss[i])/(8*2);
			SetColor(color[0]*0.7*(1-percentage)*initialized,color[1]*0.7*(1-percentage)*initialized,color[2]*0.7*(1-percentage)*initialized);
			SetGraphicAngle(0,0,sparksa[i]);
			SetSparkGraphicRect(sparkst[i]);
			DrawGraphic(sparksx[i]+percentage*sparksxv[i],sparksy[i]-percentage*sparksyv[i]);
		}
		i++;
	}


	SetFlameGraphicRect(trunc(frame/4+1.5)%3);
	SetGraphicScale(-2.5,2.5);
	SetGraphicAngle(0,0,0);
	SetColor(color[0]*0.5*initialized,color[1]*0.5*initialized,color[2]*0.5*initialized);
	DrawGraphic(GetX-3+sin(frame*6.63)*3,GetY-13+sin(frame*3.37)*3);

	SetFlameGraphicRect(trunc(frame/4)%3);
	SetGraphicScale(2,2);
	SetColor(colorhalf[0]*0.8*initialized,colorhalf[1]*0.8*initialized,colorhalf[2]*0.8*initialized);
	DrawGraphic(GetX+2+sin(frame*7.21)*3,GetY-8+sin(frame*9.11)*3);

	SetGraphicRect(128,0,128+40,40);
	SetRenderState(SUBTRACT);
	SetGraphicScale(1,1);
	SetColor(255*initialized,255*initialized,255*initialized);
	DrawGraphic(GetX,GetY+sin(frame*3)*2-3);

	SetFlameGraphicRect(trunc(frame/4+1.5)%3);
	SetRenderState(ADD);
	SetGraphicScale(-1.5,1.5);
	SetColor(color2[0]*0.7*initialized,color2[1]*0.7*initialized,color2[2]*0.7*initialized);
	DrawGraphic(GetX-2+sin(frame*6.91)*3,GetY-5+sin(frame*5.31)*3);

	if(BeDeleted==0){
		SetX(GetX-1000);
	}

}
function SetFlameGraphicRect(num){
	SetGraphicRect(129+num*40,41,128+num*40+39,79);
}
function SetSparkGraphicRect(num){
	let y=1;
	if(num>=4){
		num-=4;
		y+=20;
	}
	SetGraphicRect(129+40+num*20,1+y,128+40+num*20+19,19+y);
}

task SpawnAnimation{
	BeDeleted=0;
	yield;
	let i=0;
	let y=0;
	NewChargeShrink_XY(GetX+1000,GetY, 80,8,0.2,color[0],color[1],color[2]);
	NewChargeShrink_XY(GetX+1000,GetY, 80,6,0.2,colorhalf[0],colorhalf[1],colorhalf[2]);
	NewChargeShrink_XY(GetX+1000,GetY, 80,4,0.2,color2[0],color2[1],color2[2]);
	loop(8){
		ImageCharge_XY(GetX+1000,GetY, imgMeteo, 129+40+i*20,1+y,129+59+i*20,19+y, 20,250,60,1/20, color[0],color[1],color[2], [-2,2],[-8,8]);
		ImageCharge_XY(GetX+1000,GetY, imgMeteo, 129+40+i*20,1+y,129+59+i*20,19+y, 20,180,60,1/20, colorhalf[0],colorhalf[1],colorhalf[2], [-2,2],[-8,8]);
		ImageCharge_XY(GetX+1000,GetY, imgMeteo, 129+40+i*20,1+y,129+59+i*20,19+y, 20,120,60,1/20, color2[0],color2[1],color2[2], [-2,2],[-8,8]);
		i++;
		if(i>=4){
			i-=4;
			y+=20;
		}
		yield;
	}
	loop(70){
		initialized+=1/70;
		yield;
	}
	initialized=1;
	BeDeleted=1;
	SetX(GetX+1000);
}
    @Finalize {
	deleteobjects=true;
	yield;
	deleteobjects=false;
	if(GetLife<10000){
		AddScore(10000);

		CreateItems(GetX,GetY,10,2,0,0,0);

		SE("enemyexplode");

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

	}
    }

}