Actor StoneDemon : BullFiend
{
  Health 400
  Radius 24
  Height 48
  Speed 13
  Mass 800
  Monster
  RadiusDamageFactor 0.25
  BloodType "StoneBitsSpawner"
  SeeSound "stone/sight"
  AttackSound "demon/melee"
  PainSound "demon/pain"
  DeathSound "stone/death"
  ActiveSound "demon/active"
  HitObituary "%o was smashed by a stone demon."
  +FLOORCLIP
  +NOPAIN
  +DONTHARMSPECIES
  +FASTMELEE
  Species "Fiends"
  DamageFactor "Bullet", 0.40
  DamageFactor "Explosion", 0.75
  DamageFactor "FiendFire", 0.0
  DamageFactor "DTFiendEx", 0.0
  DropItem "ArmorPlate" 200
  DropItem "LifeEssence" 125
  DropItem "ArmorBonusMax" 125
  MaxTargetRange 200
  States
  {
  Spawn:
    STON A 10 A_Look
    Loop
  See: 
    STON AABB 2 A_Chase
    TNT1 A 0 A_SpawnItem("HeavyFleshStep",0,0,0,0)
    STON CCDD 2 A_Chase
    TNT1 A 0 A_SpawnItem("HeavyFleshStep",0,0,0,0)
    Loop
  Melee:
    STON EF 8 A_FaceTarget
    STON G 6 A_CustomMeleeAttack(28,"stone/melee",none)
    Goto See
  Missile:
	TNT1 A 0 A_JumpIfCloser(200,1)
	Goto See
	TNT1 A 0 A_PlaySound("demon/melee")
	STON EF 7 A_FaceTarget
	TNT1 A 0 A_ChangeFlag(SLIDESONWALLS,1)
	TNT1 A 0 ThrustThingZ(0,20,0,1)
	STON F 2 A_Recoil(-24)
	STON F 3 A_CustomMissile("PinkyLunge",18,0,0,CMF_AIMDIRECTION)
	STON G 6
	STON G 2 A_ScaleVelocity(0.2)
    TNT1 A 0 A_ChangeFlag(SLIDESONWALLS,0)
	STON G 1 A_ScaleVelocity(0)
	Goto See	
  Pain:
    STON H 3
    STON H 3 A_Pain
    Goto See
  XDeath:
  Death:
    STON I 5 A_CustomMissile("SmokeFX",Random(10,40),0,random(0,360),2,random(0,360))	
	TNT1 AAAA 0 A_SpawnItemEx("Debris",0,0,0,Random(4,-4),Random(4,-4),Random(4,8),0,128)
    STON J 5 A_Scream
    STON K 5 A_CustomMissile("SmokeFX",Random(10,40),0,random(0,360),2,random(0,360))	
	TNT1 AAAA 0 A_SpawnItemEx("Debris",0,0,0,Random(4,-4),Random(4,-4),Random(4,8),0,128)
    STON L 5 A_NoBlocking
    STON MNOP 4
    STON Q -1
    Stop
  Raise:
  	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("VileHealEffect",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
    STON OPNMLKJI 3
	Goto See	
  }
}

ACTOR StoneBitsSpawner : BulletPuff
{
  -ALLOWPARTICLES
  States
  {
  Spawn:
    TNT1 A 0
    Goto High
    TNT1 A 0
    Goto Medium
    TNT1 A 0
  Low:
    TNT1 AA 0 A_SpawnItemEx("StoneBitsSmall", 0, 0, 8, random(-4, 4), random(-4, 4), random(2, 5), 0, SXF_ABSOLUTEPOSITION | SXF_ABSOLUTEANGLE | SXF_ABSOLUTEMOMENTUM)
    Goto SpawnPuff
  Medium:
    TNT1 AAA 0 A_SpawnItemEx("StoneBitsMedium", 0, 0, 8, random(-4, 4), random(-4, 4), random(2, 5), 0, SXF_ABSOLUTEPOSITION | SXF_ABSOLUTEANGLE | SXF_ABSOLUTEMOMENTUM)
    Goto SpawnPuff
  High:
    TNT1 AAAAA 0 A_SpawnItemEx("StoneBitsLarge", 0, 0, 8, random(-4, 4), random(-4, 4), random(2, 5), 0, SXF_ABSOLUTEPOSITION | SXF_ABSOLUTEANGLE | SXF_ABSOLUTEMOMENTUM)
  SpawnPuff:
    PUFF A 4 Bright A_PlaySound("stoneimp/impact")
    PUFF ABCD 4
    Stop
  }
}

ACTOR StoneBitsBase
{
  Radius 2
  Height 2
  +NOTELEPORT
  +NOBLOCKMAP
  States
  {
  Fade:
    "####" "#" 1 A_FadeOut(0.25)
    Wait
  }
}

ACTOR StoneBitsSmall : StoneBitsBase
{
  States
  {
  Spawn:
    TNT1 AA 0 A_Jump(256, "SpawnA", "SpawnB")
  SpawnA:
    TNT1 A 0 A_Jump(256, 1, 2, 3, 4)
    STB1 A 10
    Goto Fade
    STB1 B 10
    Goto Fade
    STB1 C 10
    Goto Fade
    STB1 D 10
    Goto Fade
  SpawnB:
    TNT1 A 0 A_Jump(256, 1, 2)
    STB2 A 10
    Goto Fade
    STB2 B 10
    Goto Fade
  }
}

ACTOR StoneBitsMedium : StoneBitsBase
{
  States
  {
  Spawn:
    TNT1 AA 0 A_Jump(256, "SpawnA", "SpawnB", "SpawnC")
  SpawnA:
    TNT1 A 0 A_Jump(256, 1, 2, 3, 4)
    STB1 A 10
    Goto Fade
    STB1 B 10
    Goto Fade
    STB1 C 10
    Goto Fade
    STB1 D 10
    Goto Fade
  SpawnB:
    TNT1 A 0 A_Jump(256, 1, 2)
    STB2 A 10
    Goto Fade
    STB2 B 10
    Goto Fade
  SpawnC:
    TNT1 A 0 A_Jump(256, 1, 2, 3, 4)
    STB3 A 10
    Goto Fade
    STB3 B 10
    Goto Fade
    STB3 C 10
    Goto Fade
    STB3 D 10
    Goto Fade
  }
}

ACTOR StoneBitsLarge : StoneBitsBase
{
  States
  {
  Spawn:
    TNT1 AA 0 A_Jump(256, "SpawnB", "SpawnC", "SpawnD")
  SpawnB:
    TNT1 A 0 A_Jump(256, 1, 2)
    STB2 A 10
    Goto Fade
    STB2 B 10
    Goto Fade
  SpawnC:
    TNT1 A 0 A_Jump(256, 1, 2, 3, 4)
    STB3 A 10
    Goto Fade
    STB3 B 10
    Goto Fade
    STB3 C 10
    Goto Fade
    STB3 D 10
    Goto Fade
  SpawnD:
    TNT1 A 0 A_Jump(256, 1, 2, 3, 4)
    STB4 A 10
    Goto Fade
    STB4 B 10
    Goto Fade
    STB4 C 10
    Goto Fade
    STB4 D 10
    Goto Fade
  }
}

