Actor PhazoDemon
{
MONSTER
Health 670
Height 56
Radius 30
Mass 500
Speed 6
FloatSpeed 6
BloodColor "Purple"
Meleedamage 15
Painchance "Mine", 128
PainChance 20
+NOGRAVITY
+FLOAT
+MISSILEMORE
+DontHurtSpecies
+DontHarmSpecies
+DontHarmClass
Species "Cacodemon"
//No Infighting
DamageFactor "PhazoDemon", 0.0
DamageFactor "CacoLich", 0.0
DamageFactor "HelementalComet", 0.0
DamageFactor "CacoComet", 0.0
Damagefactor "BloodSkull", 0.0
DamageFactor "SoulToxic", 0.0
DamageFactor "BombBreath", 0.0
Damagefactor "EleSouls", 0.0
DropItem "LifeEssence", 180, 5
DropItem "ArmorBonusMax", 180
SeeSound "phazodemon/sight"
ActiveSound "phazodemon/active"
MeleeSound "caco/melee"
PainSound "phazodemon/pain"
DeathSound "phazodemon/death"
Obituary "%o was cheesed by a Phase Cacodemon."
HitObituary "%o was forced into the dimension inside a Phase Cacodemon." 
Tag "\ctPhase Cacodemon\c-"
States
	{
	Spawn:
		PZOD A 10 A_Look
		Loop
	See:
		TNt1 A 0 A_SetSolid
		PZOD A 1 A_Chase
		TNT1 A 0 A_Jump(45,"Dodge")
		TNT1 A 0 A_Jump(30,"Rush")
		TNT1 A 0 A_Jump(20,"Phase")
		TNT1 A 0 A_JumpIfCloser(150,"Dodge")
		Loop
	Rush:
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_SetTranslucent(1)
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		PZOD A 1 A_Chase
		TNT1 A 0 A_Chase
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGhost")
		TNT1 A 0 A_Jump(50,"See")
		TNT1 A 0 A_Jump(45,"Dodge")
		TNT1 A 0 A_Jump(20,"Phase")
		TNT1 A 0 A_JumpIfCloser(150,"Dodge")
		Loop
	Dodge:
		TNT1 A 0
		TNT1 A 0 A_Jump(256,"Right","Left","Back","BackLeftRange","BackRightRange")
		GoTo See
	Right:
		TNT1 A 0
		TNT1 A 0 ThrustThing(angle*256/360+64,30,0,0)
		PZOD A 5
		GoTo See
	Left:
		TNT1 A 0
		TNT1 A 0 ThrustThing(angle*256/360+192,30,0,0)
		PZOD A 5
		GoTo See
	Back:
		TNT1 A 0
		TNT1 A 0 ThrustThing(angle*256/360+128,30,0,0)
		PZOD A 5
		GoTo See
	BackLeftRange:
		TNT1 A 0
		TNT1 A 0 ThrustThing(angle*256/360+random(133,187),30,0,0)
		PZOD A 5
		GoTo See
	BackRightRange:
		TNT1 A 0
		TNT1 A 0 ThrustThing(angle*256/360+random(69,123),30,0,0)
		PZOD A 5
		GoTo See
	Missile:
		TNT1 A 0 A_SetSolid
		TNT1 A 0 A_Jump(80,"PainShots")
		TNT1 A 0 A_Jump(50,"RipperHoming")
		TNT1 A 0 A_Jump(30,"Phase")
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_SetTranslucent(1)
		PZOD BC 6 A_FaceTarget
		PZOD D 2 Bright A_FaceTarget
		PZOD D 1 Bright
		TNT1 A 0 A_CustomMissile("PhaseBallNoHoming",24,0,-15)
		TNT1 A 0 A_CustomMissile("PhaseBallNoHoming",24,0,0)
		TNT1 A 0 A_CustomMissile("PhaseBallNoHoming",24,0,15)
		PZOD D 1 Bright
		PZOD CB 4 A_FaceTarget
		Goto See
	PainShots:
		TNT1 A 0 A_Jump(50,"RipperHoming")
		TNT1 A 0 A_Jump(30,"Phase")
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_SetTranslucent(1)
		PZOD BC 4 A_FaceTarget
		PZOD D 6 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("PainisHarvesterBall2",24,0,0)
		PZOD D 6 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("PainisHarvesterBall2",24,0,0)
		PZOD D 6 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("PainisHarvesterBall2",24,0,0)
		PZOD D 6 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("PainisHarvesterBall2",24,0,0)
		PZOD D 1 Bright
		PZOD CB 4 A_FaceTarget
		GoTo See
	RipperHoming:
		TNT1 A 0
		TNT1 A 0 A_Jump(30,"Phase")
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_SetTranslucent(1)
		PZOD ABC 3 A_FaceTarget
		PZOD D 6 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("PhazoDemonBall",24,0,0)
		PZOD D 6 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("PhazoDemonBall",24,0,0)
		PZOD D 6 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("PhazoDemonBall",24,0,0)
		PZOD D 1 Bright
		PZOD CB 4 A_FaceTarget
		GoTo See
	Phase:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("phaseimp/teleport")
		PZOD A 4 A_FaceTarget
		PZOD A 1 A_SetTranslucent(0.8)
		PZOD A 1 A_SetTranslucent(0.6)
		PZOD A 1 A_SetTranslucent(0.4)
		PZOD A 1 A_SetTranslucent(0.2)
		TNT1 A 0 A_HideThing
		Goto See
	Melee:
		TNT1 A 0 A_SetSolid
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_SetTranslucent(1)
		PZOD BC 5 A_FaceTarget
		PZOD D 5 A_MeleeAttack
		PZOD CB 5 A_FaceTarget
		Goto See
	Pain.Cacobribe:
		TNT1 A 0 HealThing(1)
		TNT1 A 0
		GoTo Missile
	Pain.CacoBribe2:
		TNT1 A 0 A_ClearTarget
		TNT1 A 0 HealThing(8)
		GoTo Dodge
	Pain:
		TNT1 A 0
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_SetTranslucent(1)
		PZOD E 3
		PZOD F 6 A_Pain
		Goto See
	Death:
		TNT1 A 0
		PZOD G 8 A_Scream
		PZOD H 8
		TNT1 A 0 A_Fall
		TNT1 A 0 A_ChangeFlag(SOLID,0)
		TNT1 A 0 A_ChangeFlag(THRUACTORS,1)
		TNT1 A 0 A_TakeInventory("Tic",999999)
	Fall:
		PZOD I 1 A_CheckFloor("Land")
		TNT1 A 0 A_JumpIfInventory("Tic",525,"Land")
		TNT1 A 0 A_GiveInventory("Tic",1)
		Loop
	Land:
		TNT1 A 0
		TNT1 A 0 A_TakeInventory("Tic",999999)
		TNT1 A 0 A_ChangeFlag(CORPSE,1)
		PZOD JK 8
		TNT1 A 0 A_ChangeFlag(SOLID,0)
		TNT1 A 0 A_ChangeFlag(THRUACTORS,0)
		TNT1 A 0 A_ChangeFlag(MOVEWITHSECTOR,1)
		PZOD L 63000 CanRaise
		Stop
	XDeath:
		TNT1 A 0
		PZXD A 4 A_GiveInventory("XDeathCheck",1)
		PZXD B 3 A_PlaySound("Gore/Splat")
		TNT1 A 0 A_SpawnItemEx("PhaseCacoGibbedGenerator",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		TNT1 A 0 A_Fall
		TNT1 A 0 A_ChangeFlag(SOLID,0)
		TNT1 A 0 A_ChangeFlag(THRUACTORS,1)
		TNT1 A 0 A_TakeInventory("Tic",999999)
	XFall:
		PZXD C 1 A_CheckFloor("XLand")
		TNT1 A 0 A_JumpIfInventory("Tic",525,"XLand")
		TNT1 A 0 A_GiveInventory("Tic",1)
		Loop
	XLand:
		TNT1 A 0
		TNT1 A 0 A_TakeInventory("Tic",999999)
		TNT1 A 0 A_ChangeFlag(CORPSE,1)
		PZXD DEFGHI 3
		TNT1 A 0 A_ChangeFlag(SOLID,0)
		TNT1 A 0 A_ChangeFlag(THRUACTORS,0)
		TNT1 A 0 A_ChangeFlag(MOVEWITHSECTOR,1)
		PZXD J 63000 CanRaise
		Stop	
	Raise:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag(MOVEWITHSECTOR,0)
		TNT1 A 0 A_SpawnItemEx("VileHealEffect",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_JumpIfInVENTORY("XDeathCheck",1,"XRaise")
		PZOD LKJIHG 4
		PZOD A 3
		Goto Phase 
	XRaise:
		TNT1 A 0 A_TakeInventory("XDeathCheck",1)
		PZXD IHGFEDCBA 4
		PZOD A 3
		Goto Phase 
	}
}  

Actor PhaseBallNoHoming : PhaseImpBall
{
-SeekerMissile
+THRUSPECIES
+DONTHURTSPECIES
+DONTHARMSPECIES
Species ""
Species "Cacodemon"
Damagetype ""
Damagetype "PhazoDemon"
}

Actor PhazoDemonBall : PhaseImpBall
{
+THRUSPECIES
+DONTHURTSPECIES
+DONTHARMSPECIES
Species ""
Species "Cacodemon"
Damagetype ""
Damagetype "PhazoDemon"
}

Actor PhaseCacoGhost
{
PROJECTILE
Radius 2
Height 2
Speed 0
Scale 1.1
Alpha 0.7
RENDERSTYLE Translucent
+CLIENTSIDEONLY
+NOINTERACTION
States
	{
	Spawn:
		TNT1 A 1
		PZOD A 2 A_FadeOut(0.1,1)
		Goto Spawn+1
	}
}

Actor PainisHarvesterBall2 : PainisHarvesterBall
{
+THRUSPECIES
+DONTHURTSPECIES
+DONTHARMSPECIES
Species ""
Species "Cacodemon"
Damagetype ""
Damagetype "PhazoDemon"
States
	{
	Spawn:
		TNT1 A 0
	    TNT1 A 0 A_ScaleVelocity(0.1)
		PHMM ABC 3 Bright
		TNT1 A 0 A_ScaleVelocity(1.0)
	Spawn.Fly:
	    TNT1 A 0
		TNT1 A 0 A_ScaleVelocity(1.0)
		TNT1 A 0 Bright A_SeekerMissile(9,5)
        PHMM DDD 1 Bright A_SpawnItemEx("PainBallTrail",0,0,1,0,0,0,180,128)
		TNT1 A 0 Bright A_SeekerMissile(9,5)
		PHMM EEE 1 Bright A_SpawnItemEx("PainBallTrail",0,0,1,0,0,0,180,128)
		TNT1 A 0 Bright A_SeekerMissile(9,5)
		PHMM FFF 1 Bright A_SpawnItemEx("PainBallTrail",0,0,1,0,0,0,180,128)
        GoTo Spawn.Fly
	XDeath:
    Death:
	    TNT1 A 0
		TNT1 A 0 A_SetTranslucent(1.0,1)
	    TNT1 A 0 A_SpawnItemEx("PurpleParticleSpawner",0,0,1,0,0,0,0,128)
		TNT1 AAA 0 A_CustomMissile("Kaboom8",0,0,random(0,360),2,random(0,360))
		TNT1 AAAA 0 A_CustomMissile("SmokeFX4",0,0,random(0,360),2,random(0,360))		
        SRBA EFGHIJJJJJJ 2 Bright A_FadeOut(0.1,1)
        Stop
    }
}

ACTOR PhaseCacoGibbedGenerator : GibbedGenerator
{ 
States 
	{ 
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
		TNT1 A 0 A_Jump(128,"Alternate")
		TNT1 AA 0 A_CustomMissile("PurpleBloodCloud",random(25,50),0,random(0,360),2,random(0,360))
		TNT1 AAAAAA 0 A_SpawnItemEx("NewFlyingBlood2",0,0,Random(25,50),Random(6,-6),Random(6,-6),Random(4,6))
		TNT1 A 0 A_SpawnItemEx("PhaseCacoPart1",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 0 A_SpawnItemEx("PhaseCacoPart2",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 0 A_SpawnItemEx("MutantBodyPart1",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 2 A_SpawnItemEx("MutantBodyPart2",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 AA 0 A_CustomMissile("PurpleBloodCloud",random(25,50),0,random(0,360),2,random(0,360))
		TNT1 AAAAAA 0 A_SpawnItemEx("NewFlyingBlood2",0,0,Random(25,50),Random(6,-6),Random(6,-6),Random(4,6))
		TNT1 A 0 A_SpawnItemEx("PhaseCacoPart3",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 0 A_SpawnItemEx("PhaseCacoPart1",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 0 A_SpawnItemEx("MutantBodyPart3",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 1 A_SpawnItemEx("MutantBodyPart4",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		Stop
	Alternate:
		TNT1 A 0
		TNT1 AA 0 A_CustomMissile("PurpleBloodCloud",random(25,50),0,random(0,360),2,random(0,360))
		TNT1 AAAAAA 0 A_SpawnItemEx("NewFlyingBlood2",0,0,Random(25,50),Random(6,-6),Random(6,-6),Random(4,6))
		TNT1 A 0 A_SpawnItemEx("PhaseCacoPart1",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 0 A_SpawnItemEx("PhaseCacoPart2",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 0 A_SpawnItemEx("MutantBodyPart5",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 2 A_SpawnItemEx("MutantBodyPart6",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 AA 0 A_CustomMissile("PurpleBloodCloud",random(25,50),0,random(0,360),2,random(0,360))
		TNT1 AAAAAA 0 A_SpawnItemEx("NewFlyingBlood2",0,0,Random(25,50),Random(6,-6),Random(6,-6),Random(4,6))
		TNT1 A 0 A_SpawnItemEx("PhaseCacoPart3",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 0 A_SpawnItemEx("PhaseCacoPart1",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 0 A_SpawnItemEx("MutantBodyPart7",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		TNT1 A 1 A_SpawnItemEx("MutantBodyPart8",0,0,Random(25,50),Random(10,-10),Random(10,-10),Random(8,10))
		Stop
	}
}

ACTOR PhaseCacoPart1 : BodyPart3
{
Scale 1
States
	{
	Spawn:
		PCPT AABBCCDDEEFFGG 2 A_SpawnItemEx("PurpleGibTrail",0,0,0,Random(-1,1),Random(-1,1),Random(-1,1),0,128)
		Loop
	Death:
	Crash:
		PCPT H 150
		PCPT H 5 A_FadeOut(0.1,1)
		Goto Death+1
	}
}

ACTOR PhaseCacoPart2 : CacoPart1
{
States
	{
	Spawn:
		PCP2 AABBCCDD 2 A_SpawnItemEx("PurpleGibTrail",0,0,0,Random(-1,1),Random(-1,1),Random(-1,1),0,128)
		Loop
	Death:
	Crash:
		PCP2 E 150
		PCP2 E 5 A_FadeOut(0.1,1)
		Goto Death+1
	}
}

ACTOR PhaseCacoPart3 : CacoPart1
{
States
	{
	Spawn:
		PCP3 AABBCCDDEE 2 A_SpawnItemEx("PurpleGibTrail",0,0,0,Random(-1,1),Random(-1,1),Random(-1,1),0,128)
		Loop
	Death:
	Crash:
		PCP3 F 150
		PCP3 F 5 A_FadeOut(0.1,1)
		Goto Death+1
	}
}