function worldPlay01_0 { 
	// --------------------- PRE-EFFECT -----------------------------------

    //summonFairy(GetCenterX,GetCenterY,10,4);
    //wait(9999);
	// nested task to handle the fog clear for stage 1
	task foggyup { 
		loop(300) { 
			fogStart+=8; fogEnd+=10; 
			yield; 
		} 
		cameraSwitch = 1; 
		fogStart = 1600; fogEnd = 3000; 
	}	
	wait(60);
	
	// --------------------- pattern 00 -----------------------------------
	ascent(i in 0..5) {
		enyFlurrySlow(GetCenterX-rand_int(1,100),GetClipMinY-16,GetCenterX-rand_int(1,100),GetCenterY-80,SMALL_BAL_BLUE);  
		wait(10);
		enyFlurrySlow(GetCenterX+rand_int(1,100),GetClipMinY-16,GetCenterX+rand_int(1,100),GetCenterY-80,SMALL_BAL_RED); 
		wait(20);
	} 
	ascent(i in 0..5) {
		enyFlurrySlow2(GetCenterX-rand_int(1,100),GetClipMinY-16,GetCenterX-rand_int(1,100),GetCenterY-80,SMALL_BAL_BLUE);  
		wait(10);
		enyFlurrySlow2(GetCenterX+rand_int(1,100),GetClipMinY-16,GetCenterX+rand_int(1,100),GetCenterY-80,SMALL_BAL_RED); 
		wait(20);
	} 	
	
	enyTwinPirouette(GetCenterX-128,GetClipMinY,GetCenterX-128,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX-32,GetClipMinY,GetCenterX-64,GetClipMaxY+32,-4);
	enyTwinPirouette(GetCenterX+32,GetClipMinY,GetCenterX+64,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX+128,GetClipMinY,GetCenterX+128,GetClipMaxY+32,-4);
	wait(120);
	enyTwinPirouette(GetCenterX-96,GetClipMinY,GetCenterX+256,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX+96,GetClipMinY,GetCenterX-256,GetClipMaxY+32,-4);
	foggyup;
	
	wait(600);

	// --------------------- pattern 01 -----------------------------------
	
	enyTwinFamFairy00(GetCenterX-72,GetClipMinY-16);
	fairyFlurry;
	wait(60);
	enyTwinFamFairy00(GetCenterX+72,GetClipMinY-16);
	wait(120);
	
	// Nested task 
	task fairyFlurry { ascent(i in 0..3) { enyFlurry01; wait(45); } }
	
	wait(240);
	
	// Nested task
	task fairyTrain00 { 
		ascent(i in 0..7) { 
			enyCrissCrossTrain(GetCenterX-160,GetClipMinY-16,GetCenterX-160,GetCenterY,SMALL_BAL_RED,"left"); 
			enyCrissCrossTrain(GetCenterX+160,GetClipMinY-16,GetCenterX+160,GetCenterY,SMALL_BAL_BLUE,"right"); 
			wait(15);
		}
	}
	fairyTrain00;
	
	wait(360);
	
	// --------------------- pattern 02 -----------------------------------
	
	enyTwinFamFairy01(GetCenterX,GetClipMinY-16);
	enySwirl01;
	wait(380);
	
	// --------------------- pattern 03 -----------------------------------
	
	enyHomingFamFairy(GetCenterX-96,GetClipMinY-16);
	enyHomingFamFairy(GetCenterX+96,GetClipMinY-16);
	wait(60);
	ascent(i in 0..2) { 
		enyJumpy01(GetCenterX-160,GetClipMaxY,45,400,1,SMALL_BAL_RED,16);  
		enyJumpy01(GetCenterX+160,GetClipMaxY,125,450,1,SMALL_BAL_BLUE,32); 
		wait(30);
		enyJumpy01(GetCenterX-160,GetClipMaxY,90,400,1,SMALL_BAL_BLUE,24); 
		enyJumpy01(GetCenterX+160,GetClipMaxY,135,500,1,SMALL_BAL_RED,48); 
		wait(30);
		enyJumpy01(GetCenterX-160,GetClipMaxY,60,450,1,SMALL_BAL_RED,24); 
		enyJumpy01(GetCenterX+160,GetClipMaxY,145,500,1,SMALL_BAL_BLUE,48); 
		wait(30);
		enyJumpy01(GetCenterX-160,GetClipMaxY,35,500,1,SMALL_BAL_BLUE,16);  
		enyJumpy01(GetCenterX+160,GetClipMaxY,115,450,1,SMALL_BAL_RED,24); 	
		wait(30);
	}
	wait(60);
	enyHomingFamFairy(GetCenterX-128,GetClipMinY-16);
	enyHomingFamFairy(GetCenterX+128,GetClipMinY-16);
	wait(380);
	
	// Nested task
	task fairyTrain01 { 
		ascent(i in 0..10) { 
			enyMiddleTrain(GetClipMinX-16,GetCenterY-64,GetCenterX,GetCenterY-64,SMALL_BAL_BLUE,"left"); 
			wait(15);
		}
	}
	task fairyTrain02 { 
		ascent(i in 0..10) { 
			enyMiddleTrain(GetClipMaxX+16,GetCenterY-64,GetCenterX,GetCenterY-64,SMALL_BAL_BLUE,"right"); 
			wait(15);
		}
	}	
	fairyTrain01;	
	enyHomingFamFairy(GetCenterX+100,GetClipMinY-16);
	wait(60);
	enyShotGunFamFairy(GetCenterX-128,GetClipMinY-16,GetCenterX-128,GetCenterY-128,SMALL_BAL_BLUE);
	wait(320);
	enyHomingFamFairy(GetCenterX-100,GetClipMinY-16);
	fairyTrain02;
	wait(60);
	enyShotGunFamFairy(GetCenterX+128,GetClipMinY-16,GetCenterX+128,GetCenterY-128,SMALL_BAL_RED);
	wait(30);
	enyShotGunFamFairy(GetCenterX+100,GetClipMinY-16,GetCenterX+100,GetCenterY-136,SMALL_BAL_RED);
	wait(360);
	DeleteShotAll(TYPE_ALL,TYPE_FADE);
}

function worldPlay01_mid { 
	// --------------------- MID BOSS -------------------------------------
	
	// Antilope mid boss
	idScript = LoadScriptInThread("script/thdcs/stage/stage01/balmid_main.txt"); 
	StartScript(idScript);
	wait(60);
	while(!IsCloseScript(idScript) && GetPlayerState() != STATE_END) { yield; }
	plySpell(GetCenterX,100);
	wait(90);
}

function worldPlay01_1 { 
	// --------------------- pattern 04 -----------------------------------
	// Nested tasks
	task pattern04SummonA { ascent(i in 0..8) { enySwirlFree(GetCenterX+160,GetClipMinY-16,SMALL_BAL_BLUE,"top"); wait(15); } } 	
	task pattern04SummonB { ascent(i in 0..8) { enySwirlFree(GetCenterX-160,GetClipMaxY+16,SMALL_BAL_BLUE,"bottom"); wait(15); } }

	enyShotGunFamFairy(GetCenterX-160,GetClipMinY-16,GetCenterX-160,GetCenterY-128,SMALL_BAL_RED);
	wait(15);
	enyShotGunFamFairy(GetCenterX-128,GetClipMinY-16,GetCenterX-128,GetCenterY-128,SMALL_BAL_RED);
	wait(15);
	enyShotGunFamFairy(GetCenterX-96,GetClipMinY-16,GetCenterX-96,GetCenterY-128,SMALL_BAL_RED);
	wait(15);
	enyShotGunFamFairy(GetCenterX-64,GetClipMinY-16,GetCenterX-64,GetCenterY-128,SMALL_BAL_RED);
	wait(15);	
	pattern04SummonA;
	wait(240);
	
	enyShotGunFamFairy(GetCenterX+140,GetClipMinY-16,GetCenterX+140,GetCenterY-128,SMALL_BAL_BLUE);
	wait(15);
	enyHomingFamFairy(GetCenterX-100,GetClipMinY-16);
	enyShotGunFamFairy(GetCenterX+128,GetClipMinY-16,GetCenterX+128,GetCenterY-128,SMALL_BAL_BLUE);
	wait(15);
	enyShotGunFamFairy(GetCenterX+104,GetClipMinY-16,GetCenterX+104,GetCenterY-128,SMALL_BAL_BLUE);
	wait(15);
	enyShotGunFamFairy(GetCenterX+96,GetClipMinY-16,GetCenterX+96,GetCenterY-128,SMALL_BAL_BLUE);
	wait(15);	
	pattern04SummonB;
	wait(480);
	
	// --------------------- pattern 05 -----------------------------------

	enyMultiFamFairy00(GetCenterX-128,GetClipMinY-16,GetCenterX-96,GetCenterY-128,4,FAM_RED);
	enyMultiFamFairy00(GetCenterX+128,GetClipMinY-16,GetCenterX+96,GetCenterY-128,4,FAM_RED);
	wait(90);
	ascent(i in 0..2) { 
		enyJumpy01(GetCenterX-160,GetClipMaxY,45,400,1,SMALL_BAL_RED,16);  
		enyJumpy01(GetCenterX+160,GetClipMaxY,125,450,1,SMALL_BAL_BLUE,32); 
		wait(30);
		enyJumpy01(GetCenterX-160,GetClipMaxY,90,400,1,SMALL_BAL_BLUE,24); 
		enyJumpy01(GetCenterX+160,GetClipMaxY,135,500,1,SMALL_BAL_RED,48); 
		wait(30);
		enyJumpy01(GetCenterX-160,GetClipMaxY,60,450,1,SMALL_BAL_RED,24); 
		enyJumpy01(GetCenterX+160,GetClipMaxY,145,500,1,SMALL_BAL_BLUE,48); 
		wait(30);
		enyJumpy01(GetCenterX-160,GetClipMaxY,35,500,1,SMALL_BAL_BLUE,16);  
		enyJumpy01(GetCenterX+160,GetClipMaxY,115,450,1,SMALL_BAL_RED,24); 	
		wait(30);
	}
	wait(240);
	
	enyTwinFamFairy00(GetCenterX-72,GetClipMinY-16);
	enySwirlBottom;
	enyShotGunFamFairy(GetCenterX+140,GetClipMinY-16,GetCenterX+140,GetCenterY-128,SMALL_BAL_RED);
	wait(15);
	enyShotGunFamFairy(GetCenterX+104,GetClipMinY-16,GetCenterX+104,GetCenterY-128,SMALL_BAL_BLUE);
	wait(240);
	
	// Nested task
	task fairyTrain03 { 
		ascent(i in 0..10) { 
			enyMiddleTrain(GetClipMaxX+16,GetCenterY-64,GetCenterX,GetCenterY-64,SMALL_BAL_BLUE,"right"); 
			wait(15);
		}
	}	
	fairyTrain03;
	wait(400);	
	
	// --------------------- pattern 06 -----------------------------------
	
	enyPirouette(GetCenterX,GetClipMinY-16);
	wait(480);
	
	// --------------------- pattern 07 -----------------------------------
	
	enyShotGunFamFairy(GetCenterX+140,GetClipMinY-16,GetCenterX+140,GetCenterY-128,SMALL_BAL_BLUE);
	wait(15);
	
	// Nested task
	task fairyTrain04 { 
		ascent(i in 0..7) { 
			enyCrissCrossTrain(GetCenterX+160,GetClipMinY-16,GetCenterX+160,GetCenterY,SMALL_BAL_BLUE,"right"); 
			wait(15);
		}
	}
	enyWallAttack(GetClipMinX,GetCenterY-192,GetClipMaxX+32,SMALL_BAL_RED,"right");
	wait(120);
	fairyTrain04;
	wait(240);

	enyShotGunFamFairy(GetCenterX-140,GetClipMinY-16,GetCenterX-140,GetCenterY-128,SMALL_BAL_RED);
	wait(15);	
	
	// Nested task
	task fairyTrain05 { 
		ascent(i in 0..7) { 
			enyCrissCrossTrain(GetCenterX-160,GetClipMinY-16,GetCenterX-160,GetCenterY,SMALL_BAL_RED,"left"); 
			wait(15);
		}
	}
	enyWallAttack(GetClipMaxX,GetCenterY-192,GetClipMinX-32,SMALL_BAL_BLUE,"left");
	fairyTrain05;
	wait(360);

	// --------------------- pattern 08 -----------------------------------
	
	enyTwinPirouette(GetCenterX-128,GetClipMinY,GetCenterX-128,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX-32,GetClipMinY,GetCenterX-64,GetClipMaxY+32,-4);
	enyTwinPirouette(GetCenterX+32,GetClipMinY,GetCenterX+64,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX+128,GetClipMinY,GetCenterX+128,GetClipMaxY+32,-4);
	wait(120);
	enyTwinPirouette(GetCenterX-96,GetClipMinY,GetCenterX+256,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX+96,GetClipMinY,GetCenterX-256,GetClipMaxY+32,-4);
	wait(120);
	enyTwinPirouette(GetCenterX-128,GetClipMinY,GetCenterX-128,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX-32,GetClipMinY,GetCenterX-64,GetClipMaxY+32,-4);
	enyTwinPirouette(GetCenterX+32,GetClipMinY,GetCenterX+64,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX+128,GetClipMinY,GetCenterX+128,GetClipMaxY+32,-4);
	wait(120);
	enyTwinPirouette(GetCenterX-96,GetClipMinY,GetCenterX+256,GetClipMaxY+32,4);
	enyTwinPirouette(GetCenterX+96,GetClipMinY,GetCenterX-256,GetClipMaxY+32,-4);
	wait(420);
	
	// --------------------- pattern 09 -----------------------------------
	
	enyStartLargeFairy(GetCenterX,GetClipMinY-16);
	enyShotGunFamFairy(GetCenterX-140,GetClipMinY-16,GetCenterX-140,GetCenterY-64,SMALL_BAL_RED);
	enyShotGunFamFairy(GetCenterX+140,GetClipMinY-16,GetCenterX+140,GetCenterY-64,SMALL_BAL_RED);
	wait(480);
} 

function worldPlay01_boss { 

	// --------------------- STAGE BOSS -----------------------------------
	// Ballerina boss
	idScript = LoadScriptInThread("script/thdcs/stage/stage01/balboss_main.txt");
	StartScript(idScript);	
	wait(60);
	while(!IsCloseScript(idScript) && GetPlayerState() != STATE_END) { yield; }
}