ACTOR DarkBishop
{ 
Health 900 
PainChance 70
Speed 12
Scale 1
Radius 20 
Height 56 
Mass 150 
Bloodcolor Black
MONSTER
+MISSILEMORE
+FLOORCLIP
+DONTHURTSPECIES
+NOGRAVITY
+FLOAT
Obituary "%o's mind was consumed by a Dark Bishop."
Species "CacoDemon"
DropItem "BossLifeEssence" 160
DropItem "BossArmorBonusMax" 160
DropItem "HellStaff" 50
DropItem "DustMana" 200 30
DropItem "DustMana" 200 30
SeeSound "DarkBishop/Sight" 
PainSound "DarkBishop/Pain" 
DeathSound "DarkBishop/Death" 
ActiveSound "DarkBishop/Active" 
States 
   { 
   Spawn: 
       DPTR A 10 A_Look 
       Loop 
   See: 
       DPTR AAABBB 4 A_Chase
       DPTR A 0 A_Jump(96,1)
       Loop
       DPTR A 0 A_Chase
       DPTR A 1 A_Playsound("monster/blur")
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR A 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR A 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 1 A_Chase
       DPTR B 0 A_SpawnItem("DarkBishFX2",0,0)
       DPTR B 0 A_Jump(96,1)
       Goto See+8
       DPTR B 0
       Goto See
   Missile:
	   TNT1 A 0 A_Jump(256,"HomingChargeBalls","RainProjectile","EvenMoreHoming","LetsBalanceTheHoming")
   HomingChargeBalls:
       DPTR D 8 Bright A_FaceTarget
       DPTR E 5 Bright A_FaceTarget
       TNT1 A 0 A_CustomMissile("DBishShot2",36,28,0,0)
       DPTR F 8 Bright A_CustomMissile("DBishShot",36,-28,0,0)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_CustomMissile("DBishShot2",36,28,0,0)
       DPTR F 8 Bright A_CustomMissile("DBishShot",36,-28,0,0)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_CustomMissile("DBishShot2",36,28,0,0)
       DPTR F 8 Bright A_CustomMissile("DBishShot",36,-28,0,0)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_CustomMissile("DBishShot2",36,28,0,0)
       DPTR F 8 Bright A_CustomMissile("DBishShot",36,-28,0,0)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_CustomMissile("DBishShot2",36,28,0,0)
       DPTR F 8 Bright A_CustomMissile("DBishShot",36,-28,0,0)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_CustomMissile("DBishShot2",36,28,0,0)
       DPTR F 8 Bright A_CustomMissile("DBishShot",36,-28,0,0)
	   DPTR ED 6 Bright
       Goto See
   RainProjectile:
       DPTR D 8 Bright
       DPTR E 5 Bright A_FaceTarget
       DPTR F 8 Bright A_CustomMissile("DBishRain",36,0,0,0)
	   DPTR ED 6 Bright
       Goto See
   EvenMoreHoming:
       DPTR D 8 Bright
       DPTR E 5 Bright A_FaceTarget
       DPTR D 0 A_PlaySound("dbish/atk3")
       DPTR D 0 A_CustomMissile("DBishHornRodFX",36,0,-20,0)
       DPTR D 0 A_CustomMissile("DBishHornRodFX",36,0,20,0)
       DPTR F 8 Bright A_CustomMissile("DBishHornRodFX",36,0,0,0)
	   DPTR ED 6 Bright
       Goto See
   LetsBalanceTheHoming:
       DPTR D 8 Bright
       DPTR E 5 Bright A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   TNT1 A 0 A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   TNT1 A 0 A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   TNT1 A 0 A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   TNT1 A 0 A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   TNT1 A 0 A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   TNT1 A 0 A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   TNT1 A 0 A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   TNT1 A 0 A_FaceTarget
       DPTR F 5 Bright A_CustomMissile("DBishHornRodFXNotHoming",36,0,random(-6,6))
	   DPTR ED 6 Bright
       Goto See
   Pain: 
       DPTR C 2 
       DPTR C 2 A_Pain 
       Goto See 
   Death: 
       DPTR G 8 Bright A_Scream 
       DPTR H 5 Bright
       DPTR I 5 Bright
       DPTR J 5 Bright A_NoBlocking 
       DPTR KLM 5 Bright
       DPTR N 5
       DPTR O 5  
       DPTR P -1 
       Stop 
   Raise: 
	   TNT1 A 0
	   TNT1 A 0 A_SpawnItemEx("VileHealEffect",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
       DPTR PONMLKJIHG 5 
       Goto See 
   } 
}

ACTOR DarkBishFX2 : ImpballTrail
{   
   Radius 2
   Height 2
   Speed 0
   PROJECTILE
   RENDERSTYLE Translucent
   ALPHA 0.90
   States
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
      TNT1 A 3
      DPTR A 5 A_FadeOut(0.10)
      goto Spawn+3
   }
}

ACTOR DBishShot
{
   Radius 8
   Height 16
   Speed 30
   Damage 3
   RENDERSTYLE ADD
   ALPHA 0.67
   Damagetype "Void"
   PROJECTILE
   +THRUGHOST
   +SEEKERMISSILE
   SeeSound "DBish/Atk1"
   DeathSound "monster/acohit"
   Decal "BishopScorch"
   States
   {
   Spawn:
      PFX2 A 1 Bright A_Weave(3, 3, 2.0, 1.0)
      PFX2 A 0 Bright A_CustomMissile("DBishShotFX",0,0,0,0)
      PFX2 B 0 Bright A_SeekerMissile(1,1)
      PFX2 A 1 Bright A_Weave(3, 3, 2.0, 1.0)
      PFX2 A 0 Bright A_CustomMissile("DBishShotFX",0,0,0,0)
      PFX2 B 0 Bright A_SeekerMissile(1,1)
      PFX2 B 1 Bright A_Weave(3, 3, 2.0, 1.0)
      PFX2 A 0 Bright A_CustomMissile("DBishShotFX",0,0,0,0)
      PFX2 B 0 Bright A_SeekerMissile(1,1)
      PFX2 B 1 Bright A_Weave(3, 3, 2.0, 1.0)
      PFX2 A 0 Bright A_CustomMissile("DBishShotFX",0,0,0,0)
      PFX2 B 0 Bright A_SeekerMissile(1,1)
      loop
   Death:
	  TNT1 A 0 A_SpawnItemEx("WhiteParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
	  TNT1 AA 0 A_CustomMissile("Kaboom21", 0, 0, random(0,360), 2, random(0,360))
	  TNT1 AA 0 A_CustomMissile("SmokeFX4", 0, 0, random(0,360), 2, random(0,360))
      PFX2 CDEFGH 3 Bright
      stop
   }
}

ACTOR DBishShot2 : DBishShot
{
   States
   {
   Spawn:
      PFX2 A 1 Bright A_Weave(3, 3, -2.0, 1.0)
      PFX2 A 0 Bright A_CustomMissile("DBishShotFX",0,0,0,0)
      PFX2 B 0 Bright A_SeekerMissile(1,1)
      PFX2 A 1 Bright A_Weave(3, 3, -2.0, 1.0)
      PFX2 A 0 Bright A_CustomMissile("DBishShotFX",0,0,0,0)
      PFX2 B 0 Bright A_SeekerMissile(1,1)
      PFX2 B 1 Bright A_Weave(3, 3, -2.0, 1.0)
      PFX2 A 0 Bright A_CustomMissile("DBishShotFX",0,0,0,0)
      PFX2 B 0 Bright A_SeekerMissile(1,1)
      PFX2 B 1 Bright A_Weave(3, 3, -2.0, 1.0)
      PFX2 A 0 Bright A_CustomMissile("DBishShotFX",0,0,0,0)
      PFX2 B 0 Bright A_SeekerMissile(1,1)
      loop
   }
}

ACTOR DBishShotFX : ImpBallTrail
{   
   Radius 2
   Height 2
   Speed 0
   PROJECTILE
   RENDERSTYLE ADD
   ALPHA 0.67
   States
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
      TNT1 A 2 Bright
      PFX2 AABB 1 Bright A_FadeOut(0.08)
      Goto Spawn+3
   }
}

Actor DBishRain : CacoHellStaffBall1
{
	Damage 12
	Seesound "Dbish/Atk2"
	States
	{
	Spawn:
		TNT1 AA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-8,8),frandom(-8,8),frandom(-8,8),random(0,360))
		HPRO D 1 Bright A_SpawnItem("WhiteHellStaffTrail")
		TNT1 AA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-8,8),frandom(-8,8),frandom(-8,8),random(0,360))
		HPRO D 1 Bright A_SpawnItem("WhiteHellStaffTrail")
		TNT1 AA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-8,8),frandom(-8,8),frandom(-8,8),random(0,360))
		HPRO E 1 Bright A_SpawnItem("WhiteHellStaffTrail")
		TNT1 AA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-8,8),frandom(-8,8),frandom(-8,8),random(0,360))
		HPRO E 1 Bright A_SpawnItem("WhiteHellStaffTrail")
		TNT1 AA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-8,8),frandom(-8,8),frandom(-8,8),random(0,360))
		HPRO F 1 Bright A_SpawnItem("WhiteHellStaffTrail")
		TNT1 AA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-8,8),frandom(-8,8),frandom(-8,8),random(0,360))
		HPRO F 1 Bright A_SpawnItem("WhiteHellStaffTrail")
		loop
	Death:
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-8,8),frandom(-8,8),frandom(0,12),random(0,360))
		TNT1 A 0 A_SpawnItemEx("WhiteParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
		TNT1 A 0 A_SetScale(1)
		PFX1 GH 5 bright
		PFX1 I 4 bright
		PFX1 JKL 3 bright
		TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("DBishRainDrop",random(-64,64),random(-64,64),0,0,0,0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("DBishRainDrop",random(-64,64),random(-64,64),0,0,0,0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("DBishRainDrop",random(-64,64),random(-64,64),0,0,0,0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("DBishRainDrop",random(-64,64),random(-64,64),0,0,0,0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("DBishRainDrop",random(-64,64),random(-64,64),0,0,0,0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("DBishRainDrop",random(-64,64),random(-64,64),0,0,0,0)
		stop
	}
}

Actor DBishRainDrop
{
	Radius 3
	Height 4
	Speed 12
	Damage (random(4,6)*4)
	Gravity 12
	+MISSILE
	+BRIGHT
	+CEILINGHUGGER
    +DONTSPLASH   
    +EXPLODEONWATER
    -CANBOUNCEWATER
	Renderstyle Add
	Species "Cacodemon"
	Mass 10
	States
	{
	Spawn:
		TNT1 A 2
	Spawn2:
		PFX3 A 1 A_JumpIf(momz >= 0,"Death")
		PFX3 A 1
		loop
	Death:
		PFX3 BCDEF 3
		stop
	}
}

ACTOR DBishHornRodFX : CacoHellStaffBall2
{
  Speed 25
  Damage 6
  +STRIFEDAMAGE
  States
  {
  Spawn:
    HPRO DDEEFF 1 Bright A_SpawnItem("WhiteHellStaffTrail")
	TNT1 A 0 A_SeekerMissile(15, 30)
    Loop
  Death:
	TNT1 A 0
	TNT1 AAAAAAAAA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-4,4),frandom(-4,4),frandom(-4,4),random(0,359))
    CLBA D 1 Bright A_FadeOut(0.2)
    Goto Death+1
  }
}

ACTOR DBishHornRodFXNotHoming : CacoHellStaffBall1
{
  Speed 35
  States
  {
  Spawn:
    HPRO DDEEFF 1 Bright A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,0,frandom(-1,1),frandom(-1,1),random(0,359))
    Loop
  Death:
	TNT1 A 0
	TNT1 AAAAAAAAA 0 A_SpawnItemEx("WhiteHellStaffParticle",0,0,0,frandom(-4,4),frandom(-4,4),frandom(-4,4),random(0,359))
    CLBA D 1 Bright A_FadeOut(0.2)
    Goto Death+1
  }
}

ACTOR WhiteHellStaffParticle
{
  +NoInteraction
  +ClientSideOnly
  Renderstyle Add
  Scale 0.05
  States
  {
  Spawn:
	TNT1 A 2
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.048)
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.046)
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.044)
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.042)
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.040)
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.038)
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.036)
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.034)
	CLBA D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.032)
    Stop
  }
}

ACTOR WhiteHellStaffTrail
{
  +NoInteraction
  +ClientSideOnly
  Renderstyle Add
  Scale 0.7
  States
  {
  Spawn:
	TNT1 A 2
	TNT1 A 0 A_Jump(256,"one","two","three")
  One:
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.68)
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.66)
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.64)
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.62)
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.6)
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.58)
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.56)
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.54)
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.52)
    Stop
  Two:
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.68)
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.66)
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.64)
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.62)
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.6)
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.58)
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.56)
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.54)
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.52)
    Stop
  Three:
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.68)
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.66)
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.64)
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.62)
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.6)
	HPRO E 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.58)
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.56)
	HPRO F 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.54)
	HPRO D 1 Bright A_FadeOut(0.1)
	TNT1 A 0 A_SetScale(0.52)
    Stop
  }
}