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

	SpellID=-1;

	let frame = 1;

    @Initialize {
//	StartFunctions(1,1,0);
	Randomize;
        SetLife(2000);
//        SetScore(50000);
	SetDamageRate(100,100);
	MagicCircle(false);
	SetEnemyMarker(true);

	MeteoInit(GetArgument);
	shotinit;

	BeginTask;
    }

let bombable=false;

let DrawArea=[NULL,NULL];

	let cshot=[WHITE32,ORANGE32,RED32,PURPLE32];
function Wait(frames){loop(frames){yield;}}

task BeginTask{
	let frame=0;
	while(EventActive||frame<GetArgument){
		if(EventStep==1){
			while(meteoalpha!=1){yield;}
			MeteoAlpha(1,0.15,60);

			SpawnMeteoEnemy(-1,GetX-150,100,220,250);
			SpawnMeteoEnemy(-1,GetX+150,100,220,250);

			ManualEnemyMarker(true);
			let alpha=1;
			loop(10){
				SetEnemyMarkerManual(0,GetCenterX,alpha);
				SetEnemyMarkerManual(1,GetCenterX,0);
				alpha-=0.1;
				yield;
			}
			SetEnemyMarkerManual(0,GetCenterX,0);
		}
		frame++;
		yield;
	}
	if(GetCommonData("MeteoAttack")==0){MainTask0;}
	if(GetCommonData("MeteoAttack")==1){MainTask1;}
	if(GetCommonData("MeteoAttack")==2){MainTask2;}
	Wait(60);
	bombable=true;
}

task MainTask0{	//move and shoot
	SetDamageRate(120,120);
	loop{
		MoveRandom(100,50, GetClipMinX+50,GetClipMinY+50,GetClipMaxX-50,GetCenterY-50, 500, 80);
		Wait(100);
	}
}

task MainTask1{	//basic dodging
	SetDamageRate(80,80);
	let dist=50;
	let angle=-1000;
	let i=0;
	let loops=0;
	let colors=[0,6,5,6];
	loop{
		MoveRandom(100,50, GetClipMinX+50,GetClipMinY+50,GetClipMaxX-50,GetCenterY-50, 500, 80);
		if(angle==-1000){
			angle=160;
		}else{
			angle=rand(0,360);
		}
		i=0;
		loop(20){
			if(loops==1){
				//CreateShot01Delay(GetX,GetY,2,angle,RED01+colors[i%4],20,40,16,20);
				//CreateShot01Delay(GetX,GetY,2,angle+180,RED01+colors[i%4],20,40,16,20);
				CreateShot01Delay(GetX,GetY,2,angle,SP03,20,40,16,20);
				CreateShot01Delay(GetX,GetY,2,angle+180,SP03,20,40,16,20);

				angle+=360/20;
			}
			Wait(4);
			i++;
		}
		loops=1;
		//SpawnMeteoEnemy(GetX,GetY,260,230);
		angle=rand(0,360);
		i=0;
		loop(30){
			CreateShot01Delay(GetX+cos(angle)*dist,GetY+sin(angle)*dist,rand(0.7,2),angle,SP08,80+rand_int(0,10)-i*2,0,40,rand(20,100));
			i++;
			Wait(2);
			angle+=360/30;
		}
		Wait(20);
	}
}
task MainTask2{	//enemies
	DrawArea=[GetCenterX,GetY];
	SetX(-1000);
	EnemyDamageMeteo(25);

	EnemyWait(240,0);
	SetMovePositionNewM(200,150,60);
	Wait(60);
	SpawnMeteoEnemy(0, DrawArea[0]+50,DrawArea[1],220,250);
	SpawnMeteoEnemy(0, DrawArea[0]+20,DrawArea[1]+50,220,250);
	EnemyWait(240,0);
	SetMovePositionNewM(300,50,60);
	Wait(60);
	SpawnMeteoEnemy(1, DrawArea[0]-90,DrawArea[1]+20,220,250);
	SpawnMeteoEnemy(1, DrawArea[0]+20,DrawArea[1]+50,220,250);
	SpawnMeteoEnemy(1, DrawArea[0]-50,DrawArea[1]+100,220,250);
	EnemyWait(340,6);
	SetMovePositionNewM(GetCenterX,GetCenterY-50,60);
	Wait(60);
	let k=-90;
	loop(5){
		SpawnMeteoEnemy(2, DrawArea[0]+cos(k)*90,DrawArea[1]+sin(k)*90,220,250);
		Wait(30);
		k+=360/5;
	}
	EnemyWait(500,7);
	SetMovePositionNewM(GetCenterX,GetCenterY-150,60);
	Wait(60);
	k=3;
	loop(7){
		SpawnMeteoEnemy(2, DrawArea[0]+k*50,DrawArea[1]+50,220,250);
		k--;
		Wait(35);
	}
	EnemyWait(600,0);
	let k=0;
	loop(6){
		EnemyWait(0,10);
		SpawnMeteoEnemy((k%2)*3, rand(GetClipMinX+30,GetClipMaxX-30),rand(50,GetCenterY),220,250);
		k++;
		Wait(30);
	}


	function EnemyWait(max,min){
		loop(max){
			if(GetEnemyNum>1){
				yield;
			}
		}
		if(min>0){
			while(GetEnemyNum>min){yield;}
		}
	}
}
    @MainLoop {
	if(DrawArea[0]==NULL){
		MeteoDrawLogic(GetX,GetY);
	}else{
		MeteoDrawLogic(DrawArea[0],DrawArea[1]);
	}
	if(meteoalpha==1){
        	SetCollisionA(GetX, GetY, 35);
		SetCollisionB(GetX, GetY, 25);
	}

	if(bombable&&GetKeyState(VK_SKIP)==KEY_PUSH){
		SetLife(-100);
	}
	yield;
}

    @DrawLoop {
	if(DrawArea[0]==NULL){
		MeteoDrawLoop(GetX,GetY);
	}else{
		MeteoDrawLoop(DrawArea[0],DrawArea[1]);
	}
}


    @Finalize {
	deleteobjects=true;
	yield;
	deleteobjects=false;
//	EndingFunc(1);
	if(DrawArea[0]==NULL){
		MeteoFinalize(GetX,GetY,1);
	}else{
		MeteoFinalize(DrawArea[0],DrawArea[1],1);
	}
//	PointItems(GetX,GetY,1,0);
    }

}