actor MPainElemental : PainElemental replaces PainElemental
{
  tag PainElemental
  health 400
  radius 31
  height 56
  mass 400
  speed 8

  PainChance "Control", 255
  DamageFactor "Control", 1

  DamageFactor "MarineDamage", 1
  DamageFactor "ImpBallDamage", 0.5
  DamageFactor "ZombiesDamage", 0.5
  DamageFactor "CacoDamage", 0.5
  DamageFactor "SkelDamage", 0.5
  DamageFactor "FatsoDamage", 0.5
  DamageFactor "KnightDamage", 0.5
  DamageFactor "ArachDamage", 0.5
  DamageFactor "viledamage", 0.5
  
  states
  {
  Spawn:
    PAIN A 5 A_Look 
    PAIN A 5 
	PAIN A 0 Thing_SetSpecial (0,226,409,0,health)
    loop
  See:
    PAIN AABBCC 3 A_Chase
    PAIN A 0 A_JumpIf (special != 226,1) 
	loop	
	PAIN A 0 Thing_SetSpecial (0,226,409,0,health)
	goto see
  Missile:
    PAIN D 1 ACS_executealways(3026,0,0,0,0)
    PAIN D 1 A_JumpIfInventory("MonsterPainElementalAltFire",1,"AltMissile") // If ACS counts too many LostSouls, a puppets LS is fired
    PAIN D 5 A_FaceTarget
    PAIN E 5 A_FaceTarget
    PAIN F 5 Bright A_FaceTarget
    PAIN F 0 Bright A_PainAttack
    Goto See
  AltMissile:
    PAIN D 5 A_FaceTarget
    PAIN E 5 A_FaceTarget
    PAIN F 5 Bright A_FaceTarget
    PAIN F 1 A_PainAttack("MonsterSoulProj")
    PAIN F 0 A_TakeInventory("MonsterPainElementalAltFire",1)
    Goto See	
  Death.Control:
    TNT1 A 0 ACS_Execute(410,0,17)
	TNT1 A 10
	stop
  Death:
    PAIN H 8 bright A_GiveToTarget ("MarineExp",5)
    PAIN I 8 bright A_Scream
	PAIN JK 8
	PAIN L 3 A_PainDie
	PAIN L 3 A_PainDie
	PAIN L 3 A_PainDie
    PAIN M 8 bright
    stop	
  }
}

actor MonsterPainElementalAltFire : inventory
{ inventory.Maxamount 1 } 
actor MonsterPainElementalSoulDone : inventory
{ inventory.Maxamount 1 } 

actor MonsterSoulProj
{		
  radius 15
  height 38
  speed 20
  damage 8
  renderstyle SoulTrans
  seesound "skull/melee"
  DeathSound "skull/death"
  DamageType "ZombiesDamage"
  PROJECTILE
  +RANDOMIZE
  +DONTREFLECT
  +SKYEXPLODE
  states
  {
  Spawn:
    SKUL CDCD 4 BRIGHT
    SKUL C 1 ACS_executealways(3027,0,0,0,0)
    SKUL D 1 
    SKUL D 1 A_JumpIfInventory("MonsterPainElementalSoulDone",1,"Death") // break loop using ACS
    loop
   Death:
    SKUL F 6 BRIGHT A_Explode (18,128,0,0)
    SKUL G 6 BRIGHT A_Scream
    SKUL H 6 BRIGHT
    SKUL I 6 BRIGHT A_NoBlocking
    SKUL J 6
    SKUL K 6
    Stop
  }
}

