
actor Doom_Cacodemon : ZBaseActor 19397
{
  Obituary "$OB_CACO"
  HitObituary "$OB_CACOHIT"
  Health 400
  Radius 31
  Height 56
  mass 1000
  Speed 10
  SeeSound "caco/sight"
  PainSound "caco/pain"
  DeathSound "caco/death"
  ActiveSound "caco/active"
  dropitem "ScubaPickup" 3
  painchance 85
  Painchance "Shrinker", 256
  painchance "FireBurning", 200
  painchance "MightyBoot", 128
  painchance "BootStun", 256
  painchance "MicrowaveBlast", 256
  MONSTER
  +FLOORCLIP
  Scale 0.9
  +FLOATBOB
  +FLOAT
  +NOGRAVITY
  +SPAWNFLOAT
  +MISSILEMORE
  FloatBobStrength 0.5
  meleerange 48
  gravity 0.40
  damagefactor "Explosion", 1.3
  damagefactor "RocketExplosion", 1.3
  damagefactor "ShellExplosion", 1.3
  damagefactor "AlienzShrinker", 0.0
  damagefactor "Shrinkerhit", 0.0
  Species "Cacodemons"
  +DOHARMSPECIES
  +NOINFIGHTSPECIES
  +DONTHARMCLASS
  WoundHealth 10
  +FORCEXYBILLBOARD
  Accuracy 17
  States
  {
  Spawn:
    HEAD A 0
    "####" "#" 0 ThrustThingZ(0, 50, 0, 1)
    "####" "#" 1
    "####" "#" 0 A_Stop
  Idle:
    "####" "#" 0 Thing_ChangeTID(0,1000)
    HEAD A 10 A_Look
    Loop
  See:
    "####" "#" 0 A_Jump(128,2)
    "####" "#" 0 A_Stop
    HEAD A 2 A_Chase
    HEAD A 2 A_Chase("", "", CHF_NOPLAYACTIVE)
    HEAD A 2 A_Chase("", "", CHF_NOPLAYACTIVE)
    HEAD AAA 2 A_Chase
    Loop
  Melee:
    "####" "#" 0 A_Stop
    HEAD B 4 A_FaceTarget
    HEAD C 4 A_FaceTarget
    HEAD D 4 A_CustomMeleeAttack(random[RIDMONSTERAT](10,20),"imp/melee","alienz/melee")
    Goto See
  Missile:
    HEAD B 4 A_FaceTarget
    "####" "#" 0 A_Jump(128,"Missile2","Missile3","Missile4")
  Missile2:
    HEAD C 4 A_FaceTarget
    HEAD D 4 bright A_CustomMissile("Doom_CacodemonBall",25,0,0)
    goto See
  Missile3:
    "####" "#" 0 ThrustThing(angle*256/360+64, 9, 0, 0)
    HEAD C 4 A_FaceTarget
    HEAD D 4 bright A_CustomMissile("Doom_CacodemonBall",25,0,0)
    goto See
  Missile4:
    "####" "#" 0 ThrustThing(angle*256/360+192, 9, 0, 0)
    HEAD C 4 A_FaceTarget
    HEAD D 4 bright A_CustomMissile("Doom_CacodemonBall",25,0,0)
    goto See
  Pain.BootStun:
    HEAD E 6
    HEAD F 12 A_PlayVoiceSoundPitch("Pain")
    Goto See
  Pain:
    "####" "#" 0 A_Jump(128,"Pain2")
    HEAD E 3
    HEAD E 3 A_PlayVoiceSoundPitch("Pain")
    Goto See
  Pain2:
    HEAD F 3
    HEAD F 3 A_PlayVoiceSoundPitch("Pain")
    Goto See
  Pain.MicrowaveBlast:
    HEAD F 1
    "####" "#" 0 A_CheckThump("Pain.BootStun")
    loop
  Death:
    HEAD G 1 A_ChangeFlag("FLOATBOB",0)
    HEAD G 7 A_PlayVoiceSoundPitch("Death","",4)
    HEAD H 8 A_NoBlocking
    HEAD I 8
    HEAD I -1
    stop
  Crash:
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking(false)
    HEAD JJK 4 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    HEAD K 4
    HEAD L 1 A_SpawnItemEx("DeadDoom_Cacodemon", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL|SXF_SETMASTER)
    "####" "#" 0 A_SpawnItemEx("DukeRedBloodPool")
    TNT1 A -1
    stop
  Pain.Shrinker:
    "####" "#" 0 A_PlaySound("shrinker/shrink")
    "####" "#" 0 A_NoGravity
    "####" "#" 0 A_InvulnerablePlus(1)
    HEAD F 5 A_PlayVoiceSoundPitch("Pain")
    "####" "#" 0 A_CustomMissile("ShrinkEffect",8,0,0)
  Shrink:
    HEAD F 2 {A_SetScale(ScaleX - 0.04, ScaleY - 0.04); A_SpawnItemEx("ShrunkBlur",0,0,0,0,0,0,angle,SXF_TRANSFERSPRITEFRAME|SXF_TRANSFERSCALE|SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION|SXF_ABSOLUTEANGLE);}
    "####" "#" 0 A_JumpIf(ScaleX > 0.2 && ScaleY > 0.2, "Shrink")
    "####" "#" 0 A_Shrink("A","A","A","A",0.25)
    "####" "#" 0 A_Remove(AAPTR_DEFAULT)
    stop
  XDeath:
  Death.BossStomp:
  Crash.BossStomp:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonHorn1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonMeat1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonEye1",TRUE, 1.0, 1.0)
    goto Gib1
  Death.PlasmaGib:
  Crash.PlasmaGib:
    "####" "#" 0 A_SpawnItemEx("DukePlasmaExplosion",0,0,32,0,0,0,0,1,0)
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonHorn1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonMeat1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonEye1",TRUE, 1.0, 1.0)
    goto Gib1
  Crash.Explosion:
  Crash.RocketExplosion:
  Death.Explosion:
  Death.RocketExplosion:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonHorn1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonMeat1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonEye1",TRUE, 1.0, 1.0)
    goto Gib1
  Death.ExplosiveShotgun:
  Death.ShellExplosion:
  Crash.ExplosiveShotgun:
  Crash.ShellExplosion:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonHorn1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonMeat1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonEye1",TRUE, 1.0, 1.0)
    goto Gib1
  Gib1:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB4 E 1 A_SpawnItemEx("Gib4DeathSkin", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION)
    Stop
  Wound.Expander:
   "####" "#" 0 A_Die("Expander")
  Death.Expander:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_PlaySound("expander/expand")
    "####" "#" 0 A_NoGravity
    "####" "#" 0 {A_UnsetShootable; A_UnsetSolid;}
  Expand:
    HEAD F 1 A_SetScale(ScaleX + 0.01, ScaleY + 0.01)
    "####" "#" 0 A_JumpIf(ScaleX < 1.4 && ScaleY < 1.4, "Expand")
    HEAD FFFFF 1
    "####" "#" 0 A_SetScale(0.9, 0.9)
    "####" "#" 0 A_PlayVoiceSoundPitch("Death","",4)
    "####" "#" 0 A_SpawnItemEx("ExpanderExplosion",0,0,32,0,0,0,0,1,0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    goto Death.Explosion
  Wound.Ice:
    "####" "#" 0 A_Freeze("See")
    "####" "#" 0 A_Remove(AAPTR_DEFAULT)
    TNT1 A 1
    stop
  Death.SSG:
    "####" "#" 0 A_JumpIf(d3d_extradeathgore==1, "Death")
    "####" "#" 0 A_JumpIfCloser(210, 1)
    Goto Death
  Death.Headshot:
    "####" "#" 0 A_GiveInventory("DeathCheck",1)
    "####" "#" 0 A_ChangeFlag("FLOATBOB",0)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonHead1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonMeat1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CacodemonEye1",TRUE, 1.0, 1.0)
    CCD3 A 8 A_NoBlocking
    CCD3 A -1
    stop
  Crash.SSG:
  Crash.Headshot:
    "####" "#" 0 A_JumpIfInventory("DeathCheck",1,1)
    Goto Crash
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking(false)
    CCD3 AAB 4 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    CCD3 B 1 A_SpawnItemEx("DeadDoom_CacodemonHalf", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    "####" "#" 0 A_SpawnItemEx("DukeRedBloodPool")
    stop
  Possessed:
    "####" "#" 0 A_ChangeFlag("NOPAIN", 1)
    HEAD L 7 {A_XScream; A_AdjustTics(1.0,1.0);}
    HEAD K 7 {A_XScream; A_AdjustTics(1.0,1.0);}
    HEAD J 7 A_AdjustTics(1.0,1.0)
    HEAD I 7 A_AdjustTics(1.0,1.0)
    HEAD H 7 {ThrustThingZ(0,5,0,1); A_AdjustTics(1.0,1.0);}
    HEAD G 7 A_AdjustTics(0,1.0)
    "####" "#" 0 A_Stop
    "####" "#" 0 A_ChangeFlag("NOPAIN", 0)
    goto See
  }
}

Actor Doom_CacodemonBall : ZMissile
{
  Radius 6
  Height 6
  Speed 18
  Damage (30)
  Projectile
  Obituary "$OB_CACO"
  Decal "DukeScorch"
  DamageType "Plasma"
  RenderStyle "Add"
  Alpha 0.95
  SeeSound "caco/attack"
  DeathSound "caco/shotx"
  +FORCEXYBILLBOARD
  +THRUGHOST
  +GHOST
  +RANDOMIZE
  -THRUSPECIES
  Species "none"
  ThruBits 1
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_Jump(128,"Spawn3")
  Spawn2:
    TNT1 A 0 A_SpawnItemEx("DoomCacodemonBallTrail2", (6 *momx)/-35.0, -(6 *momy)/-35.0, 2+(6 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    BAL2 A 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SpawnItemEx("DoomCacodemonBallTrail1", (3 *momx)/-35.0, -(3 *momy)/-35.0, 2+(3 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE);}
    TNT1 A 0 A_SpawnItemEx("DoomCacodemonBallTrail3", (9 *momx)/-35.0, -(9 *momy)/-35.0, 2+(9 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    BAL2 A 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SpawnItemEx("DoomCacodemonBallTrail2", (6 *momx)/-35.0, -(6 *momy)/-35.0, 2+(6 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE);}
    TNT1 A 0 A_SpawnItemEx("DoomCacodemonBallTrail4", (12*momx)/-35.0, -(12*momy)/-35.0, 2+(12*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    BAL2 B 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SpawnItemEx("DoomCacodemonBallTrail3", (9 *momx)/-35.0, -(9 *momy)/-35.0, 2+(9 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE);}
    TNT1 A 0 A_SpawnItemEx("DoomCacodemonBallTrail1", (3 *momx)/-35.0, -(3 *momy)/-35.0, 2+(3 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    BAL2 B 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SpawnItemEx("DoomCacodemonBallTrail4", (12*momx)/-35.0, -(12*momy)/-35.0, 2+(12*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE);}
    loop
  Spawn3:
    TNT1 A 0 A_SpawnItemEx("DoomCacodemonBallTrail2", (6 *momx)/-35.0, -(6 *momy)/-35.0, 2+(6 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    BAL2 B 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SpawnItemEx("DoomCacodemonBallTrail1", (3 *momx)/-35.0, -(3 *momy)/-35.0, 2+(3 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE);}
    TNT1 A 0 A_SpawnItemEx("DoomCacodemonBallTrail3", (9 *momx)/-35.0, -(9 *momy)/-35.0, 2+(9 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    BAL2 B 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SpawnItemEx("DoomCacodemonBallTrail2", (6 *momx)/-35.0, -(6 *momy)/-35.0, 2+(6 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE);}
    TNT1 A 0 A_SpawnItemEx("DoomCacodemonBallTrail4", (12*momx)/-35.0, -(12*momy)/-35.0, 2+(12*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    BAL2 A 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SpawnItemEx("DoomCacodemonBallTrail3", (9 *momx)/-35.0, -(9 *momy)/-35.0, 2+(9 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE);}
    TNT1 A 0 A_SpawnItemEx("DoomCacodemonBallTrail1", (3 *momx)/-35.0, -(3 *momy)/-35.0, 2+(3 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    BAL2 A 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SpawnItemEx("DoomCacodemonBallTrail4", (12*momx)/-35.0, -(12*momy)/-35.0, 2+(12*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE);}
    loop
  Death:
    TNT1 AAAAA 0 A_CustomMissile ("PurplePlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 A 0 A_Explode(5,70,0)
    BAL2 C 1 bright {A_SpawnItem("PurpleFlare22",0,0); A_FadeOut(0.075);}
    BAL2 C 1 bright {A_SpawnItem("PurpleFlare22",0,0); A_FadeOut(0.075);}
    BAL2 C 1 bright {A_SpawnItem("PurpleFlare22",0,0); A_FadeOut(0.075);}
    BAL2 C 1 bright {A_SpawnItem("PurpleFlare22",0,0); A_FadeOut(0.075);}
    TNT1 AAA 0 A_CustomMissile ("OldschoolRocketSmokeTrail3", 2, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    BAL2 D 1 bright {A_SpawnItem("PurpleFlare22",0,0); A_FadeOut(0.075);}
    BAL2 D 1 bright {A_SpawnItem("PurpleFlare22",0,0); A_FadeOut(0.075);}
    BAL2 D 1 bright A_FadeOut(0.075)
    BAL2 D 1 bright A_FadeOut(0.075)
    BAL2 E 1 bright A_FadeOut(0.075)
    BAL2 E 1 bright A_FadeOut(0.075)
    BAL2 E 1 bright A_FadeOut(0.075)
    BAL2 E 1 bright A_FadeOut(0.075)
    Stop
  }
}

ACTOR DoomCacodemonBallTrail1
{
  +THRUACTORS
  +CLIENTSIDEONLY
  +NOBLOCKMAP
  +NOGRAVITY
  Renderstyle Add
  Alpha 0.94
  Scale 1.0
  +MISSILE
  +THRUGHOST
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_Jump(128,"Spawn2")
    BAL2 A 1 BRIGHT
    Stop
  Spawn2:
    BAL2 B 1 BRIGHT
    Stop
  }
}

ACTOR DoomCacodemonBallTrail2 : DoomCacodemonBallTrail1
{
  Alpha 0.6
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_Jump(128,"Spawn2")
    BAL2 A 1 BRIGHT
    Stop
  Spawn2:
    BAL2 B 1 BRIGHT
    Stop
  }
}

ACTOR DoomCacodemonBallTrail3 : DoomCacodemonBallTrail1
{
  Alpha 0.3
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_Jump(128,"Spawn2")
    BAL2 A 1 BRIGHT
    Stop
  Spawn2:
    BAL2 B 1 BRIGHT
    Stop
  }
}

ACTOR DoomCacodemonBallTrail4 : DoomCacodemonBallTrail1
{
  Alpha 0.1
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_Jump(128,"Spawn2")
    BAL2 A 1 BRIGHT
    Stop
  Spawn2:
    BAL2 B 1 BRIGHT
    Stop
  }
}

actor DeadDoom_Cacodemon : DeadDukeNukemP 19398
{
  Radius 31
  Height 30
  scale 0.9
  States
  {
  Spawn:
    HEAD L -1
    Stop
  Death.Fire:
    "####" "#" 0 A_SetTranslation("Burned")
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnItemEx("DeadDoom_Cacodemon", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    TNT1 A 1
    Stop
  Ice:
    "####" "#" 0 Thing_ChangeTID(0,3500)
    HEAD L 5 A_GenericFreezeDeath
    HEAD L 1 A_FreezeDeathChunks
    wait
  Gib1:
  Gib2:
  Gib3:
  Gib4:
  Gib5:
    TNT1 A 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    TNT1 A 1 A_SpawnItemEx("Gib4DeathSkin", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION)
    Stop
  }
}

actor DeadDoom_CacodemonHalf : DeadDukeNukem
{
  Radius 31
  Height 15
  scale 0.9
  States
  {
  Spawn:
    CCD3 B -1
    Stop
  Death.Fire:
    "####" "#" 0 A_SetTranslation("Burned")
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnItemEx("DeadDoom_CacodemonHalf", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    TNT1 A 1
    Stop
  Ice:
    "####" "#" 0 Thing_ChangeTID(0,3500)
    CCD3 B 5 A_GenericFreezeDeath
    CCD3 B 1 A_FreezeDeathChunks
    wait
  Gib1:
  Gib2:
  Gib3:
  Gib4:
  Gib5:
    TNT1 A 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    TNT1 A 1 A_SpawnItemEx("Gib4DeathSkin", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION)
    Stop
  }
}