// --------------------- Notes -----------------------------------
// Difficulty reminder > 0 = Normal, 1 = Hard, 2 = Lunatic


// Homing single bullet fired
task fireBalFairy00(obj) { 
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		let kleur = 40;
		ascent(i in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);		
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj),kleur,0);
			kleur++;
			wait(45);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		let kleur = 42;
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);		
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj),kleur,0);
			kleur++;
			wait(45);
		}	
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		let kleur = 43;
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);		
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)-6,kleur,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj),kleur,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)+6,kleur,0);
			kleur++;
			wait(45);
		}	
	}

} 

// Homing 5 way shot, middle is homed. 
task fireBalFairy01(obj) { 
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);		
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-20,42,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj),43,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+20,42,0);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-60,42,0);			
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-40,42,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-20,42,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj),43,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+20,42,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+40,42,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+60,42,0);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 	
		let dir = 0;
		ascent(i in 0..2) { 
			dir = GetAngleToPlayer(obj);
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			ascent(j in 0..24) { 
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,58,0);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,dir,58,0);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),4,dir,58,0);				
				dir+=360/24;
			}
			PlaySFX(SFX_TAN01);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)-60,41,0);			
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)-40,41,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)-20,41,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj),42,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)+20,41,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)+40,41,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)+60,41,0);
		}	
	}
}

// Large fairy flowering shot
task fireBalLargeFairy00(obj) {
	let dir = 0;
	let r = 16;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..24) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),2,dir,63,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+120),ObjMove_GetY(obj)+r*sin(dir+120),2,dir+120,63,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+240),ObjMove_GetY(obj)+r*sin(dir+240),2,dir+240,63,15);
			
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir),ObjMove_GetY(obj)+r*sin(-dir),2,-dir,61,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir+120),ObjMove_GetY(obj)+r*sin(-dir+120),2,-dir+120,61,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir+240),ObjMove_GetY(obj)+r*sin(-dir+240),2,-dir+240,61,15);		
			dir-=8;
			wait(6);
		}	
	}	
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..68) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),2.5,dir,63,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+120),ObjMove_GetY(obj)+r*sin(dir+120),2.5,dir+120,63,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+240),ObjMove_GetY(obj)+r*sin(dir+240),2.5,dir+240,63,15);
			
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir),ObjMove_GetY(obj)+r*sin(-dir),2.5,-dir,61,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir+120),ObjMove_GetY(obj)+r*sin(-dir+120),2.5,-dir+120,61,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir+240),ObjMove_GetY(obj)+r*sin(-dir+240),2.5,-dir+240,61,15);		
			dir-=8;
			wait(4);
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 	
		ascent(i in 0..80) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),3,dir,63,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+120),ObjMove_GetY(obj)+r*sin(dir+120),3,dir+120,63,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+240),ObjMove_GetY(obj)+r*sin(dir+240),3,dir+240,63,15);
			
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir),ObjMove_GetY(obj)+r*sin(-dir),3,-dir,61,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir+120),ObjMove_GetY(obj)+r*sin(-dir+120),3,-dir+120,61,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(-dir+240),ObjMove_GetY(obj)+r*sin(-dir+240),3,-dir+240,61,15);		
								
			dir-=8;
			wait(4);
		}	
	}	
} 

// Large fairy familiar shot 
task fireBalFamiliar00(obj) {
	wait(60);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..12) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,ObjMove_GetAngle(obj),202,30);
			wait(20);
		}	
	}		
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..24) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,ObjMove_GetAngle(obj),202,30);
			wait(15);
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 	
		ascent(i in 0..32) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,ObjMove_GetAngle(obj),202,30);
			wait(15);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,ObjMove_GetAngle(obj)+45,202,30);
			wait(15);
		}	
	}		
} 

// Large fairy familiar shot 
task fireBalFamiliar01(obj) {
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(i in 0..12) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,ObjMove_GetAngle(obj),55,15);
				wait(2);
			}
			wait(60);
		}	
	}	
	if(GetAreaCommonData("game","difficulty",0) == 1) { 	
		ascent(i in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(i in 0..15) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,ObjMove_GetAngle(obj),55,15);
				wait(2);
			}
			wait(60);
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 	
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(i in 0..18) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,ObjMove_GetAngle(obj),55,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,ObjMove_GetAngle(obj)+4,55,15);
				wait(2);
			}
			wait(45);
		}	
	}		
} 

// Flurry fairy shots
task fireBalFlurryShot00(obj) {
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			fireBalSubFlurry00(obj);
			wait(2);
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			fireBalSubFlurry00(obj);
			wait(2);
		}		
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 
			fireBalSubFlurry00(obj);
			wait(2);
		}		
	}
} 

// Sub shot of fireBalFlurryShot00
task fireBalSubFlurry00(obj) {
	let dir = 0;
	let shotAngle = GetAngleToPlayer(obj);
	
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..4) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle-dir+4,60,15);
			dir+=4;
			wait(3);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..5) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.5,shotAngle-dir,60,15);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.5,shotAngle+dir,60,15);
			dir+=3;
			wait(3);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..6) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-dir,60,15);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+dir,60,15);
			dir+=4;
			wait(3);
		}	
	}	
}

// Twin fam user fairy main shot
task fireBalTwinFamFairy(obj) {
	let dir = 0;
	
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		loop(5) {
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(i in 0..3) {
				if(Obj_IsDeleted(obj)) { break; } 			
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,38,15);
				dir+=360/3;
			}
			dir+=20;
			wait(30);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		loop(5) {
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(i in 0..4) {
				if(Obj_IsDeleted(obj)) { break; } 			
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,38,15);
				dir+=360/4;
			}
			dir+=20;
			wait(30);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		loop(5) {
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(i in 0..6) {
				if(Obj_IsDeleted(obj)) { break; } 			
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,38,15);
				dir+=360/6;
			}
			dir+=20;
			wait(30);
		}	
	}
}

// Twin fam user fairy familiar shot
task fireBalTwinFamShot(obj) {

	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN01);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj),44,0);
			wait(60);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN01);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-20,44,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj),44,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+20,44,0);
			wait(60);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN01);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-20,44,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj),44,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+20,44,0);
			wait(60);
		}
	}
}

// Criss Cross Train Fairy shot
task fireBalCrissCrossTrain(obj,side) {
	let dir = 0;
	
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..3) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);
			if(side == "left") {
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-16,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-64,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-112,60,10);
			}			
			if(side == "right") {
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+16,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+64,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+112,60,10);
			}			
			wait(25);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..6) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);
			if(side == "left") {
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-16,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-64,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-112,60,10);
			}			
			if(side == "right") {
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+16,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+64,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+112,60,10);
			}			
			wait(20);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..6) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);
			if(side == "left") {
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-16,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-64,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-112,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90-128,60,10);
			}			
			if(side == "right") {
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+16,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+64,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+112,60,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,90+128,60,10);
			}			
			wait(15);
		}	
	}	
}

// Twin fam user fairy familiar shot 01
task fireBalTwinFamFairy01(obj) {
	let dir = 270;
	let offset = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		loop(2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			fireBalTwinFamFairySubShotB(obj,dir);
			ascent(i in 0..5) { 
				if(Obj_IsDeleted(obj)) { break; } 
				fireBalTwinFamFairySubShot(obj,dir,offset);
				dir+=360/5;
			}
			dir = 90;
			wait(60);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		loop(2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			fireBalTwinFamFairySubShotB(obj,dir);
			fireBalTwinFamFairySubShotC(obj,dir);
			ascent(i in 0..5) { 
				if(Obj_IsDeleted(obj)) { break; } 
				fireBalTwinFamFairySubShot(obj,dir,offset);
				dir+=360/5;
			}
			dir = 90;
			wait(60);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		loop(2) { 
			if(Obj_IsDeleted(obj)) { break; } 
			fireBalTwinFamFairySubShotB(obj,dir);
			fireBalTwinFamFairySubShotC(obj,dir);
			ascent(i in 0..5) { 
				if(Obj_IsDeleted(obj)) { break; } 
				fireBalTwinFamFairySubShot(obj,dir,offset);
				dir+=360/5;
			}
			dir = 90;
			wait(60);
		}	
	}
}

// Subshot A
task fireBalTwinFamFairySubShot(obj,dir,offset) {
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..4) { 
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir+offset,0.05,2,61,15); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir-offset,0.05,2,61,15); 
			offset+=3;
			wait(6);
		}
		ascent(i in 0..4) { 
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir+offset,0.05,2,61,15); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir-offset,0.05,2,61,15); 
			offset-=3;
			wait(6);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..6) { 
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir+offset,0.05,2,61,15); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir-offset,0.05,2,61,15); 
			offset+=3;
			wait(6);
		}
		ascent(i in 0..7) { 
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir+offset,0.05,2,61,15); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir-offset,0.05,2,61,15); 
			offset-=3;
			wait(6);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..8) { 
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir+offset,0.05,2,61,15); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir-offset,0.05,2,61,15); 
			offset+=3;
			wait(6);
		}
		ascent(i in 0..10) { 
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir+offset,0.05,2,61,15); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir-offset,0.05,2,61,15); 
			offset-=3;
			wait(6);
		}		
	}	
}

// Subshot B
task fireBalTwinFamFairySubShotB(obj,dir) {
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..5) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,0.05,2,234,15); 
			dir+=360/5; 
		}
	
	}	
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..5) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,0.05,2,234,15); 
			dir+=360/5; 
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..5) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);	
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,0.05,2,234,15); 
			dir+=360/5; 
		}	
	}	
}

// Subshot C
task fireBalTwinFamFairySubShotC(obj,dir) {
	wait(30);
	dir = dir - 180;
	ascent(i in 0..5) { 
		if(Obj_IsDeleted(obj)) { break; } 
		PlaySFX(SFX_TAN01);	
		CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,0.05,2,202,30); 
		dir+=360/5;
	}	
}

// Twin fam user familiar shot 01
task fireBalTwinFamShot01(obj) {
	wait(60);
	let dir = 90;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		// None in normal
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		loop(2) {
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(i in 0..4) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,35,10);
				dir+=360/4;
			}
			dir+=33;
			wait(90);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		loop(3) {
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(i in 0..6) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,35,10);
				dir+=360/6;
			}
			dir+=33;
			wait(90);
		}	
	}
}

// Jumping fairies shot
task fireBalJumpyFairy(obj) { 
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		if(!Obj_IsDeleted(obj)) {
			PlaySFX(SFX_TAN01);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-12,40,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+12,40,10);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(obj)) {
			PlaySFX(SFX_TAN01);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)-16,41,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj),40,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)+18,41,10);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		let dir = 0;
		if(!Obj_IsDeleted(obj)) {
			PlaySFX(SFX_TAN01);
			ascent(j in 0..10) { 
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,58,0);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.1,dir,58,0);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.2,dir,58,0);				
				dir+=360/10;
			}
			ascent(i in 0..6) { 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)-rand_int(-5,5),40,10);
				wait(2);
			}
		}	
	}	
}


// Multi familiar user fairy shot
task fireBalMultiFamFairy(obj) {
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		fireBalMultiFamFairyA(obj);
		fireBalMultiFamFairyB(obj);	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		fireBalMultiFamFairyA(obj);
		fireBalMultiFamFairyB(obj);
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		fireBalMultiFamFairyA(obj);
		fireBalMultiFamFairyB(obj);	
	}
}

task fireBalMultiFamFairyA(obj) {
	let dir = 90;
	let r = 8;
	if(GetAreaCommonData("game","difficulty",0) == 0) {
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..96) {
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),2,dir,55,15);
				dir+=12;
				wait(1);
			}
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..112) {
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),3,dir,55,15);
				dir+=12;
				wait(1);
			}
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) {
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..128) {
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),3,dir,55,15);
				dir+=12;
				wait(1);
			}
		}	
	}
}
task fireBalMultiFamFairyB(obj) { 
	wait(30);
	let dir = 90;
	let shotAngle = GetAngleToPlayer(obj);
	if(GetAreaCommonData("game","difficulty",0) == 0) {
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..12) { 
				if(Obj_IsDeleted(obj)) { break; } 
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-72,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-36,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+36,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+72,121,10);
				dir+=360/5;
				wait(15);
			}
		}		
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) {
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..16) { 
				if(Obj_IsDeleted(obj)) { break; } 
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-72,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-36,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+36,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+72,121,10);
				dir+=360/5;
				wait(10);
			}
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) {
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..32) { 
				if(Obj_IsDeleted(obj)) { break; } 
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-72,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-36,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+36,121,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+72,121,10);
				dir+=360/5;
				wait(5);
			}
		}	
	}	
} 

// Multi familiar user fairy familiar shot 
task fireBalMultiFamShot00(obj) { 
	wait(30);
	let dir = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		loop(5) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_KIRA00);
			ascent(i in 0..6) {
				if(Obj_IsDeleted(obj)) { break; } 	
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),6,dir,-0.4,2,33,10); 
				dir+=360/6;
			}
			dir+=33;
			wait(60);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		loop(5) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_KIRA00);
			ascent(i in 0..6) {
				if(Obj_IsDeleted(obj)) { break; } 	
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),8,dir,-0.4,2,33,10); 
				dir+=360/6;
			}
			dir+=33;
			wait(60);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		loop(5) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_KIRA00);
			ascent(i in 0..8) {
				if(Obj_IsDeleted(obj)) { break; } 	
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),8,dir,-0.4,2,33,10); 
				dir+=360/8;
			}
			dir+=33;
			wait(60);
		}	
	}
}

// Swirling Train Fairy shot
task fireBalSwirlingTrain(obj) {
	wait(30);
	let shotAngle = GetAngleToPlayer(obj);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle-16,30,10);
			//CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle+16,30,10);
			wait(10);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle-32,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle-16,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle+16,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle+32,30,10);
			wait(10);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-40,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle-20,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+20,30,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,shotAngle+40,30,10);
			wait(8);
		}	
	}
}

// Swirling Train Fairy shot 01
task fireBalSwirlingTrain01(obj) {
	let shotAngle = GetAngleToPlayer(obj);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,shotAngle-2,0.25,2+i/5,56,10); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,shotAngle+2,0.25,2+i/5,56,10); 
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..8) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,shotAngle-2,0.25,2+i/5,56,10); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,shotAngle,0.25,2+i/5,56,10); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,shotAngle+2,0.25,2+i/5,56,10); 
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..10) { 
			if(Obj_IsDeleted(obj)) { break; } 		
			PlaySFX(SFX_TAN00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle-2,0.25,2+i/5,56,10); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle,0.25,2+i/5,56,10); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),2,shotAngle+2,0.25,2+i/5,56,10); 
		}	
	}
}

// Large Fairy using homing familiars shot
task fireBalHomingFairy(obj) {
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..8) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);
			ascent(j in 0..2) { 
				if(Obj_IsDeleted(obj)) { break; } 	
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj),0.25,1+j/2,12,10); 			
			}
			wait(45);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..12) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);
			ascent(j in 0..4) { 
				if(Obj_IsDeleted(obj)) { break; } 	
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj)-4,0.25,1+j/2,12,10); 
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj)+4,0.25,1+j/2,12,10); 
				if(i == 4) { 
					ascent(k in 0..6) { 
						if(Obj_IsDeleted(obj)) { break; } 	
						CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj)-8,0.25,1+k/2,44,10); 
						CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj),0.25,1+k/2,44,10); 
						CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj)+8,0.25,1+k/2,44,10); 			
					}
				}				
			}
			wait(30);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..12) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);
			ascent(j in 0..4) { 
				if(Obj_IsDeleted(obj)) { break; } 	
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj)-8,0.25,2+j/2,14,10); 
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj)+8,0.25,2+j/2,14,10); 
				if(i == 4) { 
					ascent(k in 0..8) { 
						if(Obj_IsDeleted(obj)) { break; } 	
						CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj)-16,0.25,1+k/2,47,10); 
						CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj),0.25,1+k/2,47,10); 
						CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,GetAngleToPlayer(obj)+16,0.25,1+k/2,47,10); 			
					}
				}				
			}
			wait(30);
		}	
	}
}

// Train of fairies from the middle firing single shots
task fireMidTrain(obj) {
	let fixedWait = [15,20,25];
	wait(fixedWait[rand_int(0,3)]);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..2) { 
				if(Obj_IsDeleted(obj)) { break; } 	
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-16,26,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj),26,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+16,26,15);
				wait(160);
			}
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..2) { 
				if(Obj_IsDeleted(obj)) { break; } 	
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)-16,26,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj),26,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+16,26,15);
				wait(160);
			}
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		if(!Obj_IsDeleted(obj)) { 
			ascent(i in 0..8) { 
				if(Obj_IsDeleted(obj)) { break; } 	
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,GetAngleToPlayer(obj),26,15);
				wait(5);
			}
		}	
	}
} 

// Fairy which shotguns 3 fams 
task fireShotGunFamFairy(obj) { 	
	let dir = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		if(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_TAN00);
			ascent(i in 0..16) { 
				if(Obj_IsDeleted(obj)) { break; } 
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,63,10);
				dir+=360/16;
			}
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_TAN00);
			ascent(i in 0..24) { 
				if(Obj_IsDeleted(obj)) { break; } 
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,63,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1.5,dir,63,10);
				dir+=360/24;
			}
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		if(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_TAN00);
			ascent(i in 0..32) { 
				if(Obj_IsDeleted(obj)) { break; } 
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,dir,63,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3.5,dir,63,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),4.0,dir,63,10);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),4.5,dir,63,10);
				dir+=360/32;
			}
		}	
	}
} 

// Large fairy which summons the spinning mini fairies. 
task fireBalPirouette(obj) {
	wait(120);
	let dir = 0;
	let r = 8;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		fireBalPirouetteB(obj);
		ascent(i in 0..24) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),2,dir,210,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+120),ObjMove_GetY(obj)+r*sin(dir+120),2,dir+120,210,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+240),ObjMove_GetY(obj)+r*sin(dir+240),2,dir+240,210,15);
			dir-=16;
			wait(5);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		fireBalPirouetteB(obj);
		ascent(i in 0..32) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),2,dir,210,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+120),ObjMove_GetY(obj)+r*sin(dir+120),2,dir+120,210,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+240),ObjMove_GetY(obj)+r*sin(dir+240),2,dir+240,210,15);
			dir-=16;
			wait(3);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		fireBalPirouetteB(obj);
		ascent(i in 0..42) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),3,dir,210,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+120),ObjMove_GetY(obj)+r*sin(dir+120),3,dir+120,210,15);
			CreateShotA1(ObjMove_GetX(obj)+r*cos(dir+240),ObjMove_GetY(obj)+r*sin(dir+240),3,dir+240,210,15);
			dir-=16;
			wait(3);
		}	
	}
}

// Pirouette shot
task fireBalPirouetteB(obj) {
	let dir = 270;
	let r = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		loop(10) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);
			ascent(i in 0..5) { 
				CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),2,dir+rand_int(-4,4),124,15);
				dir+=360/5;
			}
			wait(15);
		}	
	}	
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		loop(12) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);
			ascent(i in 0..5) { 
				CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),2,dir+rand_int(-4,4),124,15);
				dir+=360/5;
			}
			wait(10);
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		loop(12) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN01);
			ascent(i in 0..8) { 
				CreateShotA1(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),3,dir+rand_int(-4,4),124,15);
				dir+=360/8;
			}
			wait(10);
		}	
	}	
}

// Mini fairy for the pirouette pattern
task fireBalPirouetteMini(obj) {
	let dir = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		if(!Obj_IsDeleted(obj)) {
			ascent(i in 0..16) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				dir = atan2(ObjMove_GetY(obj)-GetCenterY,ObjMove_GetX(obj)-GetCenterX);
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,0.001,3,38,10); 	
				wait(10);
			}
			ascent(i in 0..24) { 
				if(Obj_IsDeleted(obj)) { break; } 		
				PlaySFX(SFX_TAN00);
				dir = atan2(ObjMove_GetY(obj)-GetCenterY,ObjMove_GetX(obj)-GetCenterX);
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,0.001,3,35,10); 	
				wait(10);
			}		
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(obj)) {
			ascent(i in 0..20) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				dir = atan2(ObjMove_GetY(obj)-GetCenterY,ObjMove_GetX(obj)-GetCenterX);
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,0.001,3,38,10); 	
				wait(5);
			}
			ascent(i in 0..36) { 
				if(Obj_IsDeleted(obj)) { break; } 		
				PlaySFX(SFX_TAN00);
				dir = atan2(ObjMove_GetY(obj)-GetCenterY,ObjMove_GetX(obj)-GetCenterX);
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir,0.001,3,35,10); 	
				wait(5);
			}		
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		if(!Obj_IsDeleted(obj)) {
			ascent(i in 0..20) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				dir = atan2(ObjMove_GetY(obj)-GetCenterY,ObjMove_GetX(obj)-GetCenterX);
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,0.001,3,38,10); 	
				wait(5);
			}
			ascent(i in 0..36) { 
				if(Obj_IsDeleted(obj)) { break; } 		
				PlaySFX(SFX_TAN00);
				dir = atan2(ObjMove_GetY(obj)-GetCenterY,ObjMove_GetX(obj)-GetCenterX);
				CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,0.001,3,35,10); 	
				wait(5);
			}		
		}	
	}
}

// Wall attack fairies 
task fireBalWallAttack(obj,side) {
	wait(60);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..10) {
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_KIRA00);
			if(side == "left") { CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,0,-0.001-i/240,0.02,-1,3,73,10); }
			if(side == "right") { CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,0,0.001+i/240,0.02,1,3,73,10); }
			wait(20);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..20) {
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_KIRA00);
			if(side == "left") { CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,0,-0.001-i/240,0.02,-1,3,73,10); }
			if(side == "right") { CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,0,0.001+i/240,0.02,1,3,73,10); }
			wait(10);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..20) {
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_KIRA00);			
			if(side == "left") { CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,0,-0.002-i/240,0.025,-1,4,74,10); }
			if(side == "right") { CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,0,0.002+i/240,0.025,1,4,74,10); }
			wait(7);
		}
	}
} 

// Wall attack fairies pre shot
task fireBalWallAttackPre(obj) {
	wait(5);
	let dir = 0;
	ascent(i in 0..8) { 
		CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,dir,26,15);
		dir+=360/8;
	}
}

// dancing shot
task fireBalDancingFairy(obj) {
	wait(30);
	let dir = 45;
	let r = 24;
	let kleur = 222;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		loop(6) {
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_KIRA01);
			let dancingShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
			SetShotDataA(dancingShot00,0,0,GetAngleToPlayer(obj),0,0,0,207);
			SetShotDataA(dancingShot00,90,1,GetAngleToPlayer(obj),0,1,3,207);
				
			ascent(i in 0..8) {
				let dancingShot01 = CreateShotA(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),10);
				SetShotDataA(dancingShot01,0,0,dir,0,0,0,kleur);
				SetShotDataA(dancingShot01,90,1,dir,0,0.25,3,kleur);
				kleur++;
				if(kleur == 225) { kleur = 222; } 
				dir+=360/8;
			}
			wait(90);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		loop(6) {
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_KIRA01);
			let dancingShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
			SetShotDataA(dancingShot00,0,0,GetAngleToPlayer(obj),0,0,0,207);
			SetShotDataA(dancingShot00,90,1,GetAngleToPlayer(obj),0,1,3,207);
				
			ascent(i in 0..18) {
				let dancingShot01 = CreateShotA(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),10);
				SetShotDataA(dancingShot01,0,0,dir,0,0,0,kleur);
				SetShotDataA(dancingShot01,90,1,dir,0,0.25,3,kleur);
				kleur++;
				if(kleur == 225) { kleur = 222; } 
				dir+=360/12;
			}
			wait(90);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		loop(6) {
			if(Obj_IsDeleted(obj)) { break; }
			PlaySFX(SFX_KIRA01);
			let dancingShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
			SetShotDataA(dancingShot00,0,0,GetAngleToPlayer(obj),0,0,0,207);
			SetShotDataA(dancingShot00,90,1,GetAngleToPlayer(obj),0,1,3,207);
				
			ascent(i in 0..22) {
				let dancingShot01 = CreateShotA(ObjMove_GetX(obj)+r*cos(dir),ObjMove_GetY(obj)+r*sin(dir),10);
				SetShotDataA(dancingShot01,0,0,dir,0,0,0,kleur);
				SetShotDataA(dancingShot01,90,1,dir,0,0.25,4,kleur);
				kleur++;
				if(kleur == 225) { kleur = 222; } 
				dir+=360/22;
			}
			wait(90);
		}	
	}
}

/*

	if(GetAreaCommonData("game","difficulty",0) == 0) { 
	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 

	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
	
	}
	
*/