actor STDarkImp : DnD_BaseHybridMonster {
	//$Category Monsters
    Health 0x7FFFFFFF
	GibHealth -25
    Radius 20
    Height 56
    Speed 9
    PainChance 200
    SeeSound "imp/sight"
    PainSound "imp/pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    MeleeSound "imp/melee"
    Obituary "%o was cursed by a dark imp."
    HitObituary "%o was touched by a dark imp."
	Species "Imp"
	+DONTHURTSPECIES
	PainSound "Imp/Pain"
	Tag "Dark Imp"
	+ISMONSTER
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_DARKIMP1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup
	
		IdleState:
			DRKS AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			DRKS AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			DRKS EF 8 Fast A_FaceTarget
			DRKS G 6 Fast A_CustomComboAttack("DarkFast", 32, 3 * random(1, 8), "imp/melee")
		Goto See
		PainState:
			DRKS H 2 Fast
			DRKS H 2 Fast A_Pain
		Goto See
		DeathState:
			DRKS I 8
			DRKS J 8 A_Scream
			DRKS K 6
			DRKS L 6 A_Fall
			DRKS M -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			DRKI N 5
			DRKI O 5 A_XScream
			DRKI P 5
			DRKI Q 5 A_Fall
			DRKI RST 5
			DRKI U -1
			Stop		
		RaiseState:
			DRKS ML 8
			DRKS KJI 6
		Goto See
    }
}

actor DarkFast {
    Radius 8
    Height 6
    Speed 18
    Damage (3 * random(1, 8))
	DamageType "MagicalVoid"
	Stamina 8
    PROJECTILE
	+DONTBLAST
    RENDERSTYLE ADD
    ALPHA 0.67
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    MISSILEHEIGHT 0
    Decal DoomImpScorch
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			DKB1 AABB 2 Bright A_SpawnItem("DarkImpBallTrail")
        Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("PurpleParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX3", 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))
			DKB1 CDE 4 Bright
        Stop
    }
}

Actor DarkImpBallTrail {
	+CLIENTSIDEONLY
	+NOGRAVITY
	+NOINTERACTION
	Renderstyle Add
	Alpha 0.75
	States {
		Spawn:
			TNT1 A 1
		SpawnLoop:
			DKB1 AAAABBBB 1 Bright A_FadeOut(0.075)
		Loop
	}
}

actor NamiDarkImp : DnD_BaseHybridMonster {
	//$Category Monsters
    Health 0x7FFFFFFF
	GibHealth -25
    Radius 20
    Height 56
    Speed 8
    PainChance 200
    SeeSound "imp/sight"
    PainSound "Imp/Pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    MeleeSound "imp/melee"
    Obituary "%o was cursed by a dark imp."
    HitObituary "%o was touched by a dark imp."
	Species "Imp"
	Tag "Dark Imp"
	+ISMONSTER
	+DONTHURTSPECIES
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_DARKIMP2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup

		IdleState:
			DRKI AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			DRKI AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			DRKI EF 8 Fast A_FaceTarget
			DRKI G 6 Fast A_CustomComboAttack("DarkSeeker", 32, 3 * random(1, 8), "imp/melee")
		Goto See
		PainState:
			DRKI H 2 Fast
			DRKI H 2 Fast A_Pain
		Goto See
		DeathState:
			DRKI I 8
			DRKI J 8 A_Scream
			DRKI K 6
			DRKI L 6 A_Fall
			DRKI M -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			DRKI N 5
			DRKI O 5 A_XScream
			DRKI P 5
			DRKI Q 5 A_Fall
			DRKI RST 5
			DRKI U -1
		Stop	
		RaiseState:
			DRKI ML 8
			DRKI KJI 6
		Goto See
    }
}

actor DarkSeeker {
    Radius 8
    Height 6
    Speed 9
    Damage (3 * random(1, 8))
	DamageType "MagicalVoid"
	Stamina 8
    +SEEKERMISSILE
	+DONTBLAST
    PROJECTILE
    RENDERSTYLE ADD
    ALPHA 0.67
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    Decal DoomImpScorch
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			TNT1 A 0 A_SpawnItem("DarkImpBallTrail")
			DKB1 A 2 Bright A_SeekerMissile (5, 10)
			TNT1 A 0 A_SpawnItem("DarkImpBallTrail")
			DKB1 A 2 Bright
			TNT1 A 0 A_SpawnItem("DarkImpBallTrail")
			DKB1 B 2 Bright A_SeekerMissile (5, 10)
			TNT1 A 0 A_SpawnItem("DarkImpBallTrail")
			DKB1 B 2 Bright
        Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("PurpleParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX3", 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))
			DKB1 CDE 4 Bright
        Stop
    }
}

actor VoidDarkImp : DnD_BaseHybridMonster {
	//$Category Monsters
    Health 0x7FFFFFFF
	GibHealth -25
    Radius 20
    Height 56
    Speed 7
    PainChance 200
    SeeSound "imp/sight"
    PainSound "imp/pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    MeleeSound "imp/melee"
    Obituary "%o was cursed by a dark imp."
    HitObituary "%o was touched by a dark imp."
	Species "Imp"
	Tag "Void Dark Imp"
	+ISMONSTER
	+DONTHURTSPECIES
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_VOIDDARKIMP)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup
	
		IdleState:
			DRKV AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			DRKV AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
			DRKV EF 8 Fast A_FaceTarget
			DRKV G 6 Fast A_CustomComboAttack("DarkNormal", 32, 3 * random(1, 8), "imp/melee")
		Goto See
		MissileState:
			DRKV E 0 A_Jump(64, "Attack2")
			DRKV EF 8 Fast A_FaceTarget
			DRKV G 6 Fast A_CustomMissile("DarkNormal", 32, 0, 0)
		Goto Attack3
		Attack2:
			DRKV IJ 8 Fast Bright A_FaceTarget
			DRKV K 6 Fast Bright A_CustomMissile("DarkStrong", 32, 0, 0)
			DRKV E 0 A_Jump(64, "Attack3")
			DRKV EF 8 Fast A_FaceTarget
			DRKV G 6 Fast A_CustomMissile("DarkNormal", 32, 0, 0)
		Goto See
		Attack3:
			DRKV IJ 8 Fast Bright A_FaceTarget
			DRKV K 6 Fast Bright A_CustomMissile("DarkStrong", 32, 0, 0)
		Goto See
		PainState:
			DRKV H 2 Fast
			DRKV H 2 Fast A_Pain
		Goto See
		DeathState:
			DRKV L 8
			DRKV M 8 A_Scream
			DRKV N 5
			DRKV O 5 A_Fall
			DRKV P -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			DRKI N 5
			DRKI O 5 A_XScream
			DRKI P 5
			DRKI Q 5 A_Fall
			DRKI RST 5
			DRKI U -1
		Stop	
		RaiseState:
			DRKV PO 8
			DRKV NML 6
		Goto See
    }
}

actor DarkNormal {
    Radius 8
    Height 6
    Speed 9
    Damage (3 * random(1, 8))
	DamageType "MagicalVoid"
	Stamina 8
    PROJECTILE
	+DONTBLAST
    RENDERSTYLE ADD
    ALPHA 0.67
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    Decal DoomImpScorch
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			DKB1 AABB 2 Bright A_SpawnItem("DarkImpBallTrail")
        Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("PurpleParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX3", 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))
			DKB1 CDE 4 Bright
        Stop
    }
}

actor DarkStrong {
    Radius 8
    Height 6
    Speed 9
    Damage (6 * random(1, 8))
	DamageType "MagicalVoid"
	Stamina 8
    PROJECTILE
	+DONTBLAST
    RENDERSTYLE ADD
    ALPHA 0.67
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    Decal DoomImpScorch
	Translation "192:193=48:51", "194:194=17:17", "195:199=171:175", "200:206=176:188", "207:241=45:46", "242:246=46:47"
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			DKB1 AB 4 Bright A_SpawnItemEx("DarkTail", 0, 0, 0, 0, 0, 0, 0, 128)
        Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("PurpleParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX3", 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))
			DKB1 CDE 4 Bright
        Stop
    }
}

actor DarkTail {
    RENDERSTYLE ADD
    ALPHA 0.5
	+CLIENTSIDEONLY
	+NOINTERACTION
    States {
		Spawn:
			DKBT ABCDEF 2 Bright
        Stop
    }
}

actor NetherDarkImp : DnD_BaseHybridMonster {
    Health 0x7FFFFFFF
	GibHealth -25
    Radius 20
    Height 56
    Speed 9
    PainChance 100
    Mass 500
    Scale 1.1
    SeeSound "imp/sight"
    PainSound "imp/pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    MeleeSound "imp/melee"
    Obituary "%o was cursed by a dark imp."
    HitObituary "%o was touched by a dark imp."
	Translation "16:49=112:122", "48:51=112:113", "160:167=112:119", "168:191=114:120", "197:206=160:166", "208:223=116:117", "232:235=116:119", "248:254=115:121"
	Species "Imp"
	BloodColor "Green"
	Tag "Nether Dark Imp"
	+ISMONSTER
	+DONTHURTSPECIES
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_NETHERDARKIMP)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup
	
		IdleState:
			DRKV AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			DRKV AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
			DRKV IJ 8 Fast A_FaceTarget
			DRKV K 6 Fast A_CustomComboAttack("InfernoBall", 32, 6 * random(1, 8), "imp/melee")
		Goto See
		MissileState:
			DRKV E 1 A_Jump (255, "Attack1", "Attack2")
		Goto See
		Attack1:
			DRKV EF 8 Fast A_FaceTarget
			DRKV G 6 Fast A_CustomMissile ("NetherLightning", 32, 0, 0)
		Goto See
		Attack2:
			DRKV IJ 8 Fast A_FaceTarget
			DRKV K 6 Fast A_CustomMissile ("InfernoBall", 32, 0, 0)
		Goto See
		PainState:
			DRKV H 2 Fast
			DRKV H 2 Fast A_Pain
		Goto See
		DeathState:
			DRKV L 8
			DRKV M 8 A_Scream
			DRKV N 5
			DRKV O 5 A_Fall
			DRKV P -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			DRKV Q 5
			DRKV R 5 A_XScream
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			DRKV S 5
			DRKV T 5 A_Fall
			DRKV UVW 5
			DRKV X -1
		Stop	
		RaiseState:
			DRKV PO 8
			DRKV NML 6
		Goto See
    }
}

actor InfernoBall {
    Radius 8
    Height 6
    Speed 20
    Damage (6 * random(1, 8))
	DamageType "Fire"
	Stamina 32
    PROJECTILE
	+DONTBLAST
    RENDERSTYLE ADD
    ALPHA 0.67
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    Decal DoomImpScorch
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			IBAL AAAABBBB 1 Bright A_SpawnItemEx ("InfernoBallTrail", 0, 0, 0, random(0, -4), random(-2, 2), random(-2, 2), 0, 0, 0)
        Loop
		Death:
			IBAL CDE 4 Bright
        Stop
    }
}

actor InfernoBallTrail {
    Scale 0.2
	+NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			ITRL ABCDEFGHIJKLMN 1 Bright
        stop
    }
}

actor NetherLightning {
    Radius 8
    Height 6
    Speed 24
    Damage (4 * random(1, 8))
	DamageType "Lightning"
	Stamina 256
    PROJECTILE
    +RIPPER
	+DONTBLAST
    RENDERSTYLE ADD
    ALPHA 0.75
    Scale 0.75
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    Decal DoomImpScorch
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			NLIT AA 1 Bright A_SpawnItemEx ("NetherLightningTrail", 0, 0, 0, 0, 0, 0, 0, 0, 0)
			NLIT A 0 Bright A_SpawnItemEx ("NetherLightningSpark", 0, 0, 0, random(0, -4), random(-2, 2), random(-2, 2), 0, 0, 0)
			NLIT AA 1 Bright A_SpawnItemEx ("NetherLightningTrail", 0, 0, 0, 0, 0, 0, 0, 0, 0)
			NLIT A 0 Bright A_SpawnItemEx ("NetherLightningSpark", 0, 0, 0, random(0, -4), random(-2, 2), random(-2, 2), 0, 0, 0)
		loop
		Death:
			NLIT ABCDEFG 1 Bright
		Stop
    }
}

actor NetherLightningTrail {
    RENDERSTYLE ADD
    ALPHA 0.75
    Scale 0.75
	+NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			NLIT A 1 A_FadeOut (0.025)
			NLIT A 0 A_Jump (32, "Spark")
		loop
		Spark:
			NLIT A 0 A_SpawnItemEx ("NetherLightningSpark", 0, 0, 0, random(0, -4), random(-2, 2), random(-2, 2), 0, 0, 0)
		goto Spawn
    }
}

actor NetherLightningSpark {
    Scale 0.3
	+CLIENTSIDEONLY
	+NOINTERACTION
    States {
		Spawn:
			NLIT BCDEFG 1 Bright
        stop
    }
}

Actor ImpAbomination : DnD_BaseHybridMonster {
	Health 0x7FFFFFFF
	GibHealth -25
	Tag "Imp Abomination"
	Species "Imp"
	Radius 20
	Height 56
	Mass 100
	Speed 8
	PainChance 200
	SeeSound "imp/sight"
	PainSound "imp/pain"
	DeathSound "imp/death"
	ActiveSound "imp/active"
	HitObituary "$OB_IMPHIT"
	Obituary "$OB_IMP"
	PainSound "Imp/Pain"
	+ISMONSTER
	States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_IMPABOM)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup

		IdleState:
			TRO5 AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			TRO5 AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			TRO5 EF 8 Fast A_FaceTarget
			TRO5 G 6 Fast A_CustomComboAttack("DoomImpBall",32, 4 * random(1, 8),"imp/melee")
		Goto See
		PainState:
			TRO5 H 2 Fast
			TRO5 H 2 Fast A_Pain
		Goto See
		DeathState:
			TRO5 I 8
			TRO5 J 8 A_Scream
			TRO5 K 6
			TRO5 L 6 A_NoBlocking
			IMP0 M -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)	 
			IMP0 N 5
			IMP0 O 5 A_XScream
			IMP0 P 5
			IMP0 Q 5 A_NoBlocking
			IMP0 RST 5
			IMP0 U -1
		Stop	  
		RaiseState:
			IMP0 M 8
			TRO5 L 8
			TRO5 KJI 6
		Goto See
	}
}

Actor STImp : DnD_BaseHybridMonster {
    Health 0x7FFFFFFF
	GibHealth -25
    Radius 20
    Height 56
    Speed 11
    PainChance 200
    SeeSound "imp/sight"
    PainSound "imp/pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    Obituary "%o was burned by an imp."
    HitObituary "%o was slashed by an imp."
	Tag "Imp"
	Species "Imp"
	Mass 100
	+ISMONSTER
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_STIMP)
		Goto SpawnSetup

		IdleState:
			TRO3 AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			TRO3 AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			TRO3 EF 8 Fast A_FaceTarget
			TRO3 G 6 Fast A_CustomComboAttack("SmallImpBall",32,2 * random(1, 8),"imp/melee")
		Goto See
		PainState:
			TRO3 H 2 Fast
			TRO3 H 2 Fast A_Pain
		Goto See
		DeathState:
			TRO3 I 8
			TRO3 J 8 A_Scream
			TRO3 K 6
			TRO3 L 6 A_Fall
			TRO3 M -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			IMP0 N 5
			IMP0 O 5 A_XScream
			IMP0 P 5
			IMP0 Q 5 A_Fall
			IMP0 RST 5
			IMP0 U -1
		Stop  
		RaiseState:
			TRO3 ML 8
			TRO3 KJI 6
		Goto See
    }
}

Actor SmallImpBall {
    Radius 8
    Height 6
    Speed 18
	FastSpeed 20
    Damage (2 * random(1, 8))
	DamageType "Fire"
	Stamina 32
    Scale .75
    PROJECTILE
	+DONTBLAST
	+RANDOMIZE
    RenderStyle Add
    Alpha 0.67
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    Decal DoomImpScorch
    States {
		Spawn:	
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			BAL1 AB 2 Bright A_SpawnItemEx("ImpBallTrail",0,0,0,0,0,0,0,128,0)	
        Loop
		Death:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX2", 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))
			BAL1 CDE 6 bright
		Stop
    }   
}

Actor VoidImp : DnD_BaseHybridMonster {
    Health 0x7FFFFFFF
	GibHealth -25
    Radius 20
    Height 56
    Speed 7
    PainChance 200
    SeeSound "imp/sight"
    PainSound "imp/pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    Obituary "%o was burned by an imp."
    HitObituary "%o was slashed by an imp."
	Tag "Imp"
	Species "Imp"
	Mass 100
	+ISMONSTER
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_VOIDIMP)
		Goto SpawnSetup
	
		IdleState:
			TRO4 AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			TRO4 AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			TRO4 EF 8 Fast A_FaceTarget
			TNT1 A 0 A_Jump(128,2)
			TRO4 G 6 Fast A_TroopAttack
		Goto See
			TRO4 G 6 Fast A_CustomComboAttack("LargeImpBall",32,3 * random(1,8),"imp/melee")
		Goto See
		PainState:
			TRO4 H 2 Fast
			TRO4 H 2 Fast A_Pain
		Goto See
		DeathState:
			TRO4 I 8
			TRO4 J 8 A_Scream
			TRO4 K 6
			TRO4 L 6 A_NoBlocking
			TRO4 M -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			IMP0 N 5
			IMP0 O 5 A_XScream
			IMP0 P 5
			IMP0 Q 5 A_NoBlocking
			IMP0 RST 5
			IMP0 U -1
		Stop 
		RaiseState:
			TRO4 ML 8
			TRO4 KJI 6
		Goto See
    }
} 

Actor LargeImpBall {
    Radius 6
    Scale 1.75
    Height 8
    Speed 10
    FastSpeed 20
    Damage (5 * random(1, 8))
	DamageType "Fire"
	Stamina 32
    PROJECTILE
	+DONTBLAST
    +RANDOMIZE
    RenderStyle Add
    Alpha 1
    Decal DoomImpScorch
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    States {
		Spawn:	
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			BAL1 AB 2 Bright A_SpawnItemEx("ImpBallTrail",0,0,0,0,0,0,0,128,0)	
        Loop
		Death:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX2", 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))
			BAL1 CDE 6 bright
		Stop
    }
}

actor SoulHarvester : DnD_BaseHybridMonster {
    Health 0x7FFFFFFF
	GibHealth -25
    Radius 20
    Height 56
    Speed 8
    PainChance 160
    SeeSound "harvester/sight"
    PainSound "imp/pain"
    DeathSound "harvester/death"
    ActiveSound "imp/active"
    MeleeSound "imp/melee"
    Obituary "%o couldn't evade the soul harvester's attack."
    MissileType SoulHarvesterBall
    MeleeDamage 3
	BloodColor "66 66 66"
	Species "Imp"
	Tag "Soul Harvester"
	+ISMONSTER
	+DONTHURTSPECIES
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_SOULHARVESTER)
		Goto SpawnSetup
	
		IdleState:
			SLHV AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			SLHV AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			SLHV EFG 4 Fast A_FaceTarget
			SLHV HIJK 5 Fast Bright A_FaceTarget
			SLHV L 8 Fast Bright A_MissileAttack
			SLHV M 10 Fast
		Goto See
		PainState:
			SLHV N 3 Fast
			SLHV N 3 Fast A_Pain
		Goto See
		DeathState:
			SLHV O 7 A_Scream	
			SLHV PQR 7 
			SLHV S 6 A_SpawnItemEx("SoulHarvesterGhost", 0, 0, 32, 0, 0, 0, 0, SXF_CLIENTSIDE)
			SLHV T 5 A_Fall
			SLHV UV 5
			SLHV W -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9_G",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10_G",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11_G",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11_G",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			SLHV X 6 A_Xscream
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			SLHV Y 6 A_SpawnItemEx("SoulHarvesterGhost", 0, 0, 32, 0, 0, 0, 0, SXF_CLIENTSIDE)
			SLHV Z 6
			SLHV [ 6 A_Fall
			SLHV ] 6
			SLHW A -1
		Stop	
		RaiseState:
			SLHV WVUTSRQPO 5
		Goto See
    }
}

actor SoulHarvesterBall {
    Radius 8
    Height 6
    Scale 0.4
    Speed 9
    Damage (2 * random(1, 8))
	DamageType "Magical"
	Stamina 8
    +SEEKERMISSILE
	+DONTBLAST
    PROJECTILE
    Renderstyle ADD
    SeeSound "harvester/scream"
    DeathSound "imp/shotx"
	Decal DoomImpScorch
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			SHBA A  0 Bright A_SpawnItemEx("SoulBallTrail", 0, 0, 0, 0, 0, 0, 180, 128)
			SHBA AB 2 Bright A_SeekerMissile (10,20)
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("YellowParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			SHBA CDEFGHIJKL 4 Bright
		Stop
    }
}

actor SoulHarvesterGhost {
    RENDERSTYLE ADD
    ALPHA 0.7
    +NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			SHGH A 0 NoDelay A_PlaySound("Harvester/Ghost")
			SHGH ABCDEFG 4 Bright
        Stop
    }
}

actor SoulBallTrail {
    RENDERSTYLE ADD
    ALPHA 0.5
	+CLIENTSIDEONLY
	+NOINTERACTION
    States {
		Spawn:
			SBTR H 6 
			SBTR ABCDEFG 4 Bright
		Stop
    }
}

actor PyroImp : DnD_BaseHybridMonster {
	//$Category monsters
    Health 0x7FFFFFFF
	GibHealth -25
    Radius 20
    Height 56
    Speed 9
    PainChance 200
	Mass 1000
	+DONTHURTSPECIES
    SeeSound "imp/sight"
    PainSound "imp/pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    MeleeSound "imp/melee"
    Obituary "%o was burned by a pyro imp."
    HitObituary "%o was cut open by a pyro imp."
	Species "Imp"
	Tag "Pyro Imp"
	+ISMONSTER
    States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_PYROIMP)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_UNCOMMON)
		Goto SpawnSetup

		IdleState:
			PRIM AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			PRIM AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
			PRIM EF 8 Fast A_FaceTarget
			PRIM G 6 Fast A_CustomComboAttack("PyroImpBall", 32, 3 * random(1, 8), "imp/melee")
		MissileState:
			PRIM E 0 A_JumpIfCloser(256, "Missile1")
			PRIM EF 8 Fast A_FaceTarget
			PRIM G 6 Fast A_CustomMissile ("PyroImpBallNoGravity", 32, 12, 0, 0, 0)
		Goto See
		Missile1:
			PRIM EF 6 Fast A_FaceTarget
			PRIM G 5 Fast A_CustomMissile ("PyroImpBall", 32, 12, 0, 2, 10)
			PRIM EF 6 Fast A_FaceTarget
			PRIM G 5 Fast A_CustomMissile ("PyroImpBall", 32, 12, 0, 2, 10)
			PRIM EF 6 Fast A_FaceTarget
			PRIM G 5 Fast A_CustomMissile ("PyroImpBall", 32, 12, 0, 2, 10)
		Goto See
		PainState:
			PRIM H 4 Fast A_Pain
		Goto See
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
		DeathState:
			PRIM N 5 A_SpawnItemEx ("PyroImpExplosion", 0, 0, 30)
			TNT1 AAAA 0 A_CustomMissile ("PyroImpBall", 32, 0, random(0, 360), CMF_AIMDIRECTION, random(-4, -8))
			PRIM O 5 A_XScream
			PRIM P 5
			PRIM Q 5 A_Fall
			PRIM RST 5
			PRIM U -1
			Stop	
		RaiseState:
			PRIM UTSRQPON 4
		Goto See
    }
}

Actor PyroImpExp1 : BaseExplosionDamage {
	DamageType "Fire"
	Stamina 4
	Obituary "%o was burned by a pyro imp."
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 1 A_Explode(5, 56, 0)
		Stop
	}
}

actor PyroImpBall : DoomImpBall2 {
	renderstyle Add
	DamageType "Fire"
	Stamina 4
	Obituary "%o was burned by a pyro imp."
	+RANDOMIZE
	+LOWGRAVITY
	-NOGRAVITY
	states {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			BAL1 A 1 bright
			BAL1 A 0 bright A_SpawnItemEx ("PyroImpBallFire", random(1,-1), random(1,-1), random(1,-1), 0, 0, 0 , random(0,360), 16, 0)
			BAL1 B 1 bright
			BAL1 B 0 bright A_SpawnItemEx ("PyroImpBallFire", random(1,-1), random(1,-1), random(1,-1), 0, 0, 0 , random(0,360), 16, 0)
		loop
		Death:
			BAL1 C 0 bright A_CustomMissile ("PyroImpBallFire2", 0, 0, 0, 0)
			BAL1 C 4 bright A_SpawnItem("PyroImpExp1")
			BAL1 CCCCCCCCC 0 bright A_SpawnItemEx ("PyroImpBallFire", random(1,-1), random(1,-1), random(1,-1), 6, 0, random(1,-1) , random(0,360), 0, 0)
			BAL1 DE 4 bright
		stop
	}
}

actor PyroImpBallNoGravity : PyroImpBall {
	+NOGRAVITY
	-LOWGRAVITY
	states {
		Death:
			BAL1 C 4 bright A_SpawnItem("PyroImpExp1")
			BAL1 CCCCCCCCC 0 bright A_SpawnItemEx ("PyroImpBallFire", random(1,-1), random(1,-1), random(1,-1), 6, 0, random(1,-1) , random(0,360), 0, 0)
			BAL1 DE 4 bright
		stop
	}
}

actor PyroImpFire {
	radius 6
	height 8
	scale 0.7
	renderstyle Add
	+NOBLOCKMAP
	+NOGRAVITY
	+MISSILE
	+NOTELEPORT
	+DONTSPLASH
	+RANDOMIZE
	+CLIENTSIDEONLY
	states {
		Spawn:
			CFCF ABCDEFGHIJKLMNOP 2 bright 
		stop
	}
}

actor PyroImpBallFire : PyroImpFire {
	scale 0.4
	states {
		Spawn:
			TNT1 A 2
			CFCF ABCDEFGHIJKLMNOP 1 bright 
		stop
	}
}

Actor PyroImpExp2 : BaseExplosionDamage {
	DamageType "Fire"
	Stamina 4
	Obituary "%o was burned by a pyro imp."
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 1 A_Explode(2, 56, 0)
		Stop
	}
}

actor PyroImpBallFire2 {
	DamageType "Fire"
	Stamina 4
	scale 2.0
	Radius 8
	Height 40
	renderstyle Add
	alpha 0.90
	PROJECTILE
	-NOGRAVITY
	+LOWGRAVITY
	+NOEXPLODEFLOOR
	+NODAMAGETHRUST
	+THRUGHOST
	DONTHURTSHOOTER
	states {
		Spawn:
			CFCF PON 2 bright 
			CFCF A 1 bright A_PlaySound("weapons/onfire")
			CFCF A 1 bright A_SpawnItem("PyroImpExp2")
			CFCF BCDEFGHIJKLM 2 bright A_SpawnItem("PyroImpExp2")
			CFCF A 1 bright A_PlaySound ("weapons/onfire")
			CFCF A 1 bright A_SpawnItem("PyroImpExp2")
			CFCF BCDEFGHIJKLM 2 bright A_SpawnItem("PyroImpExp2")
			CFCF A 1 bright A_PlaySound ("weapons/onfire")
			CFCF A 1 bright A_SpawnItem("PyroImpExp2")
			CFCF BCDEFGHIJKLM 2 bright A_SpawnItem("PyroImpExp2")
			CFCF NOP 2 bright 
		stop
	}
}

Actor PyroImpExp3 : BaseExplosionDamage {
	DamageType "Fire"
	Stamina 4
	Obituary "%o was burned by a pyro imp."
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 1 A_Explode(random(4, 16), 64, 0)
		Stop
	}
}

actor PyroImpExplosion {
	radius 6
	height 8
	damage 0
	DamageType "Fire"
	Stamina 4
	scale 0.8
	renderstyle Add
	alpha 0.7
	+NOBLOCKMAP
	+NOGRAVITY
	states {
		Spawn:
			MISL B 0 bright A_PlaySound ("weapons/rocklx")
			MISL B 4 bright A_SpawnItem("PyroImpExp3")
			MISL CDE 6 bright
		stop
	}
}

actor Devil : DnD_BaseHybridMonster {
	obituary "%o was fried by a Devil."
	hitobituary "%o was flayed by a Devil."
	Health 0x7FFFFFFF
	GibHealth -25
	radius 20
	height 56
	mass 120
	speed 10
	painchance 160
	+MISSILEMORE
	+MISSILEEVENMORE
	+DONTHURTSPECIES
	seesound "monster/dvlsit"
	painsound "monster/dvlpai"
	deathsound "monster/dvldth"
	activesound "monster/dvlact"
	Tag "Devil"
	Species "Imp"
	+ISMONSTER
	states {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_DEVIL)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_UNCOMMON)
		Goto SpawnSetup
	
		IdleState:
			TRO2 AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			TRO2 AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			TRO2 EF 6 Fast A_FaceTarget
			TRO2 G 4 Fast A_CustomComboAttack("DoomImpBall", 32, 4 * random(1, 8), "imp/melee")
			TRO2 B 2 Fast
			TRO2 VW 6 Fast A_FaceTarget
			TRO2 X 4 Fast A_CustomComboAttack("DoomImpBall", 32, 4 * random(1, 8), "imp/melee")
			TRO2 E 0 A_Jump(160, "GiveUp")
			TRO2 D 2 Fast
			TRO2 EF 6 Fast A_FaceTarget
			TRO2 G 4 Fast A_CustomComboAttack("DoomImpBall", 32, 4 * random(1, 8), "imp/melee")
			TRO2 B 2 Fast
			TRO2 VW 6 Fast A_FaceTarget
			TRO2 X 4 Fast A_CustomComboAttack("DoomImpBall", 32, 4 * random(1, 8), "imp/melee")
		GiveUp:
			TRO2 A 0
		goto See
		PainState:
			TRO2 H 3 Fast
			TRO2 H 3 Fast A_Pain
		goto See
		DeathState:
			TRO2 I 8
			TRO2 J 8 A_Scream
			TRO2 K 6
			TRO2 L 6 A_NoBlocking
			TRO2 M -1
		stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			TRO2 N 5
			TRO2 O 5 A_XScream
			TRO2 P 5
			TRO2 Q 5 A_NoBlocking
			TRO2 RST 5
			TRO2 U -1
		stop
		RaiseState:
			TRO2 ML 8
			TRO2 KJI 6
		goto See
	}
}

actor Devil2 : DnD_BaseHybridMonster {
	Health 0x7FFFFFFF
	GibHealth -25
	Painchance 128
	obituary "%o was fried by a Devil."
	hitobituary "%o was flayed by a Devil."
	radius 20
	height 56
	mass 120
	speed 10
	+MISSILEMORE
	+MISSILEEVENMORE
	+DONTHURTSPECIES
	seesound "monster/dvlsit"
	painsound "monster/dvlpai"
	deathsound "monster/dvldth"
	activesound "monster/dvlact"
	Tag "Devil"
	Species "Imp"
	+ISMONSTER
	states {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_DEVIL2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup
	
		IdleState:
			TRO6 AB 8 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			TRO6 AABBCCDD 2 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			TNT1 A 0 A_Jump(128, "Lob")
			TRO6 EF 5 Fast A_FaceTarget
			TRO6 G 3 Fast A_CustomComboAttack("Devil2Ball", 32, 4 * random(1, 8), "imp/melee")
			TRO6 B 2 Fast
			TRO6 HI 5 Fast A_FaceTarget
			TRO6 J 3 Fast A_CustomComboAttack("Devil2Ball", 32, 4 * random(1, 8), "imp/melee")
			TRO6 E 0 A_Jump(160, "GiveUp")
			TRO6 B 2 Fast
			TRO6 EF 5 Fast A_FaceTarget
			TRO6 G 3 Fast A_CustomComboAttack("Devil2Ball", 32, 4 * random(1, 8), "imp/melee")
			TRO6 B 2 Fast
			TRO6 HI 5 Fast A_FaceTarget
			TRO6 J 3 Fast A_CustomComboAttack("Devil2Ball", 32, 4 * random(1, 8), "imp/melee")
		GiveUp:
			TRO6 A 0
		goto See
		Lob:
			TRO6 EF 5 Fast A_FaceTarget
			TRO6 G 3 Fast A_CustomComboAttack("Devil2Ball2", 32, 4 * random(1, 8), "imp/melee")
			TRO6 B 2 Fast
			TRO6 HI 5 Fast A_FaceTarget
			TRO6 J 3 Fast A_CustomComboAttack("Devil2Ball2", 32, 4 * random(1, 8), "imp/melee")
		Goto See
		PainState:
			TRO6 K 3 Fast
			TRO6 K 3 Fast A_Pain
		goto See
		DeathState:
			TRO6 L 6
			TRO6 M 6 A_Scream
			TRO6 N 4
			TRO6 O 4 A_NoBlocking
			TRO6 P -1
		stop
		RaiseState:
			TRO6 ON 5
			TRO6 ML 3
		goto See
		
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			TRO6 Q 5
			TRO6 R 5 A_XScream
			TRO6 S 5
			TRO6 T 5 A_NoBlocking
			TRO6 UVW 5
			TRO6 X -1
		stop
	}
}

actor Devil2Ball {
    Radius 8
    Height 6
    Speed 24
    Damage (3 * random(4, 8))
	DamageType "Fire"
	Stamina 4
    PROJECTILE
	+DONTBLAST
    RENDERSTYLE ADD
    ALPHA 0.75
    SeeSound "imp/attack"
    DeathSound "imp/shotx"
    Decal DoomImpScorch
    States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			DVB9 AABB 2 Bright A_SpawnItem("Devil2BallTrail")
        Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("OrangeParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAA 0 A_SpawnItemEx("ExplosionFX2", 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))
			DVB9 HIJKLM 3 Bright
        Stop
    }
}

Actor Devil2Ball2 : Devil2Ball {
	WeaveIndexZ 12
	var int user_count;
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 0 A_SetUserVar("user_count", 0)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_count == 2, "NormalLoop")
			DVB9 A 2 Bright A_SpawnItem("Devil2BallTrail")
			TNT1 A 0 A_Weave(0, 1, 0, 8)
			DVB9 A 2 Bright A_SpawnItem("Devil2BallTrail")
			TNT1 A 0 A_Weave(0, 1, 0, 8)
			DVB9 B 2 Bright A_SpawnItem("Devil2BallTrail")
			TNT1 A 0 A_Weave(0, 1, 0, 8)
			DVB9 B 2 Bright A_SpawnItem("Devil2BallTrail")
			TNT1 A 0 A_Weave(0, 1, 0, 8)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
        Loop
		NormalLoop:
			DVB9 AABB 2 Bright A_SpawnItem("Devil2BallTrail")
        Loop
	}
}

Actor Devil2BallTrail {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.75
	States {
		Spawn:
			TNT1 A 1
			DVB9 CDEFG 2 A_FadeOut(0.1)
		Stop
	}
}

actor Vulgar : DnD_BaseHybridMonster {
	obituary "%o was poisoned by a vulgar."
	hitobituary "A Vulgar had %o for lunch."
	Health 0x7FFFFFFF
	GibHealth -25
	radius 20
	height 56
	mass 120
	speed 8
	painchance 180
	+DONTHURTSPECIES
	seesound "monster/vulsit"
	painsound "monster/vulpai"
	deathsound "monster/vuldth"
	activesound "monster/vulact"
	Tag "Vulgar"
	Species "Imp"
	+ISMONSTER
	states {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_VULGAR)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup

		IdleState:
			VULG AB 10 A_GiveInventory("DnD_SightChecker", 1)
		loop
		SeeState:
			VULG AABBCCDD 3 Fast A_Chase
		Goto See
		MeleeState:
			VULG E 8 Fast A_FaceTarget
			VULG F 1 Fast A_PlaySound("monster/vulswg")
			VULG F 7 Fast A_FaceTarget
			VULG G 6 Fast A_CustomMeleeAttack(4 * random(1, 8), "monster/vulhit")
		goto See
		MissileState:
			VULG EF 8 Fast A_FaceTarget
			VULG G 6 Fast A_CustomMissile("VulgarShot",37,0,0,0,0)
		goto See
		PainState:
			VULG H 2 Fast
			VULG H 2 Fast A_Pain
		goto See
		DeathState:
			VULG I 8
			VULG J 8 A_Scream
			VULG KL 6
			VULG M 6 A_NoBlocking
			VULG N -1
		stop
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			VULG O 5
			VULG P 5 A_XScream
			VULG Q 5
			VULG R 5 A_NoBlocking
			VULG STU 5
			VULG V -1
		stop
		RaiseState:
			VULG ML 8
			VULG KJI 6
		goto See
	}
}

ACTOR VulgarShot {
	Radius 8
	Height 16
	Speed 10
	Damage (4 * random(1, 8))
	DamageType "Poison"
	Stamina 128
	RENDERSTYLE ADD
	ALPHA 0.67
	PROJECTILE
	+THRUGHOST
	+DONTBLAST
	Seesound "monster/vulsh1"
	DeathSound "monster/vulsh2"
	Decal "DoomImpScorch"
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			FVUL AAABBB 1 Bright A_SpawnItemEx("BarbTrail",0,0,0,0,0,0,0,128,0)
		loop
		Death:
			TNT1 A 0 A_SpawnItemEx("GreenParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			FVUL CDEF 4 Bright
		stop
	}
}

Actor UndeadMage : DnD_ArchVileBase {
	Radius 20
	Height 56
	Speed 8
	Scale 0.95
	PainChance 184
    SeeSound "UndeadInitiate/See"
    ActiveSound "UndeadInitiate/Act"
    painsound "UndeadInitiate/Pain"
    deathsound "UndeadInitiate/Death"
	Obituary "%o succumbed to an Undead Mage's magic."
	Health 0x7FFFFFFF
	Species "Imp"
	+DONTHURTSPECIES
	Tag "Undead Mage"
	+NODAMAGETHRUST
	+NODROPOFF
	+ISMONSTER
	States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_UNDEADMAGE)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE2)
		Goto SpawnSetup
	
		IdleState:
			CMYS AB 10 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			TNT1 A 0 A_JumpIfHealthLower(30, "NoRaiseState")
			CMYS AABBCCDD 3 Fast A_VileChase
		Goto See
		NoRaiseState:
			CMYS AABBCCDD 3 Fast A_FastChase
		Goto See
		MissileState:
			CMYS E 8 Fast A_FaceTarget
			CMYS F 0 Bright A_CustomMissile ("CultMysticShot",46,-5,0,1,0)
			CMYS F 0 Bright A_CustomMissile ("CultMysticShot",46,5,0,1,0)
			CMYS F 8 Fast Bright A_PlaySound("monster/culatk")
		Goto See
		PainState:
			CMYS G 3 Fast
			CMYS G 3 Fast A_Pain
		Goto See
		HealState:
			CMYS E 0 A_PlaySound("monster/cultre")
			CMYS E 0 A_ChangeFlag("NoPain",1)
			CMYS E 20 Fast DamageThing(10)
			CMYS E 0 A_ChangeFlag("NoPain",0)
		Goto See
		DeathState:
			CMYS H 6
			CMYS I 6 A_PlayerScream
			CMYS JK 6
			CMYS L 6 A_NoBlocking
			CMYS M 6
			CMYS N -1
		Stop 
		XDeathState:
			TNT1 A 0 A_SpawnDebris("NashGore_Gib9",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib10",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnDebris("NashGore_Gib11",0)
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			CMYS O 5 A_XScream
			CMYS P 5
			CMYS R 5 A_NoBlocking
			CMYS STUVW 5
			CMYS X -1
		Stop
		RaiseState:
			CMYS M 0 A_ChangeFlag("NoPain", 0)
			CMYS MLKJIH 5
		Goto See
	}
}

Actor CultMysticShotTrail {
	+CLIENTSIDEONLY
	+NOINTERACTION
	Renderstyle Add
	Alpha 0.825
	States {
		Spawn:
			TNT1 A 2
			TNT1 A 0 A_Jump(128, "Other")
			CMYP A 1 A_FadeOut(0.04125)
			TNT1 A 0 A_SetScale(scalex - 0.04125, scaley - 0.04125)
		Loop
		Other:
			CMYP A 1 A_FadeOut(0.04125)
			TNT1 A 0 A_SetScale(scalex - 0.04125, scaley - 0.04125)
		Loop
	}
}

ACTOR CultMysticShot {
	Speed 20
	Radius 4
	Height 4
	Damage (Random(4, 8))
	DamageType "Magical"
	Stamina 8
	PROJECTILE
	+NoDamageThrust
	+ThruGhost
	+WindThrust
	+DONTBLAST
	Renderstyle Add
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			CMYP AB 2 Bright A_SpawnItem("CultMysticShotTrail")
		loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			CMYP CDEF 3 Bright
		stop
	}
}

Actor ReaverRobot : DnD_BaseHybridMonster {
	Health 0x7FFFFFFF
	Radius 20
	Height 56
	Mass 100
	Speed 8
	PainChance 128
	SeeSound "Reaver/See"
	PainSound "Reaver/Pain"
	DeathSound "Reaver/Death"
	ActiveSound "Reaver/Active"
	Obituary "%o was shot by a Reaver."
	HitObituary "%o was gutted by a Reaver."
	Species "Imp"
	Tag "Reaver"
	+ISMONSTER
	+DONTHURTSPECIES
	+NOBLOOD
	States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_REAVER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_VERYRARE)
		Goto SpawnSetup
	
		IdleState:
			5TRF A 7 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			5TRF BBCC 3 Fast A_Chase
			TNT1 A 0 A_PlaySound("Reaver/Walk", CHAN_BODY)
			5TRF DDEE 3 Fast A_Chase
			TNT1 A 0 A_PlaySound("Reaver/Walk", CHAN_BODY)
			5TRF DDCC 3 Fast A_Chase
			TNT1 A 0 A_PlaySound("Reaver/Walk", CHAN_BODY)
		Loop
		MeleeState:
			TNT1 A 0 A_PlaySound("reaver/melee", 5)
			5TRF H 5 Fast A_FaceTarget
			5TRF I 7 Fast A_CustomMeleeAttack(random(4, 8) * 3, "reaver/blade")
			5TRF H 5 Fast
		Goto See
		MissileState:
			5TRF G 5 Fast Bright A_FaceTarget
			TNT1 A 0 A_PlaySound("reaver/attack", CHAN_WEAPON)
			TNT1 AAAA 0 A_CustomMissile("ReaverShot", 33, -3, frandom(-10, 10))
			5TRF F 8 Fast A_FaceTarget
			5TRF G 6 Fast Bright
		Goto See
		PainState:
			5TRF A 2 Fast
			5TRF A 2 Fast A_Pain
		Goto See
		DeathState:
		XDeathState:
			5TRF J 6
			5TRF K 6 A_Scream
			5TRF L 5
			TNT1 A 0 A_SpawnItemEx("ReaverExplosion", frandom(-16, 16), frandom(-16, 16), frandom(20, 56), 0, 0, 0, SXF_NOCHECKPOSITION)
			5TRF M 5 A_NoBlocking
			5TRF NOP 5 A_SpawnItemEx("ReaverExplosion", frandom(-16, 16), frandom(-16, 16), frandom(20, 56), 0, 0, 0, SXF_NOCHECKPOSITION)
			5TRF Q 6
			5TRF R -1
		Stop
		RaiseState:
			5TRF Q 6
			5TRF PONML 5
			5TRF KJ 6
		Goto See
	}
}

Actor ReaverShot {
	Speed 32
	Height 6
	Radius 3
	Projectile
	Damage (random(5, 7))
	DamageType "Physical"
	Stamina 1
	Scale 0.5
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnState:
			MPUF A 1 Bright A_SpawnItemEx("ReaverShotTrail")
		Loop
		Death:
			MPUF A 4 Bright
			MPUF BCD 4
		Stop
	}
}

Actor ReaverShotTrail {
	+CLIENTSIDEONLY
	+NOINTERACTION
	Scale 0.5
	Renderstyle Translucent
	States {
		Spawn:
			TNT1 A 1
			MPUF A 1 A_FadeOut(0.0825)
		Wait
	}
}

Actor ReaverExplosion : BaseExplosionDamage {
	Height 4
	Radius 2
	+THRUACTORS
	+NOTONAUTOMAP
	+FORCEXYBILLBOARD
	SeeSound "Reaver/Explode"
	Scale 0.75
	Speed 0
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 0 A_Explode(5, 72, 0)
			11PF ABCDE 5 Bright
		Stop
	}
}

ACTOR Shadow : DnD_BaseRangedMonster {
	//$Category Monsters
	Health 0x7FFFFFFF
	GibHealth -25
	Radius 20
	Height 56
	Mass 100
	RenderStyle "Translucent"
	Alpha 0.7
	Speed 8
	PainChance 200
	PainSound "Shadow/pain"
	DeathSound "Shadow/death"
	ActiveSound "Shadow/active"
	Obituary "%o was assassinated by a shadow."
	MissileType ShadowBallX
	Species "Imp"
	Tag "Shadow"
	+ISMONSTER
	+DONTHURTSPECIES
	+GHOST
	States {
		SetInfo:
			TNT1 A 0 A_SetArg(4, DND_SHADOW)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE1)
		Goto SpawnSetup

		IdleState:
			TROX A 5 A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			TROX AAA 1 Fast A_Chase
			TROX A 0 A_CustomMissile("ShadowGhostA", 0, 0, 0)
			TROX BBB 1 Fast A_Chase
			TROX B 0 A_CustomMissile("ShadowGhostB", 0, 0, 0)
			TROX CCC 1 Fast A_Chase
			TROX C 0 A_CustomMissile("ShadowGhostC", 0, 0, 0)
			TROX DDD 1 Fast A_Chase
			TROX D 0 A_CustomMissile("ShadowGhostD", 0, 0, 0)
			TROX AAA 1 Fast A_Chase
			TROX A 0 A_CustomMissile("ShadowGhostA", 0, 0, 0)
			TROX BBB 1 Fast A_Chase
			TROX B 0 A_CustomMissile("ShadowGhostB", 0, 0, 0)
			TROX CCC 1 Fast A_Chase
			TROX C 0 A_CustomMissile("ShadowGhostC", 0, 0, 0)
			TROX DDD 1 Fast A_Chase
			TROX D 0 A_CustomMissile("ShadowGhostD", 0, 0, 0)
		Goto See
		MissileState:
			TROX E 30 Fast A_FaceTarget
			TROX F 5  Fast
			TROX G 5 Fast BRIGHT A_MissileAttack
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Monster Attack", 0)
			TROX F 5 Fast
			TROX E 20 Fast
			TROX E 1 A_SpidRefire
		Goto MissileState + 1      
		PainState:
			TROX H 4 Fast
			TROX H 4 Fast A_Pain
		Goto See
		DeathState:
			TROX I 6 A_Scream
			TROX J 1
			TROX J 4
			TROX K 5 A_CustomMissile("Shadowtorso", 0, 0, 0)
			TROX L 5 A_Fall
			TROX MNO 6 
			TROX P -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			TROX W 5
			TROX X 4 A_XScream
			TROX Y 4 
			TROX Z 4 A_Fall
			TROX ] 4
			TROX [ 4
			TROX "\" -1
		Stop
		RaiseState:
			TROX M 8
			TROX KLJI 8
		Goto See
	}
}

ACTOR Shadowtorso
{
	Radius 12
	Height 15
	Speed 1
	Mass 5000
	RenderStyle "Translucent"
	alpha 0.7
	+Doombounce
	+MOVEWITHSECTOR
	+CLIENTSIDEONLY
      States
	{
	Spawn:
         TROX QRS 5
         TROX T 5 A_Fall
         TROX U 5
         TROX V -1
         Stop
	}
} 

//===========================================================================
//
// Shadow fireball
//
//===========================================================================
ACTOR ShadowBallX {
	Radius 6
	Height 8
	Speed 20
	Damage (4 * random(1, 8))
	DamageType "Magical"
	Stamina 8
	Projectile
	+RANDOMIZE
	RenderStyle "ADD"
	Alpha 0.75
	SeeSound "Shadow/attack"
	DeathSound "imp/shotx"
	MissileType ShadowTrailX
	Missileheight 0
	Decal DoomImpScorch
	States {
		Spawn: 
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			SBAL ABC 4 BRIGHT A_MissileAttack
		Loop
		Death:
			SBAL C 5 Bright
			SBAL DEFGH 4 BRIGHT
		Stop
	}
}

actor ShadowTrailX {
    Radius 1
    Height 1
    Speed 0
    PROJECTILE
    RENDERSTYLE ADD
    ALPHA 0.6
    +NOCLIP
	+CLIENTSIDEONLY
	States {
		Spawn:
			SHTR ABCDEF 4 Bright
		Stop       
    }
}

//============================================================================
//
//Shadow "Ghosts"
//
//============================================================================
ACTOR ShadowGhostA {
	Radius 4
	Height 8
	Speed 0
	Damage 0
	Mass 75
	RenderStyle "Translucent"
	Alpha 0.3
	PROJECTILE
	+CLIENTSIDEONLY
	States {
		Spawn:
			TROX A 10
		Stop
	}
}

ACTOR ShadowGhostB : ShadowGhostA {
	States {
		Spawn:
			TROX B 10
		Stop
	}
}

ACTOR ShadowGhostC : ShadowGhostA {
	States {
		Spawn:
			TROX C 10
		Stop
	}
}

ACTOR ShadowGhostD : ShadowGhostA {
	States {
		Spawn:
			TROX D 10
		Stop
	}
}

Actor Roach : DnD_BaseHybridMonster {
	Health 0x7FFFFFFF
	GibHealth -25
	Radius 20
	Height 56
	Speed 12
	PainChance 64
	Mass 200
	BloodColor "DarkGreen"
	+DontHurtSpecies
	SeeSound "Roach/Sight"
	PainSound "Roach/Pain"
	DeathSound "Roach/Death"
	ActiveSound "Roach/Active"
	Obituary "%o was poisoned by a Roach."
	Scale 1.1
	Tag "Roach"
	Species "Imp"
	+ISMONSTER
	States {
		SetInfo:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Monster Health Regen Script", 0, DND_MHR_PERIODIC, ACS_NamedExecuteWithResult("DnD Monster Heal Potency", 2), 8)
			TNT1 A 0 A_SetArg(4, DND_ROACH)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Init Monster Data", DND_MWEIGHT_RARE1)
		Goto SpawnSetup

		IdleState:
			TNT1 A 0 A_TakeInventory("MonsterRegenPause", 1)
		IdleLoop:
			ROAC AA 3 Fast A_GiveInventory("DnD_SightChecker", 1)
		Loop
		SeeState:
			TNT1 A 0 A_TakeInventory("MonsterRegenPause", 1)
			ROAC BBCCDDEE 2 Fast A_Chase
		Goto See
		MeleeState:
		MissileState:
			TNT1 A 0 A_GiveInventory("MonsterRegenPause", 1)
			ROAC AA 3 Fast A_FaceTarget
			ROAC AA 3 Fast A_FaceTarget
			ROAC FF 3 Fast A_FaceTarget
			ROAC G 0 A_CustomMissile("RoachBall", 32, -4, 1)
			ROAC G 6 Fast A_CustomMissile("RoachBall", 32, 4, -1)
		Goto See
		PainState:
			TNT1 A 0 A_TakeInventory("MonsterRegenPause", 1)
			ROAC H 3 Fast
			ROAC H 3 Fast A_Pain
			TNT1 A 0 A_GiveInventory("MonsterRegenPause", 1)
		Goto See
		DeathState:
			ROAC I 8 A_ScreamAndUnblock
			ROAC JKL 6
			ROAC M -1
		Stop
		XDeathState:
			TNT1 A 0 A_SpawnItemEx("GenericGibber_Low_Delayed", 0, 0, 0, 0, 0, 0, 0, SXF_USEBLOODCOLOR)
			ROAC I 4 A_XScream
			ROAC NOP 6
			ROAC Q 6 A_NoBlocking
			ROAC RS 6
			ROAC T -1
		Stop
		RaiseState:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Monster Health Regen Script", 0, DND_MHR_PERIODIC, ACS_NamedExecuteWithResult("DnD Monster Heal Potency", 2), 8)
			ROAC MLKJI 5
		Goto See
	}
}

Actor RoachExp : BaseExplosionDamage {
	Obituary "%o was poisoned by a Roach."
	Damage (Random(5, 8))
	DamageType "Poison"
	Stamina 128
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
			TNT1 A 0 A_Explode(5, 32, 0)
		Stop
	}
}

Actor RoachBall : DoomImpBall {
	Damage (Random(5, 8))
	DamageType "Poison"
	Stamina 128
	Height 5
	Radius 3
	Scale 0.6
	Speed 24
	Decal PlasmaScorchLower
	SeeSound "Roach/Fire"
	DeathSound "Roach/Hit"
	+DONTBLAST
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			RCHB AAAABBBB 1 Bright A_SpawnItemEx("RoachBallTrail", -(MomX/1.2), -(MomY/1.2), (MomZ/1.2*-1), (MomX/1.2), (MomY/1.2), (MomZ/1.2), -Angle, 138)
		Loop
		Death:
			TNT1 A 0 A_SpawnItem("RoachExp")
			RCHB CDEFG 3 Bright
		Stop
	}
}

Actor RoachBallTrail {
	RenderStyle Add
	Alpha 0.5
	Scale 0.6
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			RCHB AABB 2 Bright A_FadeOut(0.05)
		Loop
	}
}