
//***Che "Potpourri" is a family of game skills with maximum escalation.
// Escalation is a monster randomizer plus an extra monster spawner.

// In standalone FBD, the exotic FBD monsters can only be encountered 
// through escalation as regular monsters perform potpourri swaps


// The PotPourriCheck ACS tries spawning a bounding box actor 
//   that matches the size of the monster we are trying for
//   to make sure there is enough room to spawn that actor.
// Small humanoids do not check assuming there is always room
//   since they are all the same size.

// Cannot just spawn the actor using ACS because ACS doesn't support
//   transferring thing's special.

// The FBD escalation seeker is a volume at least partly encompassing
// the actor who spawned it, and completely inside the map geometry.
// extra monsters are spawned inside that volume

// The EDAY escalation seeker is a pre-placed actor

// Both types of escalation seekers wait until 
//  a player with non-zero escalation level enters the server
// then wait until all players are out of sight
// before spawning its set of monsters.

// Player's escalation level is determined from tokens in his inventory
//  in combination with server cvars.




ACTOR AbstractPotpourriSwapper
{
	MONSTER
	Radius 2
	Height 2
	+NOTARGET
	+NEVERTARGET
	+NOINTERACTION
	-SHOOTABLE
	-COUNTKILL
	States
	{
		SpawnNormal: 
			TNT1 A 1
			KYDB E -1
			Stop
			
		DoFail:
			TNT1 A 1 A_JumpIf(true, "SpawnNormal")
			Wait
			
		TryArchvile:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 1), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("TehArchvile",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TrySoulReaver:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 1), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("VileSoulReaver",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop	
		TryArchDevil:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 1), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("ArchDevil",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop

		TryCyber:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 2), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("NoSwapCyberdemon",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryCyberChad:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 2), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("CyberdemonChad",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryCyberGrizzly:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 2), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("CyberDevastator",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryKnight:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 3), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("HellKnight2_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryBaron:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 4), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("BaronofHell2_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryDuke:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 13), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("DukeOfHell",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop			
		TryBelphegor:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 5), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("FBD_Belphegor",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryBossBelphegor:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 5), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("FBD_BossBelphegor",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryMancubus:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 6), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("Mancubus_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryVolcabus:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 6), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("FBD_Volcabus",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryMastermind:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 7), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("TheSpiderMastermind_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop			
		TryMightyMastermind:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 7), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("MightyMastermind",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TrySupremeMastermind:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 7), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("SupremeMastermind",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryPE:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 8), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("FBD_PainElemental",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryRevenant:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 9), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("Revenant1_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryImmolant:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 9), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("Immolant",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryFriginant:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 9), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("Friginant",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryNoxinant:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 9), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("Noxinant",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop		
		TryArachnotron:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 10), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("Arachnotron1_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryAncientArachnotron:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 10), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("FBD_Arachnotron2",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryTank:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 11), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("FBD_EnemyMBT",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryArtilleryTank:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 11), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("FBD_EnemySPAAG",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryMech:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 12), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("ZombieMech",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryJuggernaut:
			TNT1 A 0 A_JumpIf(!CallAcs("PotPourriCheck", 14), "DoFail")
			TNT1 A 0 A_SpawnItemEx ("FBD_Juggernaut",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		TryModerateHumanoid:
			TNT1 A 1 A_Jump(4, "TryStrongHumanoid")
			TNT1 A 1 A_Jump(32, "DoRifleMarine", "DoShotgunMarine")
			TNT1 A 1 A_Jump(256, "DoImp", "DoSergeant", "DoZombie", "DoCommando")
			Wait
		TryStrongHumanoid:	
			TNT1 A 1 A_Jump(8, "TryMightyHumanoid")
			TNT1 A 1 A_Jump(256, "DoPlasmaMarine", "DoRLMarine", "DoUberSniper", "DoShotgunMarine", "DoMinigunMarine")
			Wait
		TryMightyHumanoid:	
			//TNT1 A 1 A_Jump(8, "TryGodlikeHumanoid")
			TNT1 A 1 A_Jump(256, "DoSSGMarine", "DoBfgMarine", "DoBfg10kMarine", "DoWeakMaradeur", "TryArchvile")
			Wait
		TryGodlikeHumanoid:	
			TNT1 A 1 A_Jump(256, "DoUberZoldat", "DoBfgMarine", "DoUnmakerMarine", "DoMaradeur", "TrySoulReaver")
			Wait	
		TryMeleeHumanoid:
			TNT1 A 1 A_Jump(8, "DoChainsawMarine", "DoBerserkMarine", "DoFistMarine")
			TNT1 A 1 A_Jump(256, "DoMummy", "DoHellhound", "DoLabguy")
			Wait
		TryBoss: 
			TNT1 A 1 A_Jump(256, "TryJuggernaut", "TryGodlikeHumanoid", "TryTank", "TryArtilleryTank", "TryMech", "TryMastermind", "TryMightyMastermind", "TrySupremeMastermind", "TryCyber", "TryCyberChad", "TryCyberGrizzly", "TryBossBelphegor", "TrySoulReaver", "TryArchDevil")
			Wait
		TryMiniBoss:
			TNT1 A 1 A_Jump(256, "TryVolcabus", "TryDuke", "TryBelphegor", "TryAncientArachnotron")
			Wait
		DoMummy:
			TNT1 A 0 A_SpawnItemEx ("FBD_Mummy",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoChainsawMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineChainsaw",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoFistMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineFist",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoBerserkMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineBerserk",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoRifleMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineRifle",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoShotgunMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineShotgun",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoHellhound:
			TNT1 A 0 A_SpawnItemEx ("HellHound",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop			
		DoImp:
			TNT1 A 0 A_SpawnItemEx ("Imp_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoCommando:
			TNT1 A 0 A_SpawnItemEx ("ChaingunGuy1_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoUberSniper:
			TNT1 A 0 A_SpawnItemEx ("FBD_UberSniper",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoUberZoldat:
			TNT1 A 0 A_SpawnItemEx ("FBD_UberZoldat",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoRLMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineRocketLauncher",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoRailgunMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineRailgun",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoBfgMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineBFG",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoBfg10kMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarine10K",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoUnmakerMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineUnmaker",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoWeakMaradeur:
			TNT1 A 0 A_SpawnItemEx ("FBD_Maradeur_Lite",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoMaradeur:
			TNT1 A 0 A_SpawnItemEx ("FBD_Maradeur",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoEliteMaradeur:
			TNT1 A 0 A_SpawnItemEx ("FBD_MaradeurElite",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoSSGMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineSSG",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoMinigunMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarineMinigun",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoPlasmaMarine:
			TNT1 A 0 A_SpawnItemEx ("ChaosMarinePlasma",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoZombie:
			TNT1 A 0 A_SpawnItemEx ("RifleZombie_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoSergeant:
			TNT1 A 0 A_SpawnItemEx ("ShotgunGuy1_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoAracnorb:
			TNT1 A 0 A_SpawnItemEx ("ArachnorbChe",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoLabguy:
			TNT1 A 0 A_SpawnItemEx ("Labguy",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop			
	}
}


ACTOR BullDemonPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(16, "DoSpectro")
			Goto TryMeleeHumanoid
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("BullDemon_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoSpectro:
			TNT1 A 0 A_SpawnItemEx ("FBD_Spectro",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR ZombiePotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(16, "TryRevenant", "DoMinigunMarine")
			Goto TryModerateHumanoid
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("RifleZombie_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR ImpPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(16, "TryRevenant", "TryKnight", "TryMancubus")
			Goto TryModerateHumanoid
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("Imp_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR SergeantPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(16, "TryRevenant", "TryKnight", "DoCommando")
			Goto TryModerateHumanoid
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("ShotgunGuy1_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR CacoPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(64, "Spawn8Caclets")
			TNT1 A 0 A_Jump(64, "TryPE")
			Goto DoAracnorb
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("Cacodemon_",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		Spawn8Caclets:
			TNT1 A 0 A_SpawnItemEx ("FBD_Caclet",12,12,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			TNT1 A 0 A_SpawnItemEx ("FBD_Caclet",-12,12,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG)
			TNT1 A 0 A_SpawnItemEx ("FBD_Caclet",-12,-12,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG)
			TNT1 A 0 A_SpawnItemEx ("FBD_Caclet",12,-12,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG)
			
			TNT1 A 0 A_SpawnItemEx ("FBD_Caclet",12,12,28, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG)
			TNT1 A 0 A_SpawnItemEx ("FBD_Caclet",-12,12,28, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG)
			TNT1 A 0 A_SpawnItemEx ("FBD_Caclet",-12,-12,28, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG)
			TNT1 A 0 A_SpawnItemEx ("FBD_Caclet",12,-12,28, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG)
			Stop
	}
}

ACTOR CommandoPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(16, "TryRevenant", "TryArachnotron")
			TNT1 A 0 A_Jump(6, "TryImmolant", "TryFriginant", "TryNoxinant")
			TNT1 A 0 A_Jump(16, "TryStrongHumanoid")
			Goto TryStrongHumanoid
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("ChaingunGuy1_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR CyberPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			Goto TryBoss
		SpawnNormal: 
			TNT1 A 0 A_Jump(128, "SpawnChad")
			TNT1 A 0 A_Jump(64, "SpawnGrizzly")
			TNT1 A 0 A_SpawnItemEx ("NoSwapCyberdemon",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		// those don't need checks because they are the same size
		SpawnChad:
			TNT1 A 0 A_SpawnItemEx ("CyberdemonChad",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop			
		SpawnGrizzly:
			TNT1 A 0 A_SpawnItemEx ("CyberdemonGrizzly",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop		
	}
}


ACTOR MastermindPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			Goto TryBoss
		SpawnNormal: 
			TNT1 A 0 A_Jump(128, "SpawnMighty")
			TNT1 A 0 A_Jump(64, "SpawnSupreme")
			TNT1 A 0 A_SpawnItemEx ("TheSpiderMastermind_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		// those don't need checks because they are the same size
		SpawnMighty:
			TNT1 A 0 A_SpawnItemEx ("MightyMastermind",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop			
		SpawnSupreme:
			TNT1 A 0 A_SpawnItemEx ("SupremeMastermind",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop		
	}
}

ACTOR RevenantPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(16, "TryBaron", "TryArachnotron")
			TNT1 A 0 A_Jump(16, "TryImmolant", "TryFriginant", "TryNoxinant")
			Goto TryStrongHumanoid
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("Revenant1_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR ArachnotronPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(224, "TryBaron", "TryRevenant", "DoAncientArachnotron")
			Goto TryStrongHumanoid
		SpawnNormal: 
			TNT1 A 0 A_Jump(32, "DoAncientArachnotron")
			TNT1 A 0 A_SpawnItemEx ("Arachnotron1_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		DoAncientArachnotron:	
			TNT1 A 0 A_SpawnItemEx ("FBD_Arachnotron2",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR KnightPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(16, "TryBaron", "TryBaron", "TryDuke", "TryBelphegor")
			Goto TryStrongHumanoid
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("HellKnight2_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR BaronPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			Goto TryMiniboss
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("BaronofHell2_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}

ACTOR MancubusPotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			Goto TryMiniboss
		SpawnNormal: 
			TNT1 A 0 A_SpawnItemEx ("Mancubus_PP",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
	}
}


ACTOR VilePotpourriSwapper: AbstractPotpourriSwapper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(86, "TryMightyHumanoid")
			TNT1 A 0 A_Jump(32, "DoRailgunMarine") // NEVER appears anywhere else!
			TNT1 A 0 A_Jump(16, "TryGodlikeHumanoid")
		SpawnNormal: 
			TNT1 A 0 A_Jump(128, "SpawnReaver")
			TNT1 A 0 A_Jump(64, "SpawnDevil")
			TNT1 A 0 A_SpawnItemEx ("TehArchvile",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop
		// those don't need checks because they are the same size
		SpawnReaver:
			TNT1 A 0 A_SpawnItemEx ("VileSoulReaver",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop			
		SpawnDevil:
			TNT1 A 0 A_SpawnItemEx ("ArchDevil",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			Stop		
	}
}