ACTOR CorruptStartToken : LegendaryRuneItem { }

ACTOR NexusCorrupt : GenericBoss //How to summon the cum demon
{ //Scripted (Can break the spooky spawn limit as well as the dice removing the enemy)
//Creator: Fluffy
//Origin: Complex Doom CF 3.0 Halloween
//Sprite: CORP
//Title: "Corrupt"
  Health 20000
  Painchance 120
  Speed 5
  Renderstyle None
  Mass 0x7FFFFFFF
  +NOTIMEFREEZE
  +NOTELEFRAG
  +NOCLIP
  +FORCERADIUSDMG
  +QUICKTORETALIATE
  +COUNTKILL
  +NOTARGET
  +NOINFIGHTING
  +GHOST
  //No Infighting
  DamageFactor "Legendary1", 0.0
  DamageFactor "UltimateLegendary", 0.0
  DamageFactor "LegendaryZombie", 0.0
  DamageFactor "LACGrenade", 0.0
  DamageFactor "SoapOpera", 0.0
  DamageFactor "ZombieDev", 0.0
  DamageFactor "GeneralTracer", 0.0
  DamageFactor "SatanGuard", 0.0
  DamageFactor "CurseComet", 0.0
  DamageFactor "DementedTerminator", 0.0
  DamageFactor "Terminator", 0.0
  DamageFactor "Commander", 0.0
  DamageFactor "CerChainguns", 0.0	
  DamageFactor "CerEnergyBall", 0.0
  DamageFactor "Hell", 0.0
  DamageFactor "HFCyber", 0.0
  DamageFactor "DBFG2", 0.0
  DamageFactor "DBFG10K2", 0.0
  DamageFactor "DBFGSplash2", 0.0
  DamageFactor "NobleComet", 0.0
  DamageFactor "Cyber10k", 0.0
  DamageFactor "SS", 0.0
  SeeSound " "
  PainSound "Corrupt/Pain"
  ActiveSound "corrupt/whisper"
  Obituary "%o was consumed by Corrupt"
  HitObituary "%o was consumed by Corrupt"
  Tag "corrupt"
  DropItem "WingsOfAscension" 256 1
  var int user_music;
  var int user_script;
  var int user_appear;
  var int user_runloop;
  var int user_attacktimer;
  var int user_deathtimer; //holy fuck there's 6 of these
  States
  {
  Spawn:
	TNT1 A 0 A_JumpIf(user_script == 1,3)
    TNT1 A 0 ACS_NamedExecuteAlways("CorruptScript2")
	TNT1 A 0 A_SetUserVar("user_script",1)
	TNT1 A 0 A_JumpIf(user_appear == 1,"SpawnAppear")
    TNT1 A 1 A_Look
	Loop
  SpawnAppear:
	TNT1 A 0 A_PlaySound("Corrupt/NoiseActive",1,1.0,1)
	TNT1 A 0 A_SpawnItemEx("CorruptFlame",0,0,32)
	CORP A 1 Bright Light("CorruptLight") A_Look
	Loop
  See:
    TNT1 A 0 A_JumpIf(user_music == 1,4)
	TNT1 A 0 ACS_NamedExecuteAlways("InfinityMusic",0,2039,2003)
	TNT1 A 0 ACS_NamedExecuteAlways("CorruptLighter",0)
	TNT1 A 0 A_SetUserVar("user_music",1)
	TNT1 A 0 A_JumpIf(user_appear == 1,"SeeAppear")
	TNT1 A 0 A_UnsetShootable
	TNT1 A 1 A_Chase("","",CHF_RESURRECT)
	loop
  StopFFS:
    TNT1 A 0 A_Stop
	TNT1 A 0 A_Jump(128,"Disappear")
  SeeAppear:
	TNT1 A 0 A_ChangeFlag("FRIGHTENED",0)
	TNT1 A 0 A_PlaySound("Corrupt/NoiseActive",1,1.0,1)
	TNT1 A 0 A_SetUserVar("user_attacktimer",user_attacktimer+1)
	TNT1 A 0 A_SpawnItemEx("CorruptFlame",0,0,32)
	TNT1 A 1 Light("CorruptLight") A_Chase("","Missile",CHF_RESURRECT)
	TNT1 A 0 A_SpawnItemEx("ArmorParticleWhite",random(-12,12),random(-12,12),random(0,24),random(-2,2),random(-2,2),random(0,2),random(-20,20))
	TNT1 A 0 A_Jump(12,"Rush")
	loop
  Disappear:
    TNT1 A 0 A_SetUserVar("user_appear",0)
	TNT1 A 0 A_SetUserVar("user_attacktimer",0)
	TNT1 A 0 A_ChangeFlag("FRIGHTENED",0)
	TNT1 A 1 A_StopSound(CHAN_WEAPON)
	Goto See
  Rush:
    TNT1 A 0 A_ChangeFlag("FRIGHTENED",0)
	TNT1 A 0 A_SetUserVar("user_attacktimer",user_attacktimer+1)
	TNT1 AAAAA 0 A_Chase("","")
	TNT1 A 1 Light("CorruptLight") A_SpawnItemEx("CorruptFlame",0,0,32)
	TNT1 A 0 A_SpawnItemEx("ArmorParticleWhite",random(-12,12),random(-12,12),random(0,24),random(-2,2),random(-2,2),random(0,2),random(-20,20))
	TNT1 A 0 A_JumpIfTargetInLOS("SeeAppear")
	Loop
  Missile:
	TNT1 A 0 A_JumpIf(user_attacktimer < 300,"SeeAppear")	
	TNT1 A 0 A_JumpIfCloser(600,"Attack")
	Goto SeeAppear
  Attack:
	TNT1 A 0 A_SetUserVar("user_attacktimer",0)
	TNT1 A 0 A_PlaySound("Corrupt/NoiseChase",1,1.0,1)
	TNT1 A 0 A_SpawnItemEx("RedCorruptFlame",0,0,32)
	CORP A 1 Bright Light("RedCorruptLight") A_SkullAttack(30)
	TNT1 A 0 A_SpawnItemEx("ArmorParticleRed",random(-12,12),random(-12,12),random(0,24),random(-2,2),random(-2,2),random(0,2),random(-20,20))
	TNT1 A 0 A_JumpIfCloser(100,"Attack2")
	Goto Attack+2
  Attack2:
	TNT1 A 0 A_RadiusGive("CorruptFuckery2",120,RGF_PLAYERS|RGF_CORPSES)
	TNT1 A 0 A_VileAttack("NULL",random(200,400),0,120,2,"None")
	Goto RunAway
  Pain:
	TNT1 A 0 A_Pain
	CORP AAAAA 1 Bright Light("RedCorruptLight") A_SpawnItemEx("RedCorruptFlame",0,0,32)
	Goto RunAway
  RunAway:
	TNT1 A 0 A_SetUserVar("user_runloop",0)
	TNT1 A 0 A_ChangeFlag("FRIGHTENED",1)
	TNT1 A 0 A_JumpIf(user_runloop >= 300,"StopFFS")	 
	TNT1 A 0 A_SetUserVar("user_runloop",user_runloop+1)
	TNT1 AAAAA 0 A_Chase("","")
	TNT1 A 1 Light("RedCorruptLight") A_SpawnItemEx("RedCorruptFlame",0,0,32)
	TNT1 A 0 A_SpawnItemEx("ArmorParticleRed",random(-12,12),random(-12,12),random(0,24),random(-2,2),random(-2,2),random(0,2),random(-20,20))
	Goto RunAway+2
  Heal:
	CORP A 1 Bright Light("CorruptLight") A_SpawnItemEx("CorruptFlame",0,0,32)
	TNT1 A 0 A_PlaySound("weaverbonnie/appear",7)
	TNT1 A 0 A_SetShootable
	TNT1 A 0 A_SetUserVar("user_appear",1)
	TNT1 A 0 A_RadiusGive("CorruptResurrectFuckery",1000,RGF_MONSTERS)
	Goto See
  Death:
	TNT1 A 0 A_PlaySound("Corrupt/NoiseActive",1,1.0,1)
	TNT1 A 0 A_TakeFromTarget("CorruptStartToken",1)
	TNT1 A 0 ACS_NamedExecuteAlways("CorruptLighterReset",0)
  DeathTimer:
    TNT1 A 0 ThrustThingZ(0, 4, 0, 0)
	CORP A 1 Bright Light("CorruptLight") A_SpawnItemEx("CorruptFlame",0,0,32)
	TNT1 A 0 A_SpawnItemEx("WhiteNemesisKaboom",random(-32,32),random(-40,40),random(16,48),random(-4,4),random(-4,4),random(0,4),0,SXF_TRANSFERPOINTERS)
	TNT1 A 0 A_JumpIf(user_deathtimer >= 175,"DeathEnd")
	TNT1 A 0 A_SetUserVar("user_deathtimer",user_deathtimer+1)
	loop
  DeathEnd:
	TNT1 A 0 A_StopSound(CHAN_WEAPON)
	TNT1 A 0 A_SpawnItem("NemesisDeathBall")
	TNT1 A 0 A_SpawnItemEx("SignetOfNecromancy",0,0,8,random(0,8),random(0,8),2,random(0,360),0,200)
	TNT1 AAAA 0 A_SpawnItemEx("DiceOfReset",0,0,8,random(0,8),random(0,8),2,random(0,360),0,100)
	TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("NemesisHealthBonusMax",0,0,32,frandom(-5,5),frandom(-5,5),frandom(0,3),random(0,360))
	TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("NemesisArmorBonusMax",0,0,32,frandom(-5,5),frandom(-5,5),frandom(0,3),random(0,360))
    TNT1 A 1 A_Fall
	TNT1 A 1 A_NoBlocking
	Stop
  }
}

Actor CorruptFuckery2 : CustomInventory
{  
  +INVENTORY.ALWAYSPICKUP
  +INVENTORY.AUTOACTIVATE
  States
  {
  Pickup:
	TNT1 A 25 A_SetBlend("Black",1.0,80)
	TNT1 A 10
	TNT1 A 0 A_PlaySound("Corrupt/Hit",7,1.0,0,0.5)
	TNT1 A 1
	Stop
	}
}

Actor TSILootOrb1 : NexusCorrupt
{
DropItem ""
Tag "Loot Orb"
Scale 0.6
Health 1000
+FLOATBOB
-BOSS
-COUNTKILL
-NOCLIP
var int user_fright;
var int user_frightcounter;
States
{
  Spawn:
    TNT1 A 0 NoDelay A_PlaySound("Corrupt/NoiseActive",5,1.0,TRUE)
  Idle:
	CORP A 1 Light("CorruptLight") A_Look
	TNT1 A 0 A_SpawnItemEx("CorruptFlameSmall",0,0,32)
	TNT1 A 0 A_SpawnItemEx("ArmorParticleWhite",random(-12,12),random(-12,12),random(0,24),random(-2,2),random(-2,2),random(0,2),random(-20,20))
	Loop
  See:
    TNT1 A 0 A_JumpIf(user_fright == 1,"SeeFright")
    CORP A 1 Light("CorruptLight") A_Wander
	TNT1 A 0 A_SpawnItemEx("CorruptFlameSmall",0,0,32)
	TNT1 A 0 A_SpawnItemEx("ArmorParticleWhite",random(-12,12),random(-12,12),random(0,24),random(-2,2),random(-2,2),random(0,2),random(-20,20))
	Loop
  SeeFright:
    TNT1 AA 0 A_Chase("","")
    CORP A 1 Light("CorruptLight")
	TNT1 A 0 A_SpawnItemEx("CorruptFlameSmall",0,0,32)
	TNT1 A 0 A_SpawnItemEx("ArmorParticleWhite",random(-12,12),random(-12,12),random(0,24),random(-2,2),random(-2,2),random(0,2),random(-20,20))
	TNT1 A 0 A_JumpIf(user_frightcounter >= 200,"Restore")
	TNT1 A 0 A_SetUserVar(user_frightcounter,user_frightcounter+1)
	Loop
  Pain:
    TNT1 A 0 A_ChangeFlag(NOPAIN,1)
	TNT1 A 0 A_ChangeFlag(FRIGHTENED,1)
	TNT1 A 0 A_SetUserVar("user_fright",1)
	TNT1 A 0 A_SetUserVar("user_frightcounter",0)
	Goto See
  Restore:
    TNT1 A 0 A_ChangeFlag(NOPAIN,0)
	TNT1 A 0 A_ChangeFlag(FRIGHTENED,0)
	TNT1 A 0 A_SetUserVar("user_fright",0)
	Goto See
  Death:
	TNT1 AAA 0 A_StopSound(5)
	TNT1 A 0 A_SpawnItemEx("LootOrbDeathExplosion",0,0,0)
	TNT1 A 0 A_SpawnItemEx("NemesisBFGExplodeFXSmall",0,0,10)
	TNT1 A 0 A_SpawnItemEx("NemesisGuruStruckGlowX",0,0,10,0,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("NemesisGuruStruckGlowY",0,0,10,0,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("TerrorSoulSphere",0,0,8,random(1,8),0,2,random(0,360),0,64)
	TNT1 A 0 A_SpawnItemEx("DiceOfReset",0,0,8,random(1,8),0,2,random(0,360),0)
	TNT1 A 0 A_SpawnItemEx("NemesisRuneSpawnerTier4",0,0,8,random(1,8),0,2,random(0,360),0)
	TNT1 AAA 0 A_SpawnItemEx("LegendaryRune",0,0,8,random(1,8),0,2,random(0,360),0,80)
	TNT1 A 0 A_SpawnItemEx("SignetOfNecromancy",0,0,8,random(1,8),0,2,random(0,360),0,100)
	TNT1 A 0 A_SpawnItemEx("TrueLegendaryRune",0,0,8,random(1,8),0,2,random(0,360),0,150)
	//TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("NemesisHealthBonusMax",0,0,32,frandom(-5,5),frandom(-5,5),frandom(0,3),random(0,360))
	//TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("NemesisArmorBonusMax",0,0,32,frandom(-5,5),frandom(-5,5),frandom(0,3),random(0,360))
    TNT1 A 1 A_Fall
	Stop
	}
}

Actor TSILootOrb2 : TSILootOrb1
{
Tag "Loot Orb"
States
{
  Death:
	TNT1 AAA 0 A_StopSound(5)
	TNT1 A 0 A_SpawnItemEx("LootOrbDeathExplosion",0,0,0)
	TNT1 A 0 A_SpawnItemEx("NemesisBFGExplodeFXSmall",0,0,10)
	TNT1 A 0 A_SpawnItemEx("NemesisGuruStruckGlowX",0,0,10,0,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("NemesisGuruStruckGlowY",0,0,10,0,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("TerminatorItem",0,0,8,random(1,8),0,2,random(0,360),0,240)
	TNT1 A 0 A_SpawnItemEx("DoomsphereDust",0,0,8,random(1,8),0,2,random(0,360),0,32)
	TNT1 A 0 A_SpawnItemEx("ShuffleSphereSpawner",0,0,8,random(1,8),0,2,random(0,360),0,32)
	TNT1 A 0 A_SpawnItemEx("ShuffleSphereSpawner",0,0,8,random(1,8),0,2,random(0,360),0,80)
	TNT1 A 0 A_SpawnItemEx("ShuffleSphereSpawner",0,0,8,random(1,8),0,2,random(0,360),0,150)
	TNT1 A 0 A_SpawnItemEx("UnstabilitySphere",0,0,8,random(1,8),0,2,random(0,360),0,64)
	TNT1 A 0 A_SpawnItemEx("NemesisMegaSphere",0,0,8,random(1,8),0,2,random(0,360),0,80)
	TNT1 A 0 A_SpawnItemEx("NemesisArmorSphere",0,0,8,random(1,8),0,2,random(0,360),0,160)
    TNT1 A 1 A_Fall
	Stop
	}
}

Actor TSILootOrb3 : TSILootOrb1
{
Tag "Loot Orb"
States
{
  Death:
	TNT1 AAA 0 A_StopSound(5)
	TNT1 A 0 A_SpawnItemEx("LootOrbDeathExplosion",0,0,0)
	TNT1 A 0 A_SpawnItemEx("NemesisBFGExplodeFXSmall",0,0,10)
	TNT1 A 0 A_SpawnItemEx("NemesisGuruStruckGlowX",0,0,10,0,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("NemesisGuruStruckGlowY",0,0,10,0,0,0,0,SXF_CLIENTSIDE,0)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("UltimatePlayingCards",0,0,32,frandom(-5,5),frandom(-5,5),frandom(0,3),random(0,360),0,120)
	TNT1 AAAAAAA 0 A_SpawnItemEx("RandomMegaPresentSpawner",0,0,1,random(1,8),0,random(8,15),random(0,360),0,120)
	TNT1 AAAAAA 0 A_SpawnItemEx("UniversalChestSpawner",0,0,32,frandom(-10,10),frandom(-10,10),frandom(3,6),random(0,360),0,120)
    TNT1 A 1 A_Fall
	Stop
	}
}

Actor TSILootOrb4 : TSILootOrb1
{
Tag "Loot Orb"
States
{
  Death:
	TNT1 AAA 0 A_StopSound(5)
	TNT1 A 0 A_SpawnItemEx("LootOrbDeathExplosion",0,0,0)
	TNT1 A 0 A_SpawnItemEx("NemesisBFGExplodeFXSmall",0,0,10)
	TNT1 A 0 A_SpawnItemEx("NemesisGuruStruckGlowX",0,0,10,0,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("NemesisGuruStruckGlowY",0,0,10,0,0,0,0,SXF_CLIENTSIDE,0)
    TNT1 A 0 A_SpawnItemEx("VileStaff",0,0,8,random(1,8),0,2,random(0,360),0,120)
	TNT1 A 0 A_SpawnItemEx("SubliminationSword",0,0,8,random(1,8),0,2,random(0,360),0,120)
	TNT1 A 0 A_SpawnItemEx("True Legendary Plasmatic Cannon",0,0,8,random(1,8),0,2,random(0,360),0,200)
	TNT1 A 0 A_SpawnItemEx("True Legendary Railgun",0,0,8,random(1,8),0,2,random(0,360),0,200)
	TNT1 A 0 A_SpawnItemEx("True Legendary Ion Striker",0,0,8,random(1,8),0,2,random(0,360),0,200)
	TNT1 A 0 A_SpawnItemEx("OccultSpellbook",0,0,8,random(1,8),0,2,random(0,360),0)
	TNT1 A 0 A_SpawnItemEx("FantasyStaff",0,0,8,random(1,8),0,2,random(0,360),0)
	TNT1 A 0 A_SpawnItemEx("Deathwind",0,0,8,random(0,8),random(0,8),2,random(0,360),0,100)
	TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("DemonicChestAmmo",0,0,32,frandom(-5,5),frandom(-5,5),frandom(0,3),random(0,360))
	TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("DemonicChestBox",0,0,32,frandom(-5,5),frandom(-5,5),frandom(0,3),random(0,360),0,180)
    TNT1 A 1 A_Fall
	Stop
	}
}

Actor CorruptFlameSmall : CorruptFlame { Scale 0.6 }

ACTOR LootOrbDeathExplosion : NRDeathExplosion2
{
  States
  {
  Spawn:
	TNT1 A 0 NoDelay A_PlaySound("uroboros/explode",1,1.0,0,0.6)
	TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("ArmorParticleWhite",Random(-2,2),Random(-2,2),Random(-2,2),FRandom(-2,2),FRandom(-2,2),FRandom(-2,2),0,0,0)
	TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("ArmorParticleWhite",Random(-2,2),Random(-2,2),Random(-2,2),FRandom(-2,2),FRandom(-2,2),FRandom(-2,2),0,0,0)
	MND6 ABCDEFGHIJK 3 Bright
    Stop
  }
}

ACTOR LootOrbDeathExplosion2 : NRDeathExplosion2
{
  States
  {
  Spawn:
	MND6 ABCDEFGHIJK 3 Bright
    Stop
  }
}

Actor NemesisBFGExplodeFXSmall : NemesisBFGExplodeFX { Scale 2.5 }