
actor Doom_Cyberdemon : ZBaseActor 19403
{
  Obituary "$OB_CYBORG"
  Health 5000
  radius 40
  height 120
  mass 5000
  Speed 16
  SeeSound "cyber/sight"
  PainSound "cyber/pain"
  DeathSound "cyber/death"
  ActiveSound "cyber/active"
  MONSTER
  +FLOORCLIP
  Scale 1.1
  damagefactor "Shrinker", 0.0
  damagefactor "Expander", 0.1
  damagefactor "AlienzShrinker", 0.0
  damagefactor "Shrinkerhit", 0.0
  damagefactor "Explosion", 0.8
  damagefactor "RocketExplosion", 0.8
  damagefactor "ShellExplosion", 0.9
  damagefactor "Fire", 0.5
  damagefactor "BulletFlame", 0.84
  painchance 32
  painchance "MicrowaveBlast", 256
  +BOSS
  +MISSILEMORE
  +MISSILEEVENMORE
  MinMissileChance 160
  Species "Cyberdemons"
  +DOHARMSPECIES
  +NOINFIGHTSPECIES
  +DONTHARMCLASS
  WoundHealth 10
  states
  {
  Spawn:
    CYBR A 0
    "####" "#" 0 Thing_ChangeTID(0,1001)
    CYBR AA 10 A_Look
    loop
  See:
    CYBR A 1
    "####" "#" 0
    CYBR AABB 3 A_ChaseD3D
    "####" "#" 0 A_SpawnItemEx("Doom_CyberdemonStep1",0,0,0,0,0,-10)
    "####" "#" 0 A_JumpIfCloser(120,"Stomp")
    CYBR CCDD 3 A_ChaseD3D
    "####" "#" 0 A_SpawnItemEx("Doom_CyberdemonStep2",0,0,0,0,0,-10)
    "####" "#" 0 A_JumpIfCloser(120,"Stomp")
    loop
  Missile:
    "####" "#" 0 A_JumpIfCloser(400,"Missile2")
    "####" "#" 0 A_Jump(192,"Missile2")
    "####" "#" 0 A_JumpIfCloser(180,"Stomp")
    CYBR EEEEE 5 A_FaceTarget
    "####" "#" 0 A_FaceTarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    CYBR F 6 bright 
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    "####" "#" 0 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    CYBR F 6 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    CYBR E 6 bright 
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    "####" "#" 0 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    CYBR E 6 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    CYBR F 6 bright 
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    "####" "#" 0 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    CYBR F 6 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    CYBR E 6 bright 
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    "####" "#" 0 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    CYBR E 6 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    CYBR F 6 bright 
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    "####" "#" 0 A_FaceTarget
    "####" "#" 0 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    CYBR F 6 bright A_CustomMissile("Doom_CyberdemonRocketMulti",60,-25,random[RIDMONSTERAT](-16,16))
    "####" "#" 0
    goto See
  Missile2:
    "####" "#" 0 A_JumpIfCloser(180,"Stomp")
    CYBR EE 4 A_FaceTarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    CYBR F 3 bright A_CustomMissile("Doom_CyberdemonRocket", 60, -25, 0)
    CYBR EE 6 A_FaceTarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    CYBR F 3 bright A_CustomMissile("Doom_CyberdemonRocket", 60, -25, 0)
    CYBR EE 6 A_FaceTarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    CYBR F 3 bright A_CustomMissile("Doom_CyberdemonRocket", 60, -25, 0)
    CYBR EE 6 A_FaceTarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",48,16,0)
    CYBR F 3 bright A_CustomMissile("Doom_CyberdemonRocket", 60, -25, 0)
    CYBR EE 6 A_FaceTarget
    goto see
  Stomp:
    CYBR C 5 A_FaceTarget
    "####" "#" 0 A_Recoil(-5)
    CYBR B 7 A_FaceTarget
    "####" "#" 0 A_CustomMissile("Doom_CyberdemonStomp",10,0,0,0)
    CYBR CC 7
    Goto See
  Pain:
    CYBR G 3
    CYBR G 3 A_PlayVoiceSoundPitch("Pain")
    goto See
  Pain.MicrowaveBlast:
    CYBR G 1
    "####" "#" 0 A_CheckThump("Pain")
    loop
  Death:
    CYBR HHHH 2 BRIGHT A_SpawnItem("RedFlareMedium",0,0)
    CYBR I 2 BRIGHT {A_PlayVoiceSoundPitch("Death","",4); A_SpawnItem("RedFlareMedium",0,0);}
    CYBR III 2 BRIGHT A_SpawnItem("RedFlareMedium",0,0)
    CYBR JJJJ 2 BRIGHT A_SpawnItem("RedFlareMedium",0,0)
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_BossDeath
    "####" "#" 0 A_XScream
    "####" "#" 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)
    "####" "#" 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("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_CustomMissile ("RedPlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    "####" "#####" 0 A_CustomMissile ("RedPlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    "####" "#####" 0 A_CustomMissile ("RedPlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    CYBR K 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0); A_SpawnItemEx("RPGExplosion",random[RIDFX](-16,16),0,80,0,0,0,0,0);}
    CYBR K 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR K 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR K 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR L 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0); A_SpawnItemEx("RPGExplosion",random[RIDFX](-16,16),-20,20,0,0,0,0,0);}
    CYBR L 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR L 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR L 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR M 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0); A_SpawnItemEx("RPGExplosion",random[RIDFX](-16,16),20,20,0,0,0,0,0);}
    CYBR M 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR M 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR M 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    "####" "#####" 0 A_CustomMissile ("ShrinkerAttackSmoke", random[RIDFX](-5, 60), random[RIDFX](-35, 35), random[RIDFX](0, 360), 2, random[RIDFX](0, 160))
    CYBR N 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR N 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR N 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR N 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075,0);}
    CYBR O 1 bright A_FadeOut(0.075,0)
    CYBR O 1 bright A_FadeOut(0.075,0)
    CYBR O 1 bright A_FadeOut(0.075,0)
    CYBR O 1 bright A_FadeOut(0.075,0)
    "####" "###" 0 A_CustomMissile ("ShrinkerAttackSmoke", random[RIDFX](-5, 60), random[RIDFX](-35, 35), random[RIDFX](0, 360), 2, random[RIDFX](0, 160))
    CYBR P 1 A_SpawnItemEx("Doom_CyberdemonLegs", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    stop
  Wound.Ice:
    "####" "#" 0 A_Freeze("See")
    "####" "#" 0 {A_ChangeFlag("COUNTKILL",0); A_Die("BossDeath");}
    TNT1 A 1
    stop
  Death.BossDeath:
    "####" "#" 0 A_BossDeath
    TNT1 A 1
    Stop
  Death.RocketHeadshot:
    "####" "#" 0 A_XScream
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", 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("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("Doom_CyberdemonHead1",TRUE, 1.0, 1.4)
    CYBB G 40
    CYBB HH 2 BRIGHT A_SpawnItem("RedFlareMedium",0,0)
    CYBB II 2 BRIGHT A_SpawnItem("RedFlareMedium",0,0)
    CYBB JJ 2 BRIGHT A_SpawnItem("RedFlareMedium",0,0)
    goto Death+12
  }
}

actor Doom_CyberdemonRocket : ZMissile
{
  +FOILINVUL
  -DEHEXPLOSION
  -ROCKETTRAIL
  Radius 11
  Height 8
  Speed 20
  Damage (20)
  Projectile
  DeathSound "weapons/rocklx"
  scale 0.7
  decal DukeScorch
  DamageType "RocketExplosion"
  -THRUSPECIES
  Species "none"
  +RANDOMIZE
  seesound "weapons/rocklf"
  States
  {
  Spawn:
    MISL A 1 bright
    TNT1 A 0 A_SpawnItem("RocketFlare",-20,0)
    TNT1 A 0 A_SpawnItem ("OldschoolRocketSmokeTrail2")
    TNT1 A 0 A_CustomMissile ("OldschoolRocketSmokeTrail2", 2, 0, random[RIDFX](160, 210), 2, random[RIDFX](-30, 30))
    loop
  Death:
    TNT1 AA 0 A_SpawnItemEx ("RedFlareMedium",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
    TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 180))
    TNT1 AAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleVeryFast", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 AA 0 A_CustomMissile ("ExplosionSmokeFast22", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 A 0 A_SpawnItem("BigRicoChet")
    TNT1 A 0 A_SPawnItem("ExplosionAirDisplacementEffect")
    TNT1 A 0 A_PlaySound("weapons/rocklx")
    TNT1 A 0 A_PlayWeaponSound("weapons/rocklx")
    TNT1 A 0 Radius_Quake(2, 8, 0, 12, 0)
    TNT1 A 0 A_Explode(80,150)
    MISL B 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    MISL B 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    MISL B 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    MISL B 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    MISL C 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    MISL C 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    MISL C 1 bright A_FadeOut(0.075)
    MISL C 1 bright A_FadeOut(0.075)
    MISL D 1 bright A_FadeOut(0.075)
    MISL D 1 bright A_FadeOut(0.075)
    MISL D 1 bright A_FadeOut(0.075)
    MISL D 1 bright A_FadeOut(0.075)
    stop
  }
}

actor Doom_CyberdemonRocketMulti : Doom_CyberdemonRocket
{
  Speed 17
  scale 0.5
  Damage (10)
}

ACTOR Doom_CyberdemonStep1
{
  Height 1
  Radius 1
  Speed 10
  Damage 0
  DeathSound "cyber/hoof"
  Projectile
  +BLOODLESSIMPACT 
  +CLIENTSIDEONLY
  States
  {
  Spawn:
    TNT1 A 1 
    Stop
  Death:
    TNT1 A 1 
    Stop
  }
}

ACTOR Doom_CyberdemonStep2
{
  Height 1
  Radius 1
  Speed 10
  Damage 0
  DeathSound "spider/walk"
  Projectile
  +BLOODLESSIMPACT 
  +CLIENTSIDEONLY
  States
  {
  Spawn:
    TNT1 A 1 
    Stop
  Death:
    TNT1 A 1 
    Stop
  }
}

ACTOR Doom_CyberdemonStomp : BattlelordStomp
{
  Obituary "%o was stepped by a Cyberdemon."
  HitObituary "%o was stepped by a Cyberdemon."
  States
  {
  Death:
    "####" "#" 0 A_PlaySound("spider/walk", 1)
    EXPL AAAA 0 A_CustomMissile ("ExplosionSmoke", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](10, 12))
    "####" "#" 0 Radius_Quake(4, 15, 0, 25, 0)
    "####" "#" 0 Radius_Quake(2, 15, 0, 45, 0)
    "####" "#" 0 A_Explode
    SM8K BDFHJLNPRTVXZ 1
    Stop
  }
}

actor Doom_CyberdemonLegs : RobotAlienLegs
{
  Radius 40
  Height 10
  scale 1.0
  States
  {
  Spawn:
    CYBR P 0
    CYBR PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 35 A_Gravity
    CYBR PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 1 A_FadeOut(0.1)
    stop
  }
}