ACTOR TorturedSoul : DnD_BaseRangedMonster { 
	//$Category "ZDoom Monster pack"
	Health 0x7FFFFFFF
	GibHealth -75
	Speed 8 
	Radius 31
	Height 56 
	PainChance 64 
	Mass 400 
	REACTIONTIME 8 
	+NOGRAVITY 
	+FLOAT 
	-FLOORCLIP
	SeeSound "torturedsoul/sight" 
	PainSound "torturedsoul/pain" 
	DeathSound "torturedsoul/death" 
	ActiveSound "torturedsoul/active" 
	Missiletype "TorturedSoulBall"
	Obituary "%o was tormented by the Tortured Soul." 
	Species "PainElemental"
	Tag "Tortured Soul"
	+ISMONSTER
	+DONTHURTSPECIES
	States  {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_TORTUREDSOUL)
		Goto SpawnSetup
		
		IdleState:
			TORT AB 10 A_GiveInventory("DnD_SightChecker", 1) 
		Loop 
		SeeState:
			TORT AABBCC 3 Fast A_Chase 
		Goto See 
		MissileState: 
			TORT D 10 Fast A_FaceTarget 
			TORT D 0 A_Jump(128,4) 
			TORT E 4 Fast A_FaceTarget 
			TORT E 0 A_PlaySound("torturedsoul/attack") 
			TORT F 4 Fast A_CustomMissile("TorturedSoulBall", 40, 0, 0) 
		Goto See 
			TORT D 0 A_PlaySound("torturedsoul/poison") 
			TORT D 4 Fast A_CustomMissile("TorturedSoulPoison", 16, 0, 0) 
		Goto See 
		PainState: 
			TNT1 A 0 A_Jump(85, "Leak")
			TORT G 3 Fast 
			TORT G 3 Fast A_Pain 
		Goto See 
		Leak:
			TNT1 A 0 A_CustomMissile("TorturedSoulPoison_Weak", 32, 0, random(0, 360), CMF_AIMDIRECTION, random(-8, 8)) 
			TORT G 3 Fast 
			TORT G 3 Fast A_Pain 
		Goto See
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_High", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
		DeathState:
			TORT H 8 
			TORT I 8 A_Scream 
			TORT JK 8 
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX7", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			TORT L 0 A_CustomMissile("TorturedSoulPoison", 32, 0, 0) 
			TORT L 0 A_CustomMissile("TorturedSoulPoison", 32, 0, 45) 
			TORT L 0 A_CustomMissile("TorturedSoulPoison", 32, 0, 90) 
			TORT L 0 A_CustomMissile("TorturedSoulPoison", 32, 0, 135) 
			TORT L 0 A_CustomMissile("TorturedSoulPoison", 32, 0, 180) 
			TORT L 0 A_CustomMissile("TorturedSoulPoison", 32, 0, 225) 
			TORT L 0 A_CustomMissile("TorturedSoulPoison", 32, 0, 270) 
			TORT L 0 A_CustomMissile("TorturedSoulPoison", 32, 0, 315) 
			TORT L 8  
			TORT M 8 A_NoBlocking 
			TORT N 8 
		Stop
	}
}

actor TorturedSoulBall { 
    Radius 8 
    Height 6 
    Speed 20 
    Damage (5 * random(1, 8)) 
	DamageType "Poison"
	Stamina 128
    PROJECTILE 
	+DONTBLAST
    RENDERSTYLE ADD 
    ALPHA 0.67 
    DeathSound "imp/shotx" 
    States { 
		Spawn: 
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			TRBL AB 4 
		Loop 
		Death: 
			TRBL CDE 4 
		Stop 
    }
}

actor TorturedSoulPoison { 
    Radius 24 
    Height 6 
    Speed 5 
    Damage (random(1, 8)) 
	DamageType "Poison"
	Stamina 128
	BounceType Hexen
	+THRUGHOST
    +RIPPER 
	+BLOODLESSIMPACT
	+DONTBLAST
    PROJECTILE 
    RENDERSTYLE Translucent 
    ALPHA 0.67 
    States { 
		Spawn: 
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TRPS ABCDEFGDEFGDEFGDEFGDEFGDCBA 4 
		Stop 
		Death: 
			TRPS DCBA 4 
		Stop 
    } 
}

Actor TorturedSoulPoison_Weak : TorturedSoulPoison {
	Damage (random(1, 4)) 
}

ACTOR Defiler : DnD_BaseRangedMonster {
	//$Category monsters
	Health 0x7FFFFFFF
	GibHealth -75
	Radius 31
	Height 56
	Mass 500
	Speed 8
	PainChance 64
	+NOGRAVITY
    +FLOAT 
	+DROPOFF
	+MISSILEMORE
	-FLOORCLIP
	SeeSound "Defiler/Sight"
	PainSound "pain/pain"
	DeathSound "Defiler/Death"
	ActiveSound "baron/active"
	Obituary "%o was hunted down by a Defiler."
	Species "PainElemental"
	Translation "1:2=7:8", "9:12=7:7", "13:14=2:2", "15:15=7:7", "63:77=0:3", "48:63=72:79", "64:67=238:239", "77:79=7:8", "128:134=110:112", "134:136=5:5", "137:140=1:1", "141:142=6:2", "143:143=2:2", "144:151=79:79", "149:151=1:2", "152:159=7:8", "236:237=1:2", "238:239=7:8"
	Tag "Defiler"
	+ISMONSTER
	+DONTHURTSPECIES	
	States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_DEFILER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_UNCOMMON)
		Goto SpawnSetup

		IdleState:
			PAIN AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			PAIN AABBCC 2 Fast A_Chase
		Goto See
		MissileState:
			TNT1 A 0 A_Jump(65, 5)
			PAIN D 8 Fast BRIGHT A_FaceTarget 
			PAIN E 8 Fast BRIGHT A_FaceTarget
			PAIN F 8 Fast BRIGHT A_CustomMissile("DefilerShot", 15, 0, 0)
		Goto See
			PAIN D 8 Fast BRIGHT A_FaceTarget 
			PAIN E 8 Fast BRIGHT	A_FaceTarget
			TNT1 A 0 A_PlaySound("Defiler/Attack")
			TNT1 A 0 A_CustomMissile("DefilerBall", 15, 0, -45)
			TNT1 A 0 A_CustomMissile("DefilerBall", 15, 0, 0)
			PAIN F 8 Fast BRIGHT A_CustomMissile("DefilerBall", 15, 0, 45)
		Goto See
		PainState:
			PAIN G 5 Fast   
			PAIN G 5 Fast A_Pain
		Goto See
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_High", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
		DeathState:
			PAIN H 7	
			PAIN I 7 A_Scream
			PAIN J 7 A_NoBlocking
			PAIN KL 7
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Medium", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			TNT1 AAAAA 0 A_SpawnItemEx("ExplosionFX8", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			DEFI M 0 A_PlaySound("Defiler/Attack")
			DEFI M 0 A_CustomMissile("DefilerBall", 20, 0, 0)
			DEFI M 0 A_PlaySound("Defiler/Attack")
			DEFI M 0 A_CustomMissile("DefilerBall", 20, 0, 45)
			DEFI M 0 A_PlaySound("Defiler/Attack")
			DEFI M 0 A_CustomMissile("DefilerBall", 20, 0, 90)
			DEFI M 0 A_PlaySound("Defiler/Attack")
			DEFI M 0 A_CustomMissile("DefilerBall", 20, 0, 135)
			DEFI M 0 A_PlaySound("Defiler/Attack")
			DEFI M 0 A_CustomMissile("DefilerBall", 20, 0, 180)
			DEFI M 0 A_PlaySound("Defiler/Attack")
			DEFI M 0 A_CustomMissile("DefilerBall", 20, 0, 225)
			DEFI M 0 A_PlaySound("Defiler/Attack")
			DEFI M 0 A_CustomMissile("DefilerBall", 20, 0, 270)
			DEFI M 0 A_PlaySound("Defiler/Attack")
			DEFI M 0 A_CustomMissile("DefilerBall", 20, 0, 315)
			DEFI M 0 A_CustomMissile("DefilerShot", 20, 0, 0)
			DEFI M 0 A_CustomMissile("DefilerShot", 20, 0, 45)
			DEFI M 0 A_CustomMissile("DefilerShot", 20, 0, 90)
			DEFI M 0 A_CustomMissile("DefilerShot", 20, 0, 135)
			DEFI M 0 A_CustomMissile("DefilerShot", 20, 0, 180)
			DEFI M 0 A_CustomMissile("DefilerShot", 20, 0, 225)
			DEFI M 0 A_CustomMissile("DefilerShot", 20, 0, 270)
			DEFI M 0 A_CustomMissile("DefilerShot", 20, 0, 315)
			PAIN M 7
		Stop
	}
}

ACTOR DefilerBall {
    Radius 8
    Height 6
    Scale 0.5
    Speed 8
    Damage (2 * random(1, 8))
	DamageType "Magical"
	Stamina 8
	DeathSound "imp/shotx"
	ReactionTime 35
    +SEEKERMISSILE
	+DONTBLAST
    PROJECTILE
    Renderstyle ADD
	Decal DoomImpScorch
	Translation "109:125=173:191"
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			RVBA AB 2 Bright A_SeekerMissile (10,20)
			TNT1 A 0 A_CountDown
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_CustomMissile("ExplosionFX8", 0, 0, random(0,360), 2, random(0,360))
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			RVBA CDEFGH 4 Bright
		Stop
    }
}

ACTOR DefilerShot  {
	Scale 1.5
    Radius 12
    Height 16
    Speed 16
    Damage (10 * random(1, 8))
	DamageType "Fire"
	Stamina 32
	+DONTBLAST
    PROJECTILE
	RENDERSTYLE ADD
	ALPHA 0.9
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
	Decal DoomImpScorch
	Translation "109:125=173:191"
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			BAL7 AB 5 Bright
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_CustomMissile("ExplosionFX8", 0, 0, random(0,360), 2, random(0,360))
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			BAL7 CDE 5 Bright
		Stop
    }
}

Actor HadesLightningCD : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -5
}

Actor Helemental : DnD_BaseHybridMonster_NoRes {
	Obituary "%o was electrocuted by a Hades-Elemental."
	HitObituary "%o got chomped by a Hades-Elemental."
	Health 0x7FFFFFFF
	GibHealth -75
	Radius 31
	Height 56
	Mass 800
	Speed 10
	PainChance 32
	SeeSound "monster/helsit"
	PainSound "monster/helpai"
	DeathSound "monster/heldth"
	ActiveSound "monster/helact"
	MeleeSound "caco/melee"
	Species "PainElemental"
	Tag "Hades Elemental"
	+ISMONSTER
	var int user_count;
	const int inc = 36; // 360 / 10
	+DONTHURTSPECIES  
	+Float
	+NoGravity
	+MissileMore
	+Notarget
	+NoRadiusDmg
	-FLOORCLIP
	States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_HADESELEMENTAL)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup

		IdleState:
			HELE A 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			HELE A 0 A_SetShootable
		SeeChase:
			HELE AAAAAAAAAAAA 3 Fast A_Chase
			HELE A 0 A_Jump(72, "Teleport")
		Goto See
		Teleport:
			HELE A 0 A_UnSetshootable
			HELE A 1 A_PlaySound("monster/heltel")
			HELE A 1 A_SetTranslucent(0.90)
			HELE A 1 A_SetTranslucent(0.80)
			HELE A 1 A_SetTranslucent(0.70)
			HELE A 1 A_SetTranslucent(0.60)
			HELE A 1 A_SetTranslucent(0.50)
			HELE A 1 A_SetTranslucent(0.40)
			HELE A 1 A_SetTranslucent(0.30)
			HELE A 1 A_SetTranslucent(0.20)
			HELE A 1 A_SetTranslucent(0.10)
			TNT1 A 0 A_Jump(128, "Skip1", "Skip2")
			TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_Wander
		Skip1:
			TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_Chase("", "", CHF_NOPLAYACTIVE)
		Skip2:
			HELE A 1 A_PlaySound("monster/heltel")
			HELE A 1 A_SetTranslucent(0.10)
			HELE A 1 A_SetTranslucent(0.20)
			HELE A 1 A_SetTranslucent(0.30)
			HELE A 1 A_SetTranslucent(0.40)
			HELE A 1 A_SetTranslucent(0.50)
			HELE A 1 A_SetTranslucent(0.60)
			HELE A 1 A_SetTranslucent(0.70)
			HELE A 1 A_SetTranslucent(0.80)
			HELE A 1 A_SetTranslucent(0.90)
			HELE A 1 A_SetTranslucent(1.0)
			HELE A 0 A_SetShootable
		Goto See
		MissileState:
			TNT1 A 0 A_Jump(112, "Missile2", "Missile3")
		Missile1:
			HELE EF 5 Fast Bright A_Facetarget
			HELE G 0 Bright A_Jump(128, "Variation")
			HELE G 0 Bright A_CustomMissile("HadesBall",24,0,-10,0,0)
			HELE G 0 Bright A_CustomMissile("HadesBall",24,0,-5,0,0)
			HELE G 0 Bright A_CustomMissile("HadesBall",24,0,0,0,0)
			HELE G 0 Bright A_CustomMissile("HadesBall",24,0,5,0,0)
			HELE G 5 Fast Bright A_CustomMissile("HadesBall",24,0,10,0,0)
		Goto See
		Missile2:
			TNT1 A 0 A_JumpIfInventory("HadesLightningCD", 1, "Missile1")
			HELE EF 5 Fast Bright A_Facetarget
			TNT1 A 0 A_GiveInventory("HadesLightningCD", 1)
			HELE G 0 Bright A_CustomMissile("HadesBolt",32,0,-16,0,0)
			HELE G 0 Bright A_CustomMissile("HadesBolt",32,0,0,0,0)
		MissileFinish:
			HELE G 5 Fast Bright
		Goto See
		Variation:
			HELE G 0 Bright A_SetUserVar("user_count", 90)
			HELE G 0 Bright A_FaceTarget
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
			HELE G 0 Bright A_SetUserVar("user_count", user_count + inc)
			HELE G 1 Bright A_CustomMissile("HadesBall", 24 + inc * sin(user_count), inc * cos(user_count))
		Goto MissileFinish
		Missile3:
			HELE BC 5 Fast Bright A_Facetarget
			HELE DD 5 Fast Bright A_SpawnItemEx("HS_NoExp", 60, 0, 15, 0, 0, 0, 0, SXF_SETMASTER)
		Goto See
		MeleeState:
			HELE ABD 5 Fast Bright A_Facetarget
			HELE C 5 Fast Bright A_CustomMeleeAttack(10 * random(1, 8), "caco/melee", "", "Melee")
		Goto See
		PainState:
			HELE H 3 Fast
			HELE H 3 Fast A_Pain
			HELE H 6 Fast
		Goto See
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_High", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
		DeathState:
			HELE I 5 Bright A_Scream
			HELE J 5 Bright
			HELE KL 5 Bright
			HELE M 5 Bright A_NoBlocking
			TNT1 AAAAA 0 A_SpawnItemEx("ExplosionFX8", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 A 0 A_SpawnItemEx("GenericGibber_High", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			HELE M 0 Bright A_SpawnItemEx("HS",36,36, 0, 0, 0, 0, 0, SXF_SETMASTER)
			HELE M 0 Bright A_SpawnItemEx("HS",-36,36, 0, 0, 0, 0, 0, SXF_SETMASTER)
			HELE M 0 Bright A_SpawnItemEx("HS",-36,-36, 0, 0, 0, 0, 0, SXF_SETMASTER)
			HELE M 0 Bright A_SpawnItemEx("HS",36,-36, 0, 0, 0, 0, 0, SXF_SETMASTER)
			HELE NOP 5 Bright
			HELE QRSTU 5
			HELE V -1 A_SetFloorClip
		Stop
	}
}

Actor HadesBall : CacodemonBall {
	Damage (8 * random(1, 8))
	DamageType "LightningRed"
	Stamina 256
	Speed 15
	Alpha 0.80
	+ThruGhost
	+ForceXYBillboard
	SeeSound "Monster/hadtel"
	DeathSound "Monster/hadsit"
	Decal "CacoScorch"
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			HEFX AB 4 Bright
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			HEFX CDEEFGH 3 bright
		Stop
	}
}

Actor HadesBoltExp : BaseExplosionDamage {
	DamageType "LightningRed"
	Stamina 256
	Obituary "%o was electrocuted by a Hades-Elemental."
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(8, 64, 0)
		Stop
	}
}

Actor HadesBoltExp2 : BaseExplosionDamage {
	DamageType "LightningRed"
	Stamina 256
	Obituary "%o was electrocuted by a Hades-Elemental."
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 1 A_Explode(16, 64, 0)
		Stop
	}
}

Actor HadesBolt {
	Damage (5 * random(1, 8))
	Speed 5
	Radius 8
	Height 24
	PROJECTILE
	Damagetype "LightningRed"
	Stamina 256
	SeeSound "weapons/none"
	DeathSound "weapons/gntidl"
	YScale 4.0
	XScale 2.0
	ReactionTime 35
	+FloorHugger
	+HexenBounce
	+Ripper
	-NoGravity
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			LFX2 F 1 Bright A_SpawnItem("HadesBoltExp")
			LFX2 F 0 Bright A_CustomMissile("HadesBolt2",0,0,0,6,90)
			LFX2 F 0 ThrustThing(random(0,255),1,0,0)
			LFX2 G 1 Bright A_SpawnItem("HadesBoltExp")
			LFX2 G 0 Bright A_CustomMissile("HadesBolt2",0,0,0,6,90)
			LFX2 H 1 Bright A_SpawnItem("HadesBoltExp")
			LFX2 H 0 Bright A_CustomMissile("HadesBolt2",0,0,0,6,90)
			LFX2 I 1 Bright A_SpawnItem("HadesBoltExp")
			LFX2 I 0 Bright A_CustomMissile("HadesBolt2",0,0,0,6,90)
			LFX2 J 1 Bright A_SpawnItem("HadesBoltExp")
			LFX2 J 0 Bright A_CustomMissile("HadesBolt2",0,0,0,6,90)
			LFX2 J 0 Bright A_CountDown
		Loop
		Death:
			LFX2 FGHIJ 2 Bright A_SpawnItem("HadesBoltExp2")
		Stop
	}
}

Actor HadesBolt2 : CacodemonBall {
	Damage 0
	Speed 184
	RenderStyle None
	DamageType "LightningRed"
	Stamina 256
	+ThruActors
	SeeSound "Monster/hadtel"
	DeathSound "Monster/hadsit"
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			TNT1 A 1 A_SpawnItem("HadesBoltExp")
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 A 1
		Stop
	}
}

ACTOR HS : DnD_BaseMeleeMonster { 
	Health 0x7FFFFFFF
	Radius 16 
	Height 56
	Mass 3000 
	Speed 10
	RENDERSTYLE Normal
	Obituary "%o was blown away by a Hades Sphere."
	PAINCHANCE 0 
	+ISMONSTER
	+LOOKALLAROUND
	+DONTGIB
	+NOTARGET
	+NOGRAVITY 
	+FLOAT
	+DONTFALL
	+DONTHURTSPECIES
	+LONGMELEERANGE
	+NOPAIN
	-COUNTKILL
	-FLOORCLIP
	SeeSound "monster/hadsit"
	Tag "Hades Sphere"
	States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_HADESSPHERE)
		Goto SpawnSetup

		IdleState:
			TNT1 A 8 Bright A_GiveInventory("DnD_SightChecker", 1)      
		Loop
		SeeState:
			HADE EFGH 4 Fast Bright
		See4:
			TNT1 A 0 A_Chase
			HADE A 2 Fast Bright A_Playsound("monster/hadwlk")
		SeeAppear:
			HADE ABBCCDD 2 Fast Bright A_Chase
			HADE D 0 Bright A_Jump (32,1) 
		Goto See4
			HADE H 0 Bright A_UnSetSolid
			HADE H 0 Bright A_UnSetShootable
			HADE H 5 Fast Bright A_Playsound("monster/hadtel")
			HADE GFEIJKL 4 Fast Bright
		See24:
			TNT1 AAAAAAAA 2 Fast Bright A_Chase("", "")
			TNT1 A 0 Bright A_Jump (96,1) 
		Goto See24
			HADE L 3 Fast Bright A_Playsound("monster/hadtel")
			HADE KJIEFG 4 Fast Bright
			HADE H 0 Bright A_SetShootable
			HADE H 0 Bright A_SetSolid
		Goto See4
		MeleeState:
			HADE H 0 A_SetInvulnerable
			HADE HGFE 4 Fast Bright
			HADE E 0 A_Noblocking
			HADE E 0 A_CustomMissile("HSBoom",0,0,0,0)
		Stop
		MissileLoop:
			HADE FFFFGGGGHHHH 1 Fast Bright A_JumpIfCloser(56, "Die")
		ActualLoop:
			HADE AAAABBBBCCCCDDDD 1 Fast Bright A_JumpIfCloser(56, "Die")
		Loop
		Die:
			"####" "#" 5 A_Die
		Wait
		DeathState:
			HADE E 0 A_Noblocking
			TNT1 A 8 A_CustomMissile("HSBoom",0,0,0,0)
		Stop
		XDeathState:
			HADE N 0 Bright A_Noblocking
			TNT1 AA 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			HADE H 5 Bright A_PlaySound("monster/haddth")
			HADE GFE 4 Bright
			HADE RSTUVWX 4 Bright
		Stop
	}
}

Actor HS_NoExp : HS {
	+LOOKALLAROUND
	States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_HADESSPHERE)
			TNT1 A 0 A_SetArg(1, DND_NOPAIN | DND_MAGIC_WEAKNESS | DND_DEATH)
			TNT1 A 0 A_SetArg(2, DND_SUMMONED)
			TNT1 A 0 A_GiveInventory("DnD_Boolean", 1)
		Goto SpawnSetup
		
		IdleState:
			TNT1 A 0 A_JumpIfInventory("DnD_Boolean", 1, "GoAttack")
		Goto Super::Idle
		GoAttack:
			TNT1 A 0 A_TakeInventory("DnD_Boolean", 1)
			TNT1 A 0 A_FaceTarget
			HADE E 4 Fast Bright A_SkullAttack
		Goto MissileLoop
	}
}

ACTOR HSBoom {
	Radius 1
	Height 1
	Speed 0
	Damage 0
	DamageType "Explosive"
	Stamina 4
	Alpha 0.90
	PROJECTILE
	+DONTBLAST
	RENDERSTYLE ADD
	DONTHURTSHOOTER
	SeeSound "monster/hadexp"
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 AA 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			HADE M 4 Bright A_Explode(64, 112, 0)
			HADE NOPQ 5 Bright
		Stop
	}
}

actor DESentinel : DnD_BaseRangedMonster {
	obituary "%o was blasted away by a sentinel."
	Health 0x7FFFFFFF
	radius 31
	height 56
	ProjectilePassHeight 72
	Scale 1.0
	mass 1000
	speed 8
	painchance 64
	SeeSound "monster/cubsit"
	painsound "monster/senpai"
	activesound "monster/senact"
	DeathSound "monster/cubdth"  
	Species "PainElemental"
	Tag "Sentinel"
	+ISMONSTER
	+DONTHURTSPECIES
	+FLOAT
	+NOGRAVITY
	+NOTARGET
	+NOBLOOD
	+NOICEDEATH
	-DONTFALL
	+DONTRIP
	-FLOORCLIP
	states {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_SENTINEL)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_VERYRARE)
		Goto SpawnSetup
		
		IdleState:
			SENT A 10 A_GiveInventory("DnD_SightChecker", 1)
		loop
		SeeState:
			SENT A 3 Fast A_Chase
		Goto See
		MissileState:
			TNT1 A 0 A_Jump(96, "Cube")
			SENT A 0 A_Jump(96,"Red")
			SENT A 8 Fast A_FaceTarget
			SENT C 0 Bright A_CustomMissile("SentGMissile",52,12,0,1,0)
			SENT C 8 Fast Bright A_CustomMissile("SentGMissile",52,-12,0,1,0)
			SENT A 6 Fast A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Monster Attack", 0)
			SENT C 0 Bright A_CustomMissile("SentGMissile",52,12,0,1,0)
			SENT C 8 Fast Bright A_CustomMissile("SentGMissile",52,-12,0,1,0)
			SENT A 8 Fast A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Monster Attack", 0)
			SENT C 0 Bright A_CustomMissile("SentGMissile",52,12,0,1,0)
			SENT C 8 Fast Bright A_CustomMissile("SentGMissile",52,-12,0,1,0)
		goto See
		Cube:
			SENT D 4 Fast A_FaceTarget
			SENT E 0 Bright A_CustomMissile("CubeShotSentinel",52,12,0,1,0)
			SENT E 4 Fast Bright A_CustomMissile("CubeShotSentinel",52,-12,0,1,0)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Monster Attack", 0)
			SENT D 1 A_SpidRefire
		goto Cube+1
		Red:
			SENT D 4 Fast A_FaceTarget 
			SENT E 5 Fast Bright A_FaceTarget
			SENT F 8 Fast Bright A_CustomMissile("SentRMissile",24,0,0,0)
		goto See
		PainState:
			SENT B 3 Fast
			SENT B 3 Fast A_Pain
			SENT B 4 Fast
			SENT B 2 Fast A_Jump(128,4)
			SENT B 0 A_FaceTarget
			SENT B 0 Bright A_CustomMissile("GCSpawner",24,-5,-30,0)
			SENT B 0 Bright A_CustomMissile("GCSpawner",24,5,30,0)
			SENT B 1
		goto See
		XDeathState:
		DeathState:
			SENT G 8 Bright
			TNT1 AAAA 0 A_SpawnDebris("MetalScrap")
			SENT H 7 Bright A_Scream
			SENT IJ 7 Bright
			SENT K 7 A_NoBlocking
			SENT K -1 A_SetFloorClip
		stop
		RaiseState:
			SENT JIHG 5
		Goto See
	}
}

Actor CubeShotSentinel : CubeShot {
	Damage (random(4, 8))
	DamageType "Fire"
	Stamina 32
	Obituary "%o got fried by a Sentinel."
	Speed 24
}

ACTOR SentGmissile {
	Radius 5
	Height 5
	Speed 24
	Damage (6 * random(1, 8))
	DamageType "Poison"
	Stamina 128
	RenderStyle ADD
	Alpha 0.75
	PROJECTILE
	+FORCEXYBILLBOARD
	+DONTBLAST
	Seesound "weapons/boltfi"
	DeathSound "monster/disht1"   
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			CFX6 A 1 Bright A_SpawnItem("Barbtrail",0,0)
		loop
		Death:
			TNT1 A 0 A_SpawnItemEx("GreenParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX4", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			CFX6 BCDE 4 Bright
		Stop
	}
}

Actor SentinelExp : BaseExplosionDamage {
	DamageType "Explosive"
	Stamina 4
	Obituary "%o was blasted away by a seninel."
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 1 A_Explode(32, 64, 0)
		Stop
	}
}

ACTOR SentRmissile {
	Radius 5
	Height 5
	Speed 20
	Damage (15 * random(1, 8))
	DamageType "Magical"
	Stamina 8
	RenderStyle ADD
	Alpha 0.85
	PROJECTILE
	+FORCEXYBILLBOARD
	+DONTBLAST
	Seesound "weapons/bigbrn"
	DeathSound "weapons/firex3"   
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			SEF1 AABBCC 1 Bright A_SpawnItemEx("RedPuff",0,0,0,0,0,0,0,128,0)
		loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_SpawnItemEx("ExplosionFX2", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 AAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			SEF1 DEFG 5 Bright A_SpawnItem("SentinelExp")
			SEF1 H 5 Bright
		Stop
	}
}

ACTOR GCSpawner {
	Radius 5
	Height 5
	Speed 12
	RenderStyle ADD
	Alpha 0.75
	PROJECTILE
	+THRUGHOST
	-NOGRAVITY
	+LOWGRAVITY
	+FORCEXYBILLBOARD
	+DONTBLAST
	Seesound "weapons/smlbrn"
	DeathSound "vile/firecrkl"
	Translation "160:167=112:123"
	States {
		Spawn:
			SEF2 AABBCCDD 1 Bright A_SpawnItemEx("BarbTrail",0,0,0,0,0,0,0,128,0)
		loop
		Death:
			NFAB A 3 Bright
			NFAB B 3 Bright A_SpawnItemEx("GuardianCube_NoCount", 0, 0, 0, 0, 0, 0, 0, SXF_SETMASTER)
			NFAB CDEFGH 3 Bright
		Stop
	}
}

// so the ghosts it summons doesnt resurrect itself again
ACTOR BloodLich : DnD_BaseRangedMonster_NoRes {
    Obituary "%o was reduced to a pile of ash by a Blood Lich."
    Health 0x7FFFFFFF
	GibHealth -75
    Radius 31
    Height 56
    Mass 2000
    Speed 8
    PainChance 32
    AttackSound ""
    SeeSound "monster/cubsit"
    PainSound "Lich/pain"
    DeathSound "monster/cubdth"
    ActiveSound "Lich/act"
	Tag "Blood Lich"
	+ISMONSTER
    +NOGRAVITY
    +NOTARGET
    +FLOAT
    +MISSILEMORE
    +MISSILEEVENMORE
    +DONTRIP
    +DONTSPLASH
	-FLOORCLIP
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_BLOODLICH)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_VERYRARE)
		Goto SpawnSetup

		IdleState:
			BLCH A 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			BLCH A 4 Fast A_Chase
		Goto See
		MissileState:
			BLCH B 0 Bright A_JumpIfCloser(300, "Breath")
			BLCH B 0 Bright A_Jump(96,"Curse","Ghost")
			BLCH B 0 Bright A_FaceTarget
			BLCH B 0 Bright A_PlaySoundEx("MageStaffFire", CHAN_AUTO) 
			BLCH B 0 Bright A_CustomMissile("BloodLichFireball", 54, 10, -2, 1)
			BLCH B 11 Fast Bright A_CustomMissile("BloodLichFireball", 54, -10, 2, 1)
		Goto See
		Breath:
			BLCH B 0 Bright A_PlaySoundEx("FlameBreath", CHAN_AUTO)
			BLCH B 0 Bright A_FaceTarget
			BLCH BBB 2 Fast Bright A_CustomMissile("FireBreath", 20, 0, random(-30,30)/10.0, CMF_CHECKTARGETDEAD)
			BLCH B 0 Bright A_PlaySoundEx("FlameBreath", CHAN_AUTO)
			BLCH B 0 Bright A_FaceTarget
			BLCH BBB 2 Fast Bright A_CustomMissile("FireBreath", 20, 0, random(-30,30)/10.0, CMF_CHECKTARGETDEAD)
			BLCH B 0 Bright A_PlaySoundEx("FlameBreath", CHAN_AUTO)
			BLCH B 0 Bright A_FaceTarget
			BLCH BBB 2 Fast Bright A_CustomMissile("FireBreath", 20, 0, random(-30,30)/10.0, CMF_CHECKTARGETDEAD)
			BLCH B 0 Bright A_PlaySoundEx("FlameBreath", CHAN_AUTO)
			BLCH B 0 Bright A_FaceTarget
			BLCH BBB 2 Fast Bright A_CustomMissile("FireBreath", 20, 0, random(-30,30)/10.0, CMF_CHECKTARGETDEAD)
			BLCH B 0 Bright A_PlaySoundEx("FlameBreath", CHAN_AUTO)
			BLCH B 0 Bright A_FaceTarget
			BLCH BBB 2 Fast Bright A_CustomMissile("FireBreath", 20, 0, random(-30,30)/10.0, CMF_CHECKTARGETDEAD)
		Goto See
		Curse:
			BLCH B 0 Bright A_JumpIfCloser(300, "Breath")
			BLCH B 0 Bright A_FaceTarget
			BLCH B 11 Fast Bright A_CustomMissile("CurseSpell", 20, 0, 0, 1)
		Goto See
		Ghost:
			BLCH B 0 Bright A_JumpIfCloser(300, "Breath")
			BLCH B 0 Bright A_FaceTarget
			BLCH B 11 Fast Bright A_SpawnItemEx("ReiverGhost_NoExp", 54, 0, 12, 0, 0, 0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
		Goto See
		PainState:
			BLCH A 5 Fast A_Pain
		Goto See
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_High", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
		DeathState:
		    BLCH C 1
		    TNT1 A 0 A_FaceTarget
		    TNT1 A 0 A_SpawnItemEx("ReiverGhost", 20, 0, 0, -9, 9, 0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
		    TNT1 A 0 A_SpawnItemEx("ReiverGhost", 0, 0, 0, 9, 0, 0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
			BLCH C 6 A_SpawnItemEx("ReiverGhost", -20, 0, 0, 9, 9, 0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
			BLCH D 7 A_Scream
			BLCH EF 7
			BLCH G 7 A_NoBlocking
			BLCH H 7
			BLCH I -1
		Stop
		RaiseState:
			BLCH HGFEDC 5
		Goto See
	}
}

ACTOR FireBreath {
	Radius 12
	Height 8
	Speed 12
	Damage (3 * random(1,2))
	DamageType "MagicalFire"
	Stamina 40
	Alpha 0.2
	PROJECTILE
	-NOBLOCKMAP
	-ACTIVATEIMPACT
	-ACTIVATEPCROSS
	+SPAWNSOUNDSOURCE
	+RIPPER
	+BLOODLESSIMPACT
	+DONTBLAST
	RenderStyle Add
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			FX06 ABCABCABCABCABCABC 3 Bright
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_SpawnItemEx("ExplosionFX2", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 AAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			FX06 DEFG 3 Bright
		Stop
	}
}

Actor BloodLichExp : BaseExplosionDamage {
	DamageType "Magical"
	Stamina 8
	Obituary "%o was reduced to a pile of ash by a Blood Lich."
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 1 A_Explode(16, 128, 0)
		Stop
	}
}

ACTOR BloodLichFireball {
	Speed 18
	Height 8
	Damage (4 * random(1, 8))
	PROJECTILE
	DamageType "MagicalFire"
	Stamina 40
	DeathSound "MageStaffExplode"
	+DONTBLAST
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			MSP4 ABCD 2 Bright
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_SpawnItemEx("ExplosionFX2", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 AAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			MSP4 E 4 Bright A_SetTranslucent(1,1)
			MSP4 F 5 Bright A_SpawnItem("BloodLichExp")
			MSP4 GH 5 Bright
			MSP4 I 4 Bright
		Stop
	}
}

ACTOR CurseSpell {
	PROJECTILE
	+SEEKERMISSILE
	+BLOODLESSIMPACT
	+DONTBLAST
	+HITTRACER
	RenderStyle Add
	Damage (random(1, 8))
	DamageType "Magical"
	Stamina 8
	Speed 15
	Radius 10
	Height 6
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			CURS A 0 A_PlaySound("CurseActive", CHAN_AUTO, 1.0, 1)
			CURS ABCDEF 3 Bright A_SeekerMissile(50,50)
		Loop
		XDeath:
			TNT1 A 0 A_GiveInventory("DnD_Curse_RedLich", 1, AAPTR_TRACER)
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			TNT1 A 0 A_StopSound(CHAN_AUTO)
			CURS GHIJKL 3 Bright
		Stop
	}
}

ACTOR ShadowDisciple : DnD_BaseRangedMonster { 
	Health 0x7FFFFFFF
	PainChance 140
	Speed 8
	Scale 0.90
	Radius 20 
	Height 56 
	Mass 320 
	+ISMONSTER
	+DONTHURTSPECIES
	+FLOAT
	+NOGRAVITY
	+NOBLOOD
	Obituary "%o was smitten by a Shadow Discple."
	SeeSound "monster/dissit" 
	PainSound "monster/dispai" 
	DeathSound "monster/disdth" 
	ActiveSound "monster/disact"
	Tag "Shadow Disciple"
	States  { 
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_SHADOWDISCIPLE)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup
	
		IdleState:
			DISC AB 10 A_GiveInventory("DnD_SightChecker", 1) 
		Loop 
		SeeState: 
			DISC AAABBB 2 Fast A_Chase
			DISC A 0 A_Jump(80, "Dash")
		Goto See
		Dash:
			DISC A 0 A_FastChase
			DISC A 1 A_PlaySound("monster/blur")
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0) 
			DISC B 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC B 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC B 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC B 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0) 
			DISC B 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC B 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC B 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC B 1 A_FastChase
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 0 A_Jump(96,1)
		Goto SeeState + 8
			DISC B 0
		Goto See
		MissileState:
			DISC A 1 A_Jump(192, "Range")
			DISC A 0 A_FaceTarget
			DISC A 1 A_SkullAttack
			DISC A 1 A_PlaySound("monster/blur")
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 1 A_SkullAttack
			DISC A 0 A_SpawnItem("DSFX3",0,0)
			DISC A 0 A_Stop
		Goto See
		Range:
			DISC C 0 Bright A_Jump(128, 10)
			DISC C 1 Bright A_PlaySound("monster/disat1")
			DISC CC 5 Fast Bright A_FaceTarget
			DISC D 0 Bright A_CustomMissile("DiscipleShot1",36,0,-4,0)
			DISC D 0 Bright A_CustomMissile("DiscipleShot1",36,0,4,0)
			DISC D 0 Bright A_CustomMissile("DiscipleShot1",36,0,-8,0)
			DISC D 0 Bright A_CustomMissile("DiscipleShot1",36,0,8,0)
			DISC D 8 Bright A_CustomMissile("DiscipleShot1",36,0,0,0)
			TNT1 A 0 A_Stop
			TNT1 A 0 Thing_Stop(0)
			DISC D 0 Bright A_Jump(64,1)
		Goto See
			DISC E 1 Bright A_PlaySound("monster/disat2")
			DISC EE 5 Fast Bright A_FaceTarget
			DISC F 8 Fast Bright A_CustomMissile("DiscipleShot2",36,0,0,0)
			DISC E 1 Bright A_PlaySound("monster/disat2")
			DISC EE 5 Fast Bright A_FaceTarget
			DISC F 8 Fast Bright A_CustomMissile("DiscipleShot2",36,0,0,0)
			DISC E 1 Bright A_PlaySound("monster/disat2")
			DISC EE 5 Fast Bright A_FaceTarget
			DISC F 8 Fast Bright A_CustomMissile("DiscipleShot2",36,0,0,0)
			DISC A 0 A_Stop
			DISC A 0 Thing_Stop(0)
		Goto See
		PainState: 
			DISC G 2 Fast 
			DISC G 2 Fast A_Pain 
			DISC G 0 A_Jump(96, "Dash")
		Goto See
		XDeathState:
		DeathState: 
			DISC H 8 Bright A_Scream 
			DISC I 5 Bright
			DISC J 5 Bright
			DISC K 5 Bright A_NoBlocking 
			DISC LMN 4 Bright 
			TNT1 A 0 A_SpawnItem("DissipationEffect")
			DISC O -1 
		Stop 
		RaiseState: 
			DISC ONMLKJIH 3 
		Goto See
	} 
}

ACTOR DSFX3 {
	Radius 2
	Height 2
	Speed 0
	Scale 0.90
	PROJECTILE
	+DONTBLAST
	+CLIENTSIDEONLY
	RENDERSTYLE Translucent
	ALPHA 0.90
	States {
		Spawn:
			TNT1 A 3
			DISC A 3 A_FadeOut(0.10)
		goto spawn+1
	}
}

ACTOR DiscipleShot1 {
	Radius 8
	Height 16
	Speed 15
	Damage (random(6, 12))
	DamageType "Magical"
	Stamina 8
	RENDERSTYLE ADD
	ALPHA 0.67
	PROJECTILE
	+DONTBLAST
	DeathSound "monster/disht1"
	Decal "WizardScorch"
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			CFX2 ABCD 2 Bright A_SpawnItemEx("DSFX1")
		loop
		Death:
			CFX2 EFGHI 3 Bright
		stop
	}
}

ACTOR DiscipleShot2 {
	Radius 8
	Height 16
	Speed 15
	Damage (6 * random(1, 8))
	DamageType "Magical"
	Stamina 8
	RENDERSTYLE ADD
	ALPHA 0.67
	PROJECTILE
	+SEEKERMISSILE
	+DONTBLAST
	DeathSound "monster/disht2"
	Decal "PlasmaScorchLower"
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			CFX3 A 3 Bright A_SpawnItemEx("DSFX2")
			CFX3 A 0 Bright A_SeekerMissile(5,8)
			CFX3 B 3 Bright A_SpawnItemEx("DSFX2")
			CFX3 B 0 Bright A_SeekerMissile(5,8)
		loop
		Death:
			CFX3 CDEFG 3 Bright
		stop
	}
}

ACTOR DSFX1 {
	RENDERSTYLE ADD
	+CLIENTSIDEONLY
	+NOINTERACTION
	ALPHA 0.67
	States {
		Spawn:
			TNT1 A 3
			CFX2 EFGHI 3 Bright
		Stop 
	}
}

ACTOR DSFX2 {
	+CLIENTSIDEONLY
	+NOINTERACTION
	RENDERSTYLE ADD
	ALPHA 0.67
	States {
		Spawn:
			TNT1 A 3 Bright
			CFX3 HIJK 3 Bright
		Stop 
	}
}

Actor HellArbiter : DnD_BaseRangedMonster {
	Health 0x7FFFFFFF
	GibHealth -75
	Radius 31
	Height 56
	Speed 7
	Scale 1.15
	Mass 384
	PainChance 96
	Species "PainElemental"
	SeeSound "Arbiter/See"
	DeathSound "Arbiter/Die"
	PainSound "Arbiter/Pain"
	ActiveSound "Arbiter/Act"
	Obituary "%o met %p awful demise at the hands of a Hell Arbiter."
	Tag "Hell Arbiter"
	BloodColor "FF A5 00"
	+ISMONSTER
	+DONTHURTSPECIES
	+FLOAT
	+DONTBLAST
	+NOGRAVITY
	+FLOATBOB
	+MISSILEMORE
	+MISSILEEVENMORE
	-FLOORCLIP
	States {
		SetInfo:
			TNT1 A 0 A_CustomMissile("ArbiterOrbit", 32, 0, 0, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("ArbiterOrbit2", 32, 0, 120, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("ArbiterOrbit3", 32, 0, 240, CMF_AIMDIRECTION)
			TNT1 A 0 A_SetArg(4, DND_HELLARBITER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE1)
		Goto SpawnSetup
	
		IdleState:
			ARBT AB 5 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			ARBT AABB 4 Fast A_Chase
		Loop
		MissileState:
		MeleeState:
			TNT1 A 0 A_JumpIfCloser(420, "CheckGround")
			TNT1 A 0 A_Jump(144, "Seeker")
		FireBalls:
			ARBT CC 4 Fast A_FaceTarget
			TNT1 AA 0 A_CustomMissile("ArbiterFireball", 40, 0, random(-2, 2))
			ARBT CC 4 Fast A_FaceTarget
			TNT1 AA 0 A_CustomMissile("ArbiterFireball", 40, 0, random(-2, 2))
			ARBT CC 4 Fast A_FaceTarget
			ARBT CC 0 A_CustomMissile("ArbiterFireball", 40, 0, random(-2, 2))
		Goto See
		Seeker:
			ARBT C 7 Fast A_FaceTarget
			TNT1 A 0 A_CustomMissile("ArbiterSeeker", 40)
			ARBT C 7 Fast A_FaceTarget
			ARBT C 0 A_CustomMissile("ArbiterSeeker", 40)
		Goto See
		CheckGround:
			TNT1 A 0 A_Jump(64, "FireBalls", "Seeker")
			ARBT C 15 Fast A_FaceTarget
			TNT1 A 0 A_CustomMissile("ArbiterFlameSpawner")
			ARBT C 7 Fast A_FaceTarget
		Goto See
		PainState:
			ARBT D 3 Fast A_Pain
			TNT1 A 0 A_JumpIfInventory("ArbiterTeleCD", 1, "PainNext")
			TNT1 A 0 A_JumpIf(health <= ACS_ExecuteWithResult(961, 7) / 2 && health > 0, "Teleporting")
		PainNext:
			ARBT D 3 Fast
		Goto See
		Teleporting:
			TNT1 A 0 A_GiveInventory("ArbiterTeleCD", 1)
			TNT1 A 0 A_PlaySound("Arbiter/Laugh")
			TNT1 A 0 A_SetInvulnerable
			TNT1 A 0 A_UnsetShootable
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Monster State Syncer", 0, 1)
			ARBT AAAAABBBBBAAAAABBBBB 1 A_FadeOut(0.05, 0)
			TNT1 AAAAAAAAAAAAAAAAAAA 2 Fast A_Wander
			TNT1 AAAAAA 0 A_Wander
			TNT1 AAAAAAAAAAA 1 A_Chase("", "", CHF_NOPLAYACTIVE)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Monster State Syncer", 0, 3)
			ARBT AAAAABBBBBAAAAABBBBB 1 A_FadeIn(0.05)
			TNT1 A 0 A_UnsetInvulnerable
			ARBT B 0 A_SetShootable
		Goto Missile
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Medium", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
		DeathState:	 
		    ARBT E 6 bright 
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Monster State Syncer", 0, 2)
		    ARBT F 5 A_Scream
			ARBT G 5 A_NoBlocking
			ARBT H 5 A_ChangeFlag("FLOATBOB", 0)
			ARBT I -1
		stop
		RaiseState:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Monster State Syncer", 0, 4)
			ARBT HGFE 4
		Goto See
	}
}

Actor ArbiterDead : DnD_Boolean { }
Actor ArbiterFade : DnD_Boolean { }
Actor ArbiterTeleCD : PowerDamage {
	DamageFactor "normal", 1.0
	powerup.duration -5
}

Actor ArbiterFireball {
	Radius 6
	Height 8
	Speed 24
	Damage (5 * random(1, 8))
	+DONTBLAST
	DamageType "Fire"
	Stamina 32
	Projectile
	RenderStyle Add
	Alpha 0.85
	SeeSound "Kjaroch/Missile2"
	DeathSound "imp/shotx"
	Decal "BaronScorch"
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			ARBM AABB 2 Bright A_SpawnItem("ArbiterFireBallTrail")
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_SpawnItemEx("ExplosionFX2", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 AAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			ARBM CDE 5 Bright
		Stop
	}
}

Actor ArbiterFireBallTrail {
	Renderstyle Add
	Alpha 0.5
	+NOINTERACTION
	+NOGRAVITY
	+CLIENTSIDEONLY
	
	States {
		Spawn:
			TNT1 A 1
			ARBM AB 2 Bright
		Stop
	}
}

Actor ArbiterSeeker {
	Projectile
	Height 9
	Radius 10
	RenderStyle Add
	Alpha 0.85
	Scale 0.9
	Damage (6 * random(1, 8))
	DamageType "Fire"
	Stamina 32
	Speed 24
	SeeSound "Kjaroch/Missile2"
	DeathSound "redballbdeth"
	Decal "BaronScorch"
	+SEEKERMISSILE
	
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			ARBM F 2 Bright A_SeekerMissile(15, 15)
			TNT1 A 0 A_Weave(1, 1, 2.0, 2.0)
			ARBM G 2 Bright A_SeekerMissile(15, 15)
			TNT1 A 0 A_Weave(1, 1, 2.0, 2.0)
			ARBM H 2 Bright A_SeekerMissile(15, 15)
			TNT1 A 0 A_Weave(1, 1, 2.0, 2.0)
			ARBM I 2 Bright A_SeekerMissile(15, 15)
			TNT1 A 0 A_Weave(1, 1, 2.0, 2.0)
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_SpawnItemEx("ExplosionFX2", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 AAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			HRFX ABCDE 3 Bright
		Stop
	}
}

Actor ArbiterFlameSpawner {
	PROJECTILE
	Renderstyle None
	Radius 2
	Height 2
	Speed 18
	ReactionTime 6
	Species "Thru_Decor"
	+FLOORHUGGER
	+THRUSPECIES
	
	States {
		Spawn:
			TNT1 A 3
			TNT1 A 0 A_SpawnItem("ArbiterFlameFX")
			TNT1 A 0 A_SpawnItem("ArbiterFlameExplosion")
			TNT1 A 3 A_CountDown
		Loop
		Death:
			TNT1 A 1 A_SpawnItem("ArbiterFlameFX")
			TNT1 A 1 A_SpawnItem("ArbiterFlameExplosion")
		Stop
	}
}

Actor ArbiterFlameFX {
	Renderstyle Add
	Alpha 0.8
	+NOINTERACTION
	+CLIENTSIDEONLY
	
	States {
		Spawn:
			ARBM JK 5 Bright
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			ARBM LMNOPQ 3 Bright
			TNT1 A 0 A_ChangeVelocity(0, 0, 2)
			ARBM RS 5 Bright
		Stop
	}
}

Actor ArbiterFlameExplosion : BaseExplosionDamage
{
	DamageType "Fire"
	Stamina 32
	Obituary "%o met %p awful demise at the hands of a Hell Arbiter."
	States
	{
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 0 A_PlaySound("weapons/hellex")
			TNT1 A 1 A_Explode(64, 96, 0, 0, 48)
		Stop
	}
}

Actor ArbiterOrbit {
	Radius 2
	Height 2
	Renderstyle Add
	Alpha 0.66
	Speed 24
	+MISSILE
	+NOINTERACTION
	+CLIENTSIDEONLY
	var int user_angle;
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_angle", 0)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
		Loop
		FadeOut:
			WIBL AAABBBCCCD 1 A_FadeOut(0.066)
		FadeCheck:
			TNT1 A 1
			TNT1 A 1 A_JumpIfInTargetInventory("ArbiterFade", 1, "FadeCheck")
		Goto FadeIn
		FadeIn:
			WIBL AAABBBCCCD 1 A_FadeIn(0.066)
		Goto SpawnLoop
		Death:
			TNT1 A 0 A_Stop
			WIBL JKLMN 3
		Stop
	}
}

Actor ArbiterOrbit2 : ArbiterOrbit {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_angle", 120)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
		Loop
	}
}

Actor ArbiterOrbit3 : ArbiterOrbit {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_angle", 240)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL A 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL B 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL C 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Monster State Syncer", 5), "FadeOut")
			TNT1 A 0 A_SpawnItem("ArbiterOrbitTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
			WIBL D 1 A_Warp(AAPTR_TARGET, 32, 0, 32, user_angle, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 8)
		Loop
	}
}

Actor ArbiterOrbitTrail {
	Radius 2
	Height 2
	Renderstyle Add
	Alpha 0.66
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 1
			WIBL EFGHI 1
		Stop
	}
}