Actor NemesisFragment : CustomInventory
{
  Inventory.PickupMessage "\c[w2]Nemesis Fragment! Find 10 of these, and given the requirements, something special may happen..."
  Inventory.PickupSound "legendarycrystal/take"
  Inventory.Icon "IDGMA0"
  Inventory.MaxAmount 10
  Inventory.InterHubAmount 10
  +INVBAR
  +COUNTITEM
  +INVENTORY.BIGPOWERUP
  +NOTIMEFREEZE
  +FLOAT
  +FLOATBOB
  States
  {
  Spawn:
	DGEM A 5 Bright A_SpawnItemEx("NemesisFragmentFireSpawner",0,0,52)
	Loop
  Use:
	TNT1 A 0 A_JumpIfInventory("NemesisFragmentToken",1,"BigFail")
	TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("Kill Check") == 1,"KillAll")
	TNT1 A 0 A_JumpIfInventory("TrueLegendaryRuneItem2",1,2)
	TNT1 A 0 A_Jump(256,"NeedRune")
    TNT1 A 0 A_JumpIfInventory("NemesisFragment",10,2)
	TNT1 A 0 A_Jump(256,"NeedFragments")
	TNT1 A 0 A_TakeInventory("NemesisFragment",9)
	TNT1 A 0 A_GiveInventory("NemesisFragmentToken")
	TNT1 A 1 A_SpawnItemEx("NemesisFragmentEffects")
    Stop
  NeedRune:
	TNT1 A 1 A_Print("You need a fully upgraded True Legendary Rune!")
	Fail
  NeedFragments:
	TNT1 A 1 A_Print("You have insufficient fragments!")
	Fail
  KillAll:
	TNT1 A 1 A_Print("You must kill all enemies on the map!")
	Fail
  BigFail:
	TNT1 A 0 A_TakeInventory("NemesisFragment",10)
	TNT1 A 1 A_Print("Why and how do you have 10 more fragments?")
	Fail
	}
}

ACTOR NemesisFragmentFireSpawner : LHellionSmokeSpawner
{
States
  {
  Spawn:
	TNT1 A 0 Bright
	TNT1 A 0 Bright A_CheckSight("Toaster")
	TNT1 A 0 A_SpawnItemEx("SmallNemesisHellionSmoke",0,0,0,0,0,random(1,3),0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0)
	TNT1 A 1 Bright
	Stop	
  }
}

Actor SmallNemesisHellionSmoke : NemesisHellionSmoke { Scale 0.2 }

ACTOR NemesisFragmentEffects
{
  +NOTIMEFREEZE
  States
  {
  Spawn:
	DGEM AAAA 5 Bright A_SpawnItemEx("NemesisFragmentFireSpawner",0,0,52)
	TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,-72,2)
    TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,-144,2)
    TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,-216,2)
    TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,-288,2)
    TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,0,2)
	TNT1 A 0 A_SpawnItemEx("NemesisFragmentPortal",0,0,120)
	TNT1 A 0 A_PlaySound("Fragment/PortalOpen",1,1.0,0,ATTN_NONE)
	DGEM A 205
	TNT1 A 1 ACS_NamedExecuteAlways("NemesisFragmentUsed")
	Stop
	}
}

Actor NemesisFragmentPortal
{
  +NOINTERACTION
  +CLIENTSIDEONLY
  +NOTIMEFREEZE
  +BRIGHT
  Scale 1.0
  Renderstyle Add
  States
  {
  Spawn:
	NPOR ABCDEFGHIJKLMNOPQRSTUVWXYZ 3
	NPO2 ABCDEFGHIJKLMNOPQRSTUVWXYZ 3
	NPO3 ABCDEFGHIJKLMNOPQR 3
	Stop
	}
}

Actor NemesisFragmentSpawner
{
  +NOTIMEFREEZE
  var int user_effectloop;
  States
  {
  Spawn:
	TNT1 A 10
	TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,-72,2)
    TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,-144,2)
    TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,-216,2)
    TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,-288,2)
    TNT1 A 0 A_CustomMissile("NemesisPentaLine1",0,0,0,2)
	TNT1 A 0 A_SpawnItemEx("NemesisFragmentTornado")
	TNT1 A 0 A_PlaySound("Fragment/Spawn",7)
  SpawnLoop:
	TNT1 A 0 A_JumpIf(user_effectloop >= 144,"Continue")
	TNT1 A 0 A_SetUserVar(user_effectloop,user_effectloop+1)
	TNT1 A 0 A_SpawnItemEx("BlackProjParticleSuperLarge2",random(-140,140),random(-140,140),random(0,4),frandom(-1,1),frandom(-1,1),frandom(1,6),0,0,64)
	TNT1 A 0 A_SpawnItemEx("NemesisWhiteProjParticleSuperLarge2",random(-140,140),random(-140,140),random(0,4),frandom(-1,1),frandom(-1,1),frandom(1,6),0,0,64)
	TNT1 A 1
	Loop
  Continue:
	TNT1 A 0 A_SpawnItemEx("NemesisFragmentExplosion",0,0,50)
	TNT1 A 0 A_DropItem("NemesisFragment",1)
	TNT1 A 0 A_PlaySound("Fragment/Explode",1)
	TNT1 A 0 A_PlaySound("Fragment/Shard",6)
	TNT1 A 0 A_Quake(8,45,0,2000,"")
	TNT1 A 0 A_SetUserVar(user_effectloop,0)
  SpawnLoop2:
	TNT1 A 0 A_JumpIf(user_effectloop >= 45,"Null")
	TNT1 A 0 A_SetUserVar(user_effectloop,user_effectloop+1)
	TNT1 A 0 A_SpawnItemEx("BlackProjParticleSuperLarge2",random(-30,30),0,random(0,4),frandom(3,7),0,frandom(3,9),random(0,360),0,64)
	TNT1 A 0 A_SpawnItemEx("NemesisWhiteProjParticleSuperLarge2",random(-30,30),0,random(0,4),frandom(3,7),0,frandom(3,9),random(0,360),0,64)
	TNT1 A 1
	Loop
	}
}

Actor NemesisFragmentToken : Inventory { Inventory.MaxAmount 1 }

Actor NemesisFragmentTornado
{
  +CLIENTSIDEONLY
  +NOINTERACTION
  +NOTIMEFREEZE
  +FLOORHUGGER
  +BRIGHT
  Renderstyle Subtract
  Scale 0.8
  States
  {
  Spawn:
	NFX0 ABCDEFGHIJKLMNOPQRSTUVWXYFGHIJKLMNOPQRSTUVWXYZ 3
	NFX9 ABCDEFG 3
	Stop
	}
}

Actor NemesisFragmentExplosion : NemesisFragmentTornado
{
  -FLOORHUGGER
  Renderstyle Add
  States
  {
  Spawn:
	NFX8 ABCDEFGHIJLMN 4
	Stop
	}
}

ACTOR NemesisFragmentEnterEffects
{
  +NOTIMEFREEZE
  +CLIENTSIDEONLY
  var int user_loop;
  States
  {
  Spawn:
	TNT1 A 0 NoDelay A_PlaySound("Fragment/PortalClose",1,1.0,0,ATTN_NONE)
  SpawnLoop:
	TNT1 A 0 A_JumpIf(user_loop >= 47,"Null")
	TNT1 A 0 A_SetUserVar(user_loop,user_loop+1)
	TNT1 A 0 A_SpawnItemEx("NemesisWhiteParticleSpawner",random(-150,150),random(-150,150),random(0,120))
	TNT1 A 0 A_SpawnItemEx("NemesisSoulFlameFlameFlameFlameFlameFlame",0,0,random(10,70),frandom(-10,10),frandom(-10,10))
	TNT1 A 2
	Loop
	}
}