ACTOR SpiritImp
{
  Health 150
  Radius 20
  Height 56
  Mass 120
  Speed 10
  BloodType None
  MONSTER
  RENDERSTYLE add
  Alpha 0.7
  MeleeDamage 10
  +FloorClip
  +NoBloodDecals
  DamageFactor "Ice", 0.0
  DamageFactor "FreezerBurn", 0.0
  DamageFactor "Fire", 0.0
  DropItem "LifeEssence" 200 1
  DropItem "ArmorBonusMax" 200 1
  DropItem "BossLifeEssence" 64
  DropItem "BossArmorBonusMax" 64
  DropItem "NewCell" 100 20
  DropItem "Freezer Rifle" 20 1
  SEESOUND "SpiritImp/Sight"
  DEATHSOUND "SpiritImp/Death"
  ACTIVESOUND "SpiritImp/Active"
  HITOBITUARY "%o was chilled by the touch of a spirit imp"
  OBITUARY "%o was chilled by a spirit imp"
  states
  {
  Spawn:
    SPIP B 10 A_Look
    Loop
  See:
    SPIP A 0 A_CustomMissile("OrbitSpirit", 32, 0, 90)
    SPIP A 0 A_CustomMissile("OrbitSpirit2", 32, 0, -90)
    TNT1 A 0 A_SpawnItem("FRZRAGFlameSpawner",0,0,0,0)
	SPIP AABBCCDD 3 A_Chase
    Goto See+2
  Melee:
    TNT1 A 0 A_JumpIfCloser(210,"PoltFlameShot")
  ChillTouch:
    SPIP EFG 3 Bright A_FaceTarget
	SPIP HIJK 4 Bright A_FaceTarget  
	SPIP L 1 A_MeleeAttack
	GoTo See+2
  PoltFlameShot:
    SPIP EFG 6 Bright A_FaceTarget
	SPIP HIJK 6 Bright A_FaceTarget
	TNT1 A 0 A_PlaySound("devil/scream")
    SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
	SPIP L 0 A_FaceTarget
	SPIP L 1 Bright A_CustomMissile("PoltFlameShot", 45, 0, 0, 0, 0)
    Goto See+2
  Missile:
    TNT1 A 0 A_Jump(160, "GhostFlame")
	TNT1 A 0 A_Jump(70,"SeekerBall2")
  SeekerBall1:
    TNT1 A 0 A_SpawnItem("FRZRAGFlameSpawner",0,0,0,0)
    SPIP EFG 4 A_FaceTarget
    SPIP HIJK 5 A_FaceTarget
    SPIP L 6 A_CustomMissile("SpiritImpBall", 32, 5)
    SPIP M 10
    Goto See +2
  SeekerBall2:
    TNT1 A 0 A_SpawnItem("FRZRAGFlameSpawner",0,0,0,0)
    SPIP EFG 4 A_FaceTarget
    SPIP HIJK 5 A_FaceTarget
    SPIP L 6 A_CustomMissile("SpiritImpBall2", 32, 5)
    SPIP M 5
    Goto See +2
  GhostFlame:
    TNT1 A 0 A_SpawnItem("FRZRAGFlameSpawner",0,0,0,0)
    SPIP EFG 3 A_FaceTarget
    SPIP HIJK 4 A_FaceTarget
    SPIP L 4 A_CustomMissile("SpiritFlame", 32, 5)
    SPIP M 5 A_Jump(180, "GhostFlame")
    Goto See +2	
  Pain:
    SPIP O 3
    SPIP O 3 A_Pain
    Goto See +2
  Death:
    SPIP O 7 A_Scream
    SPIP PQR 7
    SPIP S 6 A_SpawnItemEx("SpiritImpGhost1", 0, 0, 32, 0, 0, 0, 0, 128)
    SPIP T 5 
    SPIP U 5 A_SpawnItem("SpiritImpGhost")
    SPIP V 5 A_NoBlocking
    SPIP W 3 A_FadeOut(0.015)
    Wait
    }
 }


actor SpiritImpBall
{
    Radius 8
    Height 6
    Scale 0.65
    Speed 12
    Damage 8
    +SEEKERMISSILE
    PROJECTILE
    Renderstyle ADD
    SeeSound "harvester/scream"
    DeathSound "imp/shotx"
    Decal DoomImpScorch
    States
    {
    Spawn:
    	SIBA A  0 A_SpawnItemEx("SpiritImpBallTrail", 0, 0, 0, 0, 0, 0, 0, 180)
        SIBA AB 2 A_SeekerMissile (10,20)
        Loop
    Death:
        SIBA CDEFGHIJKL 4
        Stop
    }
}

Actor SpiritImpBall2 : SpiritImpBall
{
    DamageType Ice
    Damage 15
	Translation Ice
}

actor SpiritImpBallTrail
{
    Radius 1
    Height 1
    Speed 0
    PROJECTILE
    RENDERSTYLE ADD
    ALPHA 0.5
    +NOCLIP
    States
    {
    Spawn:
    Death:
    	SITR H 6
        SITR ABCDEFG 4
        Stop
    }
}

Actor SpiritFlame
{
   Radius 9
   Height 18
   Speed 20
   Damage 12
   DamageType Ice
   ExplosionDamage 10
   ExplosionRadius 80
   PROJECTILE
   RENDERSTYLE ADD
   ALPHA 0.80
   Scale 0.8
   +THRUGHOST
   SeeSound "harvester/scream"
   DeathSound "imp/shotx"
   Decal "RevenantScorch"
   States
   {
   Spawn:
      SIBA AB 1 BRIGHT A_SpawnItemEx("SpiritFlameTail", 0, 0, 0, 0, 0, 0, 0, 128)
      Loop
   Death:
      SIBA CDEFGHIJKL 3 BRIGHT A_Die
      Stop
   }
}

Actor SpiritFlameTail
{
    PROJECTILE
	Scale 0.9
    RENDERSTYLE ADD
    +NOCLIP
    ALPHA 0.15
	States
    {
    Spawn:
	    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
        PYT3 ABCDEFGHI 1 Bright
        Stop
	}	
}

actor OrbitSpirit : SpiritImpBall
{
     SeeSound ""
     +NOCLIP
     Scale 0.4
     Alpha 0.1
     Speed 3
     MissileHeight 0
     States
     {
     Spawn:
         SIBA AABB 1
         SIBA A 3 A_CustomMissile("OrbitSpirit", 0, 0, 75)
         Stop
     Death:
    	 SIBA A 2 A_FadeOut(0.015)
         loop
     }
}

actor OrbitSpirit2 : OrbitSpirit
{
     Speed 10
     MissileHeight 0
     States
     {
     Spawn:
         SIBA AABB 1
         SIBA A 0 A_CustomMissile("OrbitSpirit", 0, 0, -75)
         stop
     Death:
    	 SIBA A 2 A_FadeOut(0.015)
         loop
     }
}


actor SpiritImpGhost1
{
    Radius 1
    Height 1
    Speed 0
    PROJECTILE
    RENDERSTYLE ADD
    ALPHA 0.7
    +NOCLIP
    SeeSound "harvester/ghost"
    States
    {
    Spawn:
    Death:
        SIGH A 0
        SIGH A 0 A_PlaySound("harvester/ghost")
        SIGH ABCDEFG 4
        Stop
    }
}

Actor SpiritImpGhost
{
  Radius 20
  Height 56
  Mass 120
  Speed 10
  renderstyle add
  alpha 0.2
  +NOTELEPORT
  +FLOORCLIP
  -SOLID
  -SHOOTABLE
  +NONSHOOTABLE
  +LOOKALLAROUND
  States
  {
  Spawn:
    SPIP AABB 6 A_Look
    SPIP A 0 A_FadeOut(0.005)
    Loop
  See:
    SPIP AABBCCDD 3 A_VileChase
    SPIP A 0 A_FadeOut(0.005)
    Loop
  Death:
    TNT1 A 1
    Stop
  Heal:
    TNT1 A 1
    Goto Death
  }
}

