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

// Spammy circle pattern + aimed scramble
task fireDjFlightFairyShot00(obj) {
	let dir = 0;
	let fixedWait = [0,15,30];
	wait(fixedWait[rand_int(0,3)]);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		PlaySFX(SFX_TAN01);	
		ascent(i in 0..16) { 	
			if(Obj_IsDeleted(obj)) { break; } 			
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,dir,0.05,3,70,10);
			dir+=360/16;
		}				
		ascent(i in 0..4) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);	
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+rand_int(-3,3),30,0);
			wait(10);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		PlaySFX(SFX_TAN01);	
		ascent(i in 0..18) { 	
			if(Obj_IsDeleted(obj)) { break; } 			
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,dir,0.05,3,70,10);
			dir+=360/18;
		}				
		ascent(i in 0..6) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);	
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)+rand_int(-3,3),30,0);
			wait(10);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		PlaySFX(SFX_TAN01);	
		ascent(i in 0..18) { 	
			if(Obj_IsDeleted(obj)) { break; } 			
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,dir,0.05,2.5,70,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,dir,0.05,3.0,70,10);
			dir+=360/18;
		}				
		ascent(i in 0..8) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);	
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)+rand_int(-3,3),30,0);
			wait(10);
		}	
	}
}

// Formation shots with few homing shots. 
task fireDjFlightFairyShot01(obj) {
	let sf = 0; 
	let dir = 90;
	let shift = 0;
	
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		while(ObjMove_GetY(obj) < GetClipMaxY-96) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			let crawlShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
			let crawlShot01 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
		
			SetShotDataA(crawlShot00,0,3,dir,0,0,3,75);
			SetShotDataA(crawlShot01,0,3,dir,0,0,3,79);
		
			ObjMove_SetAngle(crawlShot00,dir+shift);
			ObjMove_SetAngle(crawlShot01,dir-shift);
			shift = 32*sin(sf);
			sf+=8;
			wait(10);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		while(ObjMove_GetY(obj) < GetClipMaxY-96) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			let crawlShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
			let crawlShot01 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
		
			SetShotDataA(crawlShot00,0,3,dir,0,0,3,75);
			SetShotDataA(crawlShot01,0,3,dir,0,0,3,79);
		
			ObjMove_SetAngle(crawlShot00,dir+shift);
			ObjMove_SetAngle(crawlShot01,dir-shift);
			shift = 32*sin(sf);
			sf+=8;
			wait(10);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		while(ObjMove_GetY(obj) < GetClipMaxY-96) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			let crawlShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
			let crawlShot01 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);
		
			SetShotDataA(crawlShot00,0,3,dir,0,0,3,75);
			SetShotDataA(crawlShot01,0,3,dir,0,0,3,79);
		
			ObjMove_SetAngle(crawlShot00,dir+shift);
			ObjMove_SetAngle(crawlShot01,dir-shift);
			shift = 32*sin(sf);
			sf+=8;
			wait(10);
		}	
	}
}

// Formation shots with few homing shots. 
task fireDjFlightFairyLaser00(obj) {
	if(GetAreaCommonData("game","difficulty",0) == 0) { 

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

	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		if(!Obj_IsDeleted(obj)) {
			PlaySFX(SFX_LAZER01);
			CreateLooseLaserA1(ObjMove_GetX(obj),ObjMove_GetY(obj)+2,6,GetAngleToPlayer(obj),100,8,6,0);
		}	
	}
}

// Backward formation shot
task fireDjFlightFairyBackshot00(obj) {
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		loop(32) {
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,rand_int(200,350),38,5);
			yield;
		}		
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		loop(32) {
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,rand_int(200,350),38,5);
			yield;
		}		
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		loop(8) {
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,rand_int(200,350),38,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),-2,rand_int(200,350),38,2);
			wait(2);
		}	
	}
}

// Appearing balls above city shot 
task fireDjBallAppearShot00(obj) {
	let dir = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_TAN00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir-5,0.01,2,185,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir+5,0.01,2,185,10);
			dir+=22.5;			
			wait(30);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_TAN00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir-5,0.01,3,185,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,0.01,4,187,5);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1,dir+5,0.01,3,185,10);
			dir+=22.5;			
			wait(20);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_TAN00);
			
			ascent(i in 0..3) { 
				dir = GetAngleToPlayer(obj);
				ascent(j in 0..4) { 
					if(Obj_IsDeleted(obj)) { break; } 
					ascent(k in 0..5) { 
						CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),1.5,dir,0.01,4,185,10);
						dir+=2;
					}
					dir+=360/4;
				}
				wait(15);
			}	
		}	
	}
}

// Waving fairy familiar shots
task fireDjFairyFamShot00(obj) {
	let dir = 0;
	let dir2 = 0;
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		loop(2) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			ascent(i in 0..6) { 
				if(Obj_IsDeleted(obj)) { break; } 
				dir2 = dir;
				ascent(j in 0..12) { 
					CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1+(j/4),dir2,10,10);
					CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1+(j/4),dir2+4,20,10);
					dir2+=2;
				}
				dir+=360/6;
			}
			wait(180);
		} 	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		loop(2) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			ascent(i in 0..8) { 
				if(Obj_IsDeleted(obj)) { break; } 
				dir2 = dir;
				ascent(j in 0..12) { 
					CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1+(j/4),dir2,10,10);
					CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1+(j/4),dir2+4,20,10);
					dir2+=2;
				}
				dir+=360/8;
			}
			wait(180);
		} 
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		loop(2) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			ascent(i in 0..8) { 
				if(Obj_IsDeleted(obj)) { break; } 
				dir2 = dir;
				ascent(j in 0..12) { 
					CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1+(j/5),dir2,10,10);
					CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1+(j/5),dir2+4,20,10);
					dir2+=2;
				}
				dir+=360/8;
			}
			wait(180);
		} 	
	}			
} 

task fireDjFairyFamShot01(obj) {
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		while(!Obj_IsDeleted(obj)) { 
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,ObjMove_GetAngle(obj),33,10);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,ObjMove_GetAngle(obj)-2,33,10);
			wait(10);
		}
	}
}

// Ace fairy with laser shot for the fam
task fireDjAceLaser00(masterObj,famObj) {
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		if(!Obj_IsDeleted(famObj)) { 
			PlaySFX(SFX_LAZER02);
			CreateStraightLaserA1(ObjMove_GetX(famObj),ObjMove_GetY(famObj),GetAngleToPlayer(masterObj),1024,8,30,41,45);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(famObj)) { 
			PlaySFX(SFX_LAZER02);
			CreateStraightLaserA1(ObjMove_GetX(famObj),ObjMove_GetY(famObj),GetAngleToPlayer(masterObj),1024,8,30,41,30);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		if(!Obj_IsDeleted(famObj)) { 
			PlaySFX(SFX_LAZER02);
			CreateStraightLaserA1(ObjMove_GetX(famObj),ObjMove_GetY(famObj),GetAngleToPlayer(masterObj)-3,1024,8,30,44,30);
			CreateStraightLaserA1(ObjMove_GetX(famObj),ObjMove_GetY(famObj),GetAngleToPlayer(masterObj)+3,1024,8,30,44,30);
		}	
	}
}

// Ace fairy with laser shot for the fam
task fireDjAceFamShot(obj) {
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_KIRA00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),-4,ObjMove_GetAngle(obj)-15,0.1,3,41,4);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),-4,ObjMove_GetAngle(obj)+15,0.1,3,41,4);
			wait(8);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_KIRA00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),-4,ObjMove_GetAngle(obj)-15,0.1,4,41,5);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),-4,ObjMove_GetAngle(obj)+15,0.1,4,41,5);
			wait(5);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_KIRA00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),-4,ObjMove_GetAngle(obj)-25,0.1,5,42,5);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),-4,ObjMove_GetAngle(obj)-15,0.1,5,42,5);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),-4,ObjMove_GetAngle(obj)+15,0.1,5,42,5);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),-4,ObjMove_GetAngle(obj)+25,0.1,5,42,5);
			wait(5);
		}	
	}
}

// Ace fairy machinegun shot. 
task fireDjAceMachinegun00(obj) {
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..16) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),6,GetAngleToPlayer(obj)+rand_int(-10,10),116,0);
			wait(3);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..18) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),6,GetAngleToPlayer(obj)+rand_int(-10,10),116,0);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),6,GetAngleToPlayer(obj)+rand_int(-10,10),116,0);
			wait(3);
		}	
	}
}

// Gunner large fairy
task fireDjGunner00(obj) { 
	let speed = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..80) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			speed = rand_int(1,2);
			CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj)-16,speed*cos(rand(255,285)),speed*sin(rand(255,285)),0,0.06,0,rand_int(2,5),74,15);
			wait(20);
		}			
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..80) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			speed = rand_int(1,2);
			CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj)-16,speed*cos(rand(255,285)),speed*sin(rand(255,285)),0,0.06,0,rand_int(2,5),74,15);
			wait(20);
		}	
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..80) {
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			speed = rand_int(1,2);
			CreateShotB2(ObjMove_GetX(obj),ObjMove_GetY(obj)-16,speed*cos(rand(255,285)),speed*sin(rand(255,285)),0,0.06,0,rand_int(3,6),10,15);
			wait(15);
		}		
	}
}

// large fairy gunner laser shot
task fireDjGunnerLaser00(obj) {
	let dir = 0;
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_LAZER01);
			dir = GetAngleToPlayer(obj)+rand_int(-15,15);
			ascent(i in 0..4) { 
				CreateRegularStatic00(obj,ObjMove_GetX(obj)+32*cos(dir),ObjMove_GetY(obj)+32*sin(dir),dir,1024,8,6,30,30,true,false);
				dir+=360/4;
			}
			wait(90);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_LAZER01);
			dir = GetAngleToPlayer(obj)+rand_int(-15,15);
			ascent(i in 0..4) { 
				CreateRegularStatic00(obj,ObjMove_GetX(obj)+32*cos(dir),ObjMove_GetY(obj)+32*sin(dir),dir,1024,8,6,30,15,true,false);
				dir+=360/4;
			}
			wait(90);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		while(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_LAZER01);
			dir = GetAngleToPlayer(obj)+rand_int(-15,15);
			ascent(i in 0..5) { 
				CreateRegularStatic00(obj,ObjMove_GetX(obj)+32*cos(dir),ObjMove_GetY(obj)+32*sin(dir),dir,1024,8,6,30,15,true,false);
				dir+=360/5;
			}
			wait(90);
		}	
	}
}

// Zig zagging balls shot
task fireDjBallShot00(obj) {
	let dir = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		if(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_LAZER01);	
			ascent(i in 0..6) { 
				CreateLooseLaserA1(ObjMove_GetX(obj)+16*cos(dir),ObjMove_GetY(obj)+16*sin(dir),3,dir+8,100,8,3,0); 
				CreateLooseLaserA1(ObjMove_GetX(obj)+16*cos(dir+180),ObjMove_GetY(obj)+16*sin(dir+180),3,dir+180,100,8,3,0); 
				dir+=360/6;
			}	
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_LAZER01);	
			ascent(i in 0..8) { 
				CreateLooseLaserA1(ObjMove_GetX(obj)+16*cos(dir),ObjMove_GetY(obj)+16*sin(dir),3,dir+8,100,8,3,0); 
				CreateLooseLaserA1(ObjMove_GetX(obj)+16*cos(dir+180),ObjMove_GetY(obj)+16*sin(dir+180),3,dir+180,100,8,3,0); 
				dir+=360/8;
			}	
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		if(!Obj_IsDeleted(obj)) { 
			PlaySFX(SFX_LAZER01);	
			ascent(i in 0..8) { 
				CreateLooseLaserA1(ObjMove_GetX(obj)+16*cos(dir),ObjMove_GetY(obj)+16*sin(dir),4,dir+8,130,9,3,0); 
				CreateLooseLaserA1(ObjMove_GetX(obj)+16*cos(dir+180),ObjMove_GetY(obj)+16*sin(dir+180),4,dir+180,130,9,3,0); 
				dir+=360/8;
			}	
		}	
	}	
}

// Revenge shot for balls 00
task fireDjBallRevenge00(obj) {
	let dir = 270;
	let deathX = 0;
	let deathY = 0;
	
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		while(!Obj_IsDeleted(obj)) {	
			deathX = ObjMove_GetX(obj);
			deathY = ObjMove_GetY(obj);

			if(ObjEnemy_GetInfo(obj,INFO_LIFE) < 1) {
				PlaySFX(SFX_TAN01);
				ascent(i in 0..5) { 
					CreateShotA2(deathX,deathY,3,dir,-0.04,-2,202,0);
					dir+=360/5;
				}
				break;
			}			
			yield;
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		while(!Obj_IsDeleted(obj)) {	
			deathX = ObjMove_GetX(obj);
			deathY = ObjMove_GetY(obj);
			if(ObjEnemy_GetInfo(obj,INFO_LIFE) < 1) {
				PlaySFX(SFX_TAN01);
				ascent(i in 0..6) { 
					CreateShotA2(deathX,deathY,3,dir,-0.04,-3,202,0);
					dir+=360/6;
				}
				break;
			}		
			yield;			
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		while(!Obj_IsDeleted(obj)) {	
			deathX = ObjMove_GetX(obj);
			deathY = ObjMove_GetY(obj);
			if(ObjEnemy_GetInfo(obj,INFO_LIFE) < 1) {
				PlaySFX(SFX_TAN01);
				ascent(i in 0..6) { 
					CreateShotA2(deathX,deathY,3.5,dir,-0.05,-3.5,202,0);
					CreateShotA2(deathX,deathY,4,dir+45,-0.05,-4,202,0);
					CreateShotA2(deathX,deathY,4.5,dir,-0.05,-4.5,202,0);
					dir+=360/6;
				}
				break;
			}		
			yield;			
		}	
	}
}

// Revengeshot for balls 00a
task fireDjBallRevenge00a(obj) {
	let dir = 270;
	let deathX = 0;
	let deathY = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		while(!Obj_IsDeleted(obj)) {	
			deathX = ObjMove_GetX(obj);
			deathY = ObjMove_GetY(obj);

			if(ObjEnemy_GetInfo(obj,INFO_LIFE) < 1) {
				PlaySFX(SFX_TAN02);
				ascent(i in 0..16) { 
					let revenBullet = CreateShotA2(deathX,deathY,0,rand_int(0,360),0.01,4,115,0);
					dir+=12.3;
					wait(1);
				}
				break;
			}
			yield;			
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		while(!Obj_IsDeleted(obj)) {	
			deathX = ObjMove_GetX(obj);
			deathY = ObjMove_GetY(obj);
			if(ObjEnemy_GetInfo(obj,INFO_LIFE) < 1) {
				PlaySFX(SFX_TAN02);
				ascent(i in 0..24) { 
					let revenBullet = CreateShotA2(deathX,deathY,0,rand_int(0,360),0.01,5,115,0);
					dir+=12.3;
					wait(1);
				}
				break;
			}	
			yield;			
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		while(!Obj_IsDeleted(obj)) {	
			deathX = ObjMove_GetX(obj);
			deathY = ObjMove_GetY(obj);
			if(ObjEnemy_GetInfo(obj,INFO_LIFE) < 1) {
				PlaySFX(SFX_TAN02);
				ascent(i in 0..24) { 
					let revenBullet = CreateShotA2(deathX,deathY,0,rand_int(0,360),0.03,5,115,0);
					dir+=12.3;
					wait(1);
				}
				break;
			}	
			yield;			
		}	
	}
}

// Regular fairy shot 00
task fireDjFairyShot00(obj) {
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..8) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,GetAngleToPlayer(obj)+rand_int(-13,13),243,10);
			wait(5);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..8) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,GetAngleToPlayer(obj)+rand_int(-13,13),243,10);
			wait(5);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..12) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),4,GetAngleToPlayer(obj)+rand_int(-13,13),243,10);
			wait(5);
		}	
	}
}

// Rushing down fast fairy animation trail (not a bullet)
task fireDjSpeedTrail(obj) {
	let offsetY = GetClipMaxY/13;
	let kleur = [40,52,50];
	let j = 0;
	ascent(i in 0..13) { 
		let speedTrail00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj)+(i*offsetY),20);
		SetShotDataA(speedTrail00,0,0,0,0,0,0,kleur[j]);
		DeleteShotA(speedTrail00,0);
		j++;
		if(j > 2) { j = 0; } 
		wait(2);
	}	
}

// Waving fairy familiar shots
task fireDjLaneSplit00(obj) {
	let dir = 90;
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..24) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);	
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir),ObjMove_GetY(obj)+1*sin(dir),3,dir,-0.1,2,25,5);
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir+120),ObjMove_GetY(obj)+1*sin(dir+120),3,dir+120,-0.1,2,25,5);
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir+240),ObjMove_GetY(obj)+1*sin(dir+240),3,dir+240,-0.1,2,25,5);
			dir+=9;
			yield;
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..36) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);	
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir),ObjMove_GetY(obj)+1*sin(dir),5,dir,-0.2,2,25,5);
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir+120),ObjMove_GetY(obj)+1*sin(dir+120),5,dir+120,-0.2,2,25,5);
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir+240),ObjMove_GetY(obj)+1*sin(dir+240),5,dir+240,-0.2,2,25,5);
			dir+=9;
			yield;
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..72) { 
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);	
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir),ObjMove_GetY(obj)+1*sin(dir),5,dir,-0.2,2,25,5);
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir+120),ObjMove_GetY(obj)+1*sin(dir+120),5,dir+120,-0.2,2,25,5);
			CreateShotA2(ObjMove_GetX(obj)+1*cos(dir+240),ObjMove_GetY(obj)+1*sin(dir+240),5,dir+240,-0.2,2,25,5);
			dir+=9;
			yield;
		}	
	}			
} 

// Waving fairy familiar shots
task fireDjLaneSplit01(obj) {
	let dir = 90;
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..12) { 
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir,95,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir+180,95,5);
			wait(5);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..12) { 
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir,95,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir+180,95,5);
			wait(5);
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..12) { 
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir,95,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir+180,95,5);
			
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir-45,96,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir+45,96,5);
			wait(5);
		}	
	}			
}

// Regular fairy appearing shot 01
task fireDjFairyShot01(obj) {
	let dir = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		if(!Obj_IsDeleted(obj)) {
			PlaySFX(SFX_KIRA00);
			dir = GetAngleToPlayer(obj); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir-16,0.01,5,239,1);
			let insecureBullet = CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir,0.01,5,244,5);
			insecureHandle(insecureBullet,3);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir+16,0.03,5,241,5);
			
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(obj)) {
			PlaySFX(SFX_KIRA00);
			dir = GetAngleToPlayer(obj); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir-16,0.01,5,239,1);
			let insecureBullet = CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir,0.01,5,244,5);
			insecureHandle(insecureBullet,4);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir+16,0.03,5,241,5);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		if(!Obj_IsDeleted(obj)) {
			PlaySFX(SFX_KIRA00);
			dir = GetAngleToPlayer(obj); 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir-16,0.01,5,239,1);
			let insecureBullet = CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir,0.01,5,244,5);
			insecureHandle(insecureBullet,5);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir+16,0.03,5,241,5);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0.5,dir-16,0.03,5,241,5);
		}	
	}
}

// Insecure bullet handler (orange bullet)
task insecureHandle(obj,dspeed) { 
	wait(120);
	ObjMove_SetSpeed(obj,0);
	wait(60);
	ObjMove_SetAngle(obj,GetAngleToPlayer(obj));
	ObjMove_SetSpeed(obj,dspeed);
}

// Regular fairy appearing shot 01
task fireDjRedLightShot(obj) {
	let dir = 0;
	wait(30);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		PlaySFX(SFX_TAN00);	
		ascent(i in 0..18) {
			if(Obj_IsDeleted(obj)) { break; } 	
			let redShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
			ObjMove_AddPatternA3(redShot,30,2,dir,-0.2,0,0,41);
			ObjMove_AddPatternA3(redShot,120,0,dir,0.2,0,2,41);
			dir+=360/18;
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		PlaySFX(SFX_TAN00);	
		ascent(i in 0..24) {
			if(Obj_IsDeleted(obj)) { break; } 	
			let redShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
			ObjMove_AddPatternA3(redShot,30,2,dir,-0.2,0,0,41);
			ObjMove_AddPatternA3(redShot,120,0,dir,0.2,0,2,41);
			dir+=360/24;
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		PlaySFX(SFX_TAN00);	
		ascent(i in 0..24) {
			if(Obj_IsDeleted(obj)) { break; } 	
			let redShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
			ObjMove_AddPatternA3(redShot,30,3,dir,-0.2,0,0,41);
			ObjMove_AddPatternA3(redShot,120,0,dir,0.2,0,3,41);
			dir+=360/24;
		}	
	}
}

// Regular fairy appearing shot 01
task fireDjYellowLightShot(obj) {
	let dir = 0;
	wait(60);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		PlaySFX(SFX_TAN00);	
		ascent(j in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			ascent(i in 0..24) {
				if(Obj_IsDeleted(obj)) { break; } 	
				let yellowShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
				ObjMove_AddPatternA3(yellowShot,30,2,dir,-0.2,0.5,0,53);
				ObjMove_AddPatternA3(yellowShot,120,0,dir,0.2,0.5,3,53);
				dir+=360/24;
			}
			wait(15);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		PlaySFX(SFX_TAN00);	
		ascent(j in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			ascent(i in 0..32) {
				if(Obj_IsDeleted(obj)) { break; } 	
				let yellowShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
				ObjMove_AddPatternA3(yellowShot,30,2,dir,-0.2,0.5,0,53);
				ObjMove_AddPatternA3(yellowShot,120,0,dir,0.2,0.5,4,53);
				dir+=360/32;
			}
			wait(15);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		PlaySFX(SFX_TAN00);	
		ascent(j in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			ascent(i in 0..32) {
				if(Obj_IsDeleted(obj)) { break; } 	
				let yellowShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
				ObjMove_AddPatternA3(yellowShot,30,3,dir,-0.2,0.5,0,53);
				ObjMove_AddPatternA3(yellowShot,120,0,dir,0.2,0.5,4,53);
				dir+=360/32;
			}
			wait(15);
		}	
	}
}

// Regular fairy appearing shot 01
task fireDjGreenLightShot(obj,dir) {
	wait(90);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(j in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);	
			ascent(i in 0..24) {
				if(Obj_IsDeleted(obj)) { break; } 	
				let greenShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
				ObjMove_AddPatternA3(greenShot,30,2,GetAngleToPlayer(obj),-0.2,0.5,0,50);
				ObjMove_AddPatternA3(greenShot,120,0,GetAngleToPlayer(obj),0.2,0,4,50);
				dir+=360/24;
			}
			wait(15);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(j in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);	
			ascent(i in 0..32) {
				if(Obj_IsDeleted(obj)) { break; } 	
				let greenShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
				ObjMove_AddPatternA3(greenShot,30,2,GetAngleToPlayer(obj),-0.2,0.5,0,50);
				ObjMove_AddPatternA3(greenShot,120,0,GetAngleToPlayer(obj),0.2,0,4,50);
				dir+=360/32;
			}
			wait(15);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(j in 0..2) { 
			if(Obj_IsDeleted(obj)) { break; } 	
			PlaySFX(SFX_TAN00);	
			ascent(i in 0..32) {
				if(Obj_IsDeleted(obj)) { break; } 	
				let greenShot = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,39,5);
				ObjMove_AddPatternA3(greenShot,30,3,GetAngleToPlayer(obj),-0.2,0.5,0,50);
				ObjMove_AddPatternA3(greenShot,120,0,GetAngleToPlayer(obj),0.2,0,4,50);
				dir+=360/32;
			}
			wait(15);
		}	
	}
}

// Regular fairy appearing shot 01
task fireDjFairyShot02(obj) {
	let dir = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..24) {
			PlaySFX(SFX_TAN00);	
			if(Obj_IsDeleted(obj)) { break; } 	
			dir = GetAngleToPlayer(obj);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir-12,79,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,dir,81,5);
			dir+=12;
			wait(20);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..30) {
			PlaySFX(SFX_TAN00);	
			if(Obj_IsDeleted(obj)) { break; } 	
			dir = GetAngleToPlayer(obj);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.5,dir-12,79,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),4,dir,80,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.5,dir+12,81,5);
			dir+=12;
			wait(12);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..30) {
			PlaySFX(SFX_TAN00);	
			if(Obj_IsDeleted(obj)) { break; } 	
			dir = GetAngleToPlayer(obj);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,dir-12,79,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),4,dir,80,5);
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),3,dir+12,81,5);
			dir+=12;
			wait(12);
		}	
	}
}

/*
		ascent(i in 0..16) { 	
			if(Obj_IsDeleted(obj)) { break; } 			
			let curvyBullet00 = CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,dir+22,0.05,1.5,30,10);
			let curvyBullet01 = CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,dir+11,0.05,2,30,10);
			let curvyBullet02 = CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),0,dir,0.05,2.5,30,10);
			ObjMove_AddPatternA2(curvyBullet00,0,0,NO_CHANGE,0.05,0.3,1.5);
			ObjMove_AddPatternA2(curvyBullet01,0,0,NO_CHANGE,0.05,-0.4,2);
			ObjMove_AddPatternA2(curvyBullet02,0,0,NO_CHANGE,0.05,0.5,2.5);
			dir+=360/16;
		}
*/

// Regular balls appearing and firing laser 02
task fireDjBallLaser02(obj) {
	let dir = 0;

	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		PlaySFX(SFX_LAZER01);	
		ascent(i in 0..16) { 
			if(Obj_IsDeleted(obj)) { break; } 
			let ballLaser00 = CreateLooseLaserA1(ObjMove_GetX(obj),ObjMove_GetY(obj),4,dir,100,8,6,10); 
			let ballLaser01 = CreateLooseLaserA1(ObjMove_GetX(obj),ObjMove_GetY(obj),4,dir+180,100,8,6,10); 
			ObjMove_AddPatternA2(ballLaser00,0,4,NO_CHANGE,-0.05,0,0);
			ObjMove_AddPatternA2(ballLaser00,120,0,NO_CHANGE,0.2,0,4);
			
			ObjMove_AddPatternA2(ballLaser01,0,4,NO_CHANGE,-0.05,0,0);
			ObjMove_AddPatternA2(ballLaser01,120,0,NO_CHANGE,0.2,0,4);			
			dir+=12;
			wait(5);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		PlaySFX(SFX_LAZER01);
		ascent(i in 0..16) { 
			if(Obj_IsDeleted(obj)) { break; } 
			let ballLaser00 = CreateLooseLaserA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir,100,8,6,10); 
			let ballLaser01 = CreateLooseLaserA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir+180,100,8,6,10); 
			ObjMove_AddPatternA2(ballLaser00,0,5,NO_CHANGE,-0.05,0,0);
			ObjMove_AddPatternA2(ballLaser00,120,0,NO_CHANGE,0.2,0,5);
			
			ObjMove_AddPatternA2(ballLaser01,0,5,NO_CHANGE,-0.05,0,0);
			ObjMove_AddPatternA2(ballLaser01,120,0,NO_CHANGE,0.2,0,5);			
			dir+=12;
			wait(5);
		}		
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		PlaySFX(SFX_LAZER01);
		ascent(i in 0..24) { 
			if(Obj_IsDeleted(obj)) { break; } 
			let ballLaser00 = CreateLooseLaserA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir,100,8,6,10); 
			let ballLaser01 = CreateLooseLaserA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,dir+180,100,8,6,10); 
			ObjMove_AddPatternA2(ballLaser00,0,5,NO_CHANGE,-0.05,0,0);
			ObjMove_AddPatternA2(ballLaser00,120,0,NO_CHANGE,0.2,0,5);
			
			ObjMove_AddPatternA2(ballLaser01,0,5,NO_CHANGE,-0.05,0,0);
			ObjMove_AddPatternA2(ballLaser01,120,0,NO_CHANGE,0.2,0,5);			
			dir+=12;
			wait(3);
		}	
	}
}

// Regular balls appearing and firing shots 02
task fireDjBallShot02(obj) {
	let dir = 0;
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..18) {
			if(Obj_IsDeleted(obj)) { break; } 
			dir = GetAngleToPlayer(obj);
			ascent(i in 0..3) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir-16,38,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir+16,38,15);
				dir+=360/3;
			}
			wait(15);
		}	
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..24) {
			if(Obj_IsDeleted(obj)) { break; } 
			dir = GetAngleToPlayer(obj);
			ascent(i in 0..3) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir-16,38,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,38,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir+16,38,15);
				dir+=360/3;
			}
			wait(10);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..36) {
			if(Obj_IsDeleted(obj)) { break; } 
			dir = GetAngleToPlayer(obj);
			ascent(i in 0..4) { 
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN00);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir-16,38,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir,38,15);
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2,dir+16,38,15);
				dir+=360/4;
			}
			wait(8);
		}	
	}
}

// Circular shots with gaps in between them.
task fireTrainBallShot00(obj,startdir,side) {
	let dir = startdir;
	wait(60);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		PlaySFX(SFX_KIRA00);
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(j in 0..12) { 
				let slowCircShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);	
				SetShotDataA(slowCircShot00,0,1,dir,0,0,0,75);
				SetShotDataA(slowCircShot00,30,1,dir,0,0.1,2,75);
				if(side == "left") { dir+=50/12; } 
				if(side == "right") { dir-=50/12; } 
			}
			if(side == "left") { dir+=66; } 
			if(side == "right") { dir-=66; } 
		}
		dir = 0;
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		PlaySFX(SFX_KIRA00);
		ascent(i in 0..3) { 
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(j in 0..16) { 
				let slowCircShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);	
				SetShotDataA(slowCircShot00,0,1,dir,0,0,0,75);
				SetShotDataA(slowCircShot00,40,1,dir,0,0.1,3,75);
				if(side == "left") { dir+=50/16; } 
				if(side == "right") { dir-=50/16; } 
			}
			if(side == "left") { dir+=89; } 
			if(side == "right") { dir-=89; } 
		}
		dir = 0;
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		PlaySFX(SFX_KIRA00);
		ascent(i in 0..4) { 
			if(Obj_IsDeleted(obj)) { break; } 
			ascent(j in 0..16) { 
				let slowCircShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj),10);	
				SetShotDataA(slowCircShot00,0,1,dir,0,0,0,75);
				SetShotDataA(slowCircShot00,30,1,dir,0,0.1,3,75);
				if(side == "left") { dir+=50/16; } 
				if(side == "right") { dir-=50/16; } 
			}
			if(side == "left") { dir+=43; } 
			if(side == "right") { dir-=43; } 
		}
		dir = 0;		
	}
}

// Regular fairy train shot 00
task fireDjFairyTrainShot00(obj) {
	let dir = ObjMove_GetAngle(obj) + 90;
	let fixedWait = [0,10,15];
	wait(fixedWait[rand_int(0,3)]);	
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		if(!Obj_IsDeleted(obj)) { 
			// Forward
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,ObjMove_GetAngle(obj)+rand_int(-10,10),83,10);	
			ascent(i in 0..20) {
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN01);	
				dir = ObjMove_GetAngle(obj) + 90;
				
				// Sideways
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1.5,dir+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.0,dir+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1.5,dir+180+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.0,dir+180+rand_int(-10,10),114,10);	
				wait(20);
			}
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		if(!Obj_IsDeleted(obj)) { 
			// Forward
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,ObjMove_GetAngle(obj)+rand_int(-10,10),83,10);	
			ascent(i in 0..20) {
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN01);	
				dir = ObjMove_GetAngle(obj) + 90;
				
				// Sideways
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1.5,dir+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.0,dir+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1.5,dir+180+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.0,dir+180+rand_int(-10,10),114,10);	
				wait(18);
			}
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		if(!Obj_IsDeleted(obj)) { 
			// Forward
			CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),5,ObjMove_GetAngle(obj)+rand_int(-10,10),83,10);	
			ascent(i in 0..20) {
				if(Obj_IsDeleted(obj)) { break; } 
				PlaySFX(SFX_TAN01);	
				dir = ObjMove_GetAngle(obj) + 90;
				
				// Sideways
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1.8,dir+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.3,dir+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),1.8,dir+180+rand_int(-10,10),114,10);	
				CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),2.3,dir+180+rand_int(-10,10),114,10);	
				wait(15);
			}
		}
	}
}

// Regular fairy train shot 00
task fireDjCarShot00(obj) {
	wait(15);
	let dir = ObjMove_GetAngle(obj);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..72) {	
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,dir,-0.05,1,96,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,-dir+180,-0.05,1,96,10);
			dir+=11;
			wait(2);
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..80) {	
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,dir,-0.05,1,96,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,-dir+180,-0.05,1,96,10);
			dir+=11;
			wait(2);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..96) {	
			if(Obj_IsDeleted(obj)) { break; } 
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,dir,-0.05,1,96,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,-dir+180,-0.05,1,96,10);
			dir+=11;
			wait(1);
		}
	}
}

// Regular fairy train shot 00
task fireDjCarFamShot00(obj) {
	wait(15);
	let dir = ObjMove_GetAngle(obj);
	if(GetAreaCommonData("game","difficulty",0) == 0) { 
		ascent(i in 0..96) {	
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),3.5,-dir,-0.05,1,239,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),3.5,-dir,-0.05,1,244,10);
			wait(15);
		}
	}
	if(GetAreaCommonData("game","difficulty",0) == 1) { 
		ascent(i in 0..96) {	
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,-dir,-0.05,1,239,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,-dir,-0.05,1,244,10);
			wait(13);
		}
	} 
	if(GetAreaCommonData("game","difficulty",0) == 2) { 
		ascent(i in 0..96) {	
			if(Obj_IsDeleted(obj)) { break; } 
			PlaySFX(SFX_TAN00);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,-dir,-0.05,1,239,10);
			CreateShotA2(ObjMove_GetX(obj),ObjMove_GetY(obj),4,-dir,-0.05,1,244,10);
			wait(8);
		}
	}
}

// Effect for burning rubber :V (fams leave burning trail, similar to Rocket fairy trail from Stg2)
task fireDjTireTrail(obj) {
	while(!Obj_IsDeleted(obj)) {
		let trailShot00 = CreateShotA(ObjMove_GetX(obj),ObjMove_GetY(obj)-15,15);	
		SetShotDataA(trailShot00,0,2,ObjMove_GetAngle(obj)-rand_int(150,210),1,0,0,171);
		DeleteShotA(trailShot00,0);	
		wait(5);
	}
}