//------------------------------------------------------------------------------------------------------------------------
//	FastImp
//
//
//	Taken from ZDoom Monster Pack
//	Idea from Strain
//	Modified by M@@@H!aK (death types etc.)
//------------------------------------------------------------------------------------------------------------------------
Actor Satanic_FastImp : DoomImp 5006
{
	Health		96
	Radius		20
	Height		42
	Mass		300
	Speed		18
	PainChance	200
	DamageFactor NoDamage,	 		0
	PainChance "Turn", 255
	PainChance "Fire", 				0
	PainChance "Posession", 		255
	MeleeDamage 4
	MissileType Satanic_FastImpBall
	SeeSound 	"imp/sight"
	PainSound 	"imp/pain"
	DeathSound 	"imp/death"
	ActiveSound "imp/active"
	MeleeSound 	"imp/melee"
	HitObituary "%o was slashed by a fast imp."
	Obituary "%o was burned by a fast imp."
	MONSTER
	-FRIENDLY
	+FLOORCLIP
	States
	{
	Spawn:
		TROX A 0 Thing_Hate(0,669,3)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX A 4 A_Look
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX B 4 A_Look
		Goto Spawn+1
	See:
		TROX I 0 A_JumpIfInventory("Satanic_IsPosessed",1,1)
		Goto StandardSee
		TROX A 0
		Goto PosessedMove
	PosessedMove:
		TROX A 0 A_JumpIfInventory("Satanic_PosessedFire",1,1)
		Goto PosessedStandardMove
		TROX A 0
		Goto PosessedFire
	PosessedFire:
		TROX E 0 ACS_ExecuteAlways(805,0,0,0,0)
		TROX E 2 A_TakeInventory("Satanic_PosessedFire",1)
		TROX E 0 ACS_ExecuteAlways(805,0,1,0,0)
		TROX F 2 
		TROX E 0 ACS_ExecuteAlways(805,0,2,0,0)
		TROX G 3 A_CustomMissile("Satanic_FastImpBall",32.0,12,0.0,2,-pitch)
		TROX E 0 ACS_ExecuteAlways(805,0,3,0,0)
		TROX E 2
		TROX E 0 ACS_ExecuteAlways(805,0,0,0,0)
		TROX E 0 
		Goto See
	PosessedStandardMove:
		TROX AAAAAABBBBBBCCCCCCDDDDDD 1 ACS_Execute(803,0,48,30,2)
		TROX A 0 A_JumpIfInventory("Satanic_IsPosessed",1,1)
		Goto Spawn+1
		TROX A 0
		Goto See
	StandardSee:
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,"Wander",AAPTR_PLAYER1)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX AA 1 A_Chase
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,"Wander",AAPTR_PLAYER1)
		TROX A 0 A_CustomMissile("Satanic_FastImpGhostA", 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX BB 1 A_Chase
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,"Wander",AAPTR_PLAYER1)
		TROX B 0 A_CustomMissile("Satanic_FastImpGhostB", 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX CC 1 A_Chase
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,"Wander",AAPTR_PLAYER1)
		TROX C 0 A_CustomMissile("Satanic_FastImpGhostC", 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX DD 1 A_Chase
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,"Wander",AAPTR_PLAYER1)
		TROX D 0 A_CustomMissile("Satanic_FastImpGhostD", 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX AA 1 A_Chase
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,"Wander",AAPTR_PLAYER1)
		TROX A 0 A_CustomMissile("Satanic_FastImpGhostA", 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX BB 1 A_Chase
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,"Wander",AAPTR_PLAYER1)
		TROX B 0 A_CustomMissile("Satanic_FastImpGhostB", 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX CC 1 A_Chase
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,"Wander",AAPTR_PLAYER1)
		TROX C 0 A_CustomMissile("Satanic_FastImpGhostC", 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX DD 1 A_Chase
		TROX D 0 A_CustomMissile("Satanic_FastImpGhostD", 0, 0, 0)
		Goto See
	Wander:
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,1,AAPTR_PLAYER1)
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX AA 1 A_Wander
		TROX A 0 A_CustomMissile("Satanic_FastImpGhostA", 0, 0, 0)
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,1,AAPTR_PLAYER1)
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX BB 1 A_Wander
		TROX B 0 A_CustomMissile("Satanic_FastImpGhostB", 0, 0, 0)
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,1,AAPTR_PLAYER1)
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX CC 1 A_Wander
		TROX C 0 A_CustomMissile("Satanic_FastImpGhostC", 0, 0, 0)
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,1,AAPTR_PLAYER1)
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX DD 1 A_Wander
		TROX D 0 A_CustomMissile("Satanic_FastImpGhostD", 0, 0, 0)
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,1,AAPTR_PLAYER1)
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX AA 1 A_Wander
		TROX A 0 A_CustomMissile("Satanic_FastImpGhostA", 0, 0, 0)
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,1,AAPTR_PLAYER1)
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX BB 1 A_Wander
		TROX B 0 A_CustomMissile("Satanic_FastImpGhostB", 0, 0, 0)
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,1,AAPTR_PLAYER1)
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX CC 1 A_Wander
		TROX C 0 A_CustomMissile("Satanic_FastImpGhostC", 0, 0, 0)
		TNT1 A 0 A_JumpIfInventory("PowerNecShroud",1,1,AAPTR_PLAYER1)
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX DD 1 A_Wander
		TROX D 0 A_CustomMissile("Satanic_FastImpGhostD", 0, 0, 0)
		Goto See
	Melee:
	Missile:
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget10",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX E 10 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget10",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX E 5 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget10",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX F 5 BRIGHT A_ComboAttack
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget10",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX G 10
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget10",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX G 5
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget10",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX G 1 A_SpidRefire
		Goto Missile+1
	Pain.Bludgeon:	
		TROX G 0 ThrustThing(45,20,0)
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget10",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX G 3
		TROX G 3 A_Pain
		Goto See
	Pain.DrainHealthEver:
		TROX H 0
		TROX H 0 ACS_ExecuteAlways(772,0,2,0,0)
	Pain:
		TROX H 0 A_JumpIfInventory("Satanic_IsPosessed",1,1)
		Goto Pain+2
		TROX H 0
		Goto See
		TNT1 A 0 A_SpawnItemEx("ImpHeadTarget10",0,0,42,velx,vely,velz,0,SXF_SETMASTER)
		TROX H 4
		TROX H 4 A_Pain
		Goto See
	Pain.Turn:
		TNT1 A 0 A_PlaySound("Satanic/Weapons/BellRing",CHAN_WEAPON)
		TNT1 A 0 ACS_Execute(824,0,20,0,0)
		TROX H 4
		TNT1 A 0 A_ChangeFlag("Friendly",1)
		TROX H 4 A_Pain
		Goto See
	Pain.Posession:
		TROX H 0
		TROX H 0 ACS_ExecuteAlways(791,0,5,0,0)
		TROX H 0 A_GiveInventory("Satanic_IsPosessed",1)
		TROX H 0 Thing_ChangeTID(0,669)
		TROX H 0 ACS_ExecuteAlways(802,0,48,0,0)
		Goto See
	Death:
		TROX I 0 A_JumpIfInventory("Satanic_IsPosessed",1,1)
		Goto ActualDeath
		TROX I 0 ACS_ExecuteAlways(801,0,0,0,0)
		TROX I 0 ChangeCamera(0, 0, 0) 
		Goto ActualXDeath
	Death.BoomHeadshot:
		TNT1 AAAAAA 0 A_GiveToTarget("DrainedHealth",1)
		TNT1 A 0 A_XScream
		FMPH A 12 A_SpawnItemEx("SRBloodFountain",0,0,42,velx,vely,velz,0)
		FMPH A 12 A_SpawnItemEx("SRBloodFountain",0,0,42,velx,vely,velz,0)
		FMPH A 12 A_SpawnItemEx("SRBloodFountain",0,0,42,velx,vely,velz,0)
		FMPH B 8 
		FMPH C 6
		FMPH D 6 A_Fall
		TROX M -1
		Stop
	XDeath:
		TROX I 0 A_JumpIfInventory("Satanic_IsPosessed",1,1)
		Goto ActualXDeath
		TROX I 0 ACS_ExecuteAlways(801,0,0,0,0)
		TROX I 0 ChangeCamera(0, 0, 0) 
		Goto ActualXDeath
	Death.DrainMana:
		TROX I 0 A_JumpIfInventory("Satanic_IsPosessed",1,1)
		Goto ActualDeathDrainMana
		TROX I 0 ACS_ExecuteAlways(801,0,0,0,0)
		TROX I 0 ChangeCamera(0, 0, 0) 
		Goto ActualDeathDrainMana
	Death.DrainHealthEver:
	Death.DrainHealth:
		TROX I 0 A_JumpIfInventory("Satanic_IsPosessed",1,1)
		Goto ActualDeathDrainHealth
		TROX I 0 ACS_ExecuteAlways(801,0,0,0,0)
		TROX I 0 ChangeCamera(0, 0, 0) 
		Goto ActualDeathDrainHealth
	Death.DemonFire:
	Burn:
		TROX I 0 A_JumpIfInventory("Satanic_IsPosessed",1,1)
		Goto ActualBurn
		TROX I 0 ACS_ExecuteAlways(801,0,0,0,0)
		TROX I 0 ChangeCamera(0, 0, 0) 
		Goto ActualBurn
	ActualDeath:
		TROX I 8
		TROX J 8 A_Scream
		TROX K 6
		TROX L 6 A_Fall
		TROX M -1
		Stop
	ActualXDeath:
		TROX N 5
		TNT1 A 0 A_SpawnItem("SRBloodFountain", 0, 0, 0, 0)
		TROX O 5 A_XScream
		TROX P 5
		TNT1 A 0 A_SpawnItem("SRGibGenerator", 0, 0, 0, 0)
		TROX Q 5 A_Fall
		TROX RST 5
		TROX U -1
		Stop
	ActualDeathDrainMana:
		TROX N 0 ACS_ExecuteAlways(779,0,6,0,0)
		TROX N 5
		TROX O 5 A_XScream
		TROX P 5
		TROX Q 5 A_Fall
		TROX RST 5
		TROX U -1
		Stop
	ActualDeathDrainHealth:
		TROX N 0 ACS_ExecuteAlways(772,0,10,0,0)
		TROX N 5
		TROX O 5 A_XScream
		TROX P 5
		TROX Q 5 A_Fall
		TROX RST 5
		TROX U -1
		Stop
	ActualBurn:
		TROB N 0 A_CustomMissile("Satanic_HellfireDeviceBoltSecondary",Random(0,64),0,Random(-360,360),0,0)
		TROB N 0 A_CustomMissile("Satanic_HellfireDeviceBoltSecondary",Random(0,64),0,Random(-360,360),0,0)
		TROB N 0 A_CustomMissile("Satanic_HellfireDeviceBoltSecondary",Random(0,64),0,Random(-360,360),0,0)
		TROB N 0 A_CustomMissile("Satanic_HellfireDeviceBoltSecondary",Random(0,64),0,Random(-360,360),0,0)
		TROB N 0 A_CustomMissile("Satanic_HellfireDeviceBoltSecondary",Random(0,64),0,Random(-360,360),0,0)
		TROB N 0 A_CustomMissile("Satanic_FireStarter",5,0,75,0)     
		TROB N 0 A_CustomMissile("Satanic_FireStarter",5,0,75,0)
		TROB N 5
		TROB O 5 A_XScream
		TROB P 5
		TROB Q 5 A_Fall
		TROB RST 5
		TROB UUUUUU 4 A_SpawnItem("Satanic_SmokeSpawner")
		TROB U 0 A_SpawnItem("Satanic_ImpBurnedCorpse")
		Stop
	Raise:
		TROX M 1
		TROX M 1 A_SetInvulnerable
		TROX M 1 A_UnsetSolid
		TROX M 1 A_UnsetShootable
		TROX M 1 ACS_ExecuteAlways(788,0,0,0,0)
		TROX M 1
		Stop
	Raise_Spirit:
		TROX MLKJ 6
		TROX J 0 A_SpawnItem("Satanic_RaisedImp")
		Stop
	Raise_ManaRitual:
		TROX MLK 4
		TROX J 4 A_SpawnItem("Satanic_HealthSpirit")
		FMPB A 4 ACS_ExecuteAlways(779,0,6,0,0)
		FMPB B 4 A_SpawnItem("Satanic_HealthSpiritExplosion")
		IMPB CDEFGHIJ 4
		IMPB J 0 A_SpawnItem("Satanic_ImpBurnedCorpse")
		Stop
	}
}

Actor Satanic_FastImpGhostA
{
	Radius 	4
	Height 	8
	Speed 	0
	Damage	0
	RenderStyle Translucent
	Alpha 0.3
	PROJECTILE
	+NOCLIP
	States
	{
	Spawn:
		TROX A 15
		Stop
	}
}

Actor Satanic_FastImpGhostB : Satanic_FastImpGhostA
{
	States
	{
	Spawn:
		TROX B 15
		Stop
	}
}

Actor Satanic_FastImpGhostC : Satanic_FastImpGhostA
{
	States
	{
	Spawn:
		TROX C 15
		Stop
	}
}

Actor Satanic_FastImpGhostD : Satanic_FastImpGhostA
{
	States
	{
	Spawn:
		TROX D 15
		Stop
	}
}

Actor Satanic_FastImpBall
{
	Radius 	6
	Height 	8
	Speed 	18
	Damage 	4
	DamageType DemonFire
	SeeSound "imp/attack"
	DeathSound "imp/shotx"
	RenderStyle Add
	Decal PlasmaScorch
	Alpha 0.67
	PROJECTILE
	+RANDOMIZE
	States
	{
	Spawn:
		BALX AB 4 BRIGHT
		Loop
	Death:
		BALX CDE 6 BRIGHT
		Stop
	}
}