//Xe[Wf[^XNvg01

//Xe[W01
script_enemy Stage01{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "LEGACY");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	AddLife(100000 - GetLife());
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	CreateEnemies();

	func_SetMoverStatus(0, _MOVESTATUS_VERTICAL);
	SetCommonDataEx("INVADER","EnemyMover.Level", -1);
	SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);

	wait_ScriptWait(130);

	SetCommonDataEx("INVADER","EnemyMover.TickTime", 60);
	func_SetMoverStatus(0, _MOVESTATUS_STOP);

	wait_ScriptWait(60);

	SetCommonDataEx("INVADER","EnemyMover.Level", 0);
	func_SetMoverStatus(0, _MOVESTATUS_NORMAL);

	UFOSequence();

	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	function CreateEnemies()
	{
		//EnemyMover:id 0
		let m_id = func_CreateEnemyMover("EnemyMover01", [90, -195], [0, 10, 18]);

		ascent(i in 0..7){
			ascent(j in 0..5){
				let x = 34 * i;
				let y = 36 * j;
				let type = [_GRA_JELLY, _GRA_CRAB, _GRA_CRAB, _GRA_SHELL, _GRA_SHELL][j];
				func_CreateEnemy(type, m_id, _MOVETYPE_SLAVE, x, y, 0);
			}
			//yield;
		}

	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);
		//NA
		if(alive_enemies_count == 0){ func_ClearStage(); return; }

		if(alive_enemies_count <= 1){ changed = func_TestLevelUp(7); }
		else if(alive_enemies_count <= 2){changed = func_TestLevelUp(6); }
		else if(alive_enemies_count <= 4){changed = func_TestLevelUp(5); }
		else if(alive_enemies_count <= 7){changed = func_TestLevelUp(4); }
		else if(alive_enemies_count <= 15){changed = func_TestLevelUp(3); }
		else if(alive_enemies_count <= 21){changed = func_TestLevelUp(2); }
		else if(alive_enemies_count <= 28){ changed = func_TestLevelUp(1); }

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [60, 48, 34, 20, 12, 6, 4, 2][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
		}
    }//end function


	task UFOSequence()
	{
		wait_ScriptWaitUFO(800);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 40, [1, 0], [], _ITEMTYPE_5STAR);
		wait_ScriptWaitUFO(1600);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()+60, 40, [1, 180], [], _ITEMTYPE_SPREAD);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}
		}

	}




}//end task



#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script

//#######################################################


//Xe[W02
script_enemy Stage02{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "WIDE");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	CreateEnemies();
	SetCommonDataEx("INVADER","EnemyMover.Level", -1);
	SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);
	func_SetMoverStatus(0, _MOVESTATUS_VERTICAL);

	wait_ScriptWait(140);

	SetCommonDataEx("INVADER","EnemyMover.TickTime", 60);
	func_SetMoverStatus(0, _MOVESTATUS_STOP);

	wait_ScriptWait(120);

	SetCommonDataEx("INVADER","EnemyMover.Level", 0);
	func_SetMoverStatus(0, _MOVESTATUS_NORMAL);

	UFOSequence();
	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	function CreateEnemies()
	{
		//EnemyMover:id 0
		let m_id = func_CreateEnemyMover("EnemyMover01", [50, -195], [0, 10, 18]);

		ascent(i in 0..8){
			ascent(j in 0..4){
				let x = 40 * i;
				let y = 36 * j;
				let type = [_GRA_JELLY, _GRA_CRAB, _GRA_SHELL, _GRA_SHELL][j];
				func_CreateEnemy(type, m_id, _MOVETYPE_SLAVE, x, y, 0);
			}
		}


	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);
		if(alive_enemies_count == 0){ func_ClearStage(); return; }

		if(alive_enemies_count <= 1){ changed = func_TestLevelUp(7);}
		else if(alive_enemies_count <= 2){ changed = func_TestLevelUp(6); }
		else if(alive_enemies_count <= 3){ changed = func_TestLevelUp(5); }
		else if(alive_enemies_count <= 5){ changed = func_TestLevelUp(4); }
		else if(alive_enemies_count <= 10){ changed = func_TestLevelUp(3); }
		else if(alive_enemies_count <= 18){ changed = func_TestLevelUp(2); }
		else if(alive_enemies_count <= 25){ changed = func_TestLevelUp(1); }

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [60, 48, 34, 20, 12, 6, 4, 2][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
		}
    }//end function


	task UFOSequence()
	{
		wait_ScriptWaitUFO(600);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 240, [1, 0], [], _ITEMTYPE_ERASE);
		wait_ScriptWaitUFO(1200);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()+60, 300, [1, 180], [], _ITEMTYPE_SPREAD);
		wait_ScriptWaitUFO(1000);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 140, [1, 0], [], _ITEMTYPE_5STAR);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}
}//end task


#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script



//#######################################################


//Xe[W03
script_enemy Stage03{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "ROAD");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	CreateEnemies();
	SetCommonDataEx("INVADER","EnemyMover.Level", -1);
	SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);
	func_SetMoverStatus(0, _MOVESTATUS_VERTICAL);

	wait_ScriptWait(140);

	SetCommonDataEx("INVADER","EnemyMover.TickTime", 60);
	func_SetMoverStatus(0, _MOVESTATUS_STOP);

	wait_ScriptWait(120);

	SetCommonDataEx("INVADER","EnemyMover.Level", 0);
	func_SetMoverStatus(0, _MOVESTATUS_NORMAL);

	UFOSequence();
	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	function CreateEnemies()
	{
		//EnemyMover:id 0
		let m_id = func_CreateEnemyMover("EnemyMover01", [40, -195], [0, 10, 18]);

		ascent(i in 0..8){
			ascent(j in 0..5){
				let x = 30 * (i + [0, 2][i>=4]);
				let y = 36 * j;
				let type = [_GRA_JELLY, _GRA_CRAB, _GRA_CRAB, _GRA_SHELL, _GRA_SHELL][j];
				func_CreateEnemy(type, m_id, _MOVETYPE_SLAVE, x, y, 0);
			}
		}


	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);
		if(alive_enemies_count == 0){ func_ClearStage(); return; }

		if(alive_enemies_count <= 1){ changed = func_TestLevelUp(8);}
		else if(alive_enemies_count <= 2){changed = func_TestLevelUp(7); }
		else if(alive_enemies_count <= 4){changed = func_TestLevelUp(6); }
		else if(alive_enemies_count <= 7){changed = func_TestLevelUp(5); }
		else if(alive_enemies_count <= 10){changed = func_TestLevelUp(4); }
		else if(alive_enemies_count <= 18){changed = func_TestLevelUp(3); }
		else if(alive_enemies_count <= 25){changed = func_TestLevelUp(2); }
		else if(alive_enemies_count <= 32){ changed = func_TestLevelUp(1); }

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [60, 48, 34, 20, 16, 10, 6, 4, 2][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
		}
    }//end function

	task UFOSequence()
	{

		wait_ScriptWaitUFO(200);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 40, [1.3, 00], [], _ITEMTYPE_RAPIER);
		wait_ScriptWaitUFO(1500);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()+60, 50, [0.8, 180], [], _ITEMTYPE_FREEZE);
		wait_ScriptWaitUFO(1200);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 100, [1.0, 00], [], _ITEMTYPE_ERASE);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}

}//end task


#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script


//#######################################################


//Xe[W04
script_enemy Stage04{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "ZIGZAG");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	CreateEnemies();
	SetCommonDataEx("INVADER","EnemyMover.Level", -1);
	SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);
	func_SetMoverStatus(0, _MOVESTATUS_VERTICAL);
	func_SetMoverStatus(1, _MOVESTATUS_VERTICAL);

	wait_ScriptWait(130);

	SetCommonDataEx("INVADER","EnemyMover.TickTime", 60);
	func_SetMoverStatus(0, _MOVESTATUS_STOP);
	func_SetMoverStatus(1, _MOVESTATUS_STOP);

	wait_ScriptWait(120);

	SetCommonDataEx("INVADER","EnemyMover.Level", 0);
	func_SetMoverStatus(0, _MOVESTATUS_NORMAL);
	func_SetMoverStatus(1, _MOVESTATUS_NORMAL);

	UFOSequence();
	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	function CreateEnemies()
	{
		//EnemyMover:id 0
		let m_id1 = func_CreateEnemyMover("EnemyMover01", [140, -195], [0, 10, 18]);

		//EnemyMover:id 1
		let m_id2 = func_CreateEnemyMover("EnemyMover01", [140, -195], [0, -10, 18]);

		ascent(i in 0..6){
			ascent(j in 0..5){
				let x = 34 * i;
				let y = 36 * j;
				let type = [_GRA_JELLY, _GRA_CRAB, _GRA_CRAB, _GRA_SHELL, _GRA_SHELL][j];
				func_CreateEnemy(type, [m_id1, m_id2][j % 2], _MOVETYPE_SLAVE, x, y, 0);
			}
		}


	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);
		if(alive_enemies_count == 0){ func_ClearStage(); return; }

		if(alive_enemies_count <= 1){ changed = func_TestLevelUp(7);}
		else if(alive_enemies_count <= 2){changed = func_TestLevelUp(6); }
		else if(alive_enemies_count <= 3){changed = func_TestLevelUp(5); }
		else if(alive_enemies_count <= 5){changed = func_TestLevelUp(4); }
		else if(alive_enemies_count <= 10){changed = func_TestLevelUp(3); }
		else if(alive_enemies_count <= 18){changed = func_TestLevelUp(2); }
		else if(alive_enemies_count <= 25){ changed = func_TestLevelUp(1); }

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [60, 48, 34, 20, 12, 6, 4, 2][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
			changed = false;
		}
    }//end function

	task UFOSequence()
	{

		wait_ScriptWaitUFO(700);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 40, [1, 20], [], _ITEMTYPE_SPREAD);
		wait_ScriptWaitUFO(1600);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()+60, 40, [1, 160], [], _ITEMTYPE_5STAR);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}
}//end task


#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script

//#######################################################


//Xe[W05
script_enemy Stage05{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "BLOCK");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	wait_StageStart();

	let changed = false;

	//G쐬
	CreateEnemies();
	SetCommonDataEx("INVADER","EnemyMover.Level", -1);
	SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);
	func_SetMoverStatus(0, _MOVESTATUS_VERTICAL);
	func_SetMoverStatus(1, _MOVESTATUS_VERTICAL);
	func_SetMoverStatus(2, _MOVESTATUS_VERTICAL);
	func_SetMoverStatus(3, _MOVESTATUS_VERTICAL);

	wait_ScriptWait(160);

	SetCommonDataEx("INVADER","EnemyMover.TickTime", 60);
	func_SetMoverStatus(0, _MOVESTATUS_STOP);
	func_SetMoverStatus(1, _MOVESTATUS_STOP);
	func_SetMoverStatus(2, _MOVESTATUS_STOP);
	func_SetMoverStatus(3, _MOVESTATUS_STOP);

	wait_ScriptWait(120);

	SetCommonDataEx("INVADER","EnemyMover.Level", 0);
	func_SetMoverStatus(0, _MOVESTATUS_NORMAL);
	func_SetMoverStatus(1, _MOVESTATUS_NORMAL);
	func_SetMoverStatus(2, _MOVESTATUS_NORMAL);
	func_SetMoverStatus(3, _MOVESTATUS_NORMAL);

	UFOSequence();

	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	function CreateEnemies()
	{
		let m_ids = [];
		//EnemyMover:id 0
		m_ids = func_ArrayAdd(m_ids, func_CreateEnemyMover("EnemyMover01", [130, -255], [0,  -10, 15]));

		//EnemyMover:id 1
		m_ids = func_ArrayAdd(m_ids,func_CreateEnemyMover("EnemyMover01", [130 + 30 * 3, -255], [ 0, +10, 15]));

		//EnemyMover:id 2
		m_ids = func_ArrayAdd(m_ids,func_CreateEnemyMover("EnemyMover01", [130, -255 + 30 * 3], [ 0, 10, 15]));

		//EnemyMover:id 3
		m_ids = func_ArrayAdd(m_ids,func_CreateEnemyMover("EnemyMover01", [130 + 30 * 3, -255 + 30 * 3], [ 0, -10, 15]));

		ascent(k in 0..4){
			ascent(i in 0..3){
				ascent(j in 0..3){
					let x = 30 * i;
					let y = 30 * j;
					let type = [_GRA_JELLY, _GRA_CRAB, _GRA_CRAB, _GRA_SHELL][k];
					func_CreateEnemy(type, m_ids[k], _MOVETYPE_SLAVE, x, y, 0);
				}
				//yield;
			}
		}

	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);
		if(alive_enemies_count == 0){ func_ClearStage(); return; }

		if(alive_enemies_count <= 1){ changed = func_TestLevelUp(8);}
		else if(alive_enemies_count <= 2){changed = func_TestLevelUp(7); }
		else if(alive_enemies_count <= 4){changed = func_TestLevelUp(6); }
		else if(alive_enemies_count <= 8){changed = func_TestLevelUp(5); }
		else if(alive_enemies_count <= 14){changed = func_TestLevelUp(4); }
		else if(alive_enemies_count <= 20){changed = func_TestLevelUp(3); }
		else if(alive_enemies_count <= 25){changed = func_TestLevelUp(2); }
		else if(alive_enemies_count <= 30){ changed = func_TestLevelUp(1); }

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [60, 48, 34, 24, 18, 12, 6, 4, 2][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
		}
    }//end function

	task UFOSequence()
	{

		wait_ScriptWaitUFO(140);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 150, [1.5, 0], [], _ITEMTYPE_RAPIER);
		wait_ScriptWaitUFO(1600);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()+60, 150, [1, 180], [], _ITEMTYPE_5STAR);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}


}//end task


#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script



//#######################################################


//Xe[W06
script_enemy Stage06{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "WALL");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	//CreateEnemies();
	EnemySequence();
	UFOSequence();

	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	task EnemySequence()
	{

		SetCommonDataEx("INVADER","EnemyMover.Level", -1);
		SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);

		CreateEnemies(0);

		wait_ScriptWait(200);

		func_SetLevel(0);
		changed = true;

		wait_ScriptWait(100);

		func_SetLevel(1);
		changed = true;
		CreateEnemies(1);

		wait_ScriptWait(250);
		CreateEnemies(2);

		wait_ScriptWait(300);
		CreateEnemies(3);

		wait_ScriptWait(300);
		func_SetLevel(2);
		changed = true;
		CreateEnemies(4);


	}//end task


	function CreateEnemies(let id)
	{
		let m_id;
		local{
			//EnemyMover:id 0
			let y = 201 - 36 * id;
			let x = [GetClipMaxX() + 30, GetClipMinX() - 30][id % 2];
			m_id = func_CreateEnemyMover("EnemyMover01", [x, y], [0, [-10, 10][id % 2], 18]);
		}

		ascent(i in 0..10){
			let x = [26,-26][id % 2] * i;
			let type = [_GRA_SHELL, _GRA_SHELL, _GRA_CRAB, _GRA_CRAB,_GRA_JELLY ][id];
			func_CreateEnemy(type, m_id, _MOVETYPE_SLAVE, x, 0, 0);
		}

		func_SetMoverStatus(m_id, _MOVESTATUS_NORMAL);


	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);

		if(!changed && func_IsLevelOver(2)){
			if(alive_enemies_count == 0){ func_ClearStage(); return; }

			if(alive_enemies_count <= 1){ changed = func_TestLevelUp(7);}
			else if(alive_enemies_count <= 2){changed = func_TestLevelUp(6); }
			else if(alive_enemies_count <= 5){changed = func_TestLevelUp(5); }
			else if(alive_enemies_count <= 10){changed = func_TestLevelUp(4); }
			else if(alive_enemies_count <= 20){changed = func_TestLevelUp(3); }

		}

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [60, 50, 40, 30, 20, 10, 4, 2][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
			changed = false;
		}
    }//end function

	task UFOSequence()
	{

		wait_ScriptWaitUFO(400);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 240, [1, 0], [], _ITEMTYPE_5STAR);
		wait_ScriptWaitUFO(1300);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()+60, 140, [1, 180], [], _ITEMTYPE_ERASE);
		wait_ScriptWaitUFO(300);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 160, [1, 0], [], _ITEMTYPE_FREEZE);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}

}//end task

#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script



//#######################################################


//Xe[W07
script_enemy Stage07{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "FRONT LINE");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	//CreateEnemies();
	EnemySequence();
	UFOSequence();

	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	task EnemySequence()
	{

		SetCommonDataEx("INVADER","EnemyMover.Level", -1);
		SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);

		CreateEnemies(0);

		wait_ScriptWait(180);

		func_SetLevel(0);
		changed = true;

		wait_ScriptWait(120);
		func_SetLevel(1);
		changed = true;
		CreateEnemies(1);

		wait_ScriptWait(250);
		func_SetLevel(2);
		changed = true;
		CreateEnemies(2);

		wait_ScriptWait(250);
		func_SetLevel(3);
		changed = true;
		CreateEnemies(3);

		wait_ScriptWait(250);
		func_SetLevel(4);
		changed = true;
		CreateEnemies(4);

		wait_ScriptWait(250);
		func_SetLevel(5);
		changed = true;
		CreateEnemies(5);

	}//end task


	function CreateEnemies(let id)
	{
		let m_id;
		//EnemyMover:id 0
		let speed = [10, 8, 6, 5, 4, 3][id];
		m_id = func_CreateEnemyMover("EnemyMover01", [30, -40], [ 0, -10, speed]);

		ascent(i in 1..9){
			let x =  90 * trunc(i/2) + [0, 30][i%2];
			let type = [_GRA_SHELL, _GRA_SHELL, _GRA_CRAB, _GRA_CRAB,_GRA_JELLY, _GRA_JELLY ][id];
			func_CreateEnemy(type, m_id, _MOVETYPE_SLAVE, x, 0, 0);
		}

		func_SetMoverStatus(m_id, _MOVESTATUS_VERTICAL);
		//loop(130){ yield; }


	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);

		if(!changed && func_IsLevelOver(5)){
			if(alive_enemies_count == 0){ func_ClearStage(); return; }

			if(alive_enemies_count <= 1){ changed = func_TestLevelUp(8);}
			else if(alive_enemies_count <= 2){changed = func_TestLevelUp(7); }
			else if(alive_enemies_count <= 5){changed = func_TestLevelUp(6); }

		}

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [60, 55, 46, 34, 28, 24, 20, 10, 4][ func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level",  func_GetLevel());
			changed = false;
		}
    }//end function


	task UFOSequence()
	{

		wait_ScriptWaitUFO(300);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetCenterX()+60, -60, [1, 120], [], _ITEMTYPE_SPREAD);
		wait_ScriptWaitUFO(900);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetCenterX()-60, -60, [1, 60], [], _ITEMTYPE_ERASE);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}

}//end task


#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script


//#######################################################


//Xe[W08
script_enemy Stage08{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "JENKA");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	EnemySequence();
	UFOSequence();

	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	task EnemySequence()
	{

		SetCommonDataEx("INVADER","EnemyMover.Level", -1);
		SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);

		CreateEnemies(0);

		wait_ScriptWait(130);

		func_SetLevel(0);
		changed = true;

		wait_ScriptWait(150);
		func_SetLevel(1);
		changed = true;
		CreateEnemies(1);

		wait_ScriptWait(120);
		CreateEnemies(2);

		wait_ScriptWait(180);
		func_SetLevel(2);
		changed = true;
		CreateEnemies(3);

		wait_ScriptWait(120);
		CreateEnemies(4);

		wait_ScriptWait(160);
		func_SetLevel(3);
		changed = true;
		CreateEnemies(5);

		wait_ScriptWait(120);
		CreateEnemies(6);

		wait_ScriptWait(145);
		func_SetLevel(4);
		changed = true;
		CreateEnemies(7);

		wait_ScriptWait(90);
		CreateEnemies(8);

		wait_ScriptWait(120);
		func_SetLevel(5);
		changed = true;
		CreateEnemies(9);

		wait_ScriptWait(60);
		CreateEnemies(10);

	}//end task


	function CreateEnemies(let id)
	{
		let m_id;
		//EnemyMover:id 0
		local{
			let speed = [16, 14, 12, 10, 8, 8, 6, 6, 5, 5, 3][id];
			let x = 45 + 90 * [2, 0, 3, 1, 4, 3, 1, 0, 4, 3, 2][id] + [-15, 15][id%2];
			m_id = func_CreateEnemyMover("EnemyMover01", [x, -40], [ 0, -10, speed]);
		}

		ascent(i in 0..4){
			let y =  -30 * i;
			let type = [ _GRA_SHELL, _GRA_CRAB, _GRA_JELLY, _GRA_CRAB, _GRA_JELLY][id % 5];
			func_CreateEnemy(type, m_id, _MOVETYPE_SLAVE, 0, y, 0);
		}

		func_SetMoverStatus(m_id, _MOVESTATUS_VERTICAL);
		loop(10){ yield; }


	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);

		if(!changed && func_IsLevelOver(5)){
			if(alive_enemies_count == 0){ func_ClearStage(); return; }

			if(alive_enemies_count <= 1){ changed = func_TestLevelUp(8);}
			else if(alive_enemies_count <= 4){ changed = func_TestLevelUp(7); }
			else if(alive_enemies_count <= 8){ changed = func_TestLevelUp(6); }

		}

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [44, 40, 36, 32, 28, 25, 20, 10, 2][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
			changed = false;
		}

    }//end function

	task UFOSequence()
	{

		wait_ScriptWaitUFO(900);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()+60, 40, [1, 180], [300, 0.2, 180, 60, 1.5, 0], _ITEMTYPE_5STAR);
		wait_ScriptWaitUFO(900);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 40, [1, 0], [220, 0.2, 0, 60, 1.5, 180], _ITEMTYPE_RAPIER);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}

}//end task



#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script



//#######################################################


//Xe[W09
script_enemy Stage09{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "RAIN");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	//CreateEnemies();
	EnemySequence();
	UFOSequence();

	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	task EnemySequence()
	{
		let wait = [80, 120, 60, 90, 140];

		SetCommonDataEx("INVADER","EnemyMover.Level", -1);
		SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);

		CreateEnemies(0);

		wait_ScriptWait(50);

		func_SetLevel(0);
		changed = true;

		ascent(i in 1..41)
		{
			CreateEnemies(i);
			wait_ScriptWait(wait[i % 5] -  trunc(i * 1.5));
			changed = func_TestLevelUp(trunc(i/6));
		}

	}//end task


	function CreateEnemies(let id)
	{
		let x_list = [15, 75, 105, 165, 195, 255, 285, 345];
		let m_id;

		local{
			let speed = [18, 16, 14, 12, 10, 8, 8, 6, 5, 4, 4][trunc(id/4)];
			let x = 45 + x_list[trunc(4 + id % 2 + id % 4 * ((id % 3) + 1)) % 8];
			m_id = func_CreateEnemyMover("EnemyMover01", [x, -10], [ 0, -10, speed]);
		}

		let type = [ _GRA_SHELL, _GRA_CRAB, _GRA_JELLY, _GRA_SHELL, _GRA_CRAB, _GRA_SHELL][id % 6];
		func_CreateEnemy(type, m_id, _MOVETYPE_SLAVE, 0, 0, 0);

		func_SetMoverStatus(m_id, _MOVESTATUS_VERTICAL);
		loop(10){ yield; }


	}//end function

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);

		if(func_IsLevelOver(6)){
			if(alive_enemies_count == 0){ func_ClearStage(); return; }

			if(alive_enemies_count <= 1){ changed = func_TestLevelUp(8);}
			else if(alive_enemies_count <= 2){ changed = func_TestLevelUp(7); }

		}

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime",  [40, 38, 35, 30, 28, 25, 20, 10, 3][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
			changed = false;
		}

    }//end function

	task UFOSequence()
	{

		wait_ScriptWaitUFO(300);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()+60, 150, [1, 180], [], _ITEMTYPE_FREEZE);
		wait_ScriptWaitUFO(1300);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 100, [1, 0], [], _ITEMTYPE_5STAR);
		wait_ScriptWaitUFO(1200);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()-60, 200, [1, 0], [], _ITEMTYPE_SPREAD);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}

}//end task



#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script



//#######################################################


//Xe[W10
//{XP
script_enemy Stage10{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "WHITE SQUARE");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;
	let boss_break = false; 
	wait_StageStart();

	//G쐬
	//CreateEnemies();
	SetCommonDataEx("INVADER","EnemyMover.Level", -1);
	SetCommonDataEx("INVADER","EnemyMover.TickTime", 600);
	loop(60){ yield; }

	func_SetEffect(_EFFECT_WARNING, 0, 0);

	loop(260){ yield; }
	
	EnemySequence();
	UFOSequence();

	loop
	{
		TestEnemyLevel();
		if(boss_break){ break; }
		yield;
	}
	loop(60){ yield; }
	main_DestroyAllEnemy();
	loop(200){ yield; }
	func_ClearStage();
	loop(120){yield;}

	VanishEnemy();
	return;

	//--------------

	task EnemySequence()
	{

		CreateBoss();

		wait_ScriptWait(60);
		
		func_SetEffect(_EFFECT_SPELL, 0, 0);
		wait_ScriptWait(120);

		func_SetLevel(0);
		changed = true;

		CreateEnemies();

		wait_ScriptWait(120);
		func_SetLevel(1);
		changed = true;

	}//end task

	function CreateBoss()
	{
		let m_id = func_CreateEnemyMover("EnemyMover02", [GetCenterX(), -20], [ 1, 2, 90, 100, 0, 0]);
		func_CreateEnemy(_GRA_BOSS1, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
		
	}

	function CreateEnemies()
	{
		let m_id = func_CreateEnemyMover("EnemyMover02", [GetCenterX(), 170], [ 1, 0, 90]);

		ascent(i in 0..20){
			let ang = 360 * i/20 + 30;
			let type = [ _GRA_SHELL, _GRA_CRAB, _GRA_JELLY, _GRA_VACULA][i % 4];
			func_CreateEnemy(type, m_id, _MOVETYPE_ROUNDTICK, 100, 5, ang);
		}
		ascent(i in 0..8){
			let ang = 360 * i/8 + 90;
			let type = [ _GRA_SHELL, _GRA_CRAB, _GRA_JELLY, _GRA_VACULA][i % 4];
			func_CreateEnemy(type, m_id, _MOVETYPE_ROUNDTICK, 70, -8, ang);
		}
		loop(10){ yield; }

	}//end function

	function TestEnemyLevel()
	{
		let boss_life = GetCommonDataDefaultEx("INVADER","EnemyBoss.Life", 0);
		if(boss_life == 0)
		{
			changed = func_TestLevelUp(8); 
			boss_break = true;
		}
		let alive_enemies_count = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 0);

		if(func_IsLevelOver(1) && !changed){
			if(alive_enemies_count == 0){ func_ClearStage(); return; }

			if(alive_enemies_count <= 6 || boss_life <= 100){changed = func_TestLevelUp(7); }
			else if(alive_enemies_count <= 8 || boss_life <= 200){changed = func_TestLevelUp(6);}
			else if(alive_enemies_count <= 10 || boss_life <= 300){changed = func_TestLevelUp(5);}
			else if(alive_enemies_count <= 12 || boss_life <= 400){changed = func_TestLevelUp(4);}
			else if(alive_enemies_count <= 14 || boss_life <= 600){changed = func_TestLevelUp(3);}
			else if(alive_enemies_count <= 16 || boss_life <= 800){changed = func_TestLevelUp(2);}

		}

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [40, 35, 21, 18, 15, 10, 8, 4, 1000][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
			changed = false;
		}

    }//end function

	task UFOSequence()
	{

		wait_ScriptWaitUFO(1000);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()+50, -40, [1.5, 90], [250, 0.2, 90, 60, 1, 0], _ITEMTYPE_5STAR);
		wait_ScriptWaitUFO(1700);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()-50, -40, [1.5, 90], [250, 0.2, 90, 60, 1, 180], _ITEMTYPE_FREEZE);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}



}//end task



#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script




//Xe[W16
script_enemy StageDebug{

@Initialize{
	SetCommonDataEx("INVADER","Stage.Name", "DEBUG");
	SetLife(100000);
	main_MainRoutine();
}

@MainLoop
{
	SetLife(100000);
	yield;
}
@DrawLoop{}
@Finalize{}

task main_MainRoutine(){

	let changed = false;

	wait_StageStart();

	//G쐬
	EnemySequence();
	UFOSequence();

	loop
	{
		TestEnemyLevel();
		if(func_TestStageClear()){ break; }
		yield;
	}
	loop(120){yield;}
	VanishEnemy();
	return;

	//--------------

	task EnemySequence()
	{

		SetCommonDataEx("INVADER","EnemyMover.Level", -1);
		SetCommonDataEx("INVADER","EnemyMover.TickTime", 8);

		CreateEnemies(0);

		wait_ScriptWait(160);

		SetCommonDataEx("INVADER","EnemyMover.Level", 0);
		SetCommonDataEx("INVADER","EnemyMover.TickTime", 56);

		wait_ScriptWait(100);

		func_SetLevel(2);
		changed = true;

		ascent(i in 1..10000){
			CreateEnemies(i);
			wait_ScriptWait(150);
		}


	}//end task


	task CreateEnemies(let id)
	{
		let m_id;
		local{
			//EnemyMover:id 0
			let y = 41;
			let x = [GetClipMaxX() + 30, GetClipMinX() - 30][id % 2];
			m_id = func_CreateEnemyMover("EnemyMover01", [x, y], [0, [-10, 10][id % 2], 16]);
		}

		ascent(i in 0..5){
			let y = i * 32;
			let type = [_GRA_SHELL, _GRA_SHELL, _GRA_CRAB,_GRA_JELLY ][id % 4];
			func_CreateEnemy(type, m_id, _MOVETYPE_SLAVE, 0, y, 0);
		}

		func_SetMoverStatus(m_id, _MOVESTATUS_NORMAL);


	}//end task

	function TestEnemyLevel()
	{
		let alive_enemies_count = GetCommonDataEx("INVADER", "Enemy.AliveCount");

		if(!changed && func_IsLevelOver(2)){
			if(alive_enemies_count == 0){ func_ClearStage(); return; }

			if(alive_enemies_count <= 1){ changed = func_TestLevelUp(8); }
			else if(alive_enemies_count <= 2){changed = func_TestLevelUp(7); }
			else if(alive_enemies_count <= 5){changed = func_TestLevelUp(6); }
			else if(alive_enemies_count <= 10){changed = func_TestLevelUp(5); }
			else if(alive_enemies_count <= 18){changed = func_TestLevelUp(4); }
			else if(alive_enemies_count <= 25){changed = func_TestLevelUp(3); }

		}

		if(changed)
		{
			SetCommonDataEx("INVADER","EnemyMover.TickTime", [56, 48, 34, 26, 18, 13, 8, 4, 2][func_GetLevel()]);
			SetCommonDataEx("INVADER","EnemyMover.Level", func_GetLevel());
			changed = false;
		}
    }//end function

	task UFOSequence()
	{

		wait_ScriptWaitUFO(400);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMinX()+90, -40, [1, 45], [60,1,135,60,1,45,60,1,135,60,1,45,60,1,135,60,1,45,60,1,135,60,1,45], _ITEMTYPE_5STAR);
		wait_ScriptWaitUFO(1200);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetClipMaxX()-90, -50, [1, 135], [60,1,45,60,1,135,60,1,45,60,1,135,60,1,45,60,1,135,60,1,45,60,1,135], _ITEMTYPE_RAPIER);
		wait_ScriptWaitUFO(1200);
		if(func_IsStageCleared()){ return; }
		CreateUFO(GetCenterX()+60, -60, [1, 45], [60,1,135,60,1,45,60,1,135,60,1,45,60,1,135,60,1,45,60,1,135,60,1,45], _ITEMTYPE_FREEZE);
		//----------------
		function CreateUFO(let x, let y, let move_param, let move_seq, let item)
		{
			func_SetEffect(_EFFECT_UFO, 0, 0);
			wait_ScriptWaitUFO(100);
			if(func_IsStageCleared()){ return; }

			let m_id = func_CreateEnemyMover("EnemyMover02", [x, y], [1] ~ move_param ~ move_seq);
			let id = func_CreateEnemy(_GRA_UFO, m_id, _MOVETYPE_SLAVE, 0, 0, 0);
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemType", id, item);
			if(item == _ITEMTYPE_5STAR){REMY_CommonDataArrayEx_Set("INVADER", "Enemies.ItemEnergy", id, 15);}

		}

	}

}//end task

#include_function".\lib_REMY\include_tool.txt"
#include_function".\script_stagedata_func.txt"
#include_function".\script_stagedata_define.txt"
}//end script


