Actor ImpureDefiler : ImpureElemental
{
Health 2000
DropItem "BossLifeEssence", 200, 30
DropItem "HEMBossArmorBonusMax30", 200
DropItem "BossLifeEssence", 200, 30
DropItem "HEMBossArmorBonusMax30", 200
DropItem "ModdedSoulSphere", 64
SeeSound "ImpRed/sight"
PainSound "ImpRed/pain"
ActiveSound "ImpRed/active"
DeathSound "ImpRed/death"
Obituary "%o was reduced to ashes by an Impure Defiler."
HitObituary "%o was mangled by an Impure Defiler." 
Tag "\c[g6]Impure Defiler\c-"
var int user_loopm;
States
	{
	Spawn:
		IMRE A 10 Bright A_Look
		Loop
	Idle:
		TNT1 A 0 Bright A_SetSolid
		IMRE A 10 Bright A_Look
		TNT1 A 0 Bright HealThing(2)
		TNT1 A 0 Bright A_SetUserVar("user_currenthp",ACS_NamedExecuteWithResult("Hem_GetCurrentHealth"))
		Loop
	See:
		TNT1 A 0 Bright A_SetSolid
		IMRE AAAAAAA 1 Bright A_Chase
		IMRE AAAAAAA 1 Bright A_Chase
		IMRE AAAAAAA 1 Bright A_Chase
		IMRE AAAAAAA 1 Bright A_Chase
		IMRE AAAAAAA 1 Bright A_Chase
		TNT1 A 0 Bright HealThing(random(1,2))
		TNT1 A 0 Bright A_SetUserVar("user_currenthp",ACS_NamedExecuteWithResult("Hem_GetCurrentHealth"))
		Loop
	Melee:
		TNT1 A 0 Bright A_SetSolid
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_Stop
		IMRE EFG 4 Bright A_FaceTarget
		TNT1 A 0 Bright A_MeleeAttack
		IMRE FE 4 Bright
		GoTo See
	Missile:
		TNT1 A 0 Bright A_SetSolid
		TNT1 A 0 Bright A_Stop
		TNT1 A 0 A_JumpIfInTargetInventory("DFWeaken",1,7)
		TNT1 A 0 A_JumpIfCloser(860,2)
		TNT1 A 0 A_Jump(256,3)
		TNT1 A 0 A_JumpIfCloser(670,2)
		TNT1 A 0 A_Jump(99,2)
		TNT1 A 0 A_Jump(141,"Debuff")
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Jump(100,"Debuff2")
		TNT1 A 0 A_JumpIfInTargetInventory("DFWeaken",1,2)
		TNT1 A 0 A_Jump(256,3)
		TNT1 A 0 A_Jump(128,"RapidFire")
		TNT1 A 0 A_Jump(75,"Comet")
		TNT1 A 0 A_JumpIfInTargetInventory("DFWeaken",1,2)
		TNT1 A 0 A_Jump(128,"HomingComets")
		TNT1 A 0 A_Jump(72,"HomingComets","Souls")
		TNT1 A 0 Bright A_JumpIfHealthLower((ACS_NamedExecuteWithResult("Hem_SpawnHealth",0)*0.13),"Dual")
		IMRE EF 3 Bright A_FaceTarget
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,0)
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,5,0)
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,10,0)
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,-5,0)
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,-10,0)
		IMRE FE 3 Bright
		GoTo See
	RapidFire:
		IMRE EF 3 Bright A_FaceTarget
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinBall",24,0,random(-2,2))
		IMRE FE 3 Bright
		GoTo See
	Debuff2:
	Debuff:
		TNT1 A 0 A_Stop
		"####" "#" 0 A_TakeInventory("WhirlTic",999)
		"####" "#" 0 A_TakeInventory("WhirlTic2",999)
		TNT1 A 0 A_CustomMissile("OnibiCharge",0,0,0,2)
		TNT1 A 0 A_CustomMissile("OnibiCharge",0,0,72,2)
		TNT1 A 0 A_CustomMissile("OnibiCharge",0,0,144,2)
		TNT1 A 0 A_CustomMissile("OnibiCharge",0,0,216,2)
		TNT1 A 0 A_CustomMissile("OnibiCharge",0,0,288,2)
		"####" "#" 0 A_GiveInventory("WhirlTic2",10)
		TNT1 A 0 A_SetUserVar("user_loopm", 0)
	DLoop:
		IMRE F 0 A_FaceTarget
		IMRE F 0 A_SetUserVar("user_loopm", user_loopm + 1)
		IMRE FFF 1 Bright A_GiveInventory("OnibiCharging",1)
		IMRE F 0 A_JumpIf(USER_LOOPM > 20, 1)
		Loop
	FDebuff:
		IMRE F 0 A_JumpIfInTargetInventory("DFWeaken",1,"FDebuff2")
		"####" "#" 0 A_JumpIfTargetInLOS(2,128,JLOSF_DEADNOJUMP,860)
		"####" "#" 0 A_Jump(256,2)
		"####" "#" 0 A_GiveToTarget("DefilersMark",1)
		"####" "#" 0 A_RadiusGive("DefilersMarkWeak",580,RGF_PLAYERS,1)
		"####" "#" 0 A_TakeInventory("WhirlTic",999)
		"####" "#" 0 A_TakeInventory("WhirlTic2",999)
		TNT1 A 0 Bright A_SpawnItemEx("OnibiShock", 0, 0, 38, 0, 0, 0, 0, 128)
		TNT1 A 0 A_PlaySound("DefilerMark",0,1.0,0,ATTN_NORM)
		IMRE FEE 3 Bright A_RadiusGive("DefilersMarkWeak",580,RGF_PLAYERS,1)
		IMRE G 28 Bright
		IMRE DCB 4
		GoTo See
	FDebuff2:
		"####" "#" 0 A_GiveToTarget("SlayersOmen",1)
		"####" "#" 0 A_RadiusGive("DefilersMarkWeak",580,RGF_PLAYERS,1)
		"####" "#" 0 A_TakeInventory("WhirlTic",999)
		"####" "#" 0 A_TakeInventory("WhirlTic2",999)
		TNT1 A 0 Bright A_SpawnItemEx("OnibiShock", 0, 0, 38, 0, 0, 0, 0, 128)
		TNT1 A 0 A_PlaySound("DefilerMark",0,1.0,0,ATTN_NORM)
		IMRE FEE 3 Bright A_RadiusGive("DefilersMarkWeak",580,RGF_PLAYERS,1)
		IMRE G 28 Bright
		IMRE DCB 4
		GoTo See
	Comet:
		IMRE EF 4 Bright A_FaceTarget
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_CustomMissile("PaladinComet",24,0,0)
		TNT1 A 0 Bright A_CustomMissile("PaladinComet",24,0,-5)
		TNT1 A 0 Bright A_CustomMissile("PaladinComet",24,0,5)
		IMRE GFE 3 Bright
		GoTo See
	HomingComets:
		IMRE EF 4 Bright A_FaceTarget
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("HomingComet",24,0,5)
		TNT1 A 0 A_CustomMissile("HomingComet",24,0,-5)
		TNT1 A 0 A_CustomMissile("HomingComet",24,0,-15)
		TNT1 A 0 A_CustomMissile("HomingComet",24,0,15)
		IMRE GFE 3 Bright
		TNT1 A 0 A_Jump(128,"RapidFire","Comet")
		TNT1 A 0 A_Jump(89,"Souls")
		GoTo See
	Souls:
		IMRE EF 5 Bright
		IMRE G 3 Bright A_FaceTarget
		//TNT1 A 0 Bright A_Jump(32,"LegLostSoul")
		TNT1 A 0 Bright A_PainAttack("ImpureSoul")
		IMRE EF 3 Bright
		GoTo See
	LegLostSoul:
		TNT1 A 0 Bright A_PainAttack("LegendaryHeroSoul")
		IMRE EF 3 Bright
		GoTo See
	Dual:
		IMRE EF 5 Bright
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_DualPainAttack("ImpureSoul")
		IMRE EF 3 Bright
		TNT1 A 0 Bright A_Jump(128,"RapidFire","Comet")
		TNT1 A 0 Bright A_Jump(89,"Rapid")
		GoTo See
	Rapid:
		IMRE EF 5 Bright
		IMRE G 3 Bright A_FaceTarget
		TNT1 A 0 Bright A_PainAttack("ImpureSoul")
		IMRE G 5 Bright A_FaceTarget
		TNT1 A 0 Bright A_PainAttack("ImpureSoul")
		IMRE G 5 Bright A_FaceTarget
		TNT1 A 0 Bright A_PainAttack("ImpureSoul")
		IMRE G 5 Bright A_FaceTarget
		TNT1 A 0 Bright A_PainAttack("ImpureSoul")
		IMRE EF 3 Bright
		TNT1 A 0 Bright A_Jump(128,"RapidFire","Comet")
		GoTo See
	Pain:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_GiveInventory("MonsterAvoid",1)
		IMRE H 3 Bright A_Pain
		TNT1 A 0 Bright A_Jump(40,"Missile")
		GoTo See
	XDeath:
	Death:
		TNT1 A 0 Bright
		IMRE I 6 Bright A_Scream
		IMRE J 3 Bright A_Fall
		TNT1 A 0 Bright A_PlaySound("comet/explosion",CHAN_BODY,1.0,0)
		TNT1 AAAA 0 Bright A_SpawnItemEx("BlueParticleSpawner",0,0,0,0,0,0,0,128)
		TNT1 A 0 Bright A_Explode(70,198)
		TNT1 AAAAAA 0 A_SpawnItemEx("Debris",0,0,32,Random(8,-8),Random(8,-8),Random(8,12),0,128)
		TNT1 AAAA 0 A_CustomMissile("SmokeFX",32,0,random(0,360),2,random(0,360))
		TNT1 AAAAAA 0 A_CustomMissile("Kaboom27",32,0,random(0,360),2,random(0,360))
		TNT1 A 0 A_PainDie("ImpureSoul")
		IMRE KL 3 Bright
		IMRE MNOP 2 Bright
		TNT1 A 0 A_ChangeFlag(SOLID,0)
		TNT1 A 0 A_ChangeFlag(THRUACTORS,1)
		TNT1 A 0 A_TakeInventory("Tic",999999)
	Fall:
		IMRE Q 1 A_CheckFloor("Land")
		TNT1 A 0 A_JumpIfInventory("Tic",525,"Land")
		TNT1 A 0 A_GiveInventory("Tic",1)
		Loop
	Land:
		TNT1 A 0
		TNT1 A 0 A_TakeInventory("Tic",999999)
		TNT1 A 0 A_ChangeFlag(CORPSE,1)
		IMRE RSTU 3
		TNT1 A 0 A_ChangeFlag(SOLID,0)
		TNT1 A 0 A_ChangeFlag(THRUACTORS,0)
		TNT1 A 0 A_ChangeFlag(MOVEWITHSECTOR,1)
		IMRE V 63000 CanRaise
		Stop
	}
}

Actor BaseFXHEM17
{
 +ClientsideOnly
 +ForceXYBillboard
 +NoBlockMap
 +NoInteraction
 +NoGravity
 +DONTSPLASH
 +ExplodeOnWater
 +NoTelestomp
 Radius 2
 Height 2
  States
  {
   Toaster:
   TNT1 A 0
   TNT1 A 1
   Stop
  }
}


Actor OnibiShock : BaseFXHEM17
{
 Reactiontime 4
 Renderstyle Add
 Scale 1.15
 +Missile
  States
   { 
    Spawn:
	 IMOS A 1 Bright A_SetTranslucent(0.9,1)
	 IMOS C 1 Bright A_SetTranslucent(0.8,1)
	 IMOS E 1 Bright A_SetTranslucent(0.7,1)
	 IMOS G 1 Bright A_SetTranslucent(0.6,1)
	 IMOS I 1 Bright A_SetTranslucent(0.5,1)
	 IMOS K 1 Bright A_SetTranslucent(0.4,1)
	 IMOS M 1 Bright A_SetTranslucent(0.3,1)
	 IMOS N 1 Bright A_SetTranslucent(0.2,1)
	 IMOS O 1 Bright A_SetTranslucent(0.1,1)
	 IMOS P 1 Bright A_SetTranslucent(0.045,1)
	 TNT1 A 0 A_CountDown
	 Loop
	Death:
	 TNT1 A 1
	 Stop
  }
}

Actor DFMarkFX : BaseFXHEM17
{
 States
  {
   Spawn:
    TNT1 A 0
	 TNT1 A 0 A_SpawnItemEx("AracknightVileFireB",0,0,34)
	 sTOP
  }
}
Actor DFMarkFXEx : BaseFXHEM17
{
 States
  {
   Spawn:
    TNT1 A 0
	 TNT1 AA 0 A_SpawnItemEx("AracknightVileFireB",0,0,34)
	TNT1 A 0 A_SpawnItemEx("BlueParticleSpawner", 0, 0, 34, 0, 0, 0, 0, 128)
	TNT1 a 0 Bright A_SpawnItemEx("BlueCometDeathGlow",0,34,0,0,0,0,0,128,0)
	TNT1 a 0 Bright A_SpawnItemEx("BlueCometDeath",0,0,0,34,0,0,0,128,0)
	 sTOP
  }
}

Actor PowerDamageUp : PowerDamage
{ Inventory.Icon "DAMGUPG" }
Actor PowerDamageDown : PowerDamage
{ Inventory.Icon "DAMGDWN" }
Actor PowerProtecDown : PowerProtection
{ Inventory.Icon "DEFSDWN" }
Actor PowerSpeedDown : PowerSpeed
{ Inventory.Icon "SPEDDWN" }

Actor DFWeaken : PowerDamageDown
{ Damagefactor Normal, 0.7
  Damagefactor Legendary, 0.2
  Damagefactor LegendaryPlayer, 0.2
  Damagefactor Legendary1, 0.2 
  Powerup.Duration -8}
Actor DFEnfeeble : PowerProtecDown
{ Damagefactor Normal, 1.35
  Powerup.Duration -7}
Actor DFFatigue : PowerSpeedDown
{ Speed 0.75
  Powerup.Duration -6}
Actor DFDisplace : PowerSpeed
{ Speed 20.0
  Powerup.Duration 7}

Actor DefilersMark  : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
   PickUp:
	TNT1 A 0 ACS_NAMEDEXECUTEALWAYS("Defiler's Mark", 0, 5)
	Stop
  }
}
Actor SlayersOmen  : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
   PickUp:
	TNT1 A 0 ACS_NAMEDEXECUTEALWAYS("Slayer's Omen", 0, 875)
	Stop
  }
}
Actor DefilersMarkWeak  : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
   PickUp:
	TNT1 A 0 ACS_NAMEDEXECUTEALWAYS("Defiler's Mark", 0, 5, 1)
	Stop
  }
}
Actor OnibiCharging  : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
   PickUp:
    TNT1 A 0 A_GiveInventory("WhirlTic",1)
	TNT1 A 0 A_GiveInventory("OnibiChargeCheck",1)
    TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("Whirls") == 1, "PickUp.Sound")
	Stop
  PickUp.Sound:
    TNT1 A 0 A_TakeInventory("WhirlTic2",1)
    TNT1 A 0 A_TakeInventory("WhirlTic",999)
	TNT1 A 0 A_PlaySound("FireWhirl",0,1.0,0)
	Stop
  }
}

Actor OnibiChargeCheck : PowerSpeed
{
 Powerup.Duration 3
 Speed 1
}


Actor OnibiCharge
{
 Projectile
 Renderstyle Add
 Scale 1.85
 +SeekerMissile
 +Shootable
 +Solid
 -NoBlockmap
 Health 200
 Height 22
 Radius 22
 BloodColor None
 +NoBlood
 Species "SatanGuard"
 +ThruSpecies
 +MThruSpecies
 VAR INT user_onspeed;
 VAR INT user_ondist;
 Speed 0
 States
  {
   Spawn:
	IMSB N 1 Bright A_Warp(AAPTR_TARGET,50 - user_ondist,0,32,user_onspeed,WARPF_USECALLERANGLE|WARPF_NOCHECKPOSITION  )
	TNT1 A 0 A_JumpIfInTargetInventory("OnibiChargeCheck",1,1)
	GoTo Death
	IMSB O 1 Bright A_Warp(AAPTR_TARGET,50 - user_ondist,0,32,user_onspeed,WARPF_USECALLERANGLE|WARPF_NOCHECKPOSITION  )
	TNT1 A 0 A_JumpIfInTargetInventory("OnibiChargeCheck",1,1)
	GoTo Death
	IMSB P 1 Bright A_Warp(AAPTR_TARGET,50 - user_ondist,0,32,user_onspeed,WARPF_USECALLERANGLE|WARPF_NOCHECKPOSITION  )
	IMSB A 0 bright A_SetUserVar ("user_ondist", user_ondist + 1)
	TNT1 A 0 A_JumpIfInTargetInventory("OnibiChargeCheck",1,1)
	GoTo Death
	IMSB Q 1 Bright A_Warp(AAPTR_TARGET,50 - user_ondist,0,32,user_onspeed,WARPF_USECALLERANGLE|WARPF_NOCHECKPOSITION  )
	IMSB A 0 bright A_SetUserVar ("user_ondist", user_ondist + 1)
	IMSB A 0 bright A_SetUserVar ("user_onspeed", user_onspeed + 1)
	TNT1 A 0 A_JumpIfInTargetInventory("OnibiChargeCheck",1,1)
	GoTo Death
	IMSB R 1 Bright A_Warp(AAPTR_TARGET,50 - user_ondist,0,32,user_onspeed,WARPF_USECALLERANGLE|WARPF_NOCHECKPOSITION  )
	IMSB A 0 bright A_SetUserVar ("user_ondist", user_ondist + 1)
	TNT1 A 0 A_JumpIfInTargetInventory("OnibiChargeCheck",1,1)
	GoTo Death
	IMSB S 1 Bright A_Warp(AAPTR_TARGET,50 - user_ondist,0,32,user_onspeed,WARPF_USECALLERANGLE|WARPF_NOCHECKPOSITION  )
	IMSB A 0 bright A_SetUserVar ("user_onspeed", user_onspeed + 1)
	IMSB A 0 bright A_SetUserVar ("user_ondist", user_ondist + 1)
	TNT1 A 0 A_JumpIfInTargetInventory("OnibiChargeCheck",1,"Spawn")
	GoTo Death
   Death:
	IMSB TUVW 3 Bright A_FadeOut
	Wait
  }
}
//replace with some dummy actor please
Actor DummyHEMUP : Inventory { Inventory.MaxAmount 1 +INVENTORY.PERSISTENTPOWER}

Actor WhirlTic : DummyHEMUP { Inventory.MaxAmount 99999 }
Actor WhirlTic2 : DummyHEMUP { Inventory.MaxAmount 99999 }