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





ACTOR KnightPotpourriChecker: AbstractPotpourriChecker
{
	Radius 16
	Height 56
}

ACTOR BaronPotpourriChecker: AbstractPotpourriChecker
{
	Radius 20
	Height 64
}

Actor KnightBossCubeSpawner: AbstractBossCubeSpawner
{
	Radius 16
	Height 64
	States
	{
		DoSummon:	
			TNT1 A 0 A_GiveInventory("SummonsCount", 1, AAPTR_TRACER)
			TNT1 A 0 A_SpawnItemEx("TeleportationFog")
			TNT1 A 1 A_SpawnItemEx("FBD_Knight",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0,user_stid)
			Stop
	}
}

Actor BaronBossCubeSpawner: AbstractBossCubeSpawner
{
	Radius 16
	Height 64
	States
	{
		DoSummon:	
			TNT1 A 0 A_GiveInventory("SummonsCount", 1, AAPTR_TRACER)
			TNT1 A 0 A_SpawnItemEx("TeleportationFog")
			TNT1 A 1 A_SpawnItemEx("BaronofHell2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0,user_stid)
			Stop
	}
}

//***Che: just in case, inheriting the bruisers not from the actors provided by the game engine
//  (who are defined in ZScript in case of GZDoom )
//  but from this DECORATE code copy-pasted from zandronum.pk3:


ACTOR ZandronumBaronOfHell
{
	Game Doom
	//SpawnID 3
	Health 1000
	Radius 24
	Height 64
	Mass 1000
	Speed 8
	PainChance 50
	Monster
	+FLOORCLIP
	+BOSSDEATH
	SeeSound "baron/sight"
	PainSound "baron/pain"
	DeathSound "baron/death"
	ActiveSound "baron/active"
	Obituary "$OB_BARON"
	HitObituary "$OB_BARONHIT"
	States
	{
		Spawn:
			BOSS AB 10 A_Look 
			Loop
		See:
			BOSS AABBCCDD 3 A_Chase
			Loop
		Melee:
		Missile:
			BOSS EF 8 A_FaceTarget
			BOSS G 8 A_BruisAttack
			Goto See
		Pain:
			BOSS H  2
			BOSS H  2 A_Pain
			Goto See
		Death:
			BOSS I  8
			BOSS J  8 A_Scream
			BOSS K  8
			BOSS L  8 A_NoBlocking
			BOSS MN 8
			BOSS O -1 A_BossDeath   
			Stop
		Raise:
			BOSS O 8
			BOSS NMLKJI  8
			Goto See
	}
}


ACTOR ZandronumHellKnight : ZandronumBaronOfHell
{
	Game Doom
	//SpawnID 113
	Health 500
	-BOSSDEATH
	SeeSound "knight/sight"
	ActiveSound "knight/active"
	PainSound "knight/pain"
	DeathSound "knight/death"
	HitObituary "$OB_KNIGHTHIT"
	Tag "$HELLKNIGHT"
	Obituary "$HELLKNIGHT_O"
	States
	{
		Spawn:
			BOS2 AB 10 A_Look 
			Loop
		See:
			BOS2 AABBCCDD 3 A_Chase
			Loop
		Melee:
		Missile:
			BOS2 EF 8 A_FaceTarget
			BOS2 G 8 A_BruisAttack
			Goto See
		Pain:
			BOS2 H  2
			BOS2 H  2 A_Pain
			Goto See
		Death:
			BOS2 I  8
			BOS2 J  8 A_Scream
			BOS2 K  8
			BOS2 L  8 A_NoBlocking
			BOS2 MN 8
			BOS2 O -1
			Stop
		Raise:
			BOS2 O 8
			BOS2 NMLKJI  8
			Goto See
	}
}

 

ACTOR FBD_Knight : ZandronumHellKnight 17626
{
	//$category "FBD Monsters"
	
	//***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 HellKnight2: FBD_Knight Replaces HellKnight {} in Doom_Replacements.txt
	
	//$Sprite BOS2A1C1
	
	//***Che
	Tag "$HELLKNIGHT"
	Obituary "$HELLKNIGHT_O"
	var int user_head_tid;
	var int user_head_type; // 2, noble headbox
	var int user_head_rel;
	var int user_head_scale;
	var int user_head_xyzf; /* 
		a packed value: 
		bits 0..7 =x+128, clamped to -128..127
		bits 8..15 =y+128, clamped to -128..127
		bits 16..23 =z, clamped to 1..255
		bit 29 is a command to assume an unique TID, used in monster-on-monster headshotting
		A zero value is a command to terminate
	*/	
	var int user_sleeping;
	var int user_item_no;
	//var int user_serverside_sfchk; // on client, always 0. 
	// on server, -1 means command for DECORATE to perform a_radiusGive,
	// 1 decorate replies it had performed RadiusGive

	Scale 1.0
    Speed 8
    Health 500
    damagefactor "Crush", 10.0
	damagefactor "GibRemoving", 0.0 
	PainChance "HangingHook", 0
	
	PainChance 25
	PainChance "Kick", 255 
	PainChance "Leg", 255
	PainChance "ExtremePunches", 255 
	PainChance "SuperPunch", 255
	PainChance "LowKick", 220
	PainChance "Head", 150
	PainChance "HeadPlasma", 150
	PainChance "HeadStun", 255
	
	PainChance "Explosive", 255
	PainChance "Saw", 100
	PainChance "Cut", 100
	PainChance "Decaptate", 130
	
	PainChance "Bullet792", 80 // machineguns and snip[er rifles not aimed
	PainChance "SniperBullet", 160 // sniper rifle aimed	
	
	damagefactor "Fatality", 2.0
	DamageFactor "CauseSplash", 0.0 DamageFactor "CauseObjectsToSplashSlime", 0.0 DamageFactor "CauseObjectsToSplashNukage", 0.0
	DamageFactor "CauseObjectsToSplashBlood", 0.0 DamageFactor "CauseObjectsToSplashLava", 0.0
	damagefactor "SSG", 0.5	damagefactor "Avoid", 0.0	damagefactor "TeleportRemover", 0.0
	PainSound "PSXDPN"
	Game Doom
	DeathHeight 0
	BurnHeight 0
	Height 56
	Radius 16
    GibHealth 30
	-BOSSDEATH
	-FASTER
	MaxStepHeight 24
	MaxDropOffHeight 32
	damagefactor "Avoid", 0.0
	damagefactor "Blood", 0.0 damagefactor "BlueBlood", 0.0 damagefactor "GreenBlood", 0.0
    BloodType "Green_Blood", "GreenFBD_SawBlood", "GreenFBD_SawBlood"
	BloodColor "DarkGreen"
	DropItem "DemonStrengthRune" 3
	//Obituary "%o was slain by a Hell Knight."
	
	DamageType HKF //***Che note: in the melee attack it is written as HKFT!
	// This one could only be inflicted via A_Explode -- which this actor does not use.
	// This looks like a rudiment of some idea never implemented
	
	+DONTHURTSPECIES
	//Tag "Hell Knight"
    MeleeDamage 5
	
	PainChance "Argent", 255
	DamageFactor "Argent", 1.0
	
	damagefactor "Killme", 1.0 // AOE inflicted by captured marines
	PainChance "Killme", 255		
	
	Species "Bruisers"
	
	PainChance "Ice", 130
	
	States
	{
		Pain.Ice:
			"----" A 20 A_Pain
			Goto See
		
		WaitTargetsFatalityOut:
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			BOS2 B 1 A_Jump(256, "WTF1", "WTF2", "WTF3", "RetreatContinue")
			Wait
		WTF1:
			TNT1 A 0 A_PlaySound("knight/sight", CHAN_VOICE)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",0,0,52)
			BTS2 ABC 1
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",0,0,40)
			BTS2 DEDF 2
			BTS2 DEDF 2
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",0,0,52)
			BTS2 CBA 1 A_FaceTarget	
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, "WTFNotYet")
			Goto See2
		WTF2:
			TNT1 A 0 A_PlaySound("knight/sight", CHAN_VOICE)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			BOS2 BBBBBB 6 A_SetAngle(angle + Random(-15, 15))
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, "WTFNotYet")
			Goto See2
		WTF3:
			TNT1 A 0 A_PlaySound("knight/sight", CHAN_VOICE)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 6,-4,51)
			BOS2 HHHHHH 6 A_SetAngle(angle + Random(-15, 15))
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, "WTFNotYet")
			Goto See2
		WTFNotYet:
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, 1)
			Goto See
			BOS2 AABB 4 A_Wander
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, 1)
			Goto See
			BOS2 CCDD 4 A_Wander
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, 1)
			Goto See
			BOS2 ABCD 3 A_Wander
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, 1)
			Goto See
			BOS2 ABCD 3 A_Wander
			Goto WaitTargetsFatalityOut
			
		Raise:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII") // should not have a headbox by now -- but what if?
			TNT1 A 0 A_SpawnItemEx("StandaloneGreenRezSfx",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			BOS2 O 8
			BOS2 NMLKJI  8
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_CustomizeOnRez") // it runs OnRezMapScript
				// if the map prpvides one
			Goto See2

		FallbackRaise: // we were put into this state by the superarchvile AOE raising, our height is hopelessly kaput and we have to spawn a substitute
			"----" A 0 A_GiveInventory("RezzingNow")
			"----" A 0 A_ChangeFlag("CORPSE", 0)
			"----" A 0 A_ChangeFlag("COUNTKILL", 0)
			"----" A 0 A_ChangeFlag("SHOOTABLE", 0)
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 2022) // see _mob_list.xlsx
			Stop
			
		FallbackRezSuccess:
			TNT1 A 0 A_SpawnItemEx("StandaloneGreenRezSfx",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30
			Stop				
	
		Melee:
			TNT1 A 0
			
			// slaughtermap manage - warming the headbox up
			TNT1 A 0 A_JumpIf(!user_sleeping, 4) // forgo the expensive sight check if already awake
			TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, 2) // bypass the sight check 
			TNT1 A 0 A_CheckSight(2) // out of sight of any player, AND attacking another monster, keep slumbering
			TNT1 A 0 A_SetUserVar("user_sleeping", 0)

			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, "WaitTargetsFatalityOut")
			
			TNT1 A 0 A_JumpIfInTargetInventory("IsLTGPlayer", 1, "LTGCheckM")
		MeleeContinueAfterLTGCheck:	

			// Kinslayer check:	
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsABruiser", 1, 2)
			TNT1 A 0 A_JumpIf(true, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_InfightFriendlyFireOn")		
			
			//TNT1 A 0 A_JumpIfInventory("IAmClassicMonster", 1, "VanillaMelee")
			TNT1 A 0 A_JumpIfInTargetInventory("IsInATank", 1, "LeapBackAndSpray")
			
			TNT1 A 0 A_JumpIfInventory("MeleeHitSuccess", 1, 2)
			TNT1 A 0 A_JumpIfInventory("MeleeMiss", 3, "LeapBackAndSpray")
			TNT1 A 0 A_TakeInventory("MeleeHitSuccess", 1)			
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			BOS2 E 6 A_FaceTarget
			TNT1 A 0 A_PlaySound("weapons/gswing", CHAN_WEAPON)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			BOS2 F 6 A_FaceTarget
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 G 6 A_CustomMissile("KnightAttack",10,0,0,0)
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")
			
			TNT1 A 0 A_Chase("", "") // stop kicking that dead horse (this jumps to Idle if target is ded)
			
			TNT1 A 0 A_JumpIfInventory("MeleeHitSuccess", 1, 1)
			Goto See2
			TNT1 A 0 A_JumpIfCloser(70, 1) // otherwise, strikes from too long a range
			Goto See2
			BOS2 D 4 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0,54)
			BOS2 D 4 A_FaceTarget
			TNT1 A 0 A_Recoil(-6)
			Goto Melee
/*			
		VanillaMelee:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			BOS2 E 8 A_FaceTarget
			TNT1 A 0 A_PlaySound("weapons/gswing", CHAN_WEAPON)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			BOS2 F 8 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 G 8 A_CustomMissile("KnightAttack",10,0,0,0)
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")
			Goto See2
*/			
/*			
		Melee2:
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")
			BOS2 EF 8 A_FaceTarget
			BOS2 G 8 A_CustomMissile("KnightAttack",10,0,0,0)
			Goto See2	
*/			
		LeapBackAndSpray:		
			TNT1 A 0
			TNT1 A 0 A_TakeInventory("MeleeMiss", 10)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 A_Recoil(12)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,-3,40)
			KNRJ AAAAAAAAAAAAAAAA 4 A_CheckFloor ("MissileContinue")
			Goto MissileContinue				
/*
		ReplaceVanilla:
			//TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			//TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			//TNT1 A 0 A_SpawnItemEx ("VanillaHellKnight",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG ,0)
			//Stop
			TNT1 A 0
			TNT1 A 0 A_GiveInventory("IAmClassicMonster", 1)
			Goto Stand
*/			
			
		PotPourriSwap:
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
		PotPourriWait:			
			KYPP B 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", 33), "PotPourriNoSwap")
			
			TNT1 A 0 A_ChangeFlag("SOLID", 0)
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			TNT1 A 0 A_SpawnItemEx ("KnightPotpourriSwapper",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:
			BOS2 B 0 NODELAY A_JumpIf(CallAcs("GetPotPourri"), "PotPourriSwap")
		PotPourriCancel:
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_RunMonster", 2) // noble headbox, 1.0 default scale
			TNT1 A 0 A_GiveInventory("TargetIsAHellKnight", 1)
			TNT1 A 0 A_GiveInventory("TargetIsABruiser")
			
		Stand:
			TNT1 A 0
			//TNT1 A 0 A_JumpIf(user_serverside_sfchk >= 4, 2) // extreme slaughtermap optimization
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			TNT1 A 0 A_CheckSight("Stand2")
			
			BOS2 BBBBBBBB 5 A_Look
			"----" A 0 A_JumpIf(!user_head_tid, "StandSfest")
			Loop
		
		Stand2:
			BOS2 B 11 A_Look
			Goto Stand
			
		StandSfest:
			"----" AA 10 A_Look
			Loop
/*		
		VanillaSee:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			BOS2 AABBCCDD 3 A_Chase
			Loop			
*/			
		See: 
			BOS2 B 0
/*			
			// slaughtermap manage
			TNT1 A 0 A_JumpIf(!user_sleeping, 3) // forgo the expensive sight check if already awake
			TNT1 A 0 A_CheckSight(2)
			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, 1)			
			TNT1 A 0 A_SetUserVar("user_serverside_sfchk", 1) // reply that we did the deed
*/
			
			
//			TNT1 A 0 A_JumpIfInventory("IAmClassicMonster", 1, "VanillaSee")
			TNT1 A 0 A_CheckSight("SeeNeverSeen")
			
			//***Che: only rage if spent some time searching
			//Goto Rage	
			TNT1 A 0 A_JumpIfInventory("LookingForPlayer", 10, "RAGE")
		See2:
			TNT1 A 0
			//TNT1 A 0 A_JumpIfInventory("IAmClassicMonster", 1, "VanillaSee")
			TNT1 A 0 A_TakeInventory("EnemyMemory", 15)
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")

		See3:
			TNT1 A 0
			//TNT1 A 0 A_JumpIfInventory("IAmClassicMonster", 1, "VanillaSee")
			TNT1 A 0 A_CheckSight("SeeNeverSeen")
			
			//***Che
			Goto SeeContinue
		
		//***Che: i strongly suspect those two states were misplaced
		//SeeContinue:
		SeeNeverSeen:
			
			//TNT1 A 0 A_SpawnItemEx("FootSep", 0, 0, 20, 0, 0)
			TNT1 A 0 A_JumpIfInventory("EnemyMemory", 20, "ForgetTarget")
			TNT1 A 0 A_GiveInventory("EnemyMemory", 1)
			
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			BOS2 AAABBBCCCDDD 2 A_Chase
			
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), "ForgetFaster")//Target")
			
			//***Che
			//Loop
			TNT1 A 0 A_CheckSight("SeeNeverSeen") // only loop if out of sight
			Goto See
		
		//***Che
		//SeeNeverSeen:
		SeeContinue:
		
			//TNT1 A 0 A_SpawnItemEx("FootSep", 0, 0, 20, 0, 0)
			
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			BOS2 AAAABBBBCCCCDDDD 2 A_Chase
			
			BOS2 AAAA 2 A_Chase
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck")
			BOS2 BBBB 2 A_Chase
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck")
			BOS2 CCCC 2 A_Chase
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck")
			BOS2 DDDD 2 A_Chase
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck")			
			
			
		
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), "ForgetFaster")//"ForgetTarget")
			
			//***Che
			TNT1 A 0 A_CheckSight("SeeNeverSeen")
			Loop
		Duck:
			TNT1 A 0
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			TNT1 A 0 A_ChangeFlag("NODROPOFF", 1)
			TNT1 A 0 A_Recoil(2)
			
			// height = 56 - headbox height = 22 - 1 = 35, head completely pulled in like a turtle
			KNRJ A 10 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,-3,35)
			KNRJ CD 4 A_FaceTarget
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 A_Jump(256, "DodgeBack", "DodgeLeft", "DodgeRight")
		DodgeBack:
			TNT1 A 0 A_Recoil(12)
			KNRJ D 4 A_TakeInventory("DuckYouFool", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,-3,40)
			KNRJ DDDDDDDD 2 A_CheckFloor ("FlingRight")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",14,13,42)
			BAS2 GGGGGGGGG 2 A_CheckFloor ("FlingLeft")
			Goto FlingLeft
		DodgeLeft:
			TNT1 A 0 A_SetAngle(angle + 80)
			TNT1 A 0 A_Recoil(8)
			TNT1 A 0 A_SetAngle(angle - 80)
			KNRJ D 4 A_TakeInventory("DuckYouFool", 1) 
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,-3,40)
			KNRJ DDDDDDDD 2 A_CheckFloor ("FlingRight")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 GGGGGGGGG 2 A_CheckFloor ("FlingRight")
			Goto FlingRight
		DodgeRight:
			TNT1 A 0 A_SetAngle(angle - 80)
			TNT1 A 0 A_Recoil(8)
			TNT1 A 0 A_SetAngle(angle + 80)
			KNRJ D 4 A_TakeInventory("DuckYouFool", 1) 
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,-3,40)
			KNRJ DDDDDDDD 2 A_CheckFloor ("FlingLeft")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BAS2 GGGGGGGGG 2 A_CheckFloor ("FlingLeft")
			Goto FlingRight			
		FlingLeft:
			TNT1 A 0 A_JumpIf(CallAcs("GetNoTraget"), "See") // An archvile may cause dodging
			// because archviles headshot bruisers. But since archviles are not targetable,
			// that only leads to attack animation dry-firing.
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_PlaySound("weapons/gswing", CHAN_BODY)
			BAS2 G 4 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",14,13,42)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,1,48)
			BAS2 F 4 A_CustomMissile("BaronBall", 36, 0, angle + random(-10,10), CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH, random(-5,5))
			BAS2 E 8 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",5,-2,48)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("NODROPOFF", 0)
			Goto See
		FlingRight:
			TNT1 A 0 A_JumpIf(CallAcs("GetNoTraget"), "See")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_PlaySound("weapons/gswing", CHAN_BODY)
			BOS2 G 4 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			BOS2 F 4 A_CustomMissile("BaronBall", 36, 0, angle + random(-10,10), CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH, random(-5,5))
			BOS2 E 8 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("NODROPOFF", 0)
			Goto See
		RAGE:
			TNT1 A 0
			//***Che
			TNT1 A 0 A_CheckSight("SeeNeverSeen") //("See2")
			TNT1 A 0 A_TakeInventory("LookingForPlayer", 15)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",0,0,52)
			BTS2 ABC 1
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",0,0,40)
			BTS2 DEDF 2
			BTS2 DEDF 2
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",0,0,52)
			BTS2 CBA 1 A_FaceTarget
			TNT1 A 0 HealThing(200)
			TNT1 A 0 A_Jump(96, "MissileInRage")
			Goto See2
			
		Idle:
			TNT1 A 0			
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")
		LookingForPlayer:
			TNT1 A 0 A_GiveInventory("SKImp", 1) // enables stealth attack by player fists
			
			//***Che
			TNT1 A 0 A_GiveInventory("LookingForPlayer", 1) // up to 30
			TNT1 A 0 A_SetUserVar("user_sleeping", 1)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9, 0, 54)
			BOS2 BBB 10 A_Look
			TNT1 A 0 A_SetAngle(angle - 40)
			BOS2 BBB 10 A_Look
			TNT1 A 0 A_SetAngle(angle + 40)
			BOS2 BBB 10 A_Look
			
			//***Che: THE HEAVY MOBS FALLING OFF LEDGES BUG
			// No, you *cannot* use A_Recoil to simulate slow movement
			// A) happily ignores "block monsters"
			// B) happily ignores height difference
			// Result: show up then walk away causin the monster to enter this mode.
			// When you return there's about 90% chance he will be stuck in the deepest pit available.
			// Most notorious for revenants across the entirety of EDAY placed atop cargo containers
			//   (and revenants on high ledges in map 31, Peak of the gods).
			//   They fall off with 100% reliability.
			// Also very prominent on maps generated using Oblige 6.x
			//   where you find most revenants, knights and barons down in lava pits.
			//BOS2 A 0 A_Wander
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			
			BOS2 A 2 A_Wander // im replacing all 0s with 2s for A_Wander and commenting a_recoil out
			BOS2 AA 2 A_Look
			//TNT1 A 0 A_Recoil(-2)
			
			BOS2 B 2 A_Wander
			BOS2 BB 2 A_Look
			//TNT1 A 0 A_Recoil(-2)
			
			BOS2 C 2 A_Wander
			BOS2 CC 2 A_Look
			//TNT1 A 0 A_Recoil(-2)
			
			BOS2 D 2 A_Wander
			BOS2 DD 2 A_Look
			//TNT1 A 0 A_Recoil(-2)
			
			
			
			TNT1 A 0 A_jump(128, "LookingForPlayer")
			
			BOS2 A 2 A_Wander
			BOS2 AA 2 A_Look
			//TNT1 A 0 A_Recoil(-2)
			
			BOS2 B 2 A_Wander
			BOS2 BB 2 A_Look
			//TNT1 A 0 A_Recoil(-2)
			
			BOS2 C 2 A_Wander
			BOS2 CC 2 A_Look
			//TNT1 A 0 A_Recoil(-2)
			
			BOS2 D 2 A_Wander
			BOS2 DD 2 A_Look
			//TNT1 A 0 A_Recoil(-2)
		
			
			//Goto LookingForPlayer
			Loop
			
		ForgetFaster:
			TNT1 A 0
			TNT1 A 0 A_GiveInventory("EnemyMemory", 4)
			Goto See3
			
		ForgetTarget:
			TNT1 A 0 A_ClearTarget
			TNT1 A 0 A_TakeInventory("EnemyMemory", 25)
			TNT1 A 0 A_GiveInventory("LookingForPlayer", 1)
			Goto LookingForPlayer	
/*			
		VanillaMissile:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, "VanillaMissileSfest")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			BOS2 E 8 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			BOS2 F 8 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 G 8 A_CustomMissile("BaronBall", 36, 0, 0, 0) 
			Goto VanillaSee
		VanillaMissileSfest:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, "VanillaMissileSfest")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			BOS2 E 8 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			BOS2 F 8 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 G 8 A_CustomMissile("BaronBallSfest", 36, 0, 0, 0) 
			Goto VanillaSee	
*/			
		Missile:
			TNT1 A 0
			
			// slaughtermap manage - warming the headbox up
			TNT1 A 0 A_JumpIf(!user_sleeping, 4) // forgo the expensive sight check if already awake
			TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, 2) // bypass the sight check 
			TNT1 A 0 A_CheckSight(2) // out of sight of any player, AND attacking another monster, keep slumbering
			TNT1 A 0 A_SetUserVar("user_sleeping", 0)				
			
			//TNT1 A 0 A_JumpIfInventory("IAmClassicMonster", 1, "VanillaMissile")
			//TNT1 A 0 A_Jump(64, "MissileInRage")
			
			TNT1 A 0 A_TakeInventory("EnemyMemory", 30)
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsACyberdemon", 1, "CheckRetreat")
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMastermind", 1, "CheckRetreat")
			TNT1 A 0 A_JumpIfInTargetInventory("IsInATank", 1, "CheckRetreat")
			TNT1 A 0 A_JumpIfInventory (headache, 15, "CheckRetreat") // received 300+ damage from headshots
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, "CheckRetreat")
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAGreatTerribleBoss", 1, "CheckRetreat")
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsABoss", 1, "CheckRetreat")
			
			TNT1 A 0 A_JumpIfInTargetInventory("IsLTGPlayer", 1, "LTGCheck")
		MissileContinueAfterLTGCheck:

			// Kinslayer check:	
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsABruiser", 1, 2)
			TNT1 A 0 A_JumpIf(true, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_InfightFriendlyFireOn")			
			
			TNT1 A 0 A_FaceTarget
		MissileContinue:	
			TNT1 A 0 A_JumpIfInventory("StopKickingMyBallsMotherFucker", 1, "MissileInRage")
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, "MissileContinueSfest")
				
			//TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 0, 5)
			//TNT1 A 0 A_TakeInventory("CantFire", 1)
			//TNT1 A 0 A_CustomMissile("MonsterTargetCheck", 34, 0, 0, 0) 
			//TNT1 A 0 A_CustomMissile("MonsterTargetCheckFaster", 34, 0, 0, 0) 
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
			
			BOS2 E 3 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
	
	
			TNT1 A 0 A_CheckFlag("NOPAIN", 2) // ignore the duck warning if already reacting
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck")

			
			BOS2 E 2
			TNT1 A 0 bright A_CustomMissile ("SmallGreenFlameTrails", 64, 30, random (0, 360), 2, random (70, 110))
			TNT1 A 0 A_CustomMissile ("BallGettingReadyGreen", 64, 30, random (0, 140), 2, random (0, 160))
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
			
			BOS2 E 2 
			TNT1 A 0 bright A_CustomMissile ("SmallGreenFlameTrails", 64, 30, random (0, 360), 2, random (70, 110))
			TNT1 A 0 A_CustomMissile ("BallGettingReadyGreen", 64, 30, random (0, 140), 2, random (0, 160))
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
			
			TNT1 A 0 A_CheckFlag("NOPAIN", 2) // ignore the duck warning if already reacting
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck")
			
			
			BOS2 E 2 
			TNT1 A 0 bright A_CustomMissile ("SmallGreenFlameTrails", 64, 30, random (0, 360), 2, random (70, 110))
			TNT1 A 0 A_CustomMissile ("BallGettingReadyGreen", 64, 30, random (0, 140), 2, random (0, 160))
			BOS2 E 2 //A_FaceTarget
			TNT1 A 0 bright A_CustomMissile ("SmallGreenFlameTrails", 64, 30, random (0, 360), 2, random (70, 110))
			TNT1 A 0 A_CustomMissile ("BallGettingReadyGreen", 64, 30, random (0, 140), 2, random (0, 160))
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
			
			BOS2 E 2 //A_FaceTarget
			TNT1 A 0 bright A_CustomMissile ("SmallGreenFlameTrails", 64, 30, random (0, 360), 2, random (70, 110))
			TNT1 A 0 A_CustomMissile ("BallGettingReadyGreen", 64, 30, random (0, 140), 2, random (0, 160))
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
			
			BOS2 E 2 //A_FaceTarget
			TNT1 A 0 bright A_CustomMissile ("SmallGreenFlameTrails", 64, 30, random (0, 360), 2, random (70, 110))
			TNT1 A 0 A_CustomMissile ("BallGettingReadyGreen", 64, 30, random (0, 140), 2, random (0, 160))
			BOS2 E 2
			
			
			TNT1 A 0 A_CheckFlag("NOPAIN", 2) // ignore the duck warning if already reacting
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck")			
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 A_Jump(256, 2)
			TNT1 A 0 A_FaceTarget
			
			BOS2 F 8 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 G 8 A_CustomMissile("BaronBall", 36, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH) 
			TNT1 A 0 A_ChangeFLag("NOPAIN", 0)
			Goto See2
			
		MissileContinueSfest:	
			TNT1 A 0
			BOS2 E 3 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			BOS2 E 14
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 A_Jump(256, 2)
			TNT1 A 0 A_FaceTarget
			
			BOS2 F 8 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 G 8 A_CustomMissile("BaronBallSfest", 36, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH) 
			TNT1 A 0 A_ChangeFLag("NOPAIN", 0)
			Goto See2			
			
		MissileInRage:
			
			TNT1 A 0
			TNT1 A 0 A_ChangeFLag("NOPAIN", 1)
			
			// slaughtermap manage - warming the headbox up
			TNT1 A 0 A_JumpIf(!user_sleeping, 4) // forgo the expensive sight check if already awake
			TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, 2) // bypass the sight check 
			TNT1 A 0 A_CheckSight(2) // out of sight of any player, AND attacking another monster, keep slumbering
			TNT1 A 0 A_SetUserVar("user_sleeping", 0)				
			
			TNT1 A 0 A_TakeInventory("CantFire", 1)
			TNT1 A 0 A_CustomMissile("MonsterTargetCheck", 34, 0, 0, 0) 
			TNT1 A 0 A_CustomMissile("MonsterTargetCheckFaster", 34, 0, 0, 0) 
			
			BOS2 E 3 //A_FaceTarget
			TNT1 A 0 A_JumpIfInventory("CantFire",1, "SeeContinue")
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
			
			BOS2 E 3 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 A_Jump(256, 2)
			TNT1 A 0 A_FaceTarget
			
			BOS2 F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, "MissileInRagePart2Sfest")
			BOS2 G 6 A_CustomMissile("BaronBall", 36, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			
			
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
			
			BAS2 E 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",5,-2,48)
			
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 A_Jump(256, 2)
			TNT1 A 0 A_FaceTarget
			
			BAS2 F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,1,48)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",14,13,42)
			BAS2 G 6 A_CustomMissile("BaronBall", 36, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)

			
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
	//		TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
	//		TNT1 A 0 A_JumpIfTargetInLOS(2)
	//		TNT1 A 0 A_Jump(256, 2)
	//		TNT1 A 0 A_FaceTarget
			
			BOS2 E 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 A_Jump(256, 2)
			TNT1 A 0 A_FaceTarget
			
			BOS2 F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 G 6 A_CustomMissile("BaronBall", 36, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			TNT1 A 0 A_ChangeFLag("NOPAIN", 0)
			Goto See2
			
		MissileInRagePart2Sfest:
			TNT1 A 0
			BOS2 G 6 A_CustomMissile("BaronBallSfest", 36, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			BAS2 E 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",5,-2,48)
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 A_Jump(256, 2)
			TNT1 A 0 A_FaceTarget
			
			BAS2 F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,1,48)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",14,13,42)
			BAS2 G 6 A_CustomMissile("BaronBallSfest", 36, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			
			BOS2 E 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",7,6,48)
			
			
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 4)
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 A_Jump(256, 2)
			TNT1 A 0 A_FaceTarget
			
			BOS2 F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",12,4,48)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",16,-6,42)
			BOS2 G 6 A_CustomMissile("BaronBallSfest", 36, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			TNT1 A 0 A_ChangeFLag("NOPAIN", 0)
			Goto See2
			
		CheckRetreat:
			TNT1 A 0
			TNT1 A 0 A_JumpIfCloser(500, "Retreat")
			Goto MissileContinue
		
		Retreat:
			TNT1 A 0
			//TNT1 A 0 A_SpawnItemEx("FootSep", 0, 0)
			TNT1 A 0 A_FaceTarget
			
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAGreatTerribleBoss", 1, "Dodge")
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, "WaitTargetsFatalityOut")
			
		RetreatContinue:	
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",10, 0, 54)
			BOS2 DDDD 2 A_Recoil(2)
			
			TNT1 A 0 A_JumpIfTargetInLOS(1)
			Goto See2
			TNT1 A 0 A_FaceTarget
			
			BOS2 CCCC 2 A_Recoil(1)
			
			TNT1 A 0 A_JumpIfTargetInLOS(1)
			Goto See2
			
			BOS2 BBBB 2 A_Recoil(1)
			
			TNT1 A 0 A_JumpIfTargetInLOS(1)
			Goto See2
			
			BOS2 AAAA 2 A_Recoil(1)
			Goto MissileContinue

		Pain:
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")
			
			TNT1 A 0 A_TakeInventory("StopKickingMyBallsMotherFucker", 1)
			BOS2 H 3 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 6,-4,51)
			
			BOS2 H 3 A_Pain
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			
			
			//***Che: WTF how did i do this what the... Have no words.
			//TNT1 A 0 HealThing(200)
			//TNT1 A 0 A_Jump(96, "MissileInRage")
			Goto See2
			
		Pain.Argent:
			TNT1 A 0
			
			//TNT1 A 0 A_ClearTarget
			TNT1 A 0 A_GiveInventory("Enraged", 1)
			TNT1 A 0 A_Pain
			TNT1 A 0 HealThing(100)
			
			TNT1 A 0 A_ChangeFlag("MISSILEMORE", 1)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("DisplayArgentDischarge", 16, 50, 0)
			
			BOS2 H 3 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 6,-4,51)
			BOS2 HHH 8 A_Pain
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			
			Goto MissileInRage	// results in furious spraying in a random direction if target is out of sight
		
		//***Che
		Pain.Decapitate:
		Pain.HeadStun:
		Pain.Head:
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")
			TNT1 A 0 A_TakeInventory("StopKickingMyBallsMotherFucker", 1)
			BOS2 H 3 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 6,-4,51)
			BOS2 H 3 A_Pain
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			TNT1 A 0 A_JumpIfInventory ("Headache", 10, "Duck") //received 200 headshot damage
			Goto See2
		Dodge:
		Pain.HeadPlasma: // a faster duck with only dodging sideways, not back
			// height = 56 - headbox height = 22 - 1 = 35, head completely pulled in like a turtle
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			KNRJ A 4 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,-3,35)
			KNRJ CD 4 A_FaceTarget
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			KNRJ D 1 A_Jump(256, "DodgeLeft", "DodgeRight")
			Wait
			
		Pain.Explosive:
		Pain.Bfg10k: //***Che changed damage type from extreme to custom
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("MuchBlood2Green", 0, 0, 60)
			TNT1 A 0 ThrustThingZ(0,10,0,1)
			Goto Pain
		
		Pain.Extremepunches:
		Pain.SuperPunch:
		Pain.HeavyImpact:
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_ChangeFLag("NOPAIN", 1)
			TNT1 A 0 ThrustThingZ(0,30,0,1)
			TNT1 A 0 A_Recoil(8)
			BOS2 H 3 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 6,-4,51)
			
			BOS2 H 3 A_Pain
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			TNT1 A 0 A_ChangeFLag("NOPAIN", 0)
			Goto See2
			
		
		Pain.Kick:
			TNT1 A 0
			TNT1 A 0 A_ChangeFlag("MISSILEMORE", 1)
			TNT1 A 0 A_ChangeFlag("MISSILEEVENMORE", 1)
			TNT1 A 0 A_JumpIfInventory("Curbstomp_Marine", 1, "CurbstompMarine")
			TNT1 A 0 A_JumpIfInventory("StopKickingMyBallsMotherFucker", 1, "MissileInRage")
			TNT1 A 0 A_GiveInventory("StopKickingMyBallsMotherFucker", 1)
			TNT1 A 0 ThrustThingZ(0,5,0,1)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",9,-3,40)
			KNRJ ABCD 5
			TNT1 A 0 A_Pain
			KNRJ ABCD 5
			TNT1 A 0 A_Pain
			KNRJ ABCD 5
			TNT1 A 0 A_Pain
			KNRJ ABCD 5
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			Goto Missile	
			
		Death.Shotgun:
			TNT1 A 0
			TNT1 A 0 A_Jump(96, "Death.Arm")
			TNT1 A 0 A_JumpIfCloser(250, "Death.Blast")	
			Goto Death

		Death:
			TNT1 A 0
			TNT1 A 0 A_Jump(64, "Death.Arm")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			HKDD A  10
			HKDD B  10 A_Scream
			HKDD C  10
			HKDD D  0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnight",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
		Death.Arm:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightArm", 55, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("muchblood2Green", 55, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_Fall
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx("DyingHellKnight1",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		Death.Electric:				
			TNT1 A 0
			TNT1 A 0 A_SpawnItem("BarrelExplosionSmokeColumn")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			HKDD A  10
			HKDD B  10 A_Scream
			HKDD C  10
			HKDD D  0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnight",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop				
		
		Death.Blast:
		Death.SSG:
		Death.Saw:
		Death.Railgun:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Scream
			TNT1 A 0 A_NoBlocking
			
			TNT1 A 0 A_CustomMissile ("muchblood2Green", 55, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAAA 0 A_CustomMissile ("XDeath1Green", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAA 0 A_CustomMissile ("Green_FlyingBlood", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("XDeath2bGreen", 65, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("XDeath3bGreen", 65, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAA 0 A_CustomMissile ("GreenGuts", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAA 0 A_CustomMissile ("GreenBrainPiece", 60, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			BOS2 PQRSTU 6
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			BOS2 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV 1 A_CustomMissile ("Green_LiquidBlood", 20, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			//TNT1 A 0 A_SpawnItem ("RapedHK", 1)
			TNT1 A 0 A_SpawnItemEx ("RapedHK",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) 
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop	
		
		XDeath:
		Death.Bfg10k: //***Che changed damage type from extreme to custom
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			
			// is gore spammer:
			TNT1 A 0 A_CustomMissile ("KnightXDeath", 0, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			
			// KnightXDeath is a pure gore spawner
			
			TNT1 A -1 //***Che: Gibbed monsters -- ONLY the gibbed monsters -- may use this
				//   to auto-respawn on nightmare and be raised by viles.
				// Employing this on a destructible corpse results in that corpse
				//   respawning on nightmare as a corpse (or worse, as a burning hollering demon)
				// If a monster's death state spawns a destructible corpse,
				//   the respawning/raising is relegated to that corpse
				//   and the monster MUST use Stop instead		
			Stop

		Death.SniperBullet:
		Death.Bullet792:		
		Death.Minigun:
			TNT1 A 0
			TNT1 A 0 A_Jump(224, "Death.Arm")
		Death.Cut:
		Death.Crush:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Scream
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("MuchBlood2Green")
			TNT1 AAAAAA 0 A_CustomMissile ("XDeath1Green", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAA 0 A_CustomMissile ("Green_FlyingBlood", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("GreenGuts", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			//TNT1 A 0 A_CustomMissile ("XDeathHalfHK", 24, 0, random (0, 360), 2, random (0, 160))
			//***Che it fais to spawn with perfect reliability - DUE TO POSITION CHECK. I had the same problem with the flying head in my duke of hell fatality.
			TNT1 A 0 A_SpawnItemEx("XDeathHalfHK", 0, 0, 30, -3.0, 0.1 * random(-10,10), 3.0, 0, SXF_NOCHECKPOSITION)
			BBO1 AAAAAAAAAABBBBBCCCCC 2 A_CustomMissile ("Green_LiquidBlood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightHalfDown",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop

		Death.head:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			
			//TNT1 A 0 A_JumpIfInTargetInventory("HasPlasmaWeapon", 1, "Death.Plasma")
			//TNT1 A 0 A_JumpIfInTargetInventory("HasCutingWeapon", 1, "Death.decaptate")
			TNT1 A 0 A_JumpIfHealthLower(-80, "Death.HeadExplode")
			TNT1 A 0 A_SpawnItem("HellKnightHeadExplodeHalf", 0, 62)
			TNT1 A 0 A_SpawnItemEx("DyingHellknight2",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		//***Che:
		Death.Psionic:
		Death.HeadStun:
		Death.headExplode:
		Death.HeadPlasma:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_JumpIfInTargetInventory("HasPlasmaWeapon", 1, "Death.Plasma")
			TNT1 A 0 A_SpawnItem("HellKnightHeadExplode", 0, 62)
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx("DyingHellKnightNoHead",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
		Death.decaptate:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 AAAAA 0 A_CustomMissile ("XDeath1Green", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			TNT1 A 0 A_SpawnItem("MuchBlood2Green", 0, 62)
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightHead", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			BTN2 AAAAAAAAAAA 2 A_CustomMissile ("Green_LiquidBlood", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			BTN2 BBBBB 2 A_CustomMissile ("Green_LiquidBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_NoBlocking
			BTN2 CCCCC 2 A_CustomMissile ("Green_LiquidBlood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightNoHead",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 2 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		Death.SuperPlasma:
		Death.Plasma: 
		XDeath.Electric:
		Death.Plasma2:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Stop
			TNT1 A 0 A_BossDeath
			TNT1 A 0 A_Scream
			TNT1 A 0 A_NoBlocking
			TNT1 AAAA 0 A_CustomMissile ("BluePlasmaFireNonStatic", 42, 0, random (0, 360), 2, random (0, 180))
			TNT1 AAA 0 A_CustomMissile ("Blood", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 180))
			TNT1 A 0 A_SpawnItemEx ("DetectFloorCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_SpawnItem("BarrelExplosionSmokeColumn")
			TNT1 A 0 A_SpawnItemEx("TinyBurningPiece", random (-15, 15), random (-15, 15))
			TNT1 AA 0 A_SpawnItemEx("TinyBurningPiece2", random (-35, 35), random (-35, 35))
			TNT1 AA 0 A_SpawnItemEx("TinyBurningPiece3", random (-45, 45), random (-45, 35))
			BOSB ABC 7 
			TNT1 AAAAA 0 A_CustomMissile ("PlasmaParticleX", 48, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAA 0 A_CustomMissile ("BigPlasmaParticleX", 42, 0, random (0, 360), 2, random (0, 360))
			BOSB D 7 A_CustomMissile ("PlasmaSmoke", 14, 0, random (0, 180), 2, random (0, 180))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			BOSB E -1
			Stop
			
		Death.GreenFire: // bruiser missile
			TNT1 A 0 A_Stop
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_BossDeath
			TNT1 A 0 A_Scream
			TNT1 A 0 A_NoBlocking
			TNT1 AAAA 0 A_CustomMissile ("BluePlasmaFireNonStatic", 42, 0, random (0, 360), 2, random (0, 180))
			TNT1 A 0 A_SpawnItemEx ("DetectFloorCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_SpawnItem("BarrelExplosionSmokeColumn")
			TNT1 A 0 A_SpawnItemEx("TinyBurningPiece", random (-15, 15), random (-15, 15))
			TNT1 AA 0 A_SpawnItemEx("TinyBurningPiece2", random (-35, 35), random (-35, 35))
			TNT1 AA 0 A_SpawnItemEx("TinyBurningPiece3", random (-45, 45), random (-45, 35))
			TNT1 AAAAA 0 A_CustomMissile ("PlasmaParticleX", 48, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAA 0 A_CustomMissile ("BigPlasmaParticleX", 42, 0, random (0, 360), 2, random (0, 360))
			BOSC AABBCC 4 A_CustomMissile ("GreenFlameTrailsbIG", 48, random (-10, 10), random (0, 180), 2, random (20, 90))
			TNT1 AAAAA 0 A_CustomMissile ("PlasmaParticleX", 48, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAA 0 A_CustomMissile ("BigPlasmaParticleX", 42, 0, random (0, 360), 2, random (0, 360))
			BOSC DDEEFF 4 A_CustomMissile ("GreenFlameTrailsbIG", 8, random (-10, 10), random (0, 180), 2, random (20, 90))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			
			BOSB EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 4 A_CustomMissile ("GreenFlameTrailsbIG", 8, random (-10, 10), random (0, 180), 2, random (20, 90))
			
			BOSB E -1 //***Che: Gibbed monsters -- ONLY the gibbed monsters -- may use this
				//   to auto-respawn on nightmare and be raised by viles.
				// Employing this on a destructible corpse results in that corpse
				//   respawning on nightmare as a corpse (or worse, as a burning hollering demon)
				// If a monster's death state spawns a destructible corpse,
				//   the respawning/raising is relegated to that corpse
				//   and the monster MUST use Stop instead			
			Stop
			
		//***Che: other nobles' melee attacks (now possible in FBD)
		Death.HKFT:
		Death.BHFT:
		Death.DHFT:
			TNT1 A 0
			TNT1 A 0 A_Jump(224, "Death.SSG", "Death.Cut", "Death.Decaptate")
			Goto Death.ExplosiveImpact	
			
		Death.CCFT: // cacodemon bite
			TNT1 A 0 A_Jump(64, "Death.Decaptate")
			Goto Death

		Death.ExplosiveImpact:
		//***Che
		Death.FriendlyExplosion:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ThrustThingZ(0,35,0,1)
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightArm", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightLeg", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("XDeath1Green", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAA 0 A_CustomMissile ("muchbloodGreen", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_Jump(256, "Death.ExplosiveImpact1", "Death.ExplosiveImpact2")
		
		Death.ExplosiveImpact1:	
			BAH3 A  8 A_Scream
			BAH3 B  8 A_NoBlocking
			BAH3 CCCCCC  8 A_CheckFloor("Land1")
			Goto Land1
		
		Land1:
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadKnightExplosiveImpact1",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
		
		Death.ExplosiveImpact2:	
			BAH3 E  8 A_Scream
			BAH3 F  8 A_NoBlocking
			BAH3 GGGGGG  8 A_CheckFloor("Land2")
			Goto Land2
		
		
		Land2:
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadKnightExplosiveImpact2",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop



		Death.Fire:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Scream
			TNT1 A 0 A_NoBlocking
			BOSB AAAA 2 A_CustomMissile ("FlameTrails", 45, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			BOSB BBBB 2 A_CustomMissile ("FlameTrails", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			BOSB CCCC 2 A_CustomMissile ("FlameTrails", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			BOSB DDDD 2 A_CustomMissile ("FlameTrails", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			TNT1 A 0 A_Playsound("props/redfire")
			BOSB EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 2 A_CustomMissile ("FlameTrails", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (50, 130))
			//***Che detaching smoke emittinf from burned corpses
			// because archvile would otherwise only rez the corpse after it stopped smoking
			TNT1 A 0 A_SpawnItemEx("FBD_CorpseSmoke",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0,0)
			//BOSB EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 10 A_CustomMissile ("SmallSmoke", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (70, 110))
			BOSB E -1
			Stop


	   CurbstompMarine:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII") // for the duration of the fatality
			TNT1 A 0 A_SetInvulnerable
			TNT1 A 0 A_GiveInventory("GoFatality", 1) // most demons stop attacking a target that has this
			KTFP AAAA 3
			KTFP BCDE 3
			TNT1 A 0 A_SpawnItemEx("FootStep5", 0, 0, 40, 0, 0)
			EXPL A 0 Radius_Quake (2, 24, 0, 15, 0)
			KTFP E 8
			KTFP F 24
			KTFP MGGGGG 3
			KTFP H 2
			EXPL A 0 Radius_Quake (2, 24, 0, 15, 0)
			TNT1 AAA 0 A_CustomMissile ("Brains1", 11, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains2", 11, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains3", 11, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains4", 11, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains5", 11, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAA 0 A_CustomMissile ("XDeath1", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAA 0 A_CustomMissile ("MuchBlood2", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			KTFP IJ 2
			KTFP KLLLLL 4
			TNT1 A 0 A_TakeInventory("Curbstomp_Marine",1)
			TNT1 A 0 A_TakeInventory("GoFatality", 1)
			TNT1 A 0 A_UnSetInvulnerable
			TNT1 A 0 A_SpawnItemEx ("FBD_CurbstompedMarine", 1,0,0, 0,0,0, 0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 0, 54, 1)
			Goto See2

		Death.Fatality:
			TNT1 A 0
			
			TNT1 A 0 A_JumpIfIntargetInventory("IsPlayer", 1, 1)
			Goto Death.DHFT
			
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
		   
			TNT1 A 0 A_Pain
			
			TNT1 A 0 A_JumpIfIntargetInventory("FistsSelected", 1, 1)
			Goto Death.ExplosiveImpact
			TNT1 A 0 A_FaceTarget
			//TNT1 AA 0 A_SpawnItemEx("HealthPlusFatalityBonus", 0,0,20, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			//TNT1 AA 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, 10, 10, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_GiveToTarget("GoFatality", 1)
			TNT1 A 0 A_Jump(128, "Death.Fatality3")
			TNT1 A 0 A_GiveToTarget("HKFatality", 1)
			TNT1 A 1 A_NoBlocking
			TNT1 A 0 A_BossDeath
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, scripts runs ownerless
			Stop
		Death.Fatality3:
			TNT1 A 0 A_GiveToTarget("HKFatality3", 1)
			TNT1 A 1 A_NoBlocking
			TNT1 A 0 A_BossDeath
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop	

		Pain.KillMe:
		//Pain.Taunt:
			TNT1 A 0
			TNT1 A 0 HealThing(1)
			Goto Missile
		Death.KillMe:
		Death.Taunt:
			//TNT1 A 0 A_ChangeFlag("SOLID", 0)
			//TNT1 A 0 A_SpawnItem("HellKnight")
			//Stop
			//***Che: rage, then die of a stroke
			TNT1 A 0
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_PlaySound("knight/see", CHAN_VOICE)
			BTS2 ABC 1
			BTS2 DEDF 2
			BTS2 DEDF 2
			Goto Death.HeadExplode
			
		Death.Ice:
		Death.Freeze:
		Death.Frost:
			//TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			//TNT1 A 0 A_ChangeFlag("SOLID", 0)
			//TNT1 A 0 A_SpawnItem("FrozenHellKnight")
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking // in my version, freeze death is permanent
			TNT1 A 0 A_SpawnItemEx ("FrozenHellKnight",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
		
		Death.Massacre:
			Goto Death
		
		
		Death.Stomp:
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			BOS2 JKL 2
			TNT1 AA 0 A_SpawnItem("MeatDeathSmall")
			TNT1 AAA 0 bright A_CustomMissile ("SuperGoreSpawner", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AAAA 0 bright A_CustomMissile ("XDeath1Green", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AA 0 bright A_CustomMissile ("XDeath2bGreen", 55, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AA 0 bright A_CustomMissile ("XDeath3bGreen", 55, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItem ("CrushedRemains")
			TNT1 A 1
			TNT1 A 1 A_XScream
			TNT1 A -1 //***Che: Gibbed monsters -- ONLY the gibbed monsters -- may use this
				//   to auto-respawn on nightmare and be raised by viles.
				// Employing this on a destructible corpse results in that corpse
				//   respawning on nightmare as a corpse (or worse, as a burning hollering demon)
				// If a monster's death state spawns a destructible corpse,
				//   the respawning/raising is relegated to that corpse
				//   and the monster MUST use Stop instead
			Stop
			
		Crush:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 AAAAAA 0 A_SpawnItemEx ("BodyRemovalThing",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 1 A_XScream
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		LTGCheckExtreme: // extreme outfits, 25% chance to treat the player as naked on each attack.
			TNT1 A 0 A_JumpIfCloser(400, 1)
			Goto MissileContinueAfterLTGCheck
			TNT1 A 0 A_JumpIfInTargetInventory("LTGExtreme", 1, 1)
			Goto MissileContinueAfterLTGCheck
			TNT1 A 0 A_Jump(64, "LTGCheckB")
			Goto MissileContinueAfterLTGCheck
		LTGCheck:
			TNT1 A 0 A_JumpIfInTargetInventory("IsDressed", 1, "LTGCheckExtreme")
		LTGCheckB:
			TNT1 A 0 A_JumpIfInventory("AlreadyPerformedLTGCatCall", 1, "MissileContinueAfterLTGCheck")
			TNT1 A 0 A_JumpIfCloser(600, 1)
			Goto MissileContinueAfterLTGCheck			
			TNT1 A 0 A_GiveInventory("AlreadyPerformedLTGCatCall", 1)
			Goto WaitTargetsFatalityOut // has no specific animation, just roar and wander once			
			
		// melee, return to melee
		LTGCheckMExtreme:
			TNT1 A 0 A_JumpIfInTargetInventory("LTGExtreme", 1, 1)
			Goto MeleeContinueAfterLTGCheck
			TNT1 A 0 A_Jump(64, "LTGCheckMB")
			Goto MeleeContinueAfterLTGCheck
		LTGCheckM:
			TNT1 A 0 A_JumpIfInTargetInventory("IsDressed", 1, "LTGCheckMExtreme")
		LTGCheckMB:
			TNT1 A 0 A_JumpIfInventory("AlreadyPerformedLTGCatCall", 1, "MeleeContinueAfterLTGCheck")
			TNT1 A 0 A_GiveInventory("AlreadyPerformedLTGCatCall", 1)			
			Goto WaitTargetsFatalityOut			
	
	}
}


Actor KnightRaisedByVile: FBD_Knight {
	// a separate actor in case the raising fails due to insufficient space.
	States {
		Spawn:
			BOS2 O 0 NODELAY ACS_NamedExecuteWithResult("FBD_RunMonster", 2) // noble headbox
			
			TNT1 A 0 A_GiveInventory("TargetIsAHellKnight", 1)
			TNT1 A 0 A_GiveInventory("TargetIsABruiser")			
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			//BOS2 O 8
			//BOS2 NMLKJI 8
			BOS2 VUTSRQPH 3
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_CustomizeOnRez") // it runs OnRezMapScript
				// if the map prpvides one
			Goto See				
	
	}
}

Actor HellKnight2_PP: FBD_Knight
{
	States
	{
		PotPourriSwap:
			TNT1 A 0
			Goto PotPourriCancel		
	}
}


ACTOR GreenPlasmaBall: ZandronumBaronBall Replaces BaronBall
{
	Radius 10
	Height 16
	Speed 20
	FastSpeed 30
	DamageType GreenFire
	Projectile 
	+RANDOMIZE
	+FORCEXYBILLBOARD
    +THRUGHOST
    Damage (random(50,50))
	RenderStyle Add
	Alpha 0.95
	Scale 0.25
	SeeSound "baron/attack"
	DeathSound "baron/shotx"
	Decal "Scorch"
	
	-NOBLOCKMAP // without this, A_RadiusGive does not see them and so projectile-destroying effects do not work. 
	
	States
	{
		Spawn:
			TNT1 A 0 NODELAY ACS_NamedExecuteWithResult("GreenPlasmaBallTrails") // a load-balanced clientside script
		Fly:				
		//Spawn1:
			//pbal c is a lens flare-like sprite, visible radius roughly 50 (128x128 32bpp). So a naked ball without trails is ~24 pixels from the edge of its halo to another
			PBAL C 1 BRIGHT //A_SpawnItemEx("SmallGreenFlameTrails", 0, 0, 0, 0, 0, 0, 0, 128)
			//TNT1 A 0 A_CustomMissile ("OldschoolRocketSmokeTrailDarker", 2, 0, random (160, 210), 2, random (-30, 30))
			Loop
			
		//SpawnCheap:
		//	PBAL C 1 BRIGHT A_SpawnItemEx("SmallGreenFlameTrails", 0, 0, 0, 0, 0, 0, 0, 128)
		//	Loop

			
		Crash: // hit someone who cannot bleed
		Death: // hit a wall
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("PlasmaParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 A 0 A_SpawnItemEx ("DetectFloorCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_SpawnItemEx ("DetectCeilCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 AA 0 A_SpawnItem("GreenFlare",0,0)
			TNT1 A 0 A_SetScale(0.7)
			TNT1 A 0 A_FadeOut(0.2)
			FRPG ABCDEFGH 2 BRIGHT
			Stop
		XDeath: // hit someone who can bleed
			TNT1 A 0
			//TNT1 AAA 0 A_SpawnItemEx("PlasmaParticle", 0, 0, 14, (0.1)*Random(10, 40), 0, (0.1)*Random(-40, 40), Random(0, 360), 128)
			TNT1 A 0 A_JumpIfCloser(220, "StopInAir")
			TNT1 A 0 A_SpawnItemEx("PlasmaParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AA 0 A_SpawnItem("GreenFlare",0,0)
			TNT1 A 0 A_SetScale(0.7)
			TNT1 A 0 A_FadeOut(0.2)
			FRPG ABCDEFGH 2 BRIGHT
			Stop
		
		StopInAir:
			FRPG ABCDEF 1 BRIGHT
			Stop
	}
}


ACTOR SmallGreenFlameTrailsPT: FlameTrails
{

    Scale 0.3
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(192, "Spawn2", "Spawn3", "Spawn4")
			Goto Fly
		Spawn2:
			TNT1 A 0
			TNT1 A 0 A_SetScale(0.3, -0.3)
			Goto Fly
		Spawn3:
			TNT1 A 0
			TNT1 A 0 A_SetScale(-0.3, 0.3)
			Goto Fly
		Spawn4:
			TNT1 A 0
			TNT1 A 0 A_SetScale(-0.3, -0.3)
			Goto Fly
		Fly:
			TNT1 A 1 // otherwise they outrun the fireball!
			FRPG BCDEFGH 1 BRIGHT
			Stop
	}
}

/*

ACTOR BaronBallSfest: GreenPlasmaBall {
	Scale 1.0
	//RenderStyle Normal
	//Alpha 1.0
	Decal None
	+BRIGHT
	States {
		Spawn:
			TNT1 A 0
		Fly:			
			BAL7 AB 4 BRIGHT //original sprites from doom2.wad
			Loop
		Crash:
		Death:
		XDeath:
			//BAL7 CDE 6 BRIGHT
			TNT1 A 0
			TNT1 A 0 A_SetScale(0.7)
			TNT1 A 0 A_FadeOut(0.2)
			FRPG ABCDEFGH 2 BRIGHT
			Stop	
	}
}

*/

ACTOR WeakGreenPlasmaBall: GreenPlasmaBall //***Che used to be used by  aracnorb -- before i switched him to mind blasts
{
	Speed 16
	FastSpeed 24
	Damage (random(30,30))
	States
	{
	Spawn:
	    TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("BDCheckJanitor", 0, 0, 0, 0)//Check Effects
	
	Spawn1:
		PBAL C 1 BRIGHT
		TNT1 A 0 A_CustomMissile ("OldschoolRocketSmokeTrailDarker", 2, 0, random (160, 210), 2, random (-30, 30))
		Loop
		
	SpawnCheap:
	    PBAL C 1 BRIGHT A_SpawnItemEx("SmallGreenFlameTrails", 0, 0, 0, 0, 0, 0, 0, 128)
		Loop	
		
	Death:
		TNT1 A 0 A_SpawnItemEx("PlasmaParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
	    TNT1 A 0 A_SpawnItemEx ("DetectFloorCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
	    TNT1 A 0 A_SpawnItemEx ("DetectCeilCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		TNT1 AA 0 A_SpawnItem("GreenFlare",0,0)
		TNT1 A 0 A_SetScale(0.7)
		TNT1 A 0 A_FadeOut(0.2)
		FRPG ABCDEFGH 2 BRIGHT
		Stop
	XDeath:
		//TNT1 AAA 0 A_SpawnItemEx("PlasmaParticle", 0, 0, 14, (0.1)*Random(10, 40), 0, (0.1)*Random(-40, 40), Random(0, 360), 128)
        TNT1 A 0 A_JumpIfCloser(220, "StopInAir")
		TNT1 A 0 A_SpawnItemEx("PlasmaParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
		TNT1 AA 0 A_SpawnItem("GreenFlare",0,0)
	    TNT1 A 0 A_SetScale(0.7)
		TNT1 A 0 A_FadeOut(0.2)
		FRPG ABCDEFGH 2 BRIGHT
		Stop
	
	StopInAir:
		FRPG ABCDEF 1 BRIGHT
		Stop
	}
}

ACTOR KnightAttack: BaronBall
{
	Radius 24
	Height 16
	DamageType HKFT
	Projectile 
	+RANDOMIZE
	+FORCEXYBILLBOARD
    +THRUGHOST
	RenderStyle Add
	Alpha 0.6
    Damage 10
    Speed 42
	//HitObituary "$OB_IMPHIT"
	SeeSound "none"
	DeathSound "none"
	Decal "none"
	States
	{
		Spawn:
			TNT1 A 2 BRIGHT
			TNT1 A 2 //A_PlaySound("weapons/gswing")
			Goto Death
		Crash: // hit a non-bleeding actor
		Death: // hit a wall
			TNT1 A 0
			TNT1 A 0 A_GiveInventory("MeleeMiss", 1, AAPTR_TARGET)
			Stop
		XDeath: // hit a bleeding actor
			TNT1 A 0
			TNT1 A 0 A_PlaySound("cheb/noble_melee_hit") // shred sound
			TNT1 A 0 A_GiveInventory("MeleeHitSuccess", 1, AAPTR_TARGET)
			Stop
	}
}

Actor FBD_KnightAttack: KnightAttack {

}






Actor FBD_DeadKnight: FBD_CurbstompedMarine
{
    Radius 24
    Height 12
    Scale 1.0
    +SHOOTABLE
    +NOTELEPORT
    +MOVEWITHSECTOR
    +CORPSE
	+FLOORCLIP
	-SOLID
	+THRUACTORS
	damagefactor "Crusher", 50.0
    Mass 5000
    Health 500
    damagefactor "Blood", 0.0
    damagefactor "Trample", 0.0
	BloodType "Green_Blood", "GreenFBD_SawBlood", "GreenFBD_SawBlood"
	BloodColor "DarkGreen"
	States
		{
		//***Che
		Raise:
			// note: the frame letter of the "----" (keep previous) sprite is ignored
			"----" A 0
			"----" A 0 A_ChangeFlag("CORPSE", 0)
			"----" A 0 A_GiveInventory("RezzingNow")
			"----" A 0 A_NoBlocking // the raising code deep in C++ makes it solid
			"----" A 0 A_JumpIf(!CallAcs("EnoughSpaceToRezNormally", 2022), "FallbackRaise")
			// The vile had already copied his friendliness and target to this corpse.
			// A_SpawnItem(Ex) automatically copy friendliness
			//   and target, but only if both the spawner and the spawnee are monsters.
			"----" A 0 A_ChangeFlag("COUNTKILL", 0)
			"----" A 0 A_ChangeFlag("ISMONSTER", 1)
			"----" A 0 A_SpawnItemEx ("KnightRaisedByVile",0,0,0, 0,0,0, 0,SXF_TRANSFERPOINTERS | SXF_NOCHECKPOSITION)
			"----" A 1 A_Jump(256, "OnRezSfx")
			Wait //Zandronum client repeats the last frame while it waits for a status update from the server
			
		FallbackRaise:
			"----" A 0 A_GiveInventory("RezzingNow")
			"----" A 0 A_ChangeFlag("CORPSE", 0)
			"----" A 0 A_ChangeFlag("SHOOTABLE", 0)
			//"----" A -1 ACS_NamedExecuteAlways("FallbackRez", 0, 1, 0, 0) //"KnightRaisedByVile"
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 2022) // see _mob_list.xlsx
			Stop
		OnRezSfx:
			// knight, baron, duke, belphegor and cacodemon corpses must replace this method with one that has appropriate blood color
			TNT1 AAA 3 A_CustomMissile ("GreenBloodMistBig", 20, 0, random (0, 360), 2, random (30, 90))
			TNT1 AAAA 3 A_CustomMissile ("GreenBloodMist", 20, 0, random (0, 360), 2, random (30, 90))
			TNT1 AAAAA 3 A_CustomMissile ("GreenBloodMistSmall", 20, 0, random (0, 360), 2, random (30, 90))
			TNT1 A 30
			Stop			
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			HKDD D 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			HKDD D 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			HKDD D -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
		LandOnLava: 
			TNT1 A 0
			TNT1 AAAA 0 A_SpawnItemEx("GoreLandingOnLava", random(-14, 14), random(-14, 14))
			TNT1 A 0 A_SpawnItem ("CharredMeatsplosionGreen")
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
			 
		Death:
		Death.ExplosiveImpact:
		Death.FriendlyExplosion:		
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("XDeath1Green", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 16, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("XDeathHellKnightLeg", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightHalfUp",0,0,0, Random(-3,3),Random(-3,3),2, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop	
		XDeath:
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 AA 0 A_CustomMissile ("XDeath1Green", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("XDeath2bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("XDeath3bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAA 0 A_SpawnItem("MuchBlood2Green", 0, 25)
			TNT1 AAAA 0 A_CustomMissile ("GreenBloodMistBig", 16, 00, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_SpawnItem("MuchBlood3Green", 0, 25)
			GIBS Y 1
			GIBS Y -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop	
			 
		Death.CrushedBodies:
		Death.TeleportRemover:
		Death.GibRemoving:		
			TNT1 A 0 A_SetAngle(0)
			TNT1 A 0 bright A_CustomMissile ("GreenSuperGoreSpawner", 1, -40, random (0, 360), CMF_AIMDIRECTION, random (25, 45))
			TNT1 A 0 bright A_CustomMissile ("GreenSuperGoreSpawner", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (25, 45))
			TNT1 A 0 A_CustomMissile ("XDeath1Green", 1, random (-30, 30), random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2bGreen", 1, random (-30, 30), random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3bGreen", 1, random (-30, 30), random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, -40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_SetAngle(90)
			TNT1 A 0 bright A_CustomMissile ("GreenSuperGoreSpawner", 1, -40, random (0, 360), CMF_AIMDIRECTION, random (25, 45))
			TNT1 A 0 bright A_CustomMissile ("GreenSuperGoreSpawner", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (25, 45))
			TNT1 A 0 A_CustomMissile ("XDeath1Green", 1, random (-30, 30), random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2bGreen", 1, random (-30, 30), random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3bGreen", 1, random (-30, 30), random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, -40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_NoBlocking
			GIBS Y 1
			GIBS Y -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}
		
		
actor FBD_DeadKnightBTN5F: FBD_DeadKnight
{
	Scale 1.2
    States
    {
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			BTN5 F 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BTN5 F 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			BTN5 F -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			

		Death:
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightArm", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem("HellKnightHeadExplode", 0, 10)
			TNT1 A 0 A_SpawnItemEx("DeadHellKnightNoArmNoHead",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}
	   
Actor FBD_DeadKnightHalfDown: FBD_DeadKnight
{
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			BBO1 D 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BBO1 D 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			BBO1 D -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
		
		Death:
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("XDeath1Green", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, -40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("XDeathHellKnightLeg", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}

Actor FBD_DeadKnightHalfUp: FBD_DeadKnight
{
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			BTO1 A 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BTO1 BC 6
			BTO1 D 18
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			BTO1 D -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
		 
		Death:
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("XDeath1Green", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, -40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AAA 0 A_CustomMissile ("GreenGuts", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightArm", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightTorso", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightHead", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop	
	}
}

Actor FBD_DeadKnightNoHead: FBD_DeadKnightBTN5F
{
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			BTN2 D 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BTN2 D 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			BTN2 D -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
		
		Death:
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 AAAA 0 A_CustomMissile ("GreenBloodMistBig", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightArm", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItemEx("DeadHellKnightNoArmNoHead",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}

Actor RapedHK: FBD_DeadKnight
{
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			HKF1 I 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			HKF1 I 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			HKF1 I -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
			
		Death:
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("KnightXDeath", 0, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}


Actor FBD_DeadKnightExplosiveImpact2: FBD_DeadKnight
{
	Scale 1.2 
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			BAH3 H 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BAH3 H 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			BAH3 H -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	
		Death:
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("XDeath1Green", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3bGreen", 25, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, -40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AAA 0 A_CustomMissile ("GreenGuts", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightTorso", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightHead", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightLEg", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop	
	}
}

Actor FBD_DeadKnightExplosiveImpact1: FBD_DeadKnightExplosiveImpact2
{
	Scale 1.2 
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			BAH3 D 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BAH3 D 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			BAH3 D -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}

Actor OmgSoDeadHK: FBD_DeadKnightHalfUp 
	// This is spawned by player after performing fatality on the top half of a knight 
	// (ripping his head off). So this is a torso with arms buth no head.
{
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			HKF2 O 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			HKF2 O 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			HKF2 O -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
	}
}

Actor NoArmNoHeadFatalizedHK: FBD_DeadKnightHalfDown
{
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			HKF3 N 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			HKF3 N 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			HKF3 N -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
	}
}

Actor DeadHellKnightNoArm: FBD_DeadKnight
{
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			BTN3 D 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BTN3 D 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			BTN3 D -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
		Death:
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("HellKnightHeadExplode", 0, 10)
			TNT1 A 0 A_SpawnItemEx("DeadHellKnightNoArmNoHead",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}

Actor DeadHellKnightNoArmNoHead: FBD_DeadKnight
{
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			BTN4 D 5 
			TNT1 A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BTN4 D 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			BTN4 D -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop

		Death:
			GIBS Y 0
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("XDeath1Green", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2bGreen", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3bGreen", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, -40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("GreenBloodMistBig", 1, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AAA 0 A_CustomMissile ("GreenGuts", 5, 40, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightTorso", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightHalfDown",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}




ACTOR XDeathHalfHK //***Che: is *upper* half
{
	+FLOORCLIP
	Radius 0
	Height 8
	Speed 10
	Mass 8
	BounceFactor 0.3
	+DOOMBOUNCE
	+NOBLOCKMAP
	+MISSILE
	+NOTELEPORT
	+DONTSPLASH
	+MOVEWITHSECTOR
	DeathSound "misc/xdeath1"
	States
	{
		Spawn:
			Goto Death
		Death:
			BTO1 AAAAAA 4 A_CustomMissile("Green_Blood",0,0,180,2)
			TNT1 A 0 A_Jump(128, "Crawl")
			//HPLA A 0 A_SpawnItem("FBD_DeadKnightHalfUp",0,0,0,1)
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadKnightHalfUp",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
		Crawl:
			TNT1 A 0 A_NoBlocking
			//***Che
			//TNT1 A 0 A_SpawnItem("CrawlingHellKnight")
			TNT1 A 0 A_SpawnItemEx ("CrawlingHellKnight",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
    }
}

























ACTOR DyingHellKnight1: AbstractDyingGuy
{
	Game Doom
	Radius 16
	Height 50
	Health 100
	damagefactor "Blood", 0.0 damagefactor "BlueBlood", 0.0 damagefactor "GreenBlood", 0.0
    damagefactor "Avoid", 0.0 damagefactor "SSG", 10.0
	damagefactor "KillMe", 0.0	damagefactor "Minigun", 0.6
	BloodType "Green_Blood", "GreenFBD_SawBlood", "GreenFBD_SawBlood"
	BloodColor "DarkGreen"
	Mass 999999
	//-SOLID
	//+SOLID // headboxes monitor this flag and auto-terminate if it is unset
	-SOLID // solved by using specialized headboxes
	+SHOOTABLE
	+FLOORCLIP
	+NOPAIN
	+DONTSPLASH
	Scale 1.0
	PainSound "PSXDPN"
	
	var int user_head_tid;
	var int user_head_type; 
	var int user_sleeping;
	var int user_item_no;
	//var int user_serverside_sfchk; // on client, always 0. 
	// on server, -1 means command for DECORATE to perform a_radiusGive,
	// 1 decorate replies it had performed RadiusGive
	
	var int user_head_scale;
	var int user_head_rel;
	var int user_head_xyzf;

	States
	{
		Spawn:
			TNT1 A 0 NODELAY ACS_NamedExecuteWithResult("FBD_RunMonster", 2) // noble headbox
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",0,0,38,1) // force create
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			KSA1 ABCB 6
			TNT1 A 0 A_SpawnItem("GreenBloodDying", 0, 50)
			//TNT1 A 0 A_PlaySound ("PSXDPN", CHAN_VOICE)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Fall
			TNT1 A 0 A_ChangeFLag("SHOOTABLE", 0)
			TNT1 A 0 A_PlaySound("knight/death", CHAN_VOICE)
			BTN3 ABCD 6
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_SpawnItemEx("DeadHellKnightNoArm", 0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
	
		Death.HeadStun:
		Death.HeadPlasma:
		Death.Head:
		Death.Decaptate:
			TNT1 A 0
			TNT1 A 0 A_StopSound(CHAN_VOICE) 
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Fall
			TNT1 A 0 A_SpawnItem("HellKnightHeadExplode", 0, 62)
			//TNT1 A 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_SpawnItemEx("DyingHellKnightNoHeadNoArm",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
		
		
		Death.SSG:
		Death.Railgun:
		XDeath:
		Death.ExplosiveImpact:
		Death:
			TNT1 A 0
			TNT1 A 0 A_StopSound(CHAN_VOICE) 
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			//TNT1 A 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("MuchBlood2Green")
			TNT1 AAAAAA 0 A_CustomMissile ("XDeath1Green", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAA 0 A_CustomMissile ("Green_FlyingBlood", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("GreenGuts", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightTorso", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem("HellKnightHeadExplode", 0, 62)
			BBO1 AAAAAAAAAABBBBBCCCCC 2 A_CustomMissile ("Green_LiquidBlood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightHalfDown",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)

			TNT1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		Death.Cut:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Scream
			//TNT1 A 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("MuchBlood2Green")
			TNT1 AAAAAA 0 A_CustomMissile ("XDeath1Green", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAA 0 A_CustomMissile ("Green_FlyingBlood", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("GreenGuts", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			//TNT1 A 0 A_CustomMissile ("XDeathHalfHK", 24, 0, random (0, 360), 2, random (0, 160))
			//***Che it fais to spawn with perfect reliability - DUE TO POSITION CHECK. I had the same problem with the flying head in my duke of hell fatality.
			TNT1 A 0 A_SpawnItemEx("XDeathHalfHK", -16, 20, 24, -3.0, 0.1 * random(-10,10), 3.0, -180, SXF_NOCHECKPOSITION)
			BBO1 AAAAAAAAAABBBBBCCCCC 2 A_CustomMissile ("Green_LiquidBlood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightHalfDown",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
	}
}





ACTOR DyingHellKnight2: DyingHellKnight1
{
	Scale 1.2
	States
	{
		Spawn:
			TNT1 A 0 NODELAY ACS_NamedExecuteWithResult("FBD_RunMonster", 2) // noble headbox
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII",0,0,44,1)	
			BTN5 AABBAACC 2 A_CustomMissile ("Green_LiquidBlood", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_Pain
		
			BTN5 AAABBBAAACCC 2 A_CustomMissile ("Green_LiquidBlood", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_Pain
			
			BTN5 AAABBBAAACCC 2 A_CustomMissile ("Green_LiquidBlood", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_Pain

			BTN5 AAABBBAAACCC 2 A_CustomMissile ("Green_LiquidBlood", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
		Death:
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			BTN5 DDD 2 A_CustomMissile ("Green_LiquidBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_NoBlocking
			BTN5 EEE 2 A_CustomMissile ("Green_LiquidBlood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightBTN5F",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			TNT1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
		
		Death.HeadStun:
		Death.HeadPlasma:
		Death.Head:
		Death.Decaptate:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			//TNT1 A 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_SpawnItem("HellKnightHeadExplode", 0, 62)
			TNT1 A 0 A_SpawnItemEx("DyingHellKnightNoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
	}
}




ACTOR DyingHellKnightNoHead: DyingHellKnight1
{
	-SOLID
	DamageFactor "Head", 0.0
	States
	{
		Spawn:
			TNT1 A 0 		
			BTN2 AAAAAAAAAAAAAAAAA 2 A_CustomMissile ("Green_LiquidBlood", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			BTN2 BBBBB 2 A_CustomMissile ("Green_LiquidBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_NoBlocking
			BTN2 CCCCC 2 A_CustomMissile ("Green_LiquidBlood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightNoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			TNT1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 2 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
		
		Death: 
		Death.SniperBullet:
		Death.Bullet792:		
		Death.Minigun:
			TNT1 A 0
			TNT1 A 0 A_NoBlocking
			//TNT1 A 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 AAAA 0 A_CustomMissile ("GreenBloodMistBig", 42, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightArm", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItemEx("DyingHellKnightNoHeadNoArm",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)		
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop	
			
		Death.SSG:
		XDeath:
		Death.ExplosiveImpact:
		Death.Railgun:
			//TNT1 A 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("MuchBlood2Green")
			TNT1 AAAAAA 0 A_CustomMissile ("XDeath1Green", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAA 0 A_CustomMissile ("Green_FlyingBlood", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("GreenGuts", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightTorso", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			BBO1 AAAAAAAAAABBBBBCCCCC 2 A_CustomMissile ("Green_LiquidBlood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightHalfDown",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)	
			TNT1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop	
	}
}



ACTOR DyingHellKnightNoHeadNoArm: DyingHellKnight1
{
	//-SOLID
	DamageFactor "Head", 0.0
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 
			BTN4 AAAAAAAAAAAAAAA 2 A_CustomMissile ("Green_LiquidBlood", 62, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			BTN4 BBBB 2 A_CustomMissile ("Green_LiquidBlood", 52, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			BTN4 CCCC 2 A_CustomMissile ("Green_LiquidBlood", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("DeadHellKnightNoArmNoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			TNT1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 2 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
			
		Death.SSG:
		XDeath:
		Death.ExplosiveImpact:
		Death.Railgun:
		Death.SniperBullet:
		Death.Bullet792:		
		Death.Minigun:
		Death:
			//TNT1 A 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("MuchBlood2Green")
			TNT1 AAAAAA 0 A_CustomMissile ("XDeath1Green", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAAA 0 A_CustomMissile ("Green_FlyingBlood", 15, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("GreenGuts", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHellKnightArm", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			BBO1 AAAAAAAAAABBBBBCCCCC 2 A_CustomMissile ("Green_LiquidBlood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 0 A_SpawnItem ("GreenGrowingBloodPool")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightHalfDown",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1 A_CustomMissile ("Green_LiquidBlood", 10, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 110))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop	
	}
}






//***Che: this wasn't working, never seen due to failing to spawn.
// It was called "DyingHellKnight" in BD20b 
ACTOR CrawlingHellKnight
{
    Radius 12
    Height 30
    Speed 9
	Health 70
	PainSound "PSXDPN"
	DeathSound "grunt/death"
	damagefactor "Kick", 0.1
	damagefactor "Crush", 2.0
	damagefactor "Fatality", 20.1
	PainChance "Kick", 255
	+SHOOTABLE
    +FLOORCLIP
	//+NOBLOCKMAP
    +LOOKALLAROUND
	+FRIGHTENED
	+FLOORCLIP
	-SOLID
	+THRUACTORS
	
    BloodType "Green_Blood", "GreenFBD_SawBlood", "GreenFBD_SawBlood"
	BloodColor "DarkGreen"	
    States
    {
	

		Pain.Kick:
			TNT1 A 0 A_CustomMissile ("Teeth", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Green_Blood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("TeethNoBounce", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			//TNT1 A 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 A_Pain
			TNT1 A 0 A_FaceTarget
			BTCK ABA 3
			BTC1 B 20
			Goto See
		
		Death.Kick:
		Death.Fatality:
		
			TNT1 A 0 A_JumpIfIntargetInventory("IsPlayer", 1, 1)
			Goto XDeath
		
			TNT1 A 0 A_GiveToTarget("GoFatality", 1)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("HKFatality2", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 5, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
		
		Spawn:
			TNT1 A 0
			TNT1 A 0 
		Stand:
			BTC1 A 1 A_Look
			Loop
		See:
			BTC1 ABC 10 A_Chase
			TNT1 A 0 A_SpawnItemEx("Green_FlyingBlood", 0, 0, 10, 0, 0)
			BTC1 D 10 A_Pain
			TNT1 A 0 A_SpawnItemEx("Green_FlyingBlood", 0, 0, 10, 0, 0)
			
			BTC1 ABC 10 A_Chase
			TNT1 A 0 A_SpawnItemEx("Green_FlyingBlood", 0, 0, 10, 0, 0)
			BTC1 D 10 A_Pain
			TNT1 A 0 A_SpawnItemEx("GreenGuts", 0, 0, 5, 0, 0)

			TNT1 A 0 A_GiveInventory("DeathTimer1", 1)
			TNT1 A 0 A_JumpIfInventory("DeathTimer1", 8, "GotoDeath")
			Loop
			
		GotoDeath:
			TNT1 A 0
			TNT1 A 0 A_NoBlocking
			Goto Death
		Death:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Pain
			//TNT1 A 0 A_SpawnItem ("FBD_DeadKnightHalfUp")
			TNT1 A 0 A_SpawnItemEx("FBD_DeadKnightHalfUp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
		
		
		Death.Stomp:
		Death.SSG:
		XDeath:
			TNT1 AAAAAA 0 bright A_CustomMissile ("SuperGoreSpawner", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AAAAAA 0 bright A_CustomMissile ("XDeath1Green", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AA 0 bright A_CustomMissile ("XDeath2Green", 55, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AA 0 bright A_CustomMissile ("XDeath3Green", 55, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			//TNT1 A 0 A_SpawnItem ("CrushedRemains")
			TNT1 A 0 A_SpawnItemEx("CrushedRemains",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 1
			TNT1 A 1 A_XScream
			TNT1 A 1 A_NoBlocking
			//TNT1 AAA 0 A_SpawnItemEx("ArmorShardFatalityBonus", 0,0,0, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 0, 15, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, scripts runs ownerless
			Stop
		}
}