

// MAP HANDLER
class MapHandler : EventHandler
{
    uint stepTics;
	
	// footstep sounds
	override void WorldTick()
	{
		if (stepTics > 0)
            stepTics--;
        
        if (stepTics <= 0)
        {
            if (players[consoleplayer].onground)
            {
                let plr = players[consoleplayer].mo;
                
				if (plr.floorpic == TexMan.CheckForTexture("FWATER1", TexMan.TYPE_ANY)
				|| plr.floorpic == TexMan.CheckForTexture("OWATER08", TexMan.TYPE_ANY)
				|| plr.floorpic == TexMan.CheckForTexture("ELMLAV01", TexMan.TYPE_ANY)
				|| plr.floorpic == TexMan.CheckForTexture("WFALL1", TexMan.TYPE_ANY)
				)
				{
                    plr.A_StartSound("WADE", CHAN_BODY, CHANF_OVERLAP, volume: plr.vel.xy.Length() * 0.1);
                    stepTics = 15;
                }
            }
        }
	}
}

class ExplosionDummy: Actor {
	Default {
		ALPHA 0.7;
		Radius 10;
		Height 32;
		Speed 0;
		Scale 1.5;
		+NOCLIP
	}
	States {
		Spawn:
			MISL B 5 BRIGHT;
			MISL C 5 BRIGHT A_Explode(0,128);
			MISL D 5 BRIGHT;
			Stop;
	}	
}

class HangingGoldChain : Actor {
	Default {
		//$Category Garden
		Radius 4;
		Height 122;
		+SPAWNCEILING
		+NOGRAVITY
		+NOBLOCKMAP
	}
	States {
	  Spawn:
		GCHN A -1;
		Stop;
	}
}
//ERKY DRONE
class ErkDrone : Actor
{
  Default
  {
	//$Category UserActors
    Height 81;
    Radius 32;
	Speed 15;
	FloatSpeed 15;
	FloatBobPhase 16;
	FloatBobStrength -1;
    //+SHOOTABLE // Will react to being hit by attacks
    Painchance 0; // Will always enter its Pain state sequence when damaged
    PainSound "floweyhit"; // Sound made when A_Pain is called
    +NODAMAGE // Will not actually take any damage from being attacked but will still react
	+FLOAT
	+NOPAIN
	+NOGRAVITY
	+FLOATBOB
	+SOLID
	+NOBLOOD
	+DONTTHRUST
  }
  States
  {
	Spawn:
		ERKY ABCDEFGH 5 NoDelay A_StartSound("helicopter",CHAN_BODY,CHANF_LOOPING,0.5,ATTN_NORM,1.0);
		Loop;
	Painhold:
		ERKP A 1 A_Pain;
		ERKP BCDEFGH 4;
		goto Spawn;
	Pain:
		goto Painhold;
  }
}

class ImposterIntro : Actor {
	Default {
	//$Category UserActors
	  Radius 20;
	  Height 48;
	  Mass 800;
	  Speed 20;
	  Scale 2.0;
	  +NOCLIP
  }
  States
  {
	Spawn:
		KAMG LMN 5;
		Goto Run;
	Run:
		KAMG AABBAACC 3;
		KAMG AABBAACC 3;
		KAMG AABBAACC 3;
		KAMG AABBAACC 3;
		KAMG AABBAACC 3;
		KAMG AABBAACC 3;
		KAMG AABBAACC 3;
		TNT1 A 0;
		Stop;
  }
}

// DAVID DOLL PICKUP
class FurryFunko : Inventory {}
class DavidDoll : CustomInventory
{
	Default {
		//$Category UserPickups
		Inventory.PickupSound "misc/i_pkup";
		Inventory.PickupMessage "You got the Furry FUNKO!";
		Radius 32;
		Height 16;
		+COUNTITEM;
	}

	States
	{
	Spawn:
		AAVD ABCBADED 7;
		Loop;
	Pickup:
		TNT1 A 0 A_GiveInventory("FurryFunko");
	}
}
class RAMP2024Ticket : Inventory {}
class TrainTicketPickup : CustomInventory
{
	Default {
		//$Category UserPickups
		Inventory.PickupSound "misc/i_pkup";
		Inventory.PickupMessage "You got the RAMP2024 Ticket!";
		Radius 32;
		Height 16;
		Scale 0.1;
		+COUNTITEM;
	}

	States
	{
	Spawn:
		RAMP A -1;
	Pickup:
		TNT1 A 0 A_GiveInventory("RAMP2024Ticket");
	}
}

class GreenSkull : Inventory{
	Default {
		Inventory.MaxAmount 3;
	}
}
class GreenSkullPickup : CustomInventory {
	Default
	{
		Scale 2.0;
		Inventory.Pickupmessage "Picked up a green skull!";
	}
	States
	{
	Spawn:
		GSKU A 10;
		GSKU B 10 bright;
		loop;
	Pickup:
		TNT1 A 0 A_GiveInventory("GreenSkull");
	}
}

//LittleBoyKisser

class LittleBoyKisser : Actor
{
	Default { 
		//$Category Boykisser
		Obituary "Good boy UwU";
		Height 56;
		Radius 20;
		PainChance 256;
		Health 60;
		Speed 12;
		Scale 0.18;
		Meleedamage 20;
		PainSound "AUUA";
		Monster;
		+LOOKALLAROUND
		+FLOORCLIP
		+NOBLOOD
		+NOBLOODDECALS
	}

	States {
	Spawn:
		BOYS GG 2 A_Look;
		Loop;
	See:
		BOYS A 0 A_StartSound("UWU");
		BOYS ABABCDEDEFF 3 A_Chase;
		Loop;
	Melee:
		BOYS GG 0 A_StartSound("KISS");
		BOYS GH 6 A_FaceTarget;
		BOYS HH 6 A_CustomMeleeAttack(random(6, 12) * 2, "", "", "Melee", true);
		Goto See;
	Pain:
		BOYS A 0;
		BOYS JJJ 4 A_Pain;
		Goto See;
	Death:
		NNYA AA 4 A_StartSound("MRRR",CHAN_BODY,CHANF_DEFAULT,1.0,ATTN_NORM,1.0);
		NNYA AA 4 A_SpawnItemEx("OWO1", Random(20, 30), 0, 0, 0, 0, (Random(0, 15)*0.2), Random(0, 256), 128);
		NNYA BBBB 4 A_SpawnItemEx("OWO1", Random(20, 30), 0, 0, 0, 0, (Random(0, 20)*0.2), Random(0, 256), 128);
		Loop;
	}
}

//NormalBoyKisser

class NormalBoyKisser : Actor
{
	Default {
	//$Category Boykisser
		Obituary "Good boy UwU";
		Height 56;
		Radius 23;
		PainChance 256;
		Health 120;
		Speed 12;
		Scale 0.24;
		Meleedamage 30;
		PainSound "AUUA";
		Monster;
		+LOOKALLAROUND
		+FLOORCLIP
		+NOBLOOD
		+NOBLOODDECALS
	}
	
	States {
	Spawn:
		BOYS GG 2 A_Look;
		Loop;
	See:
		BOYS A 0 A_StartSound("UWU");
		BOYS ABABCDEDEFF 3 A_Chase;
		Loop;
	Melee:
		BOYS GG 0 A_StartSound("KISS");
		BOYS GH 6 A_FaceTarget;
		BOYS HH 6 A_CustomMeleeAttack(random(12, 20) * 2, "", "", "Melee", true);
		Goto See;
	Pain:
		BOYS A 0;
		BOYS JJJ 4 A_Pain;
		Goto See;
	Death:
		NNYA AA 4 A_StartSound("MRRR",CHAN_BODY,CHANF_DEFAULT,1.0,ATTN_NORM,1.0);
		NNYA AA 4 A_SpawnItemEx("OWO1", Random(20, 30), 0, 0, 0, 0, (Random(0, 15)*0.2), Random(0, 256), 128);
		NNYA BBBB 4 A_SpawnItemEx("OWO1", Random(20, 30), 0, 0, 0, 0, (Random(0, 20)*0.2), Random(0, 256), 128);
		Loop;
	}
}

//BigBoyKisser
class BigBoyKisser : Actor
{
	Default {
	//$Category Boykisser
		Obituary "Good boy OwO";
		Height 56;
		Radius 30;
		PainChance 256;
		Health 400;
		Speed 14;
		Scale 0.36;
		Meleedamage 40;
		PainSound "AUUA";
		Monster;
		+LOOKALLAROUND
		+FLOORCLIP
		+NOBLOOD
		+NOBLOODDECALS
	}
	
	States {
	Spawn:
		BOYS GG 2 A_Look;
		Loop;
	See:
		BOYS A 0 A_StartSound("UWU");
		BOYS ABABCDEDEFF 3 A_Chase;
		Loop;
	Melee:
		BOYS GG 0 A_StartSound("KISS");
		BOYS GH 6 A_FaceTarget;
		BOYS HH 6 A_CustomMeleeAttack(random(25, 35) * 2, "", "", "Melee", true);
		Goto See;
	Pain:
		BOYS A 0;
		BOYS JJJ 4 A_Pain;
		Goto See;
	Death:
		NNYA AA 4 A_StartSound("MRRR",CHAN_BODY,CHANF_DEFAULT,1.0,ATTN_NORM,1.0);
		NNYA AA 4 A_SpawnItemEx("OWO1", Random(20, 30), 0, 0, 0, 0, (Random(0, 15)*0.2), Random(0, 256), 128);
		NNYA BBBB 4 A_SpawnItemEx("OWO1", Random(20, 30), 0, 0, 0, 0, (Random(0, 20)*0.2), Random(0, 256), 128);
		Loop;
	}
}

//AMONGUS 
class Amogus : EventHandler // Courtesy of Can't Sleep
{
  override void CheckReplacement(ReplaceEvent e)
  {
    switch (e.replacee.GetClassName())
    {
      case ('DarkBlueImposter'): e.replacement = "DarkBlueImposterZSC"; break;
      case ('DarkBlueBabySpawner'): e.replacement = "DarkBlueBabySpawnerZSC"; break;
      case ('Rammface'): e.replacement = "RammfaceZSC"; break;
    }
  }
}

class DarkBlueImposterZSC : Actor
{
  Default
  {
  //$Category UserMonsters
  Health 400;
  Radius 20;
  Height 48;
  Mass 400;
  Speed 15;
  PainChance 140;
  Scale 2.0;
  Monster;
  +FLOAT
  +NOGRAVITY
  SeeSound "amogus/sight";
  ActiveSound "amogus/sight";
  PainSound "amogus/pain";
  DeathSound "amogus/death";
  Obituary "%o is sussy!!!1!!";
  HitObituary "%o is sussy!!!1!!";
  }
  States
  {
  Spawn:
    DAMG AB 3 A_Look;
    Loop;
  See:
    DAMG AB 3 A_Chase;
    Loop;
  Missile:
    DAMG C 0 A_Jump(32, "Call");
    DAMG C 5 A_FaceTarget;
    DAMG D 5 Bright A_SpawnProjectile("DarkBlueProjectile", 26, 24);
    Goto See;
  Call:
    DAMG E 35 A_StartSound("yellow/aim");
    DAMG E 0 A_StartSound("darkblue/call");
    DAMG FIHGFHGIH 2 A_FaceTarget;
    DAMG EEE 0 A_SpawnItemEx("DarkBlueBabySpawner", random(-25, 25), random(-25, 25), random(0, 15), 0, 0, 0, 0, SXF_SETMASTER|SXF_NOCHECKPOSITION|SXF_SETTARGET);
    Goto See;
  Pain:
    AMHT C 2 Bright A_Pain;
    AMHT D 2;
    DAMG R 2;
    Goto See;
  Death:
    TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
    DAMG J 35 A_Scream;
    DAMG K 4 A_NoBlocking;
    DAMG L 4;
    DAMG M -1;
    Stop;
  Raise:
    DAMG M 29 A_SpawnItemEx("AMGSReviveEffect");
    DAMG N 35;
    DAMG OPQ 5;
    Goto See;
  }
}

class DarkBlueBabySpawnerZSC : Actor
{
  States
  {
  Spawn:
    TNT1 A 0;
    TNT1 A 0 A_SpawnItemEx("DarkBlueBabySpawnFog", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION);
    TNT1 A 0 A_SpawnItemEx("DarkBlueBaby", 0, 0, 0, 0, 0, 0, 0, SXF_SETMASTER|SXF_NOCHECKPOSITION|SXF_SETTARGET);
    Stop;
  }
}

class RammfaceZSC : Actor
{
  Default
  {
  Radius 10;
  Height 15;
  Speed 15;
  FastSpeed 30;
  DamageFunction (100 * random(1, 8));
  Projectile;
  +RANDOMIZE
  SeeSound "trollface/shoot";
  DeathSound "trollface/explode";
  }
  States
  {
  Spawn:
    RTRL A 4;
    RTRL B 4 Bright;
    Loop;
  Death:
    RTRL CCCC 0 A_SpawnItemEx("RassLogo", random(-4, 4), random(-4, 4), random(-4, 4), random(-10, 10), random(-10, 10), random(-10, 10), 0, 0, 0);
    RTRL C 0 A_SpawnItemEx("RassLogo", random(-4, 4), random(-4, 4), random(-4, 4), random(-10, 10), random(-10, 10), random(-10, 10), 0, 0, 50);
    RTRL C 0 A_SpawnItemEx("RassLogo", random(-4, 4), random(-4, 4), random(-4, 4), random(-10, 10), random(-10, 10), random(-10, 10), 0, 0, 100);
    RTRL C 0 A_SpawnItemEx("RassLogo", random(-4, 4), random(-4, 4), random(-4, 4), random(-10, 10), random(-10, 10), random(-10, 10), 0, 0, 150);
    RTRL C 0 A_SpawnItemEx("RassLogo", random(-4, 4), random(-4, 4), random(-4, 4), random(-10, 10), random(-10, 10), random(-10, 10), 0, 0, 200);
    RTRL C 6 Bright A_BFGSpray("RassExtra", 160, 0, 360, 1024, 0, 0, BFGF_MISSILEORIGIN);
    RTRL DEFG 4 Bright;
    Stop;
  }
}

// SUS GUY
class SusGuy : Actor
{
	Default {
	//$Category UserProps
  Health 9999999;
  Mass 10000000;
  PainChance 255;
  +SOLID;
  +SHOOTABLE;
  +NOICEDEATH;
  +OLDRADIUSDMG;
  -COUNTKILL;
  PainSound "brain/pain";
  DeathSound "brain/death";
  }
  States
  {
 BrainExplode:
    MISL BC 10 Bright;
    MISL D 10 A_BrainExplode;
    Stop;
  Spawn:
    SUSG A 1 A_Look;
    Loop;
  See:
    SUSG A 1 A_JumpIfTargetInLOS("Sus", 0, 0, 192);
    Loop;
  Sus:
    SUSG A 115 A_StartSound("susjerma/imposter");
    Goto See;
  Pain:
    SUSG B 36 A_BrainPain;
    Goto Spawn;
  Death:
    SUSG A 120 A_BrainScream;
    SUSG A -1 A_BrainDie;
    Stop;
  }
}

//plants and trees
class RedTree1 : ZTreeLarge1
{
	Default
	{
		//$Category Garden
		+SOLID
	}

	States
	{
		Spawn:
			TR36 A -1;
			Stop;
	}
}
class RedTree2 : RedTree1
{
	Default
	{
		//$Category Garden
		+SOLID
	}

	States
	{
		Spawn:
			TR37 A -1;
			Stop;
	}
}
class RedTree3 : RedTree1
{
	Default
	{
		//$Category Garden
		+SOLID
	}

	States
	{
		Spawn:
			TR38 A -1;
			Stop;
	}
}
class Conifer : Actor
{
	Default
	{
		
		//$Category Garden
		Radius 11;
		Height 310;
		+SOLID
	}

	States
	{
		Spawn:
			CONI A -1;
			Stop;
	}
}
class BigToadstool : Actor
{
	Default
	{
		//$Category Garden
		Radius 14;
		Height 48;
		+SOLID
	}

	States
	{
		Spawn:
			ELMM A -1;
			Stop;
	}
}
class BigPinkMushroom : Actor
{
	Default
	{
		//$Category Garden
		Radius 10;
		Height 64;
		+SOLID
	}

	States
	{
		Spawn:
			ELMM C -1;
			Stop;
	}
}
class BigBlueMushroom : Actor
{
	Default
	{
		//$Category Garden
		Radius 10;
		Height 64;
		+SOLID
	}

	States
	{
		Spawn:
			ELMM B -1;
			Stop;
	}
}
class RedFlowers : Actor {
	Default {
		//$Category Garden
		+MOVEWITHSECTOR
		+NOBLOCKMAP
		+NOINTERACTION
		+SYNCHRONIZED
		+SOLID
	}
	States
	{
		Spawn:
			PLNT A -1;
			Stop;
	}
}
class OrangeFlowers : Actor {
	Default {
		//$Category Garden
		+MOVEWITHSECTOR
		+NOBLOCKMAP
		+NOINTERACTION
		+SYNCHRONIZED
		+SOLID
	}
	States
	{
		Spawn:
			PLNT B -1;
			Stop;
	}
}
class GreyFlowers : Actor {
	Default {
		//$Category Garden
		+MOVEWITHSECTOR
		+NOBLOCKMAP
		+NOINTERACTION
		+SYNCHRONIZED
		+SOLID
	}
	States
	{
		Spawn:
			PLNT C -1;
			Stop;
	}
}
class BlueFlowers : Actor {
	Default {
		//$Category Garden
		+MOVEWITHSECTOR
		+NOBLOCKMAP
		+NOINTERACTION
		+SYNCHRONIZED
		+SOLID
	}
	States
	{
		Spawn:
			PLNT H -1;
			Stop;
	}
}
class WhiteRose : Actor {
	Default {
		//$Category Garden
		+MOVEWITHSECTOR
		+NOBLOCKMAP
		+NOINTERACTION
		+SYNCHRONIZED
		+SOLID
	}
	States
	{
		Spawn:
			PLNT D -1;
			Stop;
	}
}
class YellowRose : Actor {
	Default {
		//$Category Garden
		+MOVEWITHSECTOR
		+NOBLOCKMAP
		+NOINTERACTION
		+SYNCHRONIZED
		+SOLID
	}
	States
	{
		Spawn:
			PLNT E -1;
			Stop;
	}
}
class RedRose : Actor {
	Default {
		//$Category Garden
		+MOVEWITHSECTOR
		+NOBLOCKMAP
		+NOINTERACTION
		+SYNCHRONIZED
		+SOLID
	}
	States
	{
		Spawn:
			PLNT F -1;
			Stop;
	}
}
class BlueRose : Actor {
	Default {
		//$Category Garden
		+MOVEWITHSECTOR
		+NOBLOCKMAP
		+NOINTERACTION
		+SYNCHRONIZED
		+SOLID
	}
	States
	{
		Spawn:
			PLNT G -1;
			Stop;
	}
}

//ERKY BOSS
// moloch
//ERKOCH
//Moloch is a vicious cybernetic monster.  It has a devastating array of attacks: a lightning attack, a grenade attack, a nailgun, and a wraith-spitting attack.
//This monster is able to chain its attacks together in order to produce devastating combos. It will always chain each attack together randomly, so you may never know what attack may come next in the chain.

class Moloch : Actor {
	Default {
		//$Category Moloch
		//$Title "FELL ERKY LORD OF SHITPOSTS"
		health 4000;
		radius 20;
		height 48;
		mass 400;
		speed 20;
		scale 1.0;
		painchance 90;
		painthreshold 12;
		damage 20;
		Damagefactor "Moloch", 0;
		Species "Moloch";
		Obituary "%o failed to prevent the ERKPOCALYPSE.";
		HitObituary "%o got sacrificed to RAMPERK.";
		seesound "moloch/sight";
		painsound "moloch/pain";
		deathsound "moloch/death";
		activesound "moloch/active";
		bloodcolor "FF A2 00";
		MONSTER;
		+BOSS;
		+QUICKTORETALIATE;
		+FLOORCLIP;
		+NORADIUSDMG;
		+MISSILEMORE;
		+MISSILEEVENMORE;
		+DONTMORPH;
		+NOICEDEATH;
		+DONTHARMSPECIES;
		+NOTARGET;
		+TELESTOMP;
		+FULLVOLACTIVE;
		+FULLVOLSEE;
		+FULLVOLDEATH;
	}
	
	States {
		Spawn:
			ERKO A 10 A_Look;
			Loop;
		See:
			ERKO A 4 A_Chase;
			ERKO A 0 A_StartSound("moloch/step");
			ERKO A 4 A_Chase;
			ERKO A 4 A_Chase;
			ERKO A 0 A_StartSound("moloch/step");
			ERKO A 4 A_Chase;
			Loop;
		Missile:
			TNT1 A 0 A_FaceTarget;
			TNT1 A 0 A_Jump (256,"Missile2","Missile3","Missile4","Scorch");
		Missile2:
			TNT1 A 0 A_CheckSight ("See");
			ERKO B 0 Bright A_StartSound("moloch/attack");
			ERKO B 12 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 6 A_SpawnProjectile("HellGrenade", 60,0,random(-10,10),2,random(-5,20));
			ERKO B 2 A_FaceTarget;
			ERKO B 0 A_Jump (256,"Missile2","Scorch");
			Goto See;
        Missile3:
        	ERKO B 0 A_StartSound ("moloch/attack");
			ERKO B 25 A_FaceTarget;
			ERKO B 1 A_FaceTarget;
			ERKO B 1 A_SpawnProjectile ("MolochNail", 55,random(-10,10),random(-1,1),0);
			ERKO B 0 A_StartSound("moloch/nail");
			ERKO B 1 A_FaceTarget;
			ERKO B 1 A_SpawnProjectile ("MolochNail", 55,random(-10,10),random(-1,1),0);
			ERKO B 0 A_StartSound("moloch/nail");
			ERKO B 0 A_Jump (10,"Missile2","Missile3","Missile4","Scorch","See");
			ERKO B 1 A_SpidRefire;
			Goto Missile3+5;
        Missile4:
			ERKO B 0 Bright A_StartSound("moloch/attack");
			ERKO B 14 A_FaceTarget;
			TNT1 B 0 A_CheckSight ("See");
			ERKO B 5 A_FaceTarget;
			ERKO B 0 A_PainAttack("MolochWraith");
			ERKO B 5 A_FaceTarget;
			ERKO B 0 A_PainAttack("MolochWraith");
			ERKO B 5 A_FaceTarget;
			ERKO B 0 A_PainAttack("MolochWraith");
			ERKO B 5 A_FaceTarget;
			ERKO B 0 A_PainAttack("MolochWraith");
			ERKO B 5 A_FaceTarget;
			ERKO B 0 A_DualPainAttack("MolochWraith");
			ERKO B 5 A_FaceTarget;
			ERKO B 0 A_DualPainAttack("MolochWraith");
			ERKO B 5 A_FaceTarget;
			ERKO B 0 A_Jump (70,"Missile2","Missile3","Missile4","Scorch","See");
			ERKO B 0 A_Jump (256,"Scorch","See","See");
			Goto See;
		Scorch:
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,30,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,60,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,90,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,120,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,150,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,180,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,210,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,240,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,270,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,300,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,330,0);
			ERKO C 0 A_SpawnProjectile("MolochScorch",0,0,0,0);
			Goto See;
		Pain:
			ERKO C 0 A_Pain;
			ERKO D 2 Bright A_Pain;
			ERKO C 2;
			ERKO D 2;
			ERKO C 2;
			ERKO D 2;
			ERKO C 2;
			goto See;
		Death:
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO C 0 A_ScreamAndUnblock;
			ERKO C 0 A_KillChildren;
			ERKO C 2 Bright;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO D 2 Bright;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO C 2 Bright;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO D 2 Bright;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO C 2 Bright;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO D 2 Bright;
			ERKO C 2 Bright;
			ERKO C 0 A_KillChildren;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO D 4 Bright;
			ERKO C 4 Bright;
			ERKO C 0 A_KillChildren;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO D 4 Bright;
			ERKO C 4 Bright;
			ERKO C 0 A_KillChildren;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO D 4 Bright;
			ERKO C 4 Bright;
			ERKO C 0 A_KillChildren;
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			ERKO D 4 Bright;
			ERKO C 4 Bright;
			ERKO D 4 Bright;
			ERKO C 4 Bright;
			ERKO C 60;
			goto Waitfordeath;
		Waitfordeath:
			ERKO C -1;
		Deathfinal:
			TNT1 A 0 A_StartSound ("PAINSCRE",CHAN_BODY,CHANF_DEFAULT,1.0,ATTN_NONE);
			ERKO D 30;
			TNT1 A 0 A_StartSound ("DSREFART");
			TNT1 A 0 A_SpawnItemEx("AMGSDeathEffect");
			TNT1 A -1 A_BossDeath;
			Stop;
	}
}

//Moloch's grenade attack.  These grenades spawn explosive embers upon death.
class HellGrenade : Actor {
	Default {
	   Radius 10;
	   Height 10;
	   Speed 35;
	   Damage 5;
	   RENDERSTYLE "Normal";
	   Damagetype "Fire";
	   Scale 1.2;
	   PROJECTILE;
	   +EXTREMEDEATH;
	   -NOGRAVITY;
	   +DOOMBOUNCE;
	   DONTHURTSHOOTER;
	   Seesound "moloch/grenade";
	   DeathSound "moloch/grenexp";
	}
   States
   {
   Spawn:
      OPRJ A 3 Bright;
      loop;
   Death:
       OPRJ B 3 Bright;
		OPRJ CD 2 Bright;
      XPL1 A 0 Bright A_SetTranslucent (0.75,1);
      XPL1 A 2 Bright A_Explode;
      XPL1 A 0 Bright A_SpawnProjectile("HellGrenadeEmber",random(3,10),0,random(1,90),2,random(1,75));
      XPL1 A 0 Bright A_SpawnProjectile("HellGrenadeEmber",random(3,10),0,random(1,90),2,random(1,75));
      XPL1 A 0 Bright A_SpawnProjectile("HellGrenadeEmber",random(3,10),0,random(91,180),2,random(1,75));
      XPL1 A 0 Bright A_SpawnProjectile("HellGrenadeEmber",random(3,10),0,random(91,180),2,random(1,75));
      XPL1 A 0 Bright A_SpawnProjectile("HellGrenadeEmber",random(3,10),0,random(181,270),2,random(1,75));
      XPL1 A 0 Bright A_SpawnProjectile("HellGrenadeEmber",random(3,10),0,random(181,270),2,random(1,75));
      XPL1 A 0 Bright A_SpawnProjectile("HellGrenadeEmber",random(3,10),0,random(271,359),2,random(1,75));
      XPL1 A 0 Bright A_SpawnProjectile("HellGrenadeEmber",random(3,10),0,random(271,359),2,random(1,75));
      XPL1 BCDEF 2 Bright;
      stop;
	}
}

class HellGrenadeEmber : Actor
{
	Default
	{
		Radius 5;
		Height 5;
		Speed 15;
		Damage 1;
		PROJECTILE;
		RENDERSTYLE "Add";
		Alpha 0.90;
		DECAL "DoomImpScorch";
		Damagetype "Fire";
		DONTHURTSHOOTER;
		+THRUGHOST;
		-NOGRAVITY;
		DeathSound "moloch/emberexp";
	}
   States
   {
   Spawn:
      BAL3 AB 2 Bright A_SpawnItemEX("RedSmoke",0,0,0,0,0,0,0,2);
      loop;
   Death:
      BAL3 CDE 4 Bright A_Explode;
      stop;
   }
}

class RedSmoke : Actor
{   
	Default {
	   Radius 0;
	   Height 1;
	   Speed 0;
	   PROJECTILE;
	   RENDERSTYLE "Add";
	   ALPHA 0.85;
	}

   States
   {
   Spawn:
      NULL A 3 Bright;
      FBL1 CDEFG 1 Bright;
      Stop ;
   }
}

//Moloch's counterattack.  It shoots 12 of these whenever it's stunned.  An effective way of retaliating against groups of smaller targets.
class MolochScorch : Actor
{
	Default {
		radius 10;
		height 14;
		damage 100;
		speed 4;
		DamageType "Fire";
		RenderStyle "Add";
		alpha 0.90;
		Scale 0.90;
		DECAL "BigScorch";
		seesound "moloch/scorch";
		deathsound "moloch/scorchhit";
		PROJECTILE;
		+DROPOFF;
		+FLOORHUGGER;
		+EXTREMEDEATH;
		+STRIFEDAMAGE;
	}

	states
	{
		Spawn:
			HBFR A 1 A_CStaffMissileSlither;
			HBFR B 1 A_CStaffMissileSlither;
			HBFR C 1 A_CStaffMissileSlither;
			Loop;
		Death:
			HBFR DEFGH 5 bright;
			stop;
	}
}

//Moloch's wraith attack.  They are actually monsters that will charge at you and slash you.
class MolochWraith : Actor
{ 
	Default {
		Health 20;
		Radius 12;
		Height 28 ;
		Mass 10 ;
		Speed 15;
		Damage 5;
		Damagefactor "Moloch", 0.01;
		Species "Moloch";
		RENDERSTYLE "Add";
		Obituary "%o WAS YEETED.";
		HitObituary "%o was yeeted by a skibidi imposter!!";
		PAINCHANCE 200 ;
		MONSTER;
		+NOGRAVITY ;
		+FLOAT;
		+DONTFALL;
		+DONTHARMSPECIES;
		+NOBLOOD;
		+NOEXPLODEFLOOR;
		+MISSILEMORE;
		AttackSound "luigi/attack";
		SeeSound "luigi/see";
		PainSound "luigi/woah";
		DeathSound "erkySpam";
	}

	States 
	   { 
	   Spawn: 
		   LUI0 A 10 A_Look ;
		   Loop ;
	   See: 
		   LUI1 ABCDEFGHIJKLMNOPQRSTUVWXYZ 3 A_Chase ;
		   Loop ;
	   Missile: 
		   LUI1 A 5 A_FaceTarget ;
		   LUI2 ABCDEFGHIJ 1 A_SkullAttack(45);
		   LUI1 ABCDEFGHIJKLMNOPQRSTUVWXYZ 10 ;
		   Goto Missile+2;
	   Melee:
		   LUI1 ABCDEFGHIJKLMNOPQRSTUVWXYZ 5 A_FaceTarget ;
		   LUI2 ABCDEFGHIJ 5 A_CustomMeleeAttack(10,"moloch/wraithmelee","","Moloch",true);
		   Goto See;
	   Pain: 
		   LUI3 A 3  ;
		   LUI3 A 3 A_Pain ;
		   Goto See ;
	   Death: 
		   LUI3 A 4 A_ScreamAndUnblock;
		   LUI3 A 5;
		   Stop ;
	   } 
}

//Moloch's nailgun attack.  Moloch can fire flesh-ripping nails in rapid succesion.  They can bounce off walls and floors.
class MolochNail : Actor
{
	Default {
		radius 2;
		height 2;
		damage 6;
		speed 80;
		Scale 3.0;
		DECAL "DoomImpScorch";
		attacksound "moloch/nailhitbleed";
		DeathSound "bonk";
		PROJECTILE;
		+RIPPER;
		+SPAWNSOUNDSOURCE;
		+EXTREMEDEATH;
		+BLOODSPLATTER;
		+STRIFEDAMAGE;
	}

	states
	{
		Spawn:
			TRLF A 1 bright;
			loop;
		XDeath:
			TRLF B 6 Bright A_StartSound("moloch/nailhitbleed");
			TRLF CDEF 4 Bright;
			Stop;
		Crash:
			TRLF B 6 Bright A_StartSound("moloch/nailhit");
			TRLF CDEF 4 Bright;
			Stop;
		Death:
			TRLF B 6 Bright A_StartSound("moloch/nailhit");
			TRLF CDEF 4 Bright;
		Stop;
	}
}
