ACTOR TorturedSoul : DnD_BaseEnemy
{ 
	//$Category "ZDoom Monster pack"
   Health 550 
   Speed 8 
   Radius 31 
   Height 56 
   PainChance 64 
   Mass 400 
   REACTIONTIME 8 
   MONSTER 
   +NOGRAVITY 
   +FLOAT 
   +DONTBLAST
   +USEKILLSCRIPTS
   Explosiondamage 40
   Explosionradius 80
   SeeSound "torturedsoul/sight" 
   PainSound "torturedsoul/pain" 
   DeathSound "torturedsoul/death" 
   ActiveSound "torturedsoul/active" 
   Missiletype "TorturedSoulBall"
   Obituary "%o was tormented by the Tortured Soul." 
   DamageFactor "Paine", 0.0
   DamageFactor "PaineExp", 0.0
   DamageFactor "PaineFire", 0.0
   DamageFactor "PaineCurse", 0.0
   DamageFactor "PainePoison", 0.0
	DamageFactor "PaineMagic", 0.0
	DamageFactor "PaineMagicFire", 0.0
	Species "PainElemental"
	Tag "Tortured Soul"
	+DONTHURTSPECIES   
   States 
   { 
   Spawn: 
		TNT1 A 0
		TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_TORTUREDSOUL, DND_POISON | DND_DEATH)
	Idle:
      TORT AB 10 A_Look 
      Loop 
   See: 
      TORT AABBCC 3 Fast A_Chase 
      Loop 
   Missile: 
     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 
   Pain: 
	  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
   Death:
      TORT H 8 
      TNT1 A 0 A_JumpIfInTargetInventory("Ability_SoulStealer", 1, "GiveSoul")
   GaveSoul:
      TORT I 8 A_Scream 
      TORT JK 8 
	  TNT1 AAA 0 A_CustomMissile("ExplosionFX7", 32, 0, random(0,360), 2, random(0,360))
	  TNT1 AAAA 0 A_SpawnItem("NashGore_GibGenerator",0,0,0,0)
      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 
	  GiveSoul:
	  Death.BookOfTheDead:
		TORT I 1
		TNT1 A 0 A_SpawnItem("SoulEffectSpawner")
		TNT1 A 0 A_GiveToTarget("Souls", 1)  
	  Goto GaveSoul	  
   } 
}

actor TorturedSoulBall 
{ 
    Radius 8 
    Height 6 
    Speed 20 
    Damage (5 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET))) 
	DamageType "PainePoison"
    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) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET))) 
	PoisonDamage 1, 3
	DamageType "PainePoison"
	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) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET))) 
}

ACTOR Defiler : DnD_BaseEnemy
{
	//$Category monsters
	Health 600
	Radius 31
	Height 56
	Mass 500
	Speed 8
	PainChance 64
	Monster 
	+NOGRAVITY
    +FLOAT 
	+DROPOFF
	+DONTBLAST
	+MISSILEMORE
	+USEKILLSCRIPTS
	SeeSound "Defiler/Sight"
	PainSound "pain/pain"
	DeathSound "Defiler/Death"
	ActiveSound "baron/active"
	Obituary "%o was hunted down by a Defiler."
	Species "PainElemental"
	DamageFactor "Paine", 0.0
	DamageFactor "PaineExp", 0.0
	DamageFactor "PaineCurse", 0.0
	DamageFactor "PaineFire", 0.0
	DamageFactor "PainePoison", 0.0
	DamageFactor "PaineMagic", 0.0
	DamageFactor "PaineMagicFire", 0.0
	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"
	+DONTHURTSPECIES	
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_DEFILER, DND_HOMING | DND_DEATH)
	Idle:
		PAIN AB 10 A_Look
		Loop
	See:
		PAIN AABBCC 2 Fast A_Chase
		Loop
	Missile:
		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
	Pain:
		PAIN G 5 Fast   
		PAIN G 5 Fast A_Pain
		Goto See
	Death:
		PAIN H 7
        TNT1 A 0 A_JumpIfInTargetInventory("Ability_SoulStealer", 1, "GiveSoul")
	GaveSoul:		
		PAIN I 7 A_Scream
		PAIN J 7 A_NoBlocking
		PAIN KL 7
		TNT1 AAAAAA 0 A_SpawnItem("NashGore_GibGenerator",0,0,0,0)
		TNT1 AAAAA 0 A_CustomMissile("ExplosionFX8", 32, 0, random(0,360), 2, random(0,360))
		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
	  GiveSoul:
	  Death.BookOfTheDead:
		PAIN I 1
		TNT1 A 0 A_SpawnItem("SoulEffectSpawner")
		TNT1 A 0 A_GiveToTarget("Souls", 1)  
	  Goto GaveSoul	
	}
}

ACTOR DefilerBall
{
    Radius 8
    Height 6
    Scale 0.5
    Speed 8
    Damage (2 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
	DamageType "PaineMagic"
	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) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
	DamageType "Paine"
	+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 Helemental : DnD_BaseEnemy
{
  //$Title "Hades Elemental"
  //$Category Monsters
  Obituary "%o was electrocuted by a Hades-Elemental."
  HitObituary "%o got chomped by a Hades-Elemental."
  Health 800
  Radius 31
  Height 56
  Mass 800
  Speed 10
  PainChance 32
  DamageType normal
  SeeSound "monster/helsit"
  PainSound "monster/helpai"
  DeathSound "monster/heldth"
  ActiveSound "monster/helact"
  MeleeSound "caco/melee"
	Species "Cacodemon"
	DropItem "SoulAmmoSpawner", 96
	DamageFactor "Paine", 0.0
	DamageFactor "PaineExp", 0.0
	DamageFactor "PaineCurse", 0.0
	DamageFactor "PainePoison", 0.0
	DamageFactor "PaineFire", 0.0
	DamageFactor "PaineMagic", 0.0
	DamageFactor "PaineMagicFire", 0.0
	Tag "Hades Elemental"
	+DONTHURTSPECIES  
	+USEKILLSCRIPTS
  Monster
  +Float
  +NoGravity
  +MissileMore
  +Notarget
  +NoRadiusDmg
  +DONTBLAST
  States
  {
  Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_HADESELEMENTAL, DND_EXPLOSIVE_IMMUNE | DND_MINIONS | DND_DEATH | DND_TELEPORT)
	Idle:
    HELE A 10 A_Look
    Loop
  See:
    HELE A 0 A_SetShootable
  SeeChase:
    HELE AAAAAAAAAAAA 3 Fast A_Chase
    HELE A 0 A_Jump(72, "Teleport")
    Goto SeeChase
  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")
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_Wander
  Skip1:
    TNT1 A 0 A_Jump(128,"Skip2")
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_ExtChase(0,0,1,1)
  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
  Missile:
    TNT1 A 0 A_Jump(96, "Missile2")
	TNT1 A 0 A_Jump(80, "Missile3")
  Missile1:
    HELE EF 5 Fast Bright A_Facetarget
    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+1
  Missile2:
    HELE EF 5 Fast Bright A_Facetarget
    HELE G 0 Bright A_CustomMissile("HadesBolt",32,0,-16,0,0)
    HELE G 0 Bright A_CustomMissile("HadesBolt",32,0,0,0,0)
    HELE G 5 Fast Bright A_CustomMissile("HadesBolt",32,0,16,0,0)
    Goto See+1
  Missile3:
    HELE BC 5 Fast Bright A_Facetarget
    HELE D 5 Fast Bright A_DualPainAttack("HS")
    Goto See+1
  Melee:
    HELE ABD 5 Fast Bright A_Facetarget
    HELE C 5 Fast Bright A_CustomMeleeAttack(10 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_SELF)), "caco/melee")
    Goto See+1
  Pain:
    HELE H 3 Fast
    HELE H 3 Fast A_Pain
    HELE H 6 Fast
    Goto See
  Death:
    TNT1 A 0 A_JumpIfInTargetInventory("Ability_SoulStealer", 1, "GiveSoul")
  GaveSoul: 
    HELE I 5 Bright A_Scream
    HELE J 5 Bright
	HELE KL 5 Bright
    HELE M 5 Bright A_NoBlocking
	TNT1 AAAAA 0 A_CustomMissile("ExplosionFX8", 32, 0, random(0,360), 2, random(0,360))
	TNT1 AAAAAAAA 0 A_SpawnItem("NashGore_GibGenerator",0,0,0,0)
    HELE M 0 Bright A_SpawnItemEx("HS",36,36)
    HELE M 0 Bright A_SpawnItemEx("HS",-36,36)
    HELE M 0 Bright A_SpawnItemEx("HS",-36,-36)
    HELE M 0 Bright A_SpawnItemEx("HS",36,-36)
    HELE NOP 5 Bright
    HELE QRSTU 5
    HELE V -1 A_SetFloorClip
    Stop
	  GiveSoul:
	  Death.BookOfTheDead:
		HELE I 1 Bright
		TNT1 A 0 A_SpawnItem("SoulEffectSpawner")
		TNT1 A 0 A_GiveToTarget("Souls", 1)  
	  Goto GaveSoul	
  }
}

Actor HadesBall : CacodemonBall
{
  Damage (8 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
  DamageType "PaineMagic"  
  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 "PaineExp"
	Obituary "%o was electrocuted by a Hades-Elemental."
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(16 * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)), 64, 0)
		Stop
	}
}

Actor HadesBoltExp2 : BaseExplosionDamage
{
	DamageType "PaineExp"
	Obituary "%o was electrocuted by a Hades-Elemental."
	States
	{
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 1 A_Explode(32 * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)), 64, 0)
		Stop
	}
}

Actor HadesBolt : CacodemonBall
{
  Damage (5 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
  Speed 5
  Radius 8
  Height 24
  Damagetype "Paine"
  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 "Paine"
  +ThruGhost
  +Ripper
  SeeSound "Monster/hadtel"
  DeathSound "Monster/hadsit"
  States
  {
  Spawn:
    TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
  SpawnLoop:
    TNT1 A 1 Bright A_SpawnItem("HadesBoltExp")
    Loop
  Death:
	TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
    TNT1 A 1 Bright
    Stop
  }
}

ACTOR HS : MagicalEnemy { 
	Health 35
	Radius 16 
	Height 32 
	Mass 3000 
	Speed 10
	ExplosionDamage 72
	ExplosionRadius 112
	RENDERSTYLE Normal
	Obituary "%o was blown away by a Hades Sphere."
	PAINCHANCE 0 
	MONSTER
	+LOOKALLAROUND
	+DONTGIB
	+NOTARGET
	+NOGRAVITY 
	+FLOAT
	+DONTFALL
	+DONTHURTSPECIES
	+LONGMELEERANGE
	-COUNTKILL
	+DONTBLAST
	+USEKILLSCRIPTS
	SeeSound "monster/hadsit"
	DamageFactor "Paine", 0.0
	DamageFactor "PaineExp", 0.0
	DamageFactor "PaineCurse", 0.0
	DamageFactor "PaineFire", 0.0
	DamageFactor "PainePoison", 0.0
	DamageFactor "PaineMagic", 0.0
	DamageFactor "PaineMagicFire", 0.0
	Tag "Hades Sphere"
	States 
   { 
   Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_HADESSPHERE, DND_MAGIC_WEAKNESS | DND_DEATH)
	Idle:
       TNT1 A 1 Bright A_Look      
       Loop
   See:
       HADE EFGH 4 Fast Bright
       HADE A 2 Fast Bright A_Playsound("monster/hadwlk")
       HADE ABBCCDD 2 Fast Bright A_Chase
       HADE D 0 Bright A_Jump (32,1) 
       Goto See+4
       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
       TNT1 AAAAAAAA 2 Fast Bright A_Chase("", "")
       TNT1 A 0 Bright A_Jump (96,1) 
       Goto See+24
       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 See+4
   Melee:
       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
   Death:
       HADE E 0 A_Noblocking
       HADE E 0 A_CustomMissile("HSBoom",0,0,0,0)
       Stop
   XDeath:
       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 HSBoom
{
   Radius 1
   Height 1
   Speed 0
   Damage 0
   DamageType "Explosive"
   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 * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)), 112)
      HADE NOPQ 5 Bright
      Stop
   }
}

actor DESentinel : Guardian
{
  obituary "%o was blasted away by a sentinel."
  health 750
  radius 31
  height 56
  Scale 1.0
  mass 1000
  speed 8
  painchance 64
  SeeSound "monster/cubsit"
  painsound "monster/senpai"
  activesound "monster/senact"
  DeathSound "monster/cubdth"  
  MONSTER
  DamageFactor "Paine", 0.0
  DamageFactor "PaineExp", 0.0
  DamageFactor "PaineCurse", 0.0
  DamageFactor "PaineFire", 0.0
  DamageFactor "PainePoison", 0.0
  DamageFactor "PaineMagic", 0.0
	DamageFactor "PaineMagicFire", 0.0
  DropItem "SoulAmmoSpawner", 96
  DamageFactor "Bullet", 0.75
  DamageFactor "Melee", 0.5
  DamageFactor "Melee_Magic", 0.5
	Species "PainElemental"
	Tag "Sentinel"
	+DONTBLAST
  +DONTHURTSPECIES
  +USEKILLSCRIPTS
  +FLOAT
  +NOGRAVITY
  +NOTARGET
  +NOBLOOD
  +NOICEDEATH
  -DONTFALL
  +DONTRIP
  states
  {
  Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_SENTINEL, DND_MAGIC_WEAKNESS | DND_MINIONS | DND_BULLET_RESIST | DND_MELEE_RESIST | DND_HARDENED_SKIN)
	Idle:
    SENT A 10 A_Look
    loop
  See:
    SENT A 3 Fast A_Chase
    loop
  Missile:
    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
    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
    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)
    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
  Pain:
    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
  Death:
    TNT1 A 0 A_JumpIfInTargetInventory("Ability_SoulStealer", 1, "GiveSoul")
  GaveSoul: 
    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
	  GiveSoul:
	  Death.BookOfTheDead:
		SENT G 1 Bright
		TNT1 A 0 A_SpawnItem("SoulEffectSpawner")
		TNT1 A 0 A_GiveToTarget("Souls", 1)  
	  Goto GaveSoul	
  }
}

Actor CubeShotSentinel : CubeShot
{
	Damage (2*random(2,4))
	DamageType "PaineFire"
	Obituary "%o got fried by a Sentinel."
}

ACTOR SentGmissile
{
   Radius 5
   Height 5
   Speed 16
   Damage (6 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
   DamageType "PainePoison"
   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_CustomMissile("ExplosionFX4", 0, 0, random(0,360), 2, random(0,360))
	  TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
      CFX6 BCDE 4 Bright
      Stop
   }
}

Actor SentinelExp : BaseExplosionDamage
{
	DamageType "PaineExp"
	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 * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)), 64, 0)
		Stop
	}
}

ACTOR SentRmissile
{
   Radius 5
   Height 5
   Speed 20
   Damage (15 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
   DamageType "PaineMagic"
   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_CustomMissile("ExplosionFX2", 0, 0, random(0,360), 2, random(0,360))
	  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_SpawnItem("GuardianCube_NoCount",0,0)
      NFAB CDEFGH 3 Bright
      Stop
   }
}

ACTOR BloodLich : MagicalEnemy
{
    Obituary "%o was reduced to a pile of ash by a Blood Lich."
    Health 675
    Radius 31
    Height 56
    Mass 2000
    Speed 8
    PainChance 32
    AttackSound ""
    SeeSound "monster/cubsit"
    PainSound "Lich/pain"
    DeathSound "monster/cubdth"
    ActiveSound "Lich/act"
	DropItem "SoulAmmoSpawner", 96
	DamageFactor "P_Ice", 1.5
	DamageFactor "Paine", 0.0
	DamageFactor "PaineExp", 0.0
    DamageFactor "PaineCurse", 0.0
    DamageFactor "PaineFire", 0.0
    DamageFactor "PainePoison", 0.0
	DamageFactor "PaineMagic", 0.0
	DamageFactor "PaineMagicFire", 0.0
	Tag "Blood Lich"
    MONSTER
    +NOGRAVITY
    +NOTARGET
    +FLOAT
    +MISSILEMORE
    +MISSILEEVENMORE
    +DONTRIP
    +DONTSPLASH
    +BOSSDEATH
	+DONTBLAST
	+USEKILLSCRIPTS
    States
    {
    Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_BLOODLICH, DND_MAGIC_WEAKNESS | DND_HARDENED_SKIN | DND_DEATH | DND_CURSE)
	Idle:
	BLCH A 10 A_Look
	Loop
    See:
	BLCH A 4 Fast A_Chase
	Loop
    Missile:
	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 6 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 6 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 6 Fast Bright A_PainAttack("ReiverGhost")
    Pain:
	BLCH A 3 Fast A_Pain
	Goto See
    Death:
    TNT1 A 0 A_JumpIfInTargetInventory("Ability_SoulStealer", 1, "giveSoul")
	GaveSoul:
	BLCH C 7 A_PainDie("ReiverGhost")
	BLCH D 7 A_Scream
	BLCH EF 7
	BLCH G 7 A_NoBlocking
	BLCH H 7
	BLCH I -1 A_BossDeath
	Stop
	  GiveSoul:
	  Death.BookOfTheDead:
		BLCH C 1
		TNT1 A 0 A_SpawnItem("SoulEffectSpawner")
		TNT1 A 0 A_GiveToTarget("Souls", 1)  
	  Goto GaveSoul	
    }
}

ACTOR FireBreath
{
    Radius 12
    Height 8
    Speed 12
    Damage (3 * random(2,4) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
	DamageType "PaineMagicFire"
    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_CustomMissile("ExplosionFX2", 0, 0, random(0,360), 2, random(0,360))
	    TNT1 AAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
    	FX06 DEFG 3 Bright
    Stop
    }
}

Actor BloodLichExp : BaseExplosionDamage
{
	DamageType "PaineMagic"
	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 * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)), 128, 0)
		Stop
	}
}

ACTOR BloodLichFireball
{
    Speed 18
    Height 8
    Damage (4 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
    PROJECTILE
    DamageType "PaineMagicFire"
    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_CustomMissile("ExplosionFX2", 0, 0, random(0,360), 2, random(0,360))
	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
    RenderStyle Add
    Damage (random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
    DamageType "PaineCurse"
    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
    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 ReiverGhost : Wraith {
	Health 75
    Speed 6
    Alpha 0.75
    RenderStyle Add
    HitObituary "%o had %p soul devoured by a reiver ghost."
    Obituary "%o was charred by a reiver ghost."
	DamageFactor "BulletMagicX", 3.0
	DamageFactor "BulletMagicXFull", 3.0
	DamageFactor "Melee_UndeadXtra", 3.0
	DamageFactor "Melee_UndeadXtraFull", 3.0
	Tag "Wraith"
    +GHOST
    +DONTFALL
    +NOBLOOD
    +NOTARGET
    -COUNTKILL
	+DONTBLAST
    States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_WRAITH, DND_RESURRECT | DND_GHOST)
		Goto Super::Spawn
		See:
			WRTH A 2 Fast A_WraithChase
			WRTH A 2 Fast A_VileChase
			WRTH B 2 Fast A_WraithChase
			WRTH B 2 Fast A_VileChase
			WRTH C 2 Fast A_WraithChase
			WRTH C 2 Fast A_VileChase
			WRTH D 2 Fast A_WraithChase
			WRTH D 2 Fast A_VileChase
		Loop
		Missile:
			WRTH E 6 Fast A_FaceTarget
			WRTH F 6 Fast
			WRTH G 0 A_Jump(128,1,2)
			WRTH G 6 Fast A_CustomMissile("ReiverGhostFX", 32, 0)
		Goto See
			WRTH G 6 Fast A_SkullAttack(30)
			WRTH G 2 Fast
		Goto Missile+5
		Heal:
			TNT1 A 0 A_SpawnItemEx("ResurrectionFlame",16,0,floorz,0,0,0,32,0)
			WRTH EF 6 Fast
			WRTH G 1 A_FadeOut(0.06)
		Wait
		XDeath:
		Stop
		Death:
			TNT1 A 0 A_SpawnItemEx("ReiverGhostExplode",0,0,32,0,0,0,0,32,0)
		Stop
    }
}

ACTOR ReiverGhostExplode {
    +NOINTERACTION
    RenderStyle Add
	+CLIENTSIDEONLY
    States {
		Spawn:
			XPL1 ABCDEF 4 Bright
			Stop
    }
}

ACTOR ReiverGhostFX : WraithFX1
{
	Damage (5 * random(2,5) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
	SeeSound "Beast/Attack"
    +MTHRUSPECIES
	DamageType "PaineFire"
	+DONTBLAST
	
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		Goto Super::Spawn
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_CustomMissile("ExplosionFX2", 0, 0, random(0,360), 2, random(0,360))
			TNT1 AAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
		Goto Super::Death
	}
}

ACTOR ResurrectionFlame
{
    Height 78
    +NOBLOCKMAP
    +NOGRAVITY
    +FLOORHUGGER
    RenderStyle Add
    Alpha 0.65
	+CLIENTSIDEONLY
	States {
		Spawn:
			FIRE ABCDEFGH 2 Bright
		Stop
    }
}

ACTOR ShadowDisciple : MagicalBulletResistantEnemy { 
	Health 500 
	PainChance 140
	Speed 8
	Scale 0.90
	Radius 20 
	Height 56 
	Mass 320 
	MONSTER
	+FLOORCLIP
	+DONTHURTSPECIES
	+FLOAT
	+NOGRAVITY
	+NOBLOOD
	+DONTBLAST
	+USEKILLSCRIPTS
	Obituary "%o was smitten by a Shadow Discple."
	SeeSound "monster/dissit" 
	PainSound "monster/dispai" 
	DeathSound "monster/disdth" 
	ActiveSound "monster/disact"
	DamageFactor "Paine", 0.0
	DamageFactor "PaineExp", 0.0
    DamageFactor "PaineCurse", 0.0
    DamageFactor "PaineFire", 0.0
    DamageFactor "PainePoison", 0.0
	DamageFactor "PaineMagic", 0.0
	DamageFactor "PaineMagicFire", 0.0
	Tag "Shadow Disciple"
	States 
   { 
   Spawn: 
		TNT1 A 0
		TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_SHADOWDISCIPLE, DND_MAGIC_WEAKNESS | DND_MOBILITY | DND_BULLET_RESIST | DND_HOMING)
	Idle:
       DISC AB 10 A_Look 
       Loop 
   See: 
       DISC AAABBB 2 Fast A_Chase
       DISC A 0 A_Jump(80, "Dash")
       Loop
   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 See+8
       DISC B 0
       Goto See
   Missile:
       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)
	   TNT1 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)
	   TNT1 A 0 A_Stop
	   TNT1 A 0 Thing_Stop(0)
       Goto See
   Pain: 
       DISC G 2 Fast 
       DISC G 2 Fast A_Pain 
	   TNT1 A 0 A_Jump(96, "Dash")
       Goto See 
   Death: 
	    TNT1 A 0 A_JumpIfInTargetInventory("Ability_SoulStealer", 1, "GiveSoul")
	GaveSoul:
       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 
   Raise: 
	   TNT1 A 0 A_GiveInventory("Mo_Revived", 1)
       DISC ONMLKJIH 3 
       Goto See
	  GiveSoul:
	  Death.BookOfTheDead:
		DISC H 1 Bright
		TNT1 A 0 A_SpawnItem("SoulEffectSpawner")
		TNT1 A 0 A_GiveToTarget("Souls", 1)  
	  Goto GaveSoul
   } 
}

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) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
   DamageType "PaineMagic"
   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_CustomMissile("DSFX1",0,0,0,0)
      loop
   Death:
      CFX2 EFGHI 3 Bright
      stop
   }
}

ACTOR DiscipleShot2
{
   Radius 8
   Height 16
   Speed 15
   Damage (6 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
   DamageType "PaineMagic"
   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_CustomMissile("DSFX2",0,0,0,0)
      CFX3 A 0 Bright A_SeekerMissile(5,8)
      CFX3 B 3 Bright A_CustomMissile("DSFX2",0,0,0,0)
      CFX3 B 0 Bright A_SeekerMissile(5,8)
      loop
   Death:
      CFX3 CDEFG 3 Bright
      stop
   }
}

ACTOR DSFX1
{   
   Radius 2
   Height 2
   Speed 0
   PROJECTILE
   RENDERSTYLE ADD
   +CLIENTSIDEONLY
   ALPHA 0.67
   States
   {
   Spawn:
      TNT1 A 3
      CFX2 EFGHI 3 Bright
      Stop 
   }
}

ACTOR DSFX2
{   
   Radius 2
   Height 2
   Speed 0
   PROJECTILE
   +CLIENTSIDEONLY
   RENDERSTYLE ADD
   ALPHA 0.67
   States
   {
   Spawn:
      TNT1 A 3 Bright
      CFX3 HIJK 3 Bright
      Stop 
   }
}

Actor HellArbiter : DnD_BaseEnemy {
	Health 450
	Radius 31
	Height 56
	Speed 7
	Scale 1.15
	Mass 384
	MONSTER
	PainChance 96
	Species "PainElemental"
	DamageFactor "Paine", 0.0
	DamageFactor "PaineExp", 0.0
	DamageFactor "PaineCurse", 0.0
	DamageFactor "PaineFire", 0.0
	DamageFactor "PainePoison", 0.0
	DamageFactor "PaineMagic", 0.0
	DamageFactor "PaineMagicFire", 0.0
	DropItem "SoulAmmoSpawner", 64
	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"
	+USEKILLSCRIPTS
	+DONTHURTSPECIES
	+FLOAT
	+DONTBLAST
	+NOGRAVITY
	+FLOATBOB
	+MISSILEMORE
	+MISSILEEVENMORE
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ACS_ExecuteAlways(DND_MONSTERSCALESCRIPT, 0, DND_HELLARBITER, DND_TELEPORT | DND_HOMING)
			TNT1 A 0
			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)
		Idle:
			ARBT AB 5 A_Look
		Loop
		See:
			ARBT AABB 4 Fast A_Chase
		Loop
		Missile:
		Melee:
			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
			TNT1 AA 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
			TNT1 A 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
		Pain:
			ARBT D 3 Fast A_Pain
			TNT1 A 0 A_JumpIf(health <= ACS_ExecuteWithResult(961, 7) / 2 && health > 0, "Teleporting")
			ARBT D 3 Fast
		Goto See
		Teleporting:
			TNT1 A 0 A_PlaySound("Arbiter/Laugh")
			TNT1 A 0 A_SetInvulnerable
			TNT1 A 0 A_UnsetShootable
			TNT1 A 0 ACS_ExecuteAlways(959, 0, 1)
			ARBT AAAAABBBBBAAAAABBBBB 1 A_FadeOut(0.05)
			TNT1 AAAAAAAAAAAAAAAAAAA 2 Fast A_Wander
			TNT1 AAAAAA 0 A_Wander
			TNT1 AAAAAAAAAAA 1 A_Chase("", "", CHF_NOPLAYACTIVE)
			TNT1 A 0 ACS_ExecuteAlways(959, 0, 3)
			ARBT AAAAABBBBBAAAAABBBBB 1 A_FadeIn(0.05)
			TNT1 A 0 A_UnsetInvulnerable
			TNT1 A 0 A_SetShootable
		Goto Missile
		Death:
		    TNT1 A 0 A_JumpIfInTargetInventory("Ability_SoulStealer", 1, "GiveSoul")
		GaveSoul:	 
		    ARBT E 6 bright 
			TNT1 A 0 ACS_ExecuteAlways(959, 0, 2)
			TNT1 A 0 ACS_ExecuteAlways(982, 0, 2)
		    ARBT F 5 A_Scream
			ARBT G 5 A_NoBlocking
			ARBT H 5 A_ChangeFlag("FLOATBOB", 0)
			ARBT I -1
		stop
		GiveSoul:
		Death.BookOfTheDead:
			ARBT E 1
			TNT1 A 0 A_SpawnItem("SoulEffectSpawner")
			TNT1 A 0 A_GiveToTarget("Souls", 1)  
		Goto GaveSoul
		Stop
		Raise:
			TNT1 A 0 A_GiveInventory("Mo_Revived", 1)
			TNT1 A 0 ACS_ExecuteAlways(959, 0, 4)
			ARBT HGFE 4
		Goto See
	}
}

Actor ArbiterDead : DnD_Boolean { }
Actor ArbiterFade : DnD_Boolean { }

Actor ArbiterFireball {
	Radius 6
	Height 8
	Speed 24
	Damage (5 * random(1, 8) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
	+DONTBLAST
	DamageType "PaineFire"
	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_CustomMissile("ExplosionFX2", 0, 0, random(0,360), 2, random(0,360))
			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) * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)))
	DamageType "PaineFire"
	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_CustomMissile("ExplosionFX2", 0, 0, random(0,360), 2, random(0,360))
			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 "PaineFire"
	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 * (1.0 + ACS_NamedExecuteWithResult("DND Monster Damage Scale", DND_USETARGET)), 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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_ExecuteWithResult(959, 6), "Death")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(959, 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
	}
}