Actor RandomGhoulSpawnerDice : RandomSpawner
{
DropItem "GhoulIodsa", 256, 1
DropItem "BND", 256, 1
DropItem "EyeSore", 256, 1
DropItem "JitterSkull", 256, 1
DropItem "Sjas", 256, 1
DropItem "CreeperGhoul", 256, 1
DropItem "Choke", 256, 1
DropItem "SoulHarvester", 256, 1
DropItem "MioHonda", 256, 1
DropItem "Misty", 256, 1
DropItem "Jugulum", 256, 1
DropItem "ImpostorGhoul", 256, 1
DropItem "Emtalic", 256, 1
DropItem "Noise", 256, 1
}

Actor RandomGhoulSpawnerFloatDice : RandomSpawner
{
DropItem "GhoulIodsa", 256, 1
DropItem "BND", 256, 1
DropItem "JitterSkull", 256, 1
DropItem "Sjas", 256, 1
DropItem "Choke", 256, 1
DropItem "SoulHarvester", 256, 1
DropItem "Misty", 256, 1
DropItem "Jugulum", 256, 1
DropItem "ImpostorGhoul", 256, 1
DropItem "Emtalic", 256, 1
}

Actor RandomGhoulSpawnerFloorDice : RandomSpawner
{
DropItem "EyeSore", 256, 1
DropItem "CreeperGhoul", 256, 1
DropItem "MioHonda", 256, 1
DropItem "Noise", 256, 1
}

ACTOR RandomGhoulSpawner
{
+NOGRAVITY
  States
  {
  Spawn:
	TNT1 A 1
	TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("SpookyMode") == 0,"Cancel")
	TNT1 A 0 A_Jump(256,"Iodsa","BND","EyeSore","JitterSkull","Sjas","CreeperGhoul","Choke","SoulHarvester","MioHonda","Misty","Jugulum","ImpostorGhoul","Emtalic","Noise")
	TNT1 A 20
	Stop
  Iodsa:
	TNT1 A 1 A_SpawnItemEx("GhoulIodsa",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  BND:
	TNT1 A 1 A_SpawnItemEx("BND",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  EyeSore:
	TNT1 A 1 A_SpawnItemEx("EyeSore",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  JitterSkull:
	TNT1 A 1 A_SpawnItemEx("JitterSkull",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  Sjas:
	TNT1 A 1 A_SpawnItemEx("Sjas",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  CreeperGhoul:
	TNT1 A 1 A_SpawnItemEx("CreeperGhoul",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  Choke:
	TNT1 A 1 A_SpawnItemEx("Choke",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  SoulHarvester:
	TNT1 A 1 A_SpawnItemEx("SoulHarvester",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  MioHonda:
	TNT1 A 1 A_SpawnItemEx("MioHonda",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  Misty:
	TNT1 A 1 A_SpawnItemEx("Misty",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  Jugulum:
	TNT1 A 1 A_SpawnItemEx("Jugulum",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  ImpostorGhoul:
	TNT1 A 1 A_SpawnItemEx("ImpostorGhoul",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  Emtalic:
	TNT1 A 1 A_SpawnItemEx("Emtalic",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  Noise:
	TNT1 A 1 A_SpawnItemEx("Noise",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	Stop
  Cancel:
    TNT1 A 1
	TNT1 A 0 A_SpawnItemEx("Revenant",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	TNT1 A 0
	Stop
	}
}

ACTOR RandomGhoulSpawnerFloat : RandomGhoulSpawner
{
  States
  {
  Spawn:
	TNT1 A 1
	TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("SpookyMode") == 0,"Cancel")
	TNT1 A 0 A_Jump(256,"Iodsa","BND","Sjas","Choke","SoulHarvester","Misty","Jugulum","ImpostorGhoul","Emtalic")
	TNT1 A 20
	Stop
  Cancel:
    TNT1 A 1
	TNT1 A 0 A_SpawnItemEx("Cacodemon",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	TNT1 A 0
	Stop
	}
}

ACTOR RandomGhoulSpawnerFloor : RandomGhoulSpawner
{
  States
  {
  Spawn:
	TNT1 A 1
	TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("SpookyMode") == 0,"Cancel")
	TNT1 A 0 A_Jump(256,"EyeSore","CreeperGhoul","MioHonda","Noise")
	TNT1 A 20
	Stop
	}
}

ACTOR GhoulBaseFloor
{
  Monster
  Radius 20
  Height 62
  Scale 1
  Mass 0x7FFFFFFF
  MeleeThreshold 35
  MeleeRange 80
  Painchance 20
  Species "Hell"
  DamageFactor "Hell", 0.0
  +DontHurtSpecies
  +LookAllAround
  +FloorClip
  +Boss
  +DontMorph
  +NoIceDeath
  +NOFEAR
  +DONTGIB
  +QUICKTORETALIATE
  Seesound ""
  PainSound ""
  Deathsound ""
}

ACTOR GhoulBaseFloat : GhoulBaseFloor
{
FloatSpeed 10
-FLOORCLIP
+NoGravity
+Float
}

ACTOR ImpostorGhoul : GhoulBaseFloat
{ //Scripted (Samara and Halloween mode will not spawn this ghoul if replaced)
//Creator: Fluffy
//Origin: Ghouls VS Humans
//Sprite: ISUS
//Title: "Samara Morgan" 
Radius 20
Height 62
Speed 15
Health 2808
Scale 0.18
RenderStyle Translucent
Alpha 0.8
Damage 30
MaxTargetRange 800
+NOBLOCKMONST
+DROPOFF
+NOBLOOD
+NOPAIN
Obituary "%o figured out which ghoul is the real one."
SeeSound "Impostor/Taunt"
ActiveSound "Impostor/Taunt"
DeathSound "Impostor/Death"
Tag "\c[p3]Impostor\c-"
States
{
  Spawn:
	ISUS A 0 A_SetTranslucent(0.6)
    ISUS A 1 A_Wander
    ISUS A 0 A_Look
    Loop
  See:
    ISUS A 1 A_Chase
    Loop
  Melee:
    ISUS A 4 Bright
    ISUS A 1 Bright A_CustomMeleeAttack(55,"singenjitsu/melee")
    Goto See
  Missile:
    ISUS A 18
	TNT1 A 0 A_SpawnItem("FakeVanish",0,25)
    ISUS A 20 Bright A_CustomMissile("RandomFakeGhoul")
    Goto See
  Death:
	ISUS A 0 A_Scream
	TNT1 A 0 A_ChangeFlag(NoGravity,1)
	TNT1 A 0 ThrustThingZ(0,8,0,0)
  DeathLoop:
    TNT1 A 0 A_FadeOut(0.01)
	ISUS A 1 A_CustomMissile("GhoulFireX2", 0,0,random(0,360), 2,0)
    Loop
	}
}

//Fake Ghouls
Actor RandomFakeGhoul : RandomSpawner
{
DropItem "FakeJitterSkullProjectile" 256 1
DropItem "FakeChokeProjectile" 256 1
DropItem "FakeSjasProjectile" 256 1
DropItem "FakeMistyProjectile" 256 1
DropItem "FakeClownyProjectile" 256 1
DropItem "FakeJugulumProjectile" 256 1
DropItem "FakeSoulHarvesterProjectile" 256 1
DropItem "FakeEmtalicProjectile" 256 1
}

Actor FakeGhoulProjBase
{
PROJECTILE
RenderStyle Add
Damagetype "Hell"
Speed 40
+MISSILE
+FLOORCLIP
+BLOODLESSIMPACT
}

ACTOR FakeEmtalicProjectile : FakeGhoulProjBase
{
Radius 12
Height 8
scale 0.25
Damage (60)
Renderstyle Translucent
Alpha 0.8
States
{
  Spawn:
    TNT1 A 0
	TNT1 A 0 A_PlaySound("RAMSTART")
	XEMT LMNLMNLMN 2 Bright A_SpawnItemEx("RandomGearViseSpawner",0,random(-20,20),random(10,30),0,0,8,0,0,128)
    Goto Spawn+2
  Death:
	TNT1 A 0 A_Explode(30,50,0,0,50)
	TNT1 A 0 A_RadiusGive("VesselFuckery",120,RGF_PLAYERS)
    XEMT C 0 A_SpawnItem("FakeVanish",0,25)
	XEMT CCCC 1 A_FadeOut(0.2)
    Stop
	}
}

ACTOR FakeSoulHarvesterProjectile : FakeGhoulProjBase
{
Radius 12
Height 8
scale 0.25
Damage (60)
States
{
  Spawn:
    TNT1 A 0
	TNT1 A 0 A_PlaySound("Whiteskullattack")
	SCAR DADADADADA 1 Bright
    Goto Spawn+2
  Death:
	TNT1 A 0 A_Explode(30,50,0,0,50)
	TNT1 A 0 A_RadiusGive("VesselFuckery",120,RGF_PLAYERS)
    SCAR A 0 A_SpawnItem("FakeVanish",0,25)
	SCAR AAAA 1 A_FadeOut(0.2)
    Stop
	}
}

ACTOR FakeJugulumProjectile : FakeGhoulProjBase
{
Radius 12
Height 8
Scale 0.20
Damage (60)
States
{
  Spawn:
    TNT1 A 0
	TNT1 A 0 A_PlaySound("Juggy/Pain")
	JUGY E 10
    Goto Spawn+2
  Death:
	TNT1 A 0 A_Explode(30,50,0,0,50)
	TNT1 A 0 A_Mushroom("juggyball",10,0,4.0,0.2)
    JUGY E 0 A_SpawnItem("FakeVanish",0,25)
	JUGY EEEE 1 A_FadeOut(0.2)
    Stop
	}
}

ACTOR FakeClownyProjectile : FakeGhoulProjBase
{
Radius 12
Height 8
Scale 0.3
Damage (80)
States
{
  Spawn:
    TNT1 A 0
	TNT1 A 0 A_PlaySound("clowny/see")
	CLWX C 10
    Goto Spawn+2
  Death:
	TNT1 A 0 A_Explode(30,50,0,0,50)
	TNT1 A 0 A_RadiusGive("VesselFuckery",120,RGF_PLAYERS)
    CLWX C 0 A_SpawnItem("FakeVanish",0,25)
	CLWX CCCC 1 A_FadeOut(0.2)
    Stop
	}
}

ACTOR FakeJitterSkullProjectile : FakeGhoulProjBase
{
Radius 12
Height 8
Scale 0.24
maxstepheight 180
Translation "112:127=80:95"
+RIPPER
States
{
  Spawn:
	 JSKL D 0
	 JSKL D 0 A_PlaySound("skullattack",6)
	 JSKL DDDDDDDDDDDDDDDDDDDDDDDDD 1 A_Explode(40,45,0)
	 JSKL D 0 A_SpawnItem("FakeVanish",0,25)
	 JSKL DDDDD 1 A_FadeOut(0.2)
    Stop
  Death:
     JSKL D 0 A_SpawnItem("FakeVanish",0,25)
	 JSKL DDDDD 1 A_FadeOut(0.2)
    Stop
	}
}

ACTOR FakeChokeProjectile : FakeGhoulProjBase
{
  Radius 24
  Height 20
  maxstepheight 0
  DeathSound "choke4"
  -floorclip
  States
  {
  Spawn:
	 GHOU AB 2
    Loop
  Death:
	 GHOU EEFF 1
	 GHOU JGK 2 A_Explode(50,35,0,0,35)
     GHOU A 0 A_SpawnItem("FakeVanish",0,25)
	 TNT1 A 0 A_Explode(15, 90, 0)
	 GHOU ABABAB 1 A_FadeOut(0.2)
    Stop
  }
}

ACTOR FakeSjasProjectile : FakeGhoulProjBase
{
Radius 12
Height 8
Scale 0.8
Damage (20)
DeathSound "Sjasattack"
States
{
  Spawn:
    TNT1 A 0
	IJAS B 10 A_PlaySound("SjasAct")
    Loop
  Death:
	TNT1 A 0 A_Explode(60,50,0,0,50)
    IJAS D 0 A_SpawnItem("FakeVanish",0,25)
	IJAS DDDD 1 A_FadeOut(0.2)
    Stop
	}
}

ACTOR FakeMistyProjectile : FakeGhoulProjBase
{
  Radius 12
  Height 8
  scale 0.15
  Damage (100)
  DeathSound "Misty/activ"
  -floorclip
  States
  {
  Spawn:
    MIST A 0 A_PlaySound("Misty/idley",4,1.0,1)
	MIST A 1 A_SpawnItemEx("mistspawner")
    Loop
  Death:
    MIST A 0 A_SpawnItem("FakeVanish",0,25)
	MIST AAAA 1 A_FadeOut(0.2)
	Stop
  }
}

//Vapor smoke
ACTOR FakeVanish
{
-SOLID
+NOGRAVITY
+NOCLIP
+NOBLOCKMAP
Renderstyle None
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Playsound("Impostor/FakeVanishSound",5)
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("SjasVapor",frandom(0,4),0,frandom(10,40),frandom(0,3),0,frandom(-3,3),random(0,360))
TNT1 A 40
stop
}
}

Actor FakeVanish2 : FakeVanish
{
States
{
Spawn:
TNT1 A 0
TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("SjasVapor",frandom(0,4),0,frandom(10,40),frandom(0,3),0,frandom(-3,3),random(0,360))
TNT1 A 40
stop
}
}

Actor SjasVapor : RandomSpawner
{
DropItem "SjasVapor1" 256 1
DropItem "SjasVapor2" 256 1
DropItem "SjasVapor3" 256 1
DropItem "SjasVapor4" 256 1
DropItem "SjasVapor5" 256 1
DropItem "SjasVapor6" 256 1
DropItem "SjasVapor7" 256 1
DropItem "SjasVapor8" 256 1
DropItem "SjasVapor9" 256 1
}

ACTOR SjasVapor1
{
  +NOINTERACTION
  +CLIENTSIDEONLY
  translation "80:111=[255,255,255]:[0,0,0]"
  Renderstyle Add
  Alpha 0.8
  Scale 0.5
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_Jump(128,2)
	TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1,"NULL")
    PDBA ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 A_SetScale(ScaleX+0.045)
    DEBR ABC 1
    Stop
  } 
}

ACTOR SjasVapor2 : SjasVapor1 { translation "80:111=[255,224,224]:[0,0,0]" }

ACTOR SjasVapor3 : SjasVapor1 { translation "80:111=[255,192,192]:[0,0,0]" }

ACTOR SjasVapor4 : SjasVapor1 { translation "80:111=[255,160,160]:[0,0,0]" }

ACTOR SjasVapor5 : SjasVapor1 { translation "80:111=[255,128,128]:[0,0,0]" }

ACTOR SjasVapor6 : SjasVapor1 { translation "80:111=[224,96,96]:[0,0,0]" }

ACTOR SjasVapor7 : SjasVapor1 { translation "80:111=[192,64,64]:[0,0,0]" }

ACTOR SjasVapor8 : SjasVapor1 { translation "80:111=[160,32,32]:[0,0,0]" }

ACTOR SjasVapor9 : SjasVapor1 { translation "80:111=[128,0,0]:[0,0,0]" }