
ACTOR Doom_LostSoul : ZActorDodgeMissile 19399
{
  Obituary "$OB_SKULL"
  Health 100
  Radius 16
  Height 32
  mass 1000
  Speed 12
  AttackSound "skull/melee"
  PainSound "skull/pain"
  DeathSound "skull/death"
  ActiveSound "skull/active"
  dropitem "BootsPickup" 8
  MONSTER
  +FLOORCLIP
  +NEVERRESPAWN
  Scale 1.0
  +FLOATBOB
  +FLOAT
  +NOGRAVITY
  +NOBLOOD
  +SPAWNFLOAT
//  +MISSILEMORE
  +DONTFALL
  FloatBobStrength 0.5
  maxtargetrange 512
  gravity 0.40
  damagefactor "Expander", 0.5
  damagefactor "AlienzShrinker", 0.0
  damagefactor "Shrinkerhit", 0.0
  damagefactor "Fire", 0.5
  damagefactor "BulletFlame", 0.5
  damagefactor "Explosion", 1.3
  damagefactor "RocketExplosion", 1.3
  damagefactor "ShellExplosion", 1.3
  minmissilechance 1
  PainChance 256
  painchance "Fire", 10
  painchance "BulletFlame", 10
  Painchance "Shrinker", 256
  painchance "MightyBoot", 256
  painchance "BootStun", 256
  painchance "MicrowaveBlast", 256
  +NOBLOCKMONST
  Species "PainElementalLostSouls"
  +DOHARMSPECIES
  +NOINFIGHTSPECIES
  +DONTHARMCLASS
  WoundHealth 10
  +FORCEXYBILLBOARD
  Damage (random(15,15))
  RenderStyle Normal
  Alpha 1
  States
  {
  Spawn:
    SKUL A 0
    "####" "#" 0 ThrustThingZ(0, 50, 0, 1)
    "####" "#" 1
    "####" "#" 0 A_Stop
  Idle:
    "####" "#" 0 Thing_ChangeTID(0,1000)
    SKUL AB 3 BRIGHT {A_Look; A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    Loop
  See:
    SKUL A 1 BRIGHT {A_SetSolid; A_ThruMasterSiblings(false);}
    SKUL A 2 BRIGHT {A_Chase; A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    SKUL A 2 BRIGHT {A_Chase("", "", CHF_NOPLAYACTIVE); A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    SKUL B 2 BRIGHT {A_Chase("", "", CHF_NOPLAYACTIVE); A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    SKUL B 2 BRIGHT {A_Chase; A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    Loop
  Missile:
    "####" "#" 0 A_SkullAttack
    "####" "#" 0 A_Recoil(5)
    SKUL CDCDCDCDCDCDCDCDCDCDCDCD 3 BRIGHT A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    "####" "#" 0 A_Stop
  MissileEnd:
    SKUL AB 3 BRIGHT {A_FaceTarget(5.0); A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    "####" A 0 A_JumpIfTargetInLOS(1, 5)
    loop
    "####" "#" 0
    goto Missile
  Pain.BootStun:
    "####" "#" 0 A_CustomMissile("FlameTrailsSmall1", random[RIDFX](-5, 37), random[RIDFX](-20, 20), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    SKUL EEE 3 BRIGHT A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL E 3 BRIGHT {A_PlayVoiceSoundPitch("Pain"); A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    SKUL EE 3 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    Goto See
  Pain:
    "####" "#" 0 {A_SetSolid; A_ThruMasterSiblings(false);}
    "####" "#" 0 A_CustomMissile("FlameTrailsSmall1", random[RIDFX](-5, 37), random[RIDFX](-20, 20), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_Jump(128,"Pain2")
    SKUL E 3 BRIGHT A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL E 3 BRIGHT {A_PlayVoiceSoundPitch("Pain"); A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    Goto See
  Pain2:
    SKUL L 3 BRIGHT A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL L 3 BRIGHT {A_PlayVoiceSoundPitch("Pain"); A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    Goto See
  Pain.MicrowaveBlast:
    "####" "#" 0 A_CustomMissile("FlameTrailsSmall1", random[RIDFX](-5, 37), random[RIDFX](-20, 20), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    SKUL E 1 BRIGHT
    "####" "#" 0 A_CheckThump("Pain.BootStun")
    loop
  Pain.Shrinker:
    "####" "#" 0 A_PlaySound("shrinker/shrink")
    "####" "#" 0 A_NoGravity
    "####" "#" 0 A_InvulnerablePlus(1)
    SKUL E 5 BRIGHT {A_PlayVoiceSoundPitch("Pain"); A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    "####" "#" 0 A_CustomMissile("ShrinkEffect",8,0,0)
  Shrink:
    "####" "#" 0 A_CustomMissile("FlameTrailsSmall1", random[RIDFX](-5, 37), random[RIDFX](-20, 20), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    SKUL E 2 BRIGHT {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); A_SpawnItemEx("RedFlareMedium", 0, 0, 16);}
    "####" "#" 0 A_JumpIf(ScaleX > 0.2 && ScaleY > 0.2, "Shrink")
    "####" "#" 0 A_Shrink("A","B","A","B",0.3)
    "####" "#" 0 A_Remove(AAPTR_DEFAULT)
    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:
    "####" "#" 0 A_CustomMissile("FlameTrailsSmall1", random[RIDFX](-5, 37), random[RIDFX](-20, 20), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    SKUL E 1 BRIGHT A_SetScale(ScaleX + 0.01, ScaleY + 0.01)
    "####" "#" 0 A_JumpIf(ScaleX < 1.5 && ScaleY < 1.5, "Expand")
    SKUL EEEEE 1 BRIGHT
    "####" "#" 0 A_SetScale(1.0, 1.0)
    "####" "#" 0 A_PlayVoiceSoundPitch("Death","",4)
    "####" "#" 0 A_SpawnItemEx("ExpanderExplosion",0,0,32,0,0,0,0,1,0)
    "####" "#" 0 A_SpawnDebris("Doom_LostSoulBone1",TRUE, 1.0, 1.0)
    goto Death+10
  Wound.Ice:
    "####" "#####" 0 A_CustomMissile("FlameTrails1", random[RIDFX](-5, 37), random[RIDFX](-20, 20), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    LSOL A 0 A_Freeze("See")
    LSOL A 0 A_Remove(AAPTR_DEFAULT)
    TNT1 A 1
    stop
  Death.PlasmaGib:
    "####" "#" 0 A_SpawnItemEx("DukePlasmaExplosion",0,0,32,0,0,0,0,1,0)
  XDeath:
  Death.BossStomp:
  Death.Explosion:
  Death.RocketExplosion:
  Death.ExplosiveShotgun:
  Death.ShellExplosion:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    goto Death+10
  Death:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    SKUL F 2 BRIGHT {A_PlayVoiceSoundPitch("Death","",4); A_SpawnItem("RedFlareMedium",0,0); A_CustomMissile("FlameTrails1", 16, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    SKUL FF 2 BRIGHT {A_SpawnItem("RedFlareMedium",0,0); A_CustomMissile("FlameTrails1", 16, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    SKUL GGG 2 BRIGHT {A_SpawnItem("RedFlareMedium",0,0); A_CustomMissile("FlameTrails1", 16, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    SKUL HHH 2 BRIGHT {A_SpawnItem("RedFlareMedium",0,0); A_CustomMissile("FlameTrails1", 16, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_SpawnDebris("Doom_LostSoulBone1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_CustomMissile ("RedPlasmaFire", 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))
    "####" "#####" 0 A_CustomMissile ("RedPlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    "####" "#" 0 A_PlaySound("skull/death")
    "####" "#" 0 A_PlayWeaponSound("skull/death")
    SKUL I 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    SKUL I 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    SKUL I 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    SKUL I 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    "####" "########" 0 A_CustomMissile("FlameTrails1", random[RIDFX](-5, 37), random[RIDFX](-20, 20), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_CustomMissile ("ShrinkerAttackSmoke", 1, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 160))
    SKUL J 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    SKUL J 1 bright {A_SpawnItem("RedFlareMedium",0,0); A_FadeOut(0.075);}
    SKUL J 1 bright A_FadeOut(0.075)
    SKUL J 1 bright A_FadeOut(0.075)
    SKUL K 1 bright A_FadeOut(0.075)
    SKUL K 1 bright A_FadeOut(0.075)
    SKUL K 1 bright A_FadeOut(0.075)
    SKUL K 1 bright A_FadeOut(0.075)
    "####" "#" 0 A_CustomMissile ("ShrinkerAttackSmoke", 1, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 160))
    Stop
  Dodge1:
    "####" "#" 0 A_Stop
    "####" "#" 0 A_Jump(128,2)
    "####" "#" 0 A_SetAngle(angle + random[RIDMONSTER](-85,-60))
    goto DodgeEnd1
    "####" "#" 0 A_SetAngle(angle + random[RIDMONSTER](-90,-85))
    goto DodgeEnd2
  Dodge2:
    "####" "#" 0 A_Stop
    "####" "#" 0 A_Jump(128,2)
    "####" "#" 0 A_SetAngle(angle + random[RIDMONSTER](60,85))
    goto DodgeEnd1
    "####" "#" 0 A_SetAngle(angle + random[RIDMONSTER](85,90))
    goto DodgeEnd2
  DodgeEnd1:
    "####" "#" 0 A_JumpIfTracerCloser(150, "DodgeEnd3")
    SKUL ABABAB 2 BRIGHT A_ChangeVelocity(4, 0, 0, CVF_RELATIVE)
    Goto Missile
  DodgeEnd2:
    "####" "#" 0 A_JumpIfTracerCloser(150, "DodgeEnd3")
    SKUL ABABAB 2 BRIGHT A_ChangeVelocity(3, 0, 0, CVF_RELATIVE)
    Goto Missile
  DodgeEnd3:
    SKUL ABABAB 2 BRIGHT A_ChangeVelocity(5, 0, 0, CVF_RELATIVE)
    Goto Missile
  }
}

ACTOR Doom_PainElementalLostSoul : Doom_LostSoul
{
  -SOLID

  var int user_masterdead;

  states
  {
  Spawn:
    SKUL C 0
    "####" "#" 0 A_ThruMasterSiblings(true)
    "####" "#" 0 A_SetSolid
    "####" "#" 0 A_PlayVoiceSoundPitch("","skull/melee",4)
    "####" "#" 0 A_JumpIfHealthLower (1, 3, AAPTR_MASTER)
    "####" "#" 0 A_ThrustToTarget(random[RIDMONSTER](15,20),true,false)
    "####" "#" 0 A_Jump(256,3)
    "####" "#" 0 A_ThrustToTarget(random[RIDMONSTER](10,15),true,false)
    "####" "#" 0 A_SetUserVar( "user_masterdead", 1)
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL CC 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL DD 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL CC 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL DD 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL CC 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL DD 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL CC 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL DD 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL CC 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_SpawnItemEx("RedFlareMedium", 0, 0, 16)
    SKUL DD 1 BRIGHT A_CustomMissile("FlameTrails1", random[RIDFX](5, 25), random[RIDFX](-10, 10), random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90))
    "####" "#" 0 A_ThruMasterSiblings(false)
    "####" "#" 0 A_JumpIf(user_masterdead==1,1)
    goto MissileEnd
    "####" "#" 0
    goto Missile
  }
}