Class NetherDarkImp : Actor
{
  Default
  {
    Health 300;
    Radius 22;
    Height 60;
    Speed 9;
    PainChance 100;
    Mass 500;
    Scale 1.2;
    Bloodcolor "Green";
    SeeSound "imp/sight";
    PainSound "imp/pain";
    DeathSound "imp/death";
    ActiveSound "imp/active";
    Obituary "%o was cursed by a dark imp.";
    HitObituary "%o was touched by a dark imp.";
    MONSTER;
    +FLOORCLIP
  }

  States
  {
  Spawn:
    DRKF AB 10 A_Look();
    Loop;
  See:
    DRKF AABBCCDD 3 A_Chase();
    Loop;
  Melee:
    DRKF IJ 8 A_FaceTarget();
    DRKF K 6 A_CustomComboAttack("InfernoBall", 32, 6*random(1,8), "imp/melee");
    Goto See;
  Missile:
    DRKF E 1 A_Jump (255, "Attack1", "Attack2");
    Goto See;
  Attack1:
    DRKF EF 8 A_FaceTarget();
    DRKF G 6 A_SpawnProjectile ("NetherLightning", 32, 0, 0);
    Goto See;
  Attack2:
    DRKF IJ 8 A_FaceTarget();
    DRKF K 6 A_SpawnProjectile ("InfernoBall", 32, 0, 0);
    Goto See;
  Pain:
    DRKF H 2;
    DRKF H 2 A_Pain();
    Goto See;
  Death:
    DRKF L 8;
    DRKF M 8 A_Scream();
    DRKF N 5;
    DRKF O 5 A_Fall();
    DRKF P -1;
    Stop;
  XDeath:
    DRKF Q 5;
    DRKF R 5 A_XScream();
    DRKF S 5;
    DRKF T 5 A_Fall();
    DRKF UVW 5;
    DRKF X -1;
    Stop;
  Raise:
    DRKF PO 8;
    DRKF NML 6;
    Goto See;
  }
}

Class InfernoBall : Actor
{
  Default
  {
    Radius 8;
    Height 6;
    Speed 20;
    Damage 12;
    RENDERSTYLE "ADD";
    ALPHA 0.67;
    SeeSound "baron/attack";
    DeathSound "baron/shotx";
    Decal "DoomImpScorch";
    PROJECTILE;
  }

  States
  {
  Spawn:
    IBAL AAAABBBB 1 Bright A_SpawnItemEx ("InfernoBallTrail", 0, 0, 0, random(0, -4), random(-2, 2), random(-2, 2), 0, 0, 0);
    Loop;
  Death:
    IBAL CDE 4 Bright;
    Stop;
  }
}

Class InfernoBallTrail : Actor
{
  Default
  {
    Radius 1;
    Height 1;
    Speed 0;
    Damage 0;
    Scale 0.2;
    +NOGRAVITY
    +ClientSideOnly
  }

  States
  {
  Spawn:
    ITRL ABCDEFGHIJKLMN 1 Bright;
    stop;
  }
}

Class NetherLightning : Actor
{
  Default
  {
    Radius 8;
    Height 6;
    Speed 24;
    Damage 4;
    RENDERSTYLE "ADD";
    ALPHA 0.75;
    Scale 0.75;
    SeeSound "Imp/attack";
    DeathSound "weapons/plasmax";
    Decal "DoomImpScorch";
    PROJECTILE;
    +RIPPER
  }

  States
  {
  Spawn:
    NLIT AA 1 Bright A_SpawnItemEx ("NetherLightningTrail", 0, 0, 0, 0, 0, 0, 0, 0, 0);
    NLIT A 0 Bright A_SpawnItemEx ("NetherLightningSpark", 0, 0, 0, random(0, -4), random(-2, 2), random(-2, 2), 0, 0, 0);
    NLIT AA 1 Bright A_SpawnItemEx ("NetherLightningTrail", 0, 0, 0, 0, 0, 0, 0, 0, 0);
    NLIT A 0 Bright A_SpawnItemEx ("NetherLightningSpark", 0, 0, 0, random(0, -4), random(-2, 2), random(-2, 2), 0, 0, 0);
    loop;
  Death:
    NLIT ABCDEFG 1 Bright;
    Stop;
  }
}

Class NetherLightningTrail : Actor
{
  Default
  {
    Radius 8;
    Height 6;
    Speed 1;
    Damage 0;
    RENDERSTYLE "ADD";
    ALPHA 0.75;
    Scale 0.75;
    PROJECTILE;
    +RIPPER
    +ClientSideOnly
  }

  States
  {
  Spawn:
    NLIT A 1 A_FadeOut (0.025);
    NLIT A 0 A_Jump (32, "Spark");
    loop;
  Spark:
    NLIT A 0 A_SpawnItemEx ("NetherLightningSpark", 0, 0, 0, random(0, -4), random(-2, 2), random(-2, 2), 0, 0, 0);
    goto Spawn;
  }
}

Class NetherLightningSpark : Actor
{
  Default
  {
    Radius 1;
    Height 1;
    Speed 0;
    Damage 0;
    Scale 0.3;
    +NOGRAVITY
    +ClientSideOnly
  }

  States
  {
  Spawn:
    NLIT BCDEFG 1 Bright;
    stop;
  }
}

Class BabyCaco : Actor
{
	Default
	{
		//$Category Realm667 Monsters
		Health 150;
		Radius 18;
		Height 36;
		Mass 200;
		Speed 9;
		PainChance 176;
		SeeSound "BabyCaco/Sight";
		PainSound "BabyCaco/Pain";
		DeathSound "BabyCaco/Death";
		ActiveSound "BabyCaco/Active";
		BloodColor "Blue";
		Obituary "%o underestimated a Baby Cacodemon.";
		HitObituary "%o was nibbled to death by a Baby Cacodemon.";
		MONSTER;
		+NOGRAVITY
		+FLOAT
	}

	States
	{
	Spawn:
		CACB A 10 A_Look();
		Loop;
	See:
		CACB A 3 A_Chase();
		Loop;
	Melee:
	Missile:
		CACB AB 5 A_FaceTarget();
		CACB C 5 A_CustomComboAttack("BabyCacoBall", 17, random(1,8) * 3, "BabyCaco/Melee");
		Goto See;
	Pain:
		CACB D 3;
		CACB D 3 A_Pain();
		CACB E 6;
		Goto See;
	Death:
		CACB F 8;
		CACB G 8 A_Scream();
		CACB H 8;
		CACB I 8;
		CACB J 8 A_NoBlocking();
		CACB K 8;
		CACB L -1 A_SetFloorClip();
		Stop;
	Raise:
		CACB L 8 A_UnSetFloorClip();
		CACB KJIHGF 8;
		Goto See;
	}
}

Class BabyCacoBall : Actor
{
	Default
	{
		Radius 3;
		Height 4;
		Speed 11;
		FastSpeed 10;
		Damage 3;
		RenderStyle "STYLE_Add";
		Alpha 1.0;
		SeeSound "caco/attack";
		DeathSound "caco/shotx";
		Decal "HImpScorch"; //usually it is better to put this in a DECALDEF lump - ozy81
		PROJECTILE;
		+BRIGHT
		+RANDOMIZE
	}

	States
	{
	Spawn:
		BCAB AB 4;
		Loop;
	Death:
		BCAB CDE 6;
		Stop;
	}
}

