Class Priest : Actor //30118
{
  Default
  {
    Health 150;
    PainChance 170;
    Speed 8;
    Scale 0.90;
    Radius 20;
    Height 56;
    Mass 150;
    Obituary "An Acolyte was promoted for killing %o.";
    SeeSound "monster/acosit";
    PainSound "monster/acopai";
    DeathSound "monster/acodth";
    ActiveSound "monster/acoact";
    Monster;
    +FloorClip
    +DontHarmClass
    -NoGravity
    -Float
  }

  States
  {
  Spawn:
    ACOL AB 10 A_Look;
    Loop;
  See:
    ACOL AAABBB 4 A_Chase();
    ACOL A 0 A_Jump(96, "Slide");
    Loop;
  Slide:
    ACOL A 1
    {
      A_Chase();
      A_Playsound("monster/blur");
    }
    ACOL AAAAAABBBBBAAAAAAABBBBB 1 PriestSlide();
    ACOL B 0 Bright A_SpawnItem("AcolFX2",0,0);
    ACOL B 0 A_Jump(96, "See");
    Loop;
  Missile:
    ACOL D 8 Bright A_FaceTarget();
    ACOL E 5 Bright A_FaceTarget();
    ACOL FFFFFFFFFF 3 Bright
    {
      A_FaceTarget();
      A_SpawnProjectile("AcolyteShot",34,0,0,0);
    }
    Goto See;
  Pain:
    ACOL C 2;
    ACOL C 2 A_Pain;
    Goto See;
  Death:
    ACOL G 8 Bright A_Scream();
    ACOL H 5 Bright;
    ACOL I 5 Bright;
    ACOL J 5 Bright A_NoBlocking();
    ACOL KLM 5 Bright;
    ACOL N 5 A_SpawnItem("AcolFX1", 0, 54);
    ACOL O 5;
    ACOL P -1;
    Stop;
  Raise:
    ACOL PONMLKJIHG 5;
    Goto See;
  }

  void PriestSlide() //Cleans up the old See state quite a bit.
  {
    A_SpawnItem("AcolFX2",0,0);
    A_Chase();
  }
}

Class AcolFX1 : Actor
{
  Default
  {
    Radius 0;
    Height 2;
    Speed 0;
    RenderStyle "Translucent";
    Alpha 0.67;
    Projectile;
    +ClientSideOnly
  }

  States
  {
  Spawn:
    ACOL QRSTUVW 4;
    Stop;
  }
}

Class AcolFX2 : Actor
{
  Default
  {
    Radius 2;
    Height 2;
    Speed 0;
    Scale 0.90;
    RenderStyle "Translucent";
    Alpha 0.90;
    Projectile;
    +ClientSideOnly
  }

  States
  {
  Spawn:
    TNT1 A 3;
    ACOL A 5 A_FadeOut(0.10);
    Goto Spawn+1;
  }
}

Class AcolyteShot : Actor
{
  Default
  {
    Radius 8;
    Height 16;
    Speed 10;
    Damage 1;
    RenderStyle "Add";
    Alpha 0.67;
    SeeSound "monster/acosht";
    DeathSound "monster/acohit";
    Decal "BishopScorch";
    Projectile;
    +ThruGhost
    +SeekerMissile
    +FloatBob
  }

  States
  {
  Spawn:
    CFX1 A 1 Bright A_CStaffMissileSlither();
    CFX1 A 1 Bright A_CStaffMissileSlither();
    CFX1 B 1 Bright A_CStaffMissileSlither();
    CFX1 B 1 Bright A_CStaffMissileSlither();
    CFX1 B 0 Bright A_SeekerMissile(1,3);
    Loop;
  Death:
    CFX1 CDEFGH 3 Bright;
    Stop;
  }
}

Class NerfedSatyr : Actor
{
  Default
  {
    Health 150;
    Radius 18;
    Height 48;
    Scale 0.75;
    Speed 8;
    PainChance 50;
    Mass 350;
    SeeSound "satyr/sight";
    PainSound "knight/pain";
    DeathSound "satyr/death";
    ActiveSound "knight/active";
    HitObituary "%o was mauled by a satyr.";
    MONSTER;
    +FLOORCLIP
  }

  States
  {
  Spawn:
    STYR AB 10 A_Look();
    Loop;
  See:
    STYR AABBCCDD 3 A_Chase();
    Loop;
  Melee:
    STYR EF 6 A_FaceTarget();
    STYR G 6 A_CustomMeleeAttack(8*Random(1, 8), "Baron/Melee");
    STYR PQ 5 A_FaceTarget();
    STYR R 6 A_CustomMeleeAttack(8*Random(1, 8), "Baron/Melee");
    Goto See;
  Pain:
    STYR H 2;
    STYR H 2 A_Pain();
    Goto See;
  Death:
    STYR I 5;
    STYR J 5 A_Scream();
    STYR K 6;
    STYR L 7 A_Fall();
    STYR M 4;
    STYR N 4;
    STYR O -1;
    Stop;
  Raise:
    STYR ONMLKJI 8;
    Goto See;
    }
}

Class Avatar : Actor
{
  Default
  {
    Health 4000;
    PainChance 10;
    Speed 15;
    Radius 30;
    Height 96;
    Mass 2000;
    Obituary "%o was smoten by the Dark Avatar";
    SeeSound "monster/avasit";
    PainSound "monster/avapai";
    DeathSound "monster/avadth";
    ActiveSound "monster/avaact";
    MONSTER;
    +FLOORCLIP
    +NORADIUSDMG
    +BOSS
    +NOTARGET
  }

  States
  {
  Spawn:
    AVAT AB 10 A_Look();
    Loop;
  See:
    AVAT AABBCCDD 3 A_Chase();
    Loop;
  Missile:
    AVAT B 0 A_Jump(64,"Missile2");
    AVAT B 0 A_Jump(152,"Missile3");
    AVAT B 0 A_Jump(64,"Missile4");
  Missile1: //Red Lightning
    AVAT E 0 Bright A_FaceTarget();
    AVAT E 1 Bright A_PlaySound ("monster/avaatk");
    AVAT EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 2 Bright A_FaceTarget;
    AVAT F 1 Bright A_PlaySound ("MageLightningFire");
    AVAT F 14 Bright
    {
      A_SpawnProjectile("RedLiteTop",0,0, 15,2,45);
      A_SpawnProjectile("RedLiteBot",0,0, 15,2,45);
      A_SpawnProjectile("RedLiteTop",0,0,  0,2,45);
      A_SpawnProjectile("RedLiteBot",0,0,  0,2,45);
      A_SpawnProjectile("RedLiteTop",0,0,-15,2,45);
      A_SpawnProjectile("RedLiteBot",0,0,-15,2,45);
    }
    Goto See;
  Missile2: //Blue Ball
    AVAT I 0 Bright A_FaceTarget();
    AVAT I 1 Bright A_PlaySound("monster/avaatk");
    AVAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 2 Bright A_FaceTarget();
    AVAT J 15 Bright A_SpawnProjectile("AvaBall1",56,0,0,0,0);
    Goto See;
  Missile3:
    AVAT K 0 Bright A_FaceTarget();
    AVAT K 1 Bright A_PlaySound ("monster/avaatk");
    AVAT KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK 2 Bright A_FaceTarget();
    AVAT LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 2 Bright
    {
      A_FaceTarget();
      A_SpawnProjectile("AvaFireBall", 56,0,Random(-3,3), 0,0);
    }
    AVAT L 0 Bright A_FaceTarget();
    Goto See;
  Missile4:
    AVAT G 0 Bright A_FaceTarget();
    AVAT G 1 Bright A_PlaySound("monster/avaatk");
    AVAT GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 2 Bright A_FaceTarget();
    AVAT H 1 Bright A_PlaySound("weapons/justfi");
    AVAT H 14 Bright A_SpawnProjectile("HolyMissile2",52,0,0,0,0);
    Goto See;
  Pain:
    AVAT M 2;
    AVAT M 2 A_Pain();
    Goto See;
  Death:
    AVAT N 7 Bright;
    AVAT O 7 Bright A_Scream();
    AVAT P 7 Bright;
    AVAT Q 7 Bright A_NoBlocking();
    AVAT RSTU 7 Bright;
    AVAT V -1;
  }
}

Class RedLiteTop : LightningCeiling
{
  Default
  {
	MissileType "RedLiteZap";
  }
  States
  {
	Spawn:
	  MLFY A 2 Bright A_LightningZap;
	  MLFY BCD 2 Bright A_LightningClip;
	  Loop;
	Death:
	  MLF3 A 2 Bright A_LightningRemove;
	  MLF3 BCDEKLM 3 Bright;
	  ACLO E 35;
	  MLF3 NO 3 Bright;
	  MLF3 P 4 Bright;
	  MLF3 QP 3 Bright;
	  MLF3 Q 4 Bright;
	  MLF3 P 3 Bright;
	  MLF3 O 3 Bright;
	  MLF3 P 3 Bright;
	  MLF3 P 1 Bright A_HideThing;
	  ACLO E 1050;
	  Stop;
  }
}
Class RedLiteBot : LightningFloor
{
  Default
  {
	MissileType "RedLiteZap";
  }
  States
  {
	Spawn:
	  MLFY E 2 Bright A_LightningZap;
	  MLFY FGH 2 Bright A_LightningClip;
	  Loop;
	Death:
	  MLF3 F 2 Bright A_LightningRemove;
	  MLF3 GHIJKLM 3 Bright;
	  ACLO E 20;
	  MLF3 NO 3 Bright;
	  MLF3 P 4 Bright;
	  MLF3 QP 3 Bright;
	  MLF3 Q 4 Bright A_LastZap;
	  MLF3 POP 3 Bright;
	  MLF3 P 1 Bright A_HideThing;
	  Goto LightningCeiling::Death+19;
  }
}

Class RedLiteZap : LightningZap
{
  Default
  {
	Radius 15;
	Height 35;
	Damage 2;
	Projectile;
	RenderStyle "Add";
	Obituary "$OB_MPMWEAPLIGHTNING";
	-ACTIVATEIMPACT
	-ACTIVATEPCROSS
  }
  States
  {
	Spawn:
	  MLFY IJKLM 2 Bright A_ZapMimic;
	  Loop;
	Death:
	  MLFY NOPQRSTU 2 Bright;
	  Stop;
  }
}

Class AvaBall1 : Actor
{
  Default
  {
    Radius 20;
    Height 40;
    Speed 12;
    Damage 100;
    RenderStyle "Add";
    ALPHA 0.80;
    SeeSound "weapons/gntini";
    DeathSound "weapons/devexp";
    Decal "SorcererLightning";
    PROJECTILE;
    +THRUGHOST
  }

  States
  {
  Spawn:
    AFX4 ABCDEFGH 1 Bright A_Explode(64,64,0);
    loop;
  Death:
    AFX4 I 5 Bright;
    AFX4 I 0 Bright
    {
      A_SpawnProjectile("AvaBall2",0,0,  0,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall2",0,0, 60,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall2",0,0,120,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall2",0,0,180,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall2",0,0,240,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall2",0,0,300,CMF_AIMDIRECTION | CMF_TRACKOWNER);
    }
    AFX4 JKL 5 Bright A_Explode(128,128,0);
    stop;
  }
}

Class AvaFireBall : Actor
{
  Default
  {
    Radius 9;
    Height 18;
    Speed 20;
    Damage 5;
    RenderStyle "Add";
    ALPHA 0.80;
    SeeSound "weapons/bwoosh";
    DeathSound "weapons/firex2";
    Decal "RevenantScorch";
    PROJECTILE;
    +THRUGHOST
  }

  States
  {
  Spawn:
    AFX5 ABC 3 Bright;
    loop;
  Death:
    AFX5 D 3 Bright A_Explode(8, 32, 0);
    AFX5 EFGH 3 Bright;
    stop;
  }
}

Class AvaBall2 : Actor
{
  Default
  {
    Radius 10;
    Height 20;
    Speed 15;
    Damage 0;
    RenderStyle "Add";
    ALPHA 0.75;
    DeathSound "weapons/devzap";
    Decal "BaronScorch";
    PROJECTILE;
    +THRUGHOST
   }

  States
  {
  Spawn:
    AFX1 ABC 1 Bright;
    loop;
  Death:
    AFX1 DE 4 Bright A_Explode(64, 32, 0);
    AFX1 F 4 Bright
    {
      A_SpawnProjectile("AvaBall3",0,0,  0,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall3",0,0, 60,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall3",0,0,120,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall3",0,0,180,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall3",0,0,240,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall3",0,0,300,CMF_AIMDIRECTION | CMF_TRACKOWNER);
    }
    AFX1 GHI 4 bright;
    stop;
  }
}

Class AvaBall3 : Actor
{
  Default
  {
    Radius 6;
    Height 12;
    Speed 12;
    Damage 0;
    RenderStyle "Add";
    ALPHA 0.75;
    DeathSound "weapons/gnthit";
    Decal "DoomImpScorch";
    PROJECTILE;
    +THRUGHOST
  }

  States
  {
  Spawn:
    AFX2 ABC 1 Bright;
    loop;
  Death:
    AFX2 D 4 Bright A_Explode(24, 16, 0);
    AFX2 E 4 Bright
    {
      A_SpawnProjectile("AvaBall4",0,0,  0,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall4",0,0, 60,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall4",0,0,120,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall4",0,0,180,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall4",0,0,240,CMF_AIMDIRECTION | CMF_TRACKOWNER);
      A_SpawnProjectile("AvaBall4",0,0,300,CMF_AIMDIRECTION | CMF_TRACKOWNER);
    }
    AFX2 FG 4 bright;
    stop;
  }
}

Class AvaBall4 : Actor
{
  Default
  {
    Radius 3;
    Height 6;
    Speed 10;
    Damage 0;
    RenderStyle "Add";
    ALPHA 0.75;
    DeathSound "monster/hadsit";
    Decal "HImpScorch";
    PROJECTILE;
    +THRUGHOST
  }

  States
  {
  Spawn:
    AFX3 ABC 1 Bright;
    loop;
  Death:
    AFX3 D 3 Bright A_Explode(8, 8, 0);
    AFX3 EFGH 3 Bright;
    stop;
  }
}

Class HolyMissile2 : Actor
{
  Default
  {
    Radius 3;
    Height 3;
    Speed 20;
    Damage 16;
    RenderStyle "Add";
    Alpha 0.67;
    SeeSound "monster/bomb";
    DeathSound "monster/explode";
    Decal "Scorch";
    PROJECTILE;
    +SEEKERMISSILE
  }

  States
  {
  Spawn:
    SPI2 A 1 Bright A_SpawnProjectile("HolyMissileTrail",0,0,0,0);
    SPI2 A 0 Bright A_SeekerMissile(10,10);
    SPI2 B 1 Bright A_SpawnProjectile("HolyMissileTrail",0,0,0,0);
    SPI2 A 0 Bright A_SeekerMissile(10,10);
    SPI2 A 1 Bright A_SpawnProjectile("HolyMissileTrail",0,0,0,0);
    SPI2 A 0 Bright A_SeekerMissile(10,10);
    SPI2 B 1 Bright A_SpawnProjectile("HolyMissileTrail",0,0,0,0);
    SPI2 A 0 Bright A_SeekerMissile(10,10);
    SPI2 A 1 Bright A_SpawnProjectile("HolyMissileTrail",0,0,0,0);
    SPI2 A 0 Bright A_SeekerMissile(10,10);
    SPI2 B 1 Bright A_SpawnProjectile("HolyMissileTrail",0,0,0,0);
    Loop;
  Death:
    SPI2 KLMNO 3 Bright;
    Stop;
   }
}

Class HolyMissileTrail : Actor
{
  Default
  {
    Radius 3;
    Height 3;
    Speed 15;
    RenderStyle "Add";
    Alpha 0.67;
    PROJECTILE;
    +FireDamage;
    +ClientSideOnly;
  }

  States
  {
  Spawn:
    SPI2 QRS 4;
    Goto Death;
  Death:
    SPI2 C 3 BRIGHT;
    SPI2 D 3 BRIGHT;
    Stop;
  }
}
