class DraughSandmanCooldown : DraughToken {}
class DraughEmperorCooldown : DraughToken {}
class DraughMourningCooldown : DraughToken {}

class AddonDraugh : Draugh replaces Draugh
{
	Default
	{
		Tag "Draugh";
	}
	
	States
	{
	Missile:
		"####" E 0 {
			User_TurnDirection = random(1,-1);
			if(CountInv("SheepActive")) { A_PlaySound("Sheepshield/Stop",5,0.7); A_TakeInventory("SheepActive",1); }
			if(Invoker.Left_Prism) { Invoker.Left_Prism.End(); }
			if(Invoker.Right_Prism) { Invoker.Right_Prism.End(); }
			if(Invoker.Prism) { Invoker.Prism.End(); }
			Return A_Jump(256,"Emperor","MourningGlory","Sandman",
				"Longhorn","Shotgun","Chaingun","Cannon","Ironblast","TNT",
				"Augur","Dreadful","Skullfire","Gumpop","Kitchendorf","Crows","Breath",
				"Thunderstruck","Apocalypse","Dragonshout","Darkpath","Hammersmite","Sheepshield",
				"Prism","Flamewave","Frostbite","Spiritcannon","Corpse","Chillgrasp",
				"Skypunch","Meteorfist","Annihilation","Stomp","ArmCannons");
		}
		Goto See;
	Sandman:
		"####" E 0 A_JumpIf(CountInv("DraughSandmanCooldown"), "Missile");
		"####" E 0 A_JumpIf(CountInv("Sandman",AAPTR_MASTER),1);
		Goto Missile;
		"####" E 0 {
			A_SpawnItemEx("SandmanCooldown",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS|SXF_SETTARGET);
			A_PlaySound("Sandman/Start",6,0.8);
			User_AttackLoop = 140;
		}
		"####" EEEEEEEEEEEEEEEEE 1 {
			A_FaceTarget();
			A_Chase(null,null);
		}
		"####" E 0 {
			A_PlaySound("Sandman/Loop",6,0.8,1);
		}
	SandmanLoop:
		"####" F 1 Bright {
			if(random(0,32) > 1) {
				A_PlaySound("Sandman/Fire",1,0.6);
				A_PlaySound("Sandman/Add",5,0.6);
			}
			A_AlertMonsters(0,AMF_TARGETEMITTER);
			A_FaceTarget();
			A_CustomBulletAttack(5.0,2.0,1,70+random(15,30),"SandmanPuff");
			A_Chase(null,null);
			A_SpawnItemEx("SandmanCasing",0,0,User_AttackHeight,frandom(4.0,-4.0),0,frandom(8.0,1.0),frandom(0.0,360.0),SXF_CLIENTSIDE);
			User_AttackLoop--;
		}
		"####" E 0 A_JumpIf(User_AttackLoop > 0 && IsPointerEqual(AAPTR_TARGET, AAPTR_NULL) == False, "SandmanLoop");
		"####" E 0 A_PlaySound("Sandman/Stop",6,0.8);
		"####" EEEEEEEEEEEEEEEEEEEEEE 1 {
			A_FaceTarget();
			A_Chase(null,null);
		}
		Goto See;
	Emperor:
		"####" E 0 A_JumpIf(CountInv("DraughEmperorCooldown"), "Missile");
		"####" E 0 A_JumpIf(CountInv("GoldenEmperor",AAPTR_MASTER), 1);
		Goto Missile;
		"####" E 0 A_Jump(128,3);
		"####" E 4 A_FaceTarget();
		"####" E 0 A_Jump(256,5);
		"####" EEEE 1 {
			A_FaceTarget();
			A_ChangeVelocity(0,frandom(7.0,9.0) * User_StrafeMul * User_TurnDirection,0, CVF_RELATIVE); //MOVE IT MOVE IT MOOOOVE IIIIT~
		}
		"####" F 0 {
			A_FaceTarget();
			A_AlertMonsters(0,AMF_TARGETEMITTER);
			A_SpawnItemEx("EmperorCooldown",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS|SXF_SETTARGET);
			A_SpawnProjectile("EmperorRocket",User_AttackHeight,0);
			A_SpawnProjectile("Mourning_Flare",User_AttackHeight,0);
			A_PlaySound("GoldenEmperor/Add",5,0.8);
			if(GetCvar("GC_QuakeRecoil")) { A_QuakeEx(8, 8, 5, 35, 0, 256, "", QF_SCALEDOWN); }
			for(int Noggin = 0; Noggin <= 15; Noggin++)
			{
				A_SpawnProjectile("Mourning_Ember",User_AttackHeight,0,frandom(22.0,-22.0),CMF_OFFSETPITCH,frandom(22.0,-12.0));
				A_SpawnProjectile("Mourning_Cloud",User_AttackHeight,0,frandom(18.0,-18.0),CMF_OFFSETPITCH,frandom(18.0,-18.0));
				A_SpawnProjectile("Gunsmoke_Large",User_AttackHeight,0,frandom(12.0,-12.0),CMF_OFFSETPITCH,frandom(12.0,-12.0));
				A_SetPitch(-pitch);
				A_SpawnProjectile("Mourning_Ember",User_AttackHeight,0,frandom(202.0,158.0),CMF_OFFSETPITCH,frandom(22.0,-12.0));
				A_SpawnProjectile("Mourning_Cloud",User_AttackHeight,0,frandom(202.0,158.0),CMF_OFFSETPITCH,frandom(18.0,-18.0));
				A_SpawnProjectile("Gunsmoke_Large",User_AttackHeight,0,frandom(202.0,158.0),CMF_OFFSETPITCH,frandom(12.0,-12.0));
				A_SetPitch(-pitch);
			}
		}
		"####" FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1 Bright {
			A_FaceTarget();
			A_Chase(null,null);
		}
		Goto See;
	MourningGlory:
		"####" E 0 A_JumpIf(CountInv("DraughMourningCooldown"), "Missile");
		"####" E 0 A_JumpIf(CountInv("MourningGlory",AAPTR_MASTER), 1);
		Goto Missile;
		"####" E 0 A_Jump(128,3);
		"####" E 4 A_FaceTarget();
		"####" E 0 A_Jump(256,5);
		"####" EEEE 1 {
			A_FaceTarget();
			A_ChangeVelocity(0,frandom(7.0,9.0) * User_StrafeMul * User_TurnDirection,0, CVF_RELATIVE); //MOVE IT MOVE IT MOOOOVE IIIIT~
		}
		"####" F 0 {
			A_FaceTarget();
			A_AlertMonsters(0,AMF_TARGETEMITTER);
			A_SpawnItemEx("MourningCooldown",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS|SXF_SETTARGET);
			if(CountInv("GladiusBarrel") >= 3) { A_SpawnProjectile("MourningShell4",User_AttackHeight,0); }
			if(CountInv("GladiusBarrel") >= 2) { A_SpawnProjectile("MourningShell3",User_AttackHeight,0); }
			if(CountInv("GladiusBarrel") >= 1) { A_SpawnProjectile("MourningShell2",User_AttackHeight,0); }
			else { A_SpawnProjectile("MourningShell",User_AttackHeight,0); }
			A_SpawnProjectile("Mourning_Flare",User_AttackHeight,0);
			A_PlaySound("MourningGlory/Fire",6,0.85);
			A_PlaySound("MourningGlory/Add",5,0.85);
			if(GetCvar("GC_QuakeRecoil")) { A_QuakeEx(8, 8, 5, 15, 0, 64, "", QF_SCALEDOWN); }
			for(int Noggin = 0; Noggin <= 15; Noggin++)
			{
				A_SpawnProjectile("Mourning_Ember",User_AttackHeight,0,frandom(22.0,-22.0),CMF_OFFSETPITCH,frandom(22.0,-12.0));
				A_SpawnProjectile("Mourning_Cloud",User_AttackHeight,0,frandom(18.0,-18.0),CMF_OFFSETPITCH,frandom(18.0,-18.0));
				A_SpawnProjectile("Gunsmoke_Large",User_AttackHeight,0,frandom(12.0,-12.0),CMF_OFFSETPITCH,frandom(12.0,-12.0));
			}
		}
		"####" FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1 Bright {
			A_FaceTarget();
			A_Chase(null,null);
		}
		Goto See;
	}
}

class SandmanCooldown : DraughCooldown
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay {
			A_GiveInventory("DraughSandmanCooldown",1,AAPTR_TARGET);
			User_Counter = 350;
		}
	Main:
		TNT1 A 1 { User_Counter--; }
		TNT1 A 0 A_JumpIf(User_Counter > 0, "Main");
		TNT1 A 0 A_TakeInventory("DraughSandmanCooldown",1,0,AAPTR_TARGET);
		Stop;
	}
}

class EmperorCooldown : DraughCooldown
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay {
			A_GiveInventory("DraughSandmanCooldown",1,AAPTR_TARGET);
			User_Counter = 350;
		}
	Main:
		TNT1 A 1 { User_Counter--; }
		TNT1 A 0 A_JumpIf(User_Counter > 0, "Main");
		TNT1 A 0 A_TakeInventory("DraughSandmanCooldown",1,0,AAPTR_TARGET);
		Stop;
	}
}

class MourningCooldown : DraughCooldown
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay {
			A_GiveInventory("DraughMourningCooldown",1,AAPTR_TARGET);
			User_Counter = 30;
		}
	PartOne:
		TNT1 A 1 {
			A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION);
			User_Counter--;
		}
		TNT1 A 0 A_JumpIf(User_Counter > 0, "PartOne");
		TNT1 A 0 {
			A_PlaySound("MourningGlory/Reload",6,0.8);
			A_SpawnItemEx("MourningShellCasing",0,0,Draugh(Target).User_AttackHeight,frandom(2.0,-2.0),0,frandom(8.0,3.0),frandom(0.0,360.0),SXF_CLIENTSIDE);
			User_Counter = 210;
		}
	PartTwo:
		TNT1 A 1 { User_Counter--; }
		TNT1 A 0 A_JumpIf(User_Counter > 0, "PartTwo");
		TNT1 A 0 A_TakeInventory("DraughMourningCooldown",1,0,AAPTR_TARGET);
		Stop;
	}
}