// *** MODIFIED BY CHEBMASTER
// I mark most important places modified by me with //***Che -- unless I forget to.






ACTOR MastermindPotpourriChecker: AbstractPotpourriChecker
{
	Radius 60
	Height 100
}

Actor WeakMastermindBossCubeSpawner: AbstractBossCubeSpawner
{
	Radius 60
	Height 100
	States
	{
		DoSummon:	
			TNT1 A 0 A_GiveInventory("SummonsCount", 1, AAPTR_TRACER)
			TNT1 A 0 A_SpawnItemEx("MastermindSizedTeleportFog")
			TNT1 A 1 A_SpawnItemEx("WeakMastermind",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0,user_stid)
			Stop
	}
}


//===========================================================================
//
// Spider boss
//
//===========================================================================



ACTOR FBD_Mastermind 17874
{
	//***Che radius, height and maxdropoffheight (n/a for flying ones) MUST be kept consistent with FBD_TrySpawn in FBD_CORE.acs!
	
	//***Che: cross-mod hardening: see ACTOR TheSpiderMastermind: FBD_Mastermind Replaces SpiderMastermind {} in Doom_Replacements.txt
	
	//$category "FBD Bosses"
	//$Sprite SPIDA1
	
   	damagefactor "Killme", 1.0 // AOE inflicted by captured marines
	PainChance "KillMe", 64
	PainChance "Taunt", 255
	damagefactor "Taunt", 1.0
	damagefactor "BFG", 0.2	// wtf is this?
	damagefactor "Desintegrate", 0.4 // 60% damage resistance agains bfg9000 and Unmaker
	
	//***Che
	damagefactor "Bfg10k", 0.7 // added 30% damage resistance to bfg10k
	
    damagefactor "HKFT", 0.05 // 95% damage resistance against hell knight melee attacks
	damagefactor "Avoid", 1.0
	PainChance "Avoid", 255
	damagefactor "GibRemoving", 0.0	damagefactor "Trample", 0.0
	damagefactor "TeleportRemover", 0.0
	DamageFactor "CauseSplash", 0.0 DamageFactor "CauseObjectsToSplashSlime", 0.0 DamageFactor "CauseObjectsToSplashNukage", 0.0
	DamageFactor "CauseObjectsToSplashBlood", 0.0 DamageFactor "CauseObjectsToSplashLava", 0.0
	Obituary "$BD_MASTERMIND_O" //"%o was destroyed by a Mastermind."
	Painchance "Stomp", 255
	Painchance "Explosive", 255
	+NOICEDEATH
	Game Doom
	SpawnID 7
	Health 4000
	Radius 60
	Height 100
    damagefactor "Crush", 30.0
    Scale 1.1
	Mass 6000
	Speed 20
	PainChance 30 // and pinky bite is a ripper projectile that hits up to 8 times... Raising this chance to obscene heights
	PainChance "Cut", 5
	Painchance "Fatality", 90
	Monster
	//MinMissileChance 200
	DeathHeight 0
	BurnHeight 0
	+BOSS
	+FLOORCLIP
    +DONTRIP
	+DONTMORPH
	+BOSSDEATH
    +NORADIUSDMG
	+MISSILEMORE
	+SOLID
	+MISSILEEVENMORE
	+SHOOTABLE
	Bloodtype "MastermindBlood"
	DropItem "DemonStrengthRune" 25
	SeeSound "spider/sight"
	AttackSound "spider/attack"
	PainSound "SPIPAIN1"
	DeathSound "spider/death"
	ActiveSound "spider/active"
	obituary "$OB_SPIDER"
    damagefactor "Blood", 0.0
	MaxStepHeight 24
	MaxDropOffHeight 32
	Tag "$BD_MASTERMIND" //"Spiderdemon Mastermind"
	
	var int user_sleeping;
	var int user_item_no;
	var int user_serverside_sfchk;
	
	PainChance "Argent", 255
	DamageFactor "Argent", 1.0
	
	PainChance "Ice", 20
	
	States
	{
		Pain.Ice:
			"----" A 20 A_Pain
			Goto See
		
		Pain.Taunt:
			TNT1 A 0
			TNT1 A 0 HealThing(1)
			TNT1 A 0 A_PlaySound("spider/sight", CHAN_VOICE)
			TNT1 A 0 A_GiveInventory("Enraged", 1)
			Goto Missile
/*			
		ReplaceVanilla:
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 A_SpawnItemEx ("VanillaSpiderMastermind",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG ,0)
			Stop
*/			
		PotPourriSwap:
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
		PotPourriWait:			
			KYPP D 5 A_JumpIf(CallAcs("FBD_GetMapRandomizerReady"), 1) // a two-second delay to allow re-randomizing on loading an auto-save
			Loop
			TNT1 A 0 A_Jumpif(!CallAcs("GetPotPourriChance", 75), "PotPourriNoSwap") // bosses have 75% instead 33%
			
			TNT1 A 0 A_ChangeFlag("SOLID", 0)
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)	
			TNT1 A 0 A_SpawnItemEx ("MastermindPotpourriSwapper",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			TNT1 A 30
			Stop
		PotPourriNoSwap:
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 1)
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 1)
			Goto PotPourriCancel
			
		Spawn:
			SPID A 0
			TNT1 A 0 A_GiveInventory("TargetIsAMastermind")
			TNT1 A 0 A_GiveInventory("TargetIsABoss")
			
			//***Che evicted these into TheSpiderMastermind	
			//TNT1 A 0 A_JumpIf(x == 1600 && y == -768 && z == 0, "ReplaceForBOSS") // E3M8
			//TNT1 A 0 A_JumpIf(x == -2720 && y == 32 && z == -80, "ReplaceForMotherdemon1") // E4M8
			//TNT1 A 0 A_JumpIf(x == 0 && y == 0 && z == 48, "ReplaceForMotherdemon2") // ?
			
			TNT1 A 0 A_JumpIf(CallAcs("GetPotPourri"), "PotPourriSwap")
		PotPourriCancel:
			
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_RunMonster")
			TNT1 A 0 A_GiveInventory("TargetIsABoss")
			TNT1 A 0 A_GiveInventory("TargetIsAMastermind")
			
			Goto Stand
			
		Idle: // without this, the game engine puts him into his Spawn state when he loses target 
				//-- and that wrecks havok with the init scripts!
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_sleeping", 1)
		LookingForPlayer:	
			SPID AAA 10 A_Look
			TNT1 A 0 A_Jump(64, "LookingForPlayer2")
			Loop
		LookingForPlayer2:
			TNT1 A 0 A_SetAngle(angle + Random(-50,50))
			SPID A 2 A_PlaySound("spider/walk", CHAN_BODY)
			SPID A 4 A_Wander
			SPID B 4 A_Wander
			SPID B 2 A_Look
			SPID C 6 A_Wander
			SPID D 2 A_PlaySound("spider/walk", CHAN_BODY)
			SPID D 4 A_Wander			
			SPID E 2 A_Look
			SPID E 4 A_Wander
			SPID F 6 A_Wander
			TNT1 A 0 A_Jump(32, "LookingForPlayer")
			Loop		
		
		ReplaceForBOSS:
			TNT1 A 0
			//***Che: A_NoBlocking makes it drop items! Which we do not want in this case. Replacing with resetting flags manually:
			//TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			TNT1 A 0 A_ChangeFlag("SOLID", 0)
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 ACS_NamedExecuteAlways("MapEnhancementE3M8")
			TNT1 A 0 A_SpawnItemEx("RocketBox", 64, 64)
			TNT1 A 0 A_SpawnItemEx("RocketBox", -64, 64)
			TNT1 A 0 A_SpawnItemEx("RocketBox", -64, -64)
			TNT1 A 0 A_SpawnItemEx("RocketBox", 64, -64)
			TNT1 A 0 A_SpawnItemEx ("E3M8Mastermind",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG |SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			TNT1 A 10
			Stop
			
		ReplaceForMotherDemon1:
			TNT1 A 0
			//***Che: A_NoBlocking makes it drop items! Which we do not want in this case. Replacing with resetting flags manually:
			//TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			TNT1 A 0 A_ChangeFlag("SOLID", 0)
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 A_SpawnItemEx ("MotherDemon",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG |SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			TNT1 A 10
			Stop	
			
			
		ReplaceForMotherDemon2:
			TNT1 A 0
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 A_SpawnItemEx ("MotherDemon",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG |SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			TNT1 A 10
			Stop		
		
		Stand:	
			SPID A 10 A_Look
			Loop
			
		See:
		
			//***Che
			// slaughtermap manage
			TNT1 A 0 A_JumpIf(!user_sleeping, 3) // forgo the expensive sight check if already awake
			TNT1 A 0 A_CheckSight(2) // do not consider ourselves awake if none of the players can see us
			TNT1 A 0 A_SetUserVar("user_sleeping", 0)
			TNT1 A 0 A_JumpIf(user_serverside_sfchk != -1, 3) // -1 means ACS commands us to do the radiusgive
			// A_RadiusGive is:
			//  1. serverside-only: the call is skipped on the client; only if a player is involved, a network command to update his item count is sent, otherwise the item count only increases on the server
			//  2. iterates over all actors in an infinitely tall square column checking their flags and coordinates
			//  3. performs expensive precision radius calculation (using a square root) unless RGF_CUBE is given (which results in cheaper delta per-coordinate comparison)
			//  4. performs expensive sight check, for each thing that passes flag and radius checks, unless RGF_NOSIGHT is given
			TNT1 A 0 A_RadiusGive("SfestCounterServerside", 500, RGF_MONSTERS | RGF_CUBE | RGF_NOSIGHT, 4)	// we count as 4		
			TNT1 A 0 A_SetUserVar("user_serverside_sfchk", 1) // reply that we did the deed			
			
			SPID A 2 A_Metal
			SPID A 2 A_Chase
			SPID B 2 A_Chase
			SPID B 2 A_Chase
			SPID C 2 A_Chase
			SPID C 2 A_Chase
			SPID D 2 A_Chase
			SPID D 2 A_Metal
			SPID E 2 A_Chase
			SPID E 2 A_Chase
			SPID F 2 A_Chase
			Loop

		Missile:
			TNT1 A 0 A_TakeInventory ("BrutalCounter2", 500)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("NODROPOFF", 0)
			SPID A 4 A_FaceTarget 
			SPID A 4 //A_FaceTarget 
			SPID A 4 //A_FaceTarget 
			SPID G 4 //A_FaceTarget
			
		MissileContinue:	
			
			SPID G 3 //A_FaceTarget
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), "MissileAtInvisible")
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 A_Jump(256, 2)
			TNT1 A 0 A_FaceTarget			
			
			SPID H 2 BRIGHT A_CustomMissile("MastermindTracer", 42, 0, random(-3, 3)+ angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH, random(-1, 1))
			TNT1 A 0 A_SpawnItem ("MasterMindCaseSpawn", 0, 60,0)
			
			TNT1 A 0 A_GiveInventory ("BrutalCounter2", 1)
			TNT1 A 0 A_JumpIfInventory("Enraged", 1, 2)
			TNT1 A 0 A_JumpIfInventory ("BrutalCounter2", 30, "StopFiring")
			TNT1 A 0 A_JumpIfInventory ("BrutalCounter2", 50, "StopFiring") // enraged
			//SPID G 0 A_SpidRefire // includes A_FaceTarget as part of its action!!
			//Goto Missile+7
			
		MissileSpidRefire:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("Enraged", 1, "EnragedRefire")
			TNT1 A 0 A_JumpIfTargetInLOS("MissileContinue", 0, JLOSF_DEADNOJUMP)
			TNT1 A 0 A_Jump(192, "MissileContinue") // https://zdoom.org/wiki/A_MonsterRefire
			Goto See
		EnragedRefire:
			TNT1 A 0
			TNT1 A 0 A_Jump(208, "MissileContinue") // https://zdoom.org/wiki/A_MonsterRefire
			Goto See	
			
		MissileAtInvisible:
			TNT1 A 0
			TNT1 A 0 A_Jump(252, 2) // 1/64th chance to readjust aim
			TNT1 A 0 A_FaceTarget
			
			SPID G 3
			SPID H 2 BRIGHT A_CustomMissile("MastermindTracer", 42, 0, random(-3, 3)+ angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH, random(-1, 1))
			TNT1 A 0 A_SpawnItem ("MasterMindCaseSpawn", 0, 60,0)
			
			TNT1 A 0 A_GiveInventory ("BrutalCounter2", 1)
			TNT1 A 0 A_JumpIfInventory ("BrutalCounter2", 30, "StopFiring")
			SPID G 0 A_SpidRefire
			Goto MissileContinue//Missile+7		
		
		StopFiring:
			SPID A 6 A_FaceTarget 
			Goto See
		
		//***Che:
		Pain.Avoid:
			TNT1 A 0
			TNT1 A 0 HealThing(1)
		Avoid:
			TNT1 A 0
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			TNT1 A 0 A_ChangeFlag("NODROPOFF", 1)
			NULL A 0 A_FaceTarget
			SPID ABCD 1 A_FastChase
			NULL A 0 A_FaceTarget
			SPID ABCD 1 A_FastChase
			NULL A 0 A_FaceTarget
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("NODROPOFF", 0)
			Goto MissileContinue //Missile+6
			
		IosChastises: // required by Chebskies-EDAY map 313
			"----" A 0 A_ClearTarget
			"----" A 0 HealThing(500)
			"----" A 0 ACS_NamedExecuteWithResult("DisplayArgentDischarge", 40, 100, 50)
			Goto Pain
		Pain:
			SPID I 4 A_Pain
			Goto See
		Pain.Argent: // inflicted by ghost souls spammed by super archviles
		
			TNT1 A 0
			TNT1 A 0 HealThing(500)
			TNT1 A 0 ACS_NamedExecuteWithResult("DisplayArgentDischarge", 40, 100, 50)			
		
			TNT1 A 0 A_JumpIfInventory("Enraged", 1, "MissileContinue")
			TNT1 A 0 A_PlaySound("spider/sight", CHAN_VOICE)
			TNT1 A 0 A_GiveInventory("Enraged", 1)
			
			Goto MissileContinue // results in furious spraying in a random direction if target is out of sight			

		Pain.Stomp:
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_Recoil(10)
			SPID I 2 A_Pain
			Goto See
			
		Pain.Bfg10k: //***Che changed damage type from extreme to custom
		Pain.Explosive:
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_Recoil(10)
			SPID I 2 A_Pain
			Goto Avoid
			
		Death:
			SPID J 1
			SPID J 20 A_Scream
			tnt1 a 0 A_FaceTarget
			SPID K 10 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("RidiculousExplosionSpawner", 30, 0, random (0, 360), 2, 90)
			SPID LM 5
			EXPL A 0 Radius_Quake (8, 100, 0, 22, 0)
			TNT1 A 0 A_Explode(150, 300)
			TNT1 AAAAAAAAAA 0 A_CustomMissile ("PEPart2SuperFast", 32, 0, random (0, 360), 2, random (0, 160))
			TNT1 AAAAAAA 0 A_CustomMissile ("BloodMistXXBig", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			TNT1 AAAAAAAAAA 0 A_CustomMissile ("BloodMistXXBig", 100, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			TNT1 AAA 0 A_CustomMissile ("MastermindLeg", 40, 0, random (0, 360), 2, random (40, 90))
			//TNT1 AAA 0 A_SpawnItemEx("MastermindLeg", 40,random(-30, 30),random(-30, 30), random(-24,24),random(-24,24),random(12,24), 0, SXF_TRANSFERTRANSLATION,0)
			TNT1 A 0 A_SpawnItem ("GiantBloodSpot")
			
			TNT1 A 0 A_ChangeFlag("NOTARGET", 1)
			SPID NOPQR 5
			SPID S 300
			SPID S 1 A_Jump(256, "CheckIfBoss")
			Wait // Zandronum client will skip the jump and keep repeating the last frame until receives status change from the server
		CheckIfBoss:
			"####" "#" 1
			"####" "#" -1 A_BossDeath
			Stop	
			
			
		Death.Stomp:
		Death.Telefrag:
		Death.Massacre:
			SPID J 0 A_Stop
			TNT1 A 0 A_NoBlocking
			SPID J 5 A_Scream
			tnt1 a 0 A_FaceTarget
			SPID K 3 
			SPID LM 3
			TNT1 AAA 0 A_CustomMissile ("XDeath2", 42, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAA 0 A_CustomMissile ("XDeath3", 42, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("BloodMistXXBig", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			TNT1 AAAAAAAAAA 0 A_CustomMissile ("BloodMistBig", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			TNT1 A 0 A_SpawnItem ("GiantBloodSpot")
			TNT1 A 0 A_SpawnItemEx ("StompedMastermind",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERTRANSLATION,0)
			TNT1 A 200
			SPID S 1 A_Jump(256, "CheckIfBoss")
			Wait // Zandronum client will skip the jump and keep repeating the last frame until receives status change from the server
		
		
			
		Crush:
			TNT1 A 0
			TNT1 AAAA 0 A_SpawnItemEx ("BodyRemovalThing",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 1 A_XScream
			Stop
			
			
		Death.Cut:
		Death.Saw:
		Death.decaptate:
			TNT1 AAAAAAAAAAAAAAAAA 0 A_CustomMissile ("XDeath1", 120, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			TNT1 A 0 A_CustomMissile ("XSpiderMastermindCuttedBrain", 120, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			SPIY AAAAAAAAAAA 8 A_SpawnItem("MuchBlood", 0, 120)
			
			EXPL A 0 Radius_Quake (8, 100, 0, 22, 0)
			TNT1 AAAAAA 0 A_CustomMissile ("ExplosionSpawner", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 360))
			TNT1 AAAA 0 A_CustomMissile ("SuperGoreSPawner", 110, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 180))
			TNT1 AAAAAAA 0 A_CustomMissile ("BloodMistXXBig", 90, 0, random (0, 360), CMF_AIMDIRECTION, random (70, 90))
			SPID K 10 A_NoBlocking
			TNT1 AAAAAA 0 A_CustomMissile ("ExplosionSpawner", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 360))
			TNT1 AAAA 0 A_CustomMissile ("UltraGoreSPawner", 80, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 180))
			TNT1 AAAAAAA 0 A_CustomMissile ("BloodMistXXBig", 90, 0, random (0, 360), CMF_AIMDIRECTION, random (70, 90))
			SPID L 5
			TNT1 AAAA 0 A_CustomMissile ("MuchMeatDeath", 0, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("RidiculousExplosionSpawner", 30, 0, random (0, 360), CMF_AIMDIRECTION, 90)
			TNT1 AAAAAAAAAAAA 0 A_CustomMissile ("PEPart2SuperFast", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("UltraGoreSPawner", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 180))
			TNT1 AAAAAA 0 A_CustomMissile ("UltraGoreSpawner", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 180))
			TNT1 AAAAAAAAAAAAAA 0 A_CustomMissile ("BloodMistXXBig", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (70, 90))
			 TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("BloodMistXXBig", 100, 0, random (0, 360), CMF_AIMDIRECTION, random (20, 90))
			//SPID MNOPQR 5
			TNT1 AAA 0 A_CustomMissile ("MastermindLeg", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			TNT1 A 0 A_CustomMissile ("MastermindLeg", 30, 0, 0, 2, 65)
			//TNT1 AAAA 0 A_SpawnItemEx("MastermindLeg", 30,random(-30, 30),random(-30, 30), random(-24,24),random(-24,24),random(12,24), 0, SXF_TRANSFERTRANSLATION,0)
			//TNT1 AAAAAAAAAAAA 0 A_CustomMissile ("PEPart2SuperFast", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem ("GiantBloodSpot")
			TNT1 A 300
			TNT1 A 1 A_Jump(256, "CheckIfBoss")
			Wait // Zandronum client will skip the jump and keep repeating the last frame until receives status change from the server		
			
			
		Death.Fatality:
			TNT1 A 0
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			TNT1 A 0 A_FaceTarget
			//TNT1 AAAAA 0 A_SpawnItemEx("HealthPlusFatalityBonus", 0,0,20, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			//TNT1 AAAAA 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,20, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 25, 25, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_Pain
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_JumpIfIntargetInventory("IsPlayer", 1, 1)
			Goto Death
			TNT1 A 0 A_GiveToTarget("GoFatality", 1)
			TNT1 A 0 A_GiveToTarget("MastermindFatality", 1)
			TNT1 A 500
			TNT1 A 1 A_Jump(256, "CheckIfBoss")
			Wait // Zandronum client will skip the jump and keep repeating the last frame until receives status change from the server	
	}
}


Actor TheSpiderMastermind_PP: FBD_Mastermind
{
	States
	{
		PotPourriSwap:
			TNT1 A 0
			Goto PotPourriCancel		
	}
}

ACTOR XSpiderMastermindCuttedBrain
{
    Radius 8
    Height 8
    Speed 10
    Scale 1.2
	Mass 1
    +NOBLOCKMAP
	+MISSILE
    +NOTELEPORT
    +MOVEWITHSECTOR
    +CLIENTSIDEONLY
    +RIPPER
    +BLOODLESSIMPACT 
	-DONTSPLASH
	+THRUGHOST
	damagetype Blood
    SeeSound "misc/xdeath4"
    DeathSound "misc/xdeath1"
	Decal BrutalBloodSplat
	Mass 1
    States
    {
		Spawn:
			TNT1 A 0 A_JumpIf(waterlevel > 1, "Splash")
			SPIP ABCDEFGH 3 A_CustomMissile ("Brutal_FlyingBloodTrail", 0, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 360))
			Loop
		Death:
			TNT1 A 0 A_SpawnItem("Brutal_BloodSpot",0,0,0,1)
			SPIP I 1
			SPIP I -1
			Stop
		Splash:
			TNT1 A 0
			Stop
    }
}





//***Che this seems like an unused leftover
ACTOR MastermindStep
{
	Radius 32
	Height 32
	Speed 0
    Damage 50
	renderstyle translucent
	alpha 0.75
	DamageType Stomp
    MeleeDamage 0
    Gravity 2.0
	Scale 0.4
    Decal "Cracks"
    -NOGRAVITY
    +EXTREMEDEATH
	//MONSTER
	//-COUNTKILL
	//+SHOOTABLE
	//+NOBLOOD
	//Health 50000
	Obituary "%o has stepped on by a Mastermind."
    Health 5
	States
	{
		Spawn:
		 
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, 150)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, -150)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, -30)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, 30)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, -60)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, 60)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, -90)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, 90)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, -120)
			NULL A 0 A_CustomMissile("FootStep6", 0, 0, 120)
			TNT1 A 0 A_SpawnItemEx("FootStep5", 0, 0, 40, 0, 0)
			EXPL AAA 0 A_CustomMissile ("ExplosionSMoke", 0, 0, random (0, 360), 2, random (0, 360))
			
			EXPL A 0 A_Explode(300, 50, 0)
			TNT1 A 4
			MNSM ABCDEFGHIJKLMNOPQ 0
			Stop
	}
}
















ACTOR MastermindLeg
{
    Radius 8
    Height 8
    Speed 24
    Scale 1.3
	Gravity 0.8
	Mass 1
    +NOBLOCKMAP
	+MISSILE
    +NOTELEPORT
    +MOVEWITHSECTOR
	+THRUACTORS
	+FLOORCLIP
	-NOGRAVITY
	+FORCERADIUSDMG
	+SKYEXPLODE
    damagetype Stomp
    SeeSound "misc/xdeath4"
    DeathSound "misc/xdeath1"
	Decal BrutalBloodSplat
	Mass 1
    States
    {
		Spawn:
			TNT1 A 0 A_JumpIf(waterlevel > 1, "Underwater")
			SPP4 ABCDEFGH 5
			Loop
		Death:
			TNT1 A 0 ThrustThingZ(0,50,0,1)
			TNT1 A 0 A_Explode(300, 100)
			EXPL AAAAAAA 0 A_CustomMissile ("ExplosionSMoke", 0, 0, random (0, 360), 2, random (0, 360))
			Goto KeepRotating
		KeepRotating:	
			SPP4 AB 2
			SPP4 CDEFGH 2 A_CheckFloor("Rest")
			Loop
		Rest:	
			SPP4 A 1
			TNT1 A 0 A_Explode(50, 100)
			EXPL AAAAAAA 0 A_CustomMissile ("ExplosionSMoke", 0, 0, random (0, 360), 2, random (0, 360))
			SPP4 A -1
			Stop
			
		Underwater:
		Splash:
			SPP4 A 4
			Loop
    }
}




ACTOR StompedMastermind
{
    Radius 56
    Height 32
    Scale 1.0
	+SHOOTABLE
	+NOBLOOD
	DamageFactor "Trample", 0.0
	DamageFactor "Stomp", 0.0
	Health 300
	Mass 999999
    States
    {
		Spawn:
			FTS2 F 10
			TNT1 A 0 A_ChangeFlag("SOLID", 1)
			FTS2 F -1
			Stop
		
		Death:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Explode(300, 400)
			TNT1 A 0 A_CustomMissile ("RidiculousExplosionSpawner", 30, 0, random (0, 360), 2, 90)
			EXPL A 0 Radius_Quake (8, 100, 0, 22, 0)
			TNT1 AAAAAAAAAA 0 A_CustomMissile ("PEPart2SuperFast", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAAAA 0 A_CustomMissile ("BloodMistXXBig", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			TNT1 AAAAAAAAAA 0 A_CustomMissile ("BloodMistXXBig", 100, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			//TNT1 AAA 0 A_CustomMissile ("MastermindLeg", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			TNT1 AAAA 0 A_SpawnItemEx("MastermindLeg", 40,random(-30, 30),random(-30, 30), random(-24,24),random(-24,24),random(12,24), 0, SXF_TRANSFERTRANSLATION,0)
			SPID S 1
			SPID S -1
			Stop
    }
}






//***Che: this seems unfinished.
//Hmmm.... Hmmmmmmmm....
//Yess! I shall unleash this as the *third* stage of the EDAY IOS boss!
//I will never tell anyone and not list it in my list of updates...
// MWAHAHAHAHA }:D
// Just... give him a ranged attack... Some sort of boss cube flinger...
// and transform the map radically into an immense field.

ACTOR Titan
{
    //***Che: how old is this? There is no such damage type as "BFG".
	damagefactor "BFG10k", 0.4
	
	damagefactor "BFG", 0.2	damagefactor "Desintegrate", 0.4
    damagefactor "HKFT", 0.05
	damagefactor "Avoid", 1.0
	damagefactor "GibRemoving", 0.0	damagefactor "Trample", 0.0
	damagefactor "TeleportRemover", 0.0
	DamageFactor "CauseSplash", 0.0 DamageFactor "CauseObjectsToSplashSlime", 0.0 DamageFactor "CauseObjectsToSplashNukage", 0.0
	DamageFactor "CauseObjectsToSplashBlood", 0.0 DamageFactor "CauseObjectsToSplashLava", 0.0
	Obituary "%o was destroyed by a Mastermind."
	Painchance "Stomp", 255
	Painchance "Explosive", 255
	+NOICEDEATH
	Game Doom
	SpawnID 7
	Health 100000
	Radius 160
	Height 640
    damagefactor "Crush", 30.0
    Scale 5.0
	Mass 996000
	Speed 80
	MaxStepHeight 400
	MaxDropOffHeight 400
	PainChance 30
	Painchance "Fatality", 90
	Monster
	//MinMissileChance 200
	DeathHeight 0
	BurnHeight 0
	+BOSS
	+FLOORCLIP
    +DONTRIP
	+DONTMORPH
	+BOSSDEATH
    +NORADIUSDMG
    +NOBLOOD
	+MISSILEMORE
	+SOLID
	+MISSILEEVENMORE
	+SHOOTABLE
	DropItem "DemonStrengthRune" 25
	SeeSound "spider/sight"
	AttackSound "spider/attack"
	PainSound "SPIPAIN1"
	DeathSound "spider/death"
	ActiveSound "spider/active"
	obituary "$OB_SPIDER"
    damagefactor "Blood", 0.0
	States
	{
	
    Spawn:
		KPRM A 10 A_Look
		Loop
		
	See:
		KPRM A 20 A_Explode(9999, 600)
		KPRM BBBBB 2 A_Chase("", "")
		KPRM C 20 A_Explode(9999, 600)
		KPRM DDDDD 2 A_Chase("", "")
		Loop
		
	//***Che Ladies and gentlemen... This monstrosity has no death animation!	
	}
}




#include Masterminds_Super.txt