actor Skeleton : G2_Ghost {
	renderstyle add
	alpha 1.0
	
	scale 0.1779
	speed 15
	height 56
	radius 18

	painchance 0
	+NODAMAGE //The skeleton seems to randomly explode when attacking
	
	States {
		Dance:
			THRA ABCDEDCBACBDEDKLJIJKLMLKJIJKLMLKDEDCB 3
			loop
		Spawn:
			THRD A 0
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 A_PlaySoundEx("Man/Sees","Soundslot7",1,0)
		SpawnLoop:
			THRD AAAABAABAAAACAAAACDAACAAAAAAAABCAAADABCAABCBADAACAABAADAAAAAACAAAAAABAAAABAAABABAACAADACAADACD 1 A_Look
			loop
		Seen:
		Sees:
			THRD A 0
			THRD A 0 A_SetTranslucent(1.0,1)
			goto See


		FastMove:
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 Radius_Quake(7, 35, 0, 512, 0)
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("gd_chase") <= 0, "FastMoveA")
			THRD A 0 A_Chase
			FastMoveA:
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SpawnItemEx("SkeletonFX4",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
			THRD DEA 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") <= 0, "Travel")
			THRD A 0 A_FaceTarget
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("gd_chase") <= 0, "FastMoveB")
			THRD A 0 A_Chase
			FastMoveB:
			THRD H 1 A_FaceTarget
			TNT1 A 1 A_Chase
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 300, 1, 360, "Rage")
			THRD A 0 A_FaceTarget
			THRD FAC 1 A_SpawnItemEx("SkeletonFX", 0, 0, 0, 0, Random(-3, 3), 0, Random(-2, 2), SXF_CLIENTSIDE)
			Goto See
		See:
		Move:
			THRD A 0
			THRD A 0 A_JumpIfInventory("G2_Angry", 1, "FastMove")
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("gd_chase") <= 0, "MoveA")
			THRD A 0 A_Chase
			MoveA:
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") <= 0, "Travel")
			THRD A 0 A_FaceTarget
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("gd_chase") <= 0, "MoveB")
			THRD A 0 A_Chase
			MoveB:
			THRD H 1 A_FaceTarget
			TNT1 A 1
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 300, 1, 360, "Rage")
			THRD A 0 A_FaceTarget
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX2",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX2",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD H 2 //Avoid desync in Zandronum multiplayer
			goto See
		Rage:
			THRA A 0 A_GiveInventory("G2_DoNotHurtPlayers", 1)
			THRA A 0 A_PlaySoundEx("Man/Enraged","SoundSlot5")
			THRA A 0 A_CustomBulletAttack(5.0,5.0,1,0,"ManPuff",120)
			THRA A 0 A_FaceTarget
			THRA A 0 A_CustomMissile("SkeletonProjectile")
			THRA A 0 A_Jump(128, "Rage2")
			THRD ABCD 1 A_Recoil(-10)
			THRA AAABBBCCD 1
			THRA A 0 A_CustomBulletAttack(0.0, 0.0, 1, 8, "ManPuff", 60)
			THRA DEE 1
			THRA EEEEEEDD 1
			THRD DAEBCEFABCAD 1
			THRA A 0 A_TakeInventory("G2_DoNotHurtPlayers", 1)
			goto See
		Rage2:
			THRD ABCD 1 A_Recoil(-10)
			THRA IIIJJJKKL 1
			THRA A 0 A_CustomBulletAttack(0.0, 0.0, 1, 8, "ManPuff", 60)
			THRA LMM 1
			THRA MMMMMMLL 1
			THRD DAEBCEFABCAD 1
			THRA A 0 A_TakeInventory("G2_DoNotHurtPlayers", 1)
			goto See

		Watching:
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 2000, 1, 360, "Travel")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getDistanceToClosestPlayer") < 1500, "Watching")
			goto Travel
		TravelChase:
			THRD A 0
			THRD A 0 A_SetTranslucent(1.0,1)
			TNT1 AA 2 A_Chase
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 A_JumpIfCloser(384,"Sees")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			TNT1 AA 2 A_Chase
		Travel:
			THRD A 4 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			THRD A 4 A_SetTranslucent(1.0,1)
			TNT1 AA 4 A_JumpIf(ACS_NamedExecutewithResult("gd_chase") <= 0, "TravelChase")
			THRD A 4 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 4 A_SetTranslucent(1.0,1)
			THRD A 4 A_JumpIfCloser(384,"Sees")
			THRD A 4 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			TNT1 AA 4 A_JumpIf(ACS_NamedExecutewithResult("gd_chase") <= 0, "TravelChase")
			loop
	}
}

actor ManPuff {
	DamageType "Skeleton"

	States {
		Spawn:
			TNT1 A 0
			stop
	}
}

actor SkeletonProjectile {
	PROJECTILE
	height 8
	radius 16
	speed 22
	damage 0
	damagetype "Skeleton"
	species "Ghost"
	+THRUSPECIES
	States {
		Spawn:
			TNT1 A 8
		Spawn2:	
			TNT1 AAAAAAAAAAAAA 1 A_SpawnItemEx("SkeletonAttackFx", 0, 0, -30, 0, 0, 0, 0, SXF_CLIENTSIDE)
			stop
		XDeath:
			TNT1 AA 1 A_RadiusThrust(4000, 256, false)
			stop
	}
}

actor Skeleton2 : Skeleton {
	renderstyle translucent
	alpha 1.0
}

actor SkeletonFX {
	renderstyle add
	scale 0.1779
	alpha 0.575
	height 2
	radius 2
	+CLIENTSIDEONLY
	+RANDOMIZE
	+NOGRAVITY
	+NOBLOCKMAP
	+MISSILE
	+THRUACTORS
	damage 0
	States {
		Spawn:
			THRD AABABABACBAADBAABAAABAABBABAAACABAABBABABDD 1 A_FadeOut(0.03)
			loop
		Death:
			THRD A 0
			THRD A 0
			stop
	}	
}

actor SkeletonAttackFx : SkeletonFX {
	States {
		Spawn:
			THRA CCC 1
			stop
	}
}

actor SkeletonFX2 : SkeletonFX {
	States {
		Spawn:
			THRD EEEFHEEFGEEEGFEGFGEHFHEFHGEEEEFFEGGHGEEEFGEEEEGHEEEFFEE 1 A_FadeOut(0.03)
			loop
	}	
}

actor SkeletonFX3 : SkeletonFX {
	States {
		Spawn:
			THRD A 0
			THRD A 0 A_Jump(256, "A", "B", "C", "D", "E", "F")
		A:
			THRD A 1 A_FadeOut(0.07)
			loop
		B:
			THRD B 1 A_FadeOut(0.07)
			loop
		C:
			THRD C 1 A_FadeOut(0.07)
			loop
		D:
			THRD D 1 A_FadeOut(0.07)
			loop
		E:
			THRD E 1 A_FadeOut(0.07)
			loop
		F:
			THRD F 1 A_FadeOut(0.07)
			loop
	}	
}

actor SkeletonFX4 
{
	+CLIENTSIDEONLY
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_PlaySound("Skeleton/Chasing", CHAN_5)
			stop
	}
}

actor DanceSkeleton : Skeleton {
	States {
		Spawn:
			THRD A 0
			THRD A 0
			goto Dance
	}
}

actor SkeletonVs : Skeleton {
	States {
		Dance:
			THRA ABCDEF 3 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == true, "Move")
			loop
		Spawn:
			THRD A 0
			THRD A 0 A_GiveInventory("G2_DoNotHurtPlayers", 1)
			THRD A 0 A_GiveInventory("G2_GhostPrimary", 1)
			THRD A 0 A_GiveInventory("G2_GhostPrimaryCharge", 100)
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 A_PlaySoundEx("Man/Sees","Soundslot7",1,0)
		SpawnLoop:
			goto See
		Seen:
		Sees:
			THRD A 0
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 A_JumpIfTargetInLos("SeesSound")
			goto See
		SeesSound:
			THRD A 0 //A_PlaySoundEx("Man/Sees","Soundslot7",0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			goto See
		See:
		Still:
			THRD AABAA 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,3,0,random(-2,2),SXF_CLIENTSIDE)
			THRD A 0 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == true, "Travel")
			THRD BAACA 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,3,0,random(-2,2),SXF_CLIENTSIDE)
			THRD A 0 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Travel")
			loop
		Move:
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") <= 0,"Travel2") //"Travel"
			THRD A 0 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD H 1
			TNT1 A 1
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			goto See
		Rage:
		Primary:
			THRD A 0 ACS_NamedExecutewithResult("vs_step", true)
			THRD A 0 ACS_NamedExecuteWithResult("vs_disableControl")
			THRA A 0 A_PlaySoundEx("Man/Enraged","SoundSlot5")
			THRA A 0 ACS_NamedExecuteWithResult("skeleton_vs_primary")
			THRA A 0 A_Jump(128, "Rage2")
			THRA AAA 1
			THRA AAAB 1 A_Recoil(-10)
			THRA BBCCCCCC 1
			THRA BBB 1
			THRD DAEBCEFABCAD 1
			THRD A 0 ACS_NamedExecuteWithResult("vs_enableControl")
			goto See
		Rage2:
			THRA DDD 1
			THRA DDDE 1 A_Recoil(-10)
			THRA EEFFFFFF 1
			THRA EEE 1
			THRD DAEBCEFABCAD 1
			THRD A 0 ACS_NamedExecuteWithResult("vs_enableControl")
			goto See

		Travel2:
			THRD A 0
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 2000, 1, 360, "DoTravel2") //A_JumpIfTargetInLos("DoTravel2") //Travel only if he sees target
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getDistanceToClosestPlayer") < 1500, "Watching")
			TNT1 A 5
			goto Travel
		Watching:
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD DABCDEFG 1 A_SpawnItemEx("SkeletonFX",0,0,0,0,random(-3,3),0,random(-2,2),SXF_CLIENTSIDE)
			THRD A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 2000, 1, 360, "DoTravel2")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getDistanceToClosestPlayer") < 1500, "Watching")
			goto DoTravel2
		DoTravel2:
			THRD A 0 A_SetTranslucent(1.0,1)
			THRD A 0 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			THRD A 4
			THRD A 0 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD B 4
			THRD A 0 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			goto Travel2
		Travel:
			THRD A 0
			THRD A 0 A_SetTranslucent(1.0,1)
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			THRD A 0 A_SetTranslucent(1.0,1)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			TNT1 AAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("vs_step") == false, "Still")
			THRD A 0 A_JumpIf(ACS_NamedExecutewithResult("ghost_getSeenCount") > 0,"Seen")
			THRD A 0 ACS_ExecuteAlways(603,0,0,0,0)
			//THRD A 0 A_JumpIfCloser(384,"Sees")
			//THRD A 0 A_LookEx(0,0,4000,6000,360,"Travel")
			THRD A 1
			loop
	}
}
