ACTOR CacolanternComplex : CFCacodemon 
{ 
   Health 800 
   Speed 8 
   Radius 31
   Height 56
   PainChance 80
   Mass 400
   Meleedamage 6 
   BloodColor "EB 6F 0F"
   MONSTER
   SeeSound "monsters/cacomsit"
   PainSound "monsters/cacompai"
   DeathSound "monsters/cacomdet"
   MeleeSound "caco/melee"
   Species "CacoDemon" 
   DamageFactor "CacoComet" , 0.0
   DropItem "LifeEssence" 120
   DropItem "ArmorBonusMax" 120
   HitObituary "%o admired the Cacolantern's teeth." 
   Obituary "%o was lit on fire from the Cacolantern's breath" 
   Tag "$NECacolant"
   States 
   { 
   Spawn: 
	TNT1 A 0 NoDelay ACS_NamedExecuteAlways("ModifyMonster",0,1)
	Goto Idle
  Idle:
      HED2 A 10 A_Look 
      Loop 
  See:
	TNT1 A 0 A_JumpIf(user_lowlag == 1,"MoreSee")
	TNT1 A 0 A_JumpIfTargetInLOS("MoreSee",0,0,0,0)
	HED2 A 3 A_Chase
	Loop
  MoreSee:
	TNT1 A 0 A_SetUserVar("user_lowlag",1)
      HED2 A 3 A_Chase 
	  TNT1 A 0 A_Jump(13,"Evade")
      Loop 
	Evade:
	  TNT1 A 0 A_Jump(128,7)
	  TNT1 A 0 ThrustThing(Angle*256/360+64,14,0,0)
	  HED2 AAAA 3 A_Chase
	  TNT1 A 0 A_Stop
	  Goto See
	  TNT1 A 0 ThrustThing(Angle*256/360+192,14,0,0)		 
	  HED2 AAAA 3 A_Chase
	  TNT1 A 0 A_Stop		 
	  Goto See
	Melee:
      HED2 BC 5 A_FaceTarget
      HED2 D 5 A_MeleeAttack
      HED2 CB 5 A_FaceTarget
      Goto See
   Missile:
      TNT1 A 0 A_Jump(128,"FireBreath","Seeking","Comet")
	  TNT1 A 0 A_JumpIfCloser(450,"Flamethrower")
   Normal: 
      HED2 BC 6 A_FaceTarget
      HED2 D 2 Bright A_FaceTarget
	  HED2 D 1 Bright A_CustomMissile("CacolanternBall",24,0,0,0,0)
      TNT1 A 0 A_CustomMissile("CacolanternBall",24,0,6,0,0)
      HED2 D 1 Bright A_CustomMissile("CacolanternBall",24,0,-6,0,0)
	  HED2 CB 4	A_FaceTarget
	  HED2 D 2 Bright A_FaceTarget
	  HED2 D 1 Bright A_CustomMissile("CacolanternBall",24,0,0,0,0)
      TNT1 A 0 A_CustomMissile("CacolanternBall",24,0,6,0,0)
      HED2 D 1 Bright A_CustomMissile("CacolanternBall",24,0,-6,0,0)
	  HED2 CB 4	A_FaceTarget
	  TNT1 A 0 A_Jump(87,"FireBreath","Seeking","Comet")
	  Goto See
   Seeking:
      HED2 BC 6 A_Facetarget
	  TNT1 A 0 A_CustomMissile("CacolanternSeeker",24,0,16,0,0)
	  HED2 D 4 Bright A_CustomMissile("CacolanternSeeker",24,0,-16,0,0)
      HED2 CB 4	
	  TNT1 A 0 A_Jump(87,"FireBreath","Seeking","Comet")
	  Goto See
  Comet:
      HED2 BC 6 A_Facetarget
	  HED2 D 5 Bright A_CustomMissile("CacolanternComet",24,0,0,0,0)
	  HED2 D 0 Bright A_CustomMissile("CacolanternComet",24,0,3,0,0)
	  HED2 D 0 Bright A_CustomMissile("CacolanternComet",24,0,-3,0,0)
      HED2 CB 4
	  Goto See
  FireBreath:
      HED2 BC 6 A_Facetarget
	  HED2 D 5 Bright A_CustomMissile("CacolanternFire",24,0,0,0,0)
      HED2 CB 4
	  Goto See
  Flamethrower:
	  HED2 BC 6 A_FaceTarget
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
	  TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
	  TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
	  TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
	  TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
	  TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
	  TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
	  TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0)
      TNT1 A 0 A_FaceTarget
      HED2 D 1 Bright A_CustomMissile("CacolanternFlamethrower",24,0,0,0,0) 
	  HED2 IG 4
	  TNT1 A 0 A_Jump(87,"FireBreath","Seeking","Comet")
	  Goto See
   Pain: 
	  TNT1 A 0 A_Jump(87,"PainMissile")
      HED2 E 4 bright A_Pain 
      HED2 F 5 bright
      Goto See
   PainMissile: 
      HED2 E 4 bright A_Pain 
      HED2 F 5 bright
      Goto Missile 
   XDeath:
   Death: 
	HED2 G 8 bright A_Scream
	HED2 H 8 bright A_NoBlocking
	HED2 H -1 bright
	Stop
  Crash:
	TNT1 A 0 A_NoBlocking
	TNT1 A 0 A_SpawnItemEx("OrangeGibbedGenerator",0,0,0,0,0,0,0,128,0)
	HED2 I 8 bright A_PlaySound("Gore/Splat")
	HED2 JK 8
	HED2 L -1 A_SetFloorClip
	Stop 
   Raise: 
	HED2 L 8 A_UnsetFloorClip
	HED2 KJ 8
	HED2 IHG 8 bright 
	Goto See 
 } 
}

Actor CacolanternBall : CacodemonBall
{
  Damage 12
  Speed 20
  Scale 0.6
  Alpha 0.80
  FastSpeed 22
  SeeSound "Monster/hadtel"
  DeathSound "Monster/hadsit"
  States
  {
  Spawn:
    TNT1 A 0 A_CStaffMissileSlither
    FIL8 ABCDEFGH 1 Bright A_SpawnItemEx("CacolanternBallTrail",0,0,0,0,0,0,0,128,0)
	TNT1 A 0 A_CStaffMissileSlither
    Loop
  Death:
    TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("OrangeParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
	TNT1 AAA 0 A_CustomMissile("Kaboom10", 0, 0, random(0,360), 2, random(0,360))
	TNT1 AAA 0 A_CustomMissile("SmokeFX4", 0, 0, random(0,360), 2, random(0,360))		
    FIL8 IJKL 3 bright
    Stop
  }
}

ACTOR CacolanternBallTrail : BFG9500Trail
{
Scale 0.6
States
{
Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("CheckVanilla") == 1, "Vanilla")
	TNT1 A 1
    FIL8 ABCDEFGH 1 A_FadeOut(0.35)
	Goto Spawn+3
    }
}

ACTOR CacolanternSeeker : WatcherTracer
{
Speed 18
FastSpeed 22
Scale 1.1
States
{
Spawn:
    TNT1 A 0 A_Tracer2
    HEFX A 2 Bright A_CustomMissile("CacolanternSeekerTrail",Random(-2,2),Random(-2,2))
    HEFX B 2 Bright A_CustomMissile("CacolanternSeekerTrail",Random(-2,2),Random(-2,2)) 
    Loop	
Death:
	TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("OrangeParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
	TNT1 AAAA 0 A_CustomMissile("Kaboom10", 0, 0, random(0,360), 2, random(0,360))
	TNT1 AAAA 0 A_CustomMissile("SmokeFX4", 0, 0, random(0,360), 2, random(0,360))		
    HEFX CD 5 Bright
    HEFX EF 4 Bright
    HEFX GH 3 Bright
    Stop
    }
}

ACTOR CacolanternComet : BehemothComet
{
Radius 8
Height 8
DamageType "CacoComet"
Scale 0.7
}

ACTOR CacolanternSeekerTrail : BFG9500Trail
{
Scale 0.38
States
{
Spawn:
	TNT1 A 1
    DLIT DEFGHIJKLMNO 1 A_FadeOut(0.025)
    Stop
    }
}

Actor CacolanternFire : SalamanderBall
{
Species "CacoDemon"
Damagetype "CacoComet"
SeeSound "imp/attack"
DeathSound "imp/shotx"
States
	{
	Spawn:
		FRTM AB 1 Bright A_SpawnItemEx("AfritTrail",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		Loop
	Death:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_SpawnItemEx("OrangeParticleSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 AAA 0 Bright A_CustomMissile("Kaboom9",0,0,random(0,360),2,random(0,360))
		TNT1 AAA 0 Bright A_CustomMissile("SmokeFX4",0,0,random(0,360),2,random(0,360))	
		TNT1 AAA 0 Bright A_CustomMissile("CacolanternFireShot",0,0,random(0,360),CMF_AIMDIRECTION|CMF_TRACKOWNER,random(0,360))
		FRTM CDE 3 Bright
		Stop
	}
}

Actor CacolanternFireShot : SalamanderFlameShot
{
Species "CacoDemon"
Damagetype "CacoComet"
Damage (random(15,25))
States
	{
	Death:
		TNT1 AAA 0 Bright A_StopSound(CHAN_BODY)
		TNT1 A 0 Bright A_Stop
		TNT1 A 0 Bright A_NoGravity
		TNT1 A 0 Bright A_SpawnItemEx("OrangeParticleSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 AA 0 Bright A_CustomMissile("Kaboom69",0,0,random(0,360),2,random(0,360))
		TNT1 AA 0 Bright A_CustomMissile("SmokeFX7",0,0,random(0,360),2,random(0,360))
		TNT1 A 0 Bright A_SpawnItemEx("CacolanternFlare",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		FRTM CDE 3 Bright
		Stop
	}
}

Actor CacolanternFlare : SalamanderFlare
{
Species "CacoDemon"
Damagetype "CacoComet"
Obituary "%o fell in the little flares of a Cacolantern."
}

ACTOR CacolanternFlamethrower : MagmaBreath
{ 
    Species "CacoDemon"
	Damagetype "CacoComet"
    States 
    { 
    Spawn: 
        FIR1 LKJIHGFEDCB 3 Bright A_Explode(Random(1,2),76)
		FIR1 AA 2 Bright A_FadeOut(0.15)
		Stop
		} 
}