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




//***Che: this is the first monster I try my franken headshot hitboxes on

//***Che: if you absolutely have to replace a monster, use this MINIMUM of flags:
//  (and even then, what about running map scripts that could have been attached to it?)

// TNT1 A 0 A_SpawnItemEx ("<your replacement actor here>",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)


ACTOR ImBallGettingReadyNoLight: ImBallGettingReady	{+NOCLIP} //backported from brutalv22test3


//===========================================================================
//
// Imp
//
//===========================================================================


Actor ImpBossCubeSpawner: AbstractBossCubeSpawner
{
	States
	{
		DoSummon:	
			TNT1 A 0 A_GiveInventory("SummonsCount", 1, AAPTR_TRACER)
			TNT1 A 0 A_SpawnItemEx("TeleportationFog")
			TNT1 A 1 A_SpawnItemEx("Imp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0,user_stid)
			Stop
	}
}


//ACTOR Imp: SwitchableDecoration Replaces DoomImp
//ACTOR Imp Replaces DoomImp

//***Che: cross-mod hardening: see ACTOR Imp: FBD_Imp Replaces DoomImp in Doom_Replacements.txt
ACTOR FBD_Imp 17840
{
	//$category "FBD Monsters"
	
	//***Che radius, height and maxdropoffheight (n/a for flying ones) MUST be kept consistent with FBD_TrySpawn in FBD_CORE.acs!
	
	var int user_head_tid;
	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_head_type; 
	var int user_sleeping;
	var int user_item_no; // инвентарный номер монстра - нафиг не нужен, но штоб был.
		// addendum: found a good use for it, checking for ownerless scripts still running after their actor is gone
	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_rel; // decay management, 100.0 fixed means the headbox has expired.
//	var int user_head_state; // command to the headbox: 1 keep going, 0 self-terminate 3 assume an unique TID and report back
	var int user_head_scale; // normally zero meaning 1.0 but can be set to a fixed-point value
	
	Game Doom
    Scale 1.04
	SpawnID 5
	Health 80
	Radius 16
	Height 48
	Mass 100
    GibHealth 35
	damagefactor "Shotgun", 1.5
	DamageFactor "Head", 1.3
	DamageFactor "HeadStun", 1.3
	DamageFactor "HeadPlasma", 1.55 // must die from a single plasma headshot
	DamageFactor "Decaptate", 1.3
	PainChance 255 damagefactor "HangingHook", 0 PainChance "Stealth", 255
	PainChance "HeadStun", 255 // meaningless as they splatter from that much damage
	PainChance "Head", 255    
	PainChance "Taunt", 255    
	PainChance "Kick", 255	
	PainChance "Melee", 255
	PainChance "HeadPlasma", 255
	PainChance "Fatality", 255	
	PainChance "HelperMarineFatallity", 255 
	Painchance "Slide", 255 //256
	PainChance "Decaptate", 255
	damagefactor "TeleportRemover", 0.0	damagefactor "GibRemoving", 0.0
	PainChance "ExplosiveImpact", 255 
	
	damagefactor "FallInLava", 500.0
	damagefactor "Avoid", 0.0 DamageFactor "Fatality", 5.0 	DamageFactor "PussyGrab", 50.0	damagefactor "Trample", 1.5
	damagefactor "KillMeBot", 0.0	damagefactor "SSG", 50.0	damagefactor "Crush", 10.0
	DamageFactor "CauseSplash", 0.0 DamageFactor "CauseObjectsToSplashSlime", 0.0 DamageFactor "CauseObjectsToSplashNukage", 0.0
	DamageFactor "CauseObjectsToSplashBlood", 0.0 DamageFactor "CauseObjectsToSplashLava", 0.0
	DamageFactor "ExtremePunches", 2.0
	PainChance "LowKick", 255
	Species "Imps"
	DeathHeight 16 //4
	BurnHeight 16 //***Che otherwise archviles never resurrect them //0
	damagefactor "Blood", 0.0 damagefactor "BlueBlood", 0.0 damagefactor "GreenBlood", 0.0
    //BloodType "FBD_Blood", "FBD_SawBlood", "FBD_SawBlood"
	// legshot blood replaces the legboxes, gives the monster "HitLeg" tokens if hit below 25 from origin
	// but monster must check for it in all death states
	BloodType "FBD_LegshotBlood", "FBD_LegshotBloodSaw", "FBD_LegshotBloodSaw"
	SeeSound "imp/sight"
	PainSound "imp/pain"
	DeathSound "imp/death"
	ActiveSound "imp/active"
    damagefactor "SSG", 5.0
	damagefactor "explosiveimpact", 1.5
	//***Che
	DamageFactor "FriendlyExplosion", 1.5
	MaxStepHeight 24
	MaxDropOffHeight 32
	Monster
	+FLOORCLIP
	+MISSILEMORE
	+SLIDESONWALLS
	+RANDOMIZE
	+MTHRUSPECIES
	PainChance "Trample", 255
    Speed 6 // if you change this, change also all the calls to ACS_NamedExecuteWithResult("FBD_SetSpeed",6) below  (every instance when imp fish comes out of water)
	FastSpeed 12 // sadly if he goes underwater even once this gets reset to 6: there is no way for the ACS scripts to read the fastmonsters setting
	Tag "$FBD_IMP" // "Imp";
	Obituary "$FBD_IMP_O" // "%o  slain by an imp";
	
	
	PainChance "Argent", 255
	
	var int user_knows_what_grenade_is; //don't catch that grenade, run from it (was ever hit by Shrapnel damage)
	
	//***Che: integrating ImpFish
	FloatSpeed 2
	
	var int user_is_fish;
	
	damagefactor "Leg", 1.0 // subscribe to lift the default immunity
	
	damagefactor "Bullet792", 1.35
	damagefactor "SniperBullet", 1.35 // sniper rifle must be an one-hit-kill, 60 => 80
	PainChance "PlummetAaah", 255 // bottomless pits in Chebskies-EDAY
	DamageFactor "PlummetAaah", 1.0	

	damagefactor "Killme", 1.0 // AOE inflicted by captured marines
	PainChance "Killme", 255	
	
	PainChance "Ice", 255
	
	//***Che this damage type is now for subscribers only
	damagefactor "Stealth", 1.0
	PainChance "Stealth", 255	
	
	
	States
	{
		Spawn:
			TROS A 0 NODELAY A_JumpIf(CallAcs("GetPotPourri"), "PotPourriSwap")
		PotPourriCancel:	
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_RunMonster", 5) // default headbox
			//TNT1 A 0 ACS_NamedExecuteAlways("BDCHeckClassicMonsters", 0, 0, 0, 0)//Check if Vanilla Mode is activated
			//TNT1 A 0 //ACS_NamedExecuteAlways("CeilingClimbingImps", 0)//Check for CVARs
			
			// Also replaces BDCHeckClassicMonsters with a different mechanism
			// The slaughter-aware blood checks the parent monster and goes low-res automatically
			
			
			
			TNT1 A 0 A_GiveInventory("SKImp", 1)
			TNT1 A 0 A_GiveInventory("TargetIsAnImp", 1)
			
			
			//
			TNT1 A 0 A_JumpIf(waterlevel >= 2, "FishStand")//"Swim")
			
			TROS A 5 // A_Look // give the init scripts time to run
		
		Stand:
			// alas, alas, i cannot reach that thing's user variables from DECORATE from outside it,
			// only the ACS could do that by TID. incurring script spawning performance impact
			// at least i can move the ACS script spawning out of this tight loop
			// (and scripts should, theoretically, be cheaper to spam than actors)
			// P.S. Oh, they are. ACS scripts proved *immensely* cheaper to spam than actors!
			TNT1 A 0
			
			//TNT1 A 0 A_JumpIf(user_serverside_sfchk >= 4, "StandSfestExtreme") // extreme slaughtermap optimization
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 38) //35) // they are *really slouching in that frame
		
				// NOTE: here, 15 and not 18 to make sure the headboxes' origin 
				//  always stays inside the main body's hitbox.
				//  Otherwise, imp standing under a tall cliff facing the cliff, 
				//  the game engine forces the headbox to be flush with the floor...
				//  several meters above the imp.
				//  Because while WARPF_NOCHECKPOSITION allows the headbox clipping through walls,
				//  there is no force in the universe that would allow an actor go below
				//  the floor or above the ceiling at its origin (unless it has full noclip -- but those cannot be shot).
				
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 18, 48, 0)
			//TNT1 A 0 A_SpawnItem ("LegTarget100", 10)
			TNT1 A 0 A_JumpIf(user_is_fish, "FishWander")
			
			TROS ABAB 6 A_Look
			"----" A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "FishStand")
			"----" A 0 A_JumpIf(!user_head_tid, "StandSfestExtreme") // headbox was guaranteed to be created by now so if it is missing it means a slaughtermap where headbox was either never created or had expired
			Loop
		StandSfestExtreme:
			TROS ABAB 15 A_Look
			Loop


		//***Che
		Pain.Ice:
			"----" A 2 A_Pain
			"----" AAAAAAAAA 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitch")
			Goto See
			
		
		Pain.PlummetAaah:
			"----" A 0 A_PlaySound("BURNZOM", CHAN_VOICE)
			"----" A 0 A_ChangeFlag("NOPAIN", 1) // prevent repeated activation by the trigger filling the bottomless pit
			Goto FallingAfterImpact	
		Death.PlummetAaah:
			TNT1 A 0 A_StopSound(CHAN_VOICE)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("FBD_ThrowedImp", 0, 0, 0, CMF_AIMDIRECTION, -90)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop			

		Pain.HardGrenade1:
			TNT1 A 0
			TNT1 A 0 A_Jump(64, "Pain")
			TNT1 A 0 A_JumpIf(user_knows_what_grenade_is, "Dodge")
			TNT1 A 0 A_JumpIfTargetInLOS("CatchGrenade1", 220, JLOSF_NOSIGHT) // from the front only
			Goto Pain
		Pain.HardGrenade2:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(user_knows_what_grenade_is, "Dodge")
			TNT1 A 0 A_Jump(128, "Pain")
			TNT1 A 0 A_JumpIfTargetInLOS("CatchGrenade2", 220, JLOSF_NOSIGHT)
			Goto Pain
		Pain.HardGrenade3:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(user_knows_what_grenade_is, "Dodge")
			TNT1 A 0 A_Jump(128, "Pain")
			TNT1 A 0 A_JumpIfTargetInLOS("CatchGrenade3", 220, JLOSF_NOSIGHT)
			Goto Pain
		CatchGrenade1:
			TNT1 A 0
			TNT1 A 0 A_GiveInventory("GrenadeTime", 1)
			Goto HurrDurrMeHazGrenaed
		CatchGrenade2:
			TNT1 A 0
			TNT1 A 0 A_GiveInventory("GrenadeTime", 2)
			Goto HurrDurrMeHazGrenaed
		CatchGrenade3:
			TNT1 A 0
			TNT1 A 0 A_GiveInventory("GrenadeTime", 3)
			Goto HurrDurrMeHazGrenaed		
		HurrDurrMeHazGrenaed:
			TNT1 A 0
			TNT1 A 0 A_RadiusGive("GrenadeSomeoneHasCaughtYou", 64, RGF_OBJECTS | RGF_MISSILES | RGF_CUBE | RGF_NOSIGHT, 1)
			TNT1 A 0 A_FaceTarget
			TROT W 5 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 15, 34)
			TROT X 5 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 6, 37)
			TNT1 A 0 A_PlaySound("imp/active", CHAN_VOICE)
		HoldRoundThingy:	
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 37)
			TNT1 A 0 A_FaceTarget
			TROT Y 15 
			TNT1 A 0 A_TakeInventory("GrenadeTime", 1)

			// alerter inflicts 2 "HurrDurrMeHazGrenaed" damage in a radius of 200 aggroing zombiemen and shotgun guys at this imp
			TNT1 A 0 A_SpawnItemEx("ApeWithAGrenadeAlerter",0,0,30, 0,0,0, 0,SXF_NOCHECKPOSITION,0)

			TNT1 A 0 A_JumpIfInventory("GrenadeTime", 1, "HoldRoundThingy")
		
			TNT1 A 0 A_SpawnItemEx("FragGrenadeExplosion",0,-12,40, 0,0,0, 0,SXF_NOCHECKPOSITION)
			Goto Pain.Shrapnel // the chance of which is zilch -- he won't survive in the epicenter. 
		Dodge:
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, 1, 32)
			TROT H 1 ACS_NamedExecuteWithResult("ImpJumpDodgeStates") //A_Jump(256, "DodgeLeft", "DodgeRight", "DodgeBackLeft", "DodgeBackRight")
			Wait
		DodgeLeft:
			TROT H 4
			TNT1 A 0 A_SetAngle(angle + 80)
			TNT1 A 0 A_Recoil(7)
			TNT1 A 0 A_SetAngle(angle - 80)
			Goto Dodging
		DodgeRight:
			TROT H 4
			TNT1 A 0 A_SetAngle(angle - 80)
			TNT1 A 0 A_Recoil(7)
			TNT1 A 0 A_SetAngle(angle + 80)
			Goto Dodging
		DodgeBackLeft:
			TROT H 4
			TNT1 A 0 A_SetAngle(angle + 30)
			TNT1 A 0 A_Recoil(7)
			TNT1 A 0 A_SetAngle(angle - 15)
			Goto Dodging
		DodgeBackRight:
			TROT H 4
			TNT1 A 0 A_SetAngle(angle - 30)
			TNT1 A 0 A_Recoil(7)
			TNT1 A 0 A_SetAngle(angle + 15)
			Goto Dodging			
		Dodging:	
			TROT E 4 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 1, 39)
			TROT EEEEEEEE 2 A_CheckFloor ("AfterDodge")
			TNT1 A 0 A_FaceTarget
			TROT EEEEEEEEEEEEEE 2 A_CheckFloor ("AfterDodge")
			TNT1 A 0 A_FaceTarget
			Goto AfterDodge
		AfterDodge:	
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("Enraged", 1, "Missile")
			TROT E 1 A_Jump(256, "Cower", "See")
			Wait
		Cower:
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_FaceTarget
			//ducking and cowering animation -- headshot pain
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 26)
			TROH T 3 A_Pain
			TROH STSTST 3 A_FaceTarget
			TROH S 20
			Goto See
			
		Dodge2: // unlike Dodge, is always going to See, never cowering. Also, different animation
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 11, 0, 32)
			TROT D 1 A_Jump(256, "DodgeLeft2", "DodgeRight2", "DodgeBackLeft2", "DodgeBackRight2")
			Wait
		DodgeLeft2:
			TROT D 4
			TNT1 A 0 A_SetAngle(angle + 80)
			TNT1 A 0 A_Recoil(7)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 A_SetAngle(angle - 80)
			Goto Dodging2
		DodgeRight2:
			TROT D 4
			TNT1 A 0 A_SetAngle(angle - 80)
			TNT1 A 0 A_Recoil(7)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 A_SetAngle(angle + 80)
			Goto Dodging2
		DodgeBackLeft2:
			TROT D 4
			TNT1 A 0 A_SetAngle(angle + 30)
			TNT1 A 0 A_Recoil(7)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 A_SetAngle(angle - 15)
			Goto Dodging2
		DodgeBackRight2:
			TROT D 4
			TNT1 A 0 A_SetAngle(angle - 30)
			TNT1 A 0 A_Recoil(7)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 A_SetAngle(angle + 15)
			Goto Dodging2			
		Dodging2:	
			TROT E 4 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 1, 39)
			TROT EEEEEEEE 2 A_CheckFloor ("AfterDodge2")
			TNT1 A 0 A_FaceTarget
			TROT EEEEEEEEEEEEEE 2 A_CheckFloor ("AfterDodge2")
			TNT1 A 0 A_FaceTarget
			Goto AfterDodge2
		AfterDodge2:	
			TROT H 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, 1, 32)
			TNT1 A 0 A_JumpIfInventory("Enraged", 1, "Missile")
			Goto See
			
		Death.FriendlyExplosion:
			TNT1 A 0
			goto Death.ExplosiveImpact		
	
		Raise:
			TNT1 A 0
			//TNT1 A 0 ACS_NamedExecuteWithResult("FBD_RunMonster")
			//TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII") // should not have a headbox by now -- but what if?
			TNT1 A 0 A_SpawnItemEx("StandaloneRezSfx",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TROO ML 8
			TROO KJI 6
			
			//TNT1 A 0 ACS_NamedExecuteAlways("FrankenHeadSpawn", 0, 18, 0, 48)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_CustomizeOnRez") // it runs OnRezMapScript
				// if the map prpvides one
			
			Goto See
			
		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", 2005) // see _mob_list.xlsx
			Stop
			
		FallbackRezSuccess:
			TNT1 A 0 A_SpawnItemEx("StandaloneRezSfx",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			TNT1 A 30
			Stop			
			
		Pain.Burn: // imp fireball
		Pain.Rip: // imp's regular melee attack (infighting support added)	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_JumpIfInventory("IsDown", 1, "Pain.IsDown")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 3, 42)
			
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TROO H 3
			"----" A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TROO H 3 A_Pain
			TNT1 A 0 A_Jump(96, "Dodge2")
			TNT1 A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")		
			Goto SeeContinue
			
		Pain.Argent:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			
			//TNT1 A 0 A_ClearTarget
			TNT1 A 0 A_GiveInventory("Enraged", 1)
			TNT1 A 0 A_Pain
			TNT1 A 0 HealThing(20)
					
			
			TNT1 A 0 A_JumpIfInventory("IsDown", 1, "PainArgentIsDown")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 3, 42)
			TNT1 A 0 ACS_NamedExecuteWithResult("DisplayArgentDischarge", 10, 40, 0)	
			
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TROO H 5 A_Pain	
			"----" A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TROO H 5 A_Pain	
			"----" A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TROO H 5 A_Pain	
			"----" A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TROO H 5 A_Pain	
			"----" A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			Goto See
		PainArgentIsDown:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -15 /*-20*/, 0, 11)
			TNT1 A 0 ACS_NamedExecuteWithResult("DisplayArgentDischarge", 10, 20, 0)	
			ID11 BBBB 5 A_Pain
			Goto GetUp			
/*			
		//***Che: deprecated.  See TNT1 A 0 A_JumpIfInventory("IAmClassicMonster"
		ReplaceVanilla:
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 A_SpawnItemEx ("VanillaImp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG ,0)
			Stop
*/			
		PotPourriSwap:
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
		PotPourriWait:			
			KYPP A 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 ("ImpPotpourriSwapper",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERPOINTERS | SXF_TRANSFERSPECIAL | SXF_CLEARCALLERSPECIAL | SXF_CLEARCALLERTID  ,0, tid)
			TNT1 A 30 // multiplayer client ignores jump action specials, must delay object deletion to let the network code fix this
			Stop
		PotPourriNoSwap:
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 1)
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 1)
			Goto PotPourriCancel			
		
		Idle:
			TNT1 A 0
			
			TNT1 A 0 A_TakeInventory ("DuckYouFool", 1)
			TNT1 A 0 A_JumpIfInventory("Fatality_Marine", 1, "FatalityMarine")
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_JumpIf(user_is_fish, "FishWander")
			TNT1 A 0 A_JumpIf(waterlevel >= 2, "Swim")
		LookingForPlayer:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_sleeping", 1)
			
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(user_is_fish, "FishWander")
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 38) 
			TNT1 A 0 A_GiveInventory("SKImp", 1)
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 18, 48,0)
			TROS ABA 10 A_Look
			TNT1 A 0 A_SetAngle(angle - 40)
			TROS ABA 10 A_Look
			TNT1 A 0 A_SetAngle(angle + 40)
			TROS BAB 10 A_Look
			
		LookingForPlayer2:
			TROO A 0
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, -3, 38)
			TROO DD 0 A_Wander
			TROO A 2 A_Look
			TROO DD 0 A_Wander
			TROO A 2 A_Look
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget6", 18, 48, 0)
			
			TROO DD 0 A_Wander
			TROO B 3 A_Look
			TROO DD 0 A_Wander
			TROO B 3 A_Look
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget6", 18, 48, 0)
			
			TROO CC 0 A_Wander
			TROO C 3 A_Look
			TROO CC 0 A_Wander
			TROO C 3 A_Look
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget6", 18, 48, 0)
			
			TROO DD 0 A_Wander
			TROO D 3 A_Look
			TROO DD 0 A_Wander
			TROO D 3 A_Look
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget6", 18, 48, 0)
			
			
			TNT1 A 0 A_jump(196, "LookingForPlayer2")
			
			Goto LookingForPlayer
			
			
			
		ForgetTarget:
			TNT1 A 0 A_ClearTarget
			TNT1 A 0 A_TakeInventory("EnemyMemory", 25)
			TNT1 A 0 A_GiveInventory("LookingForPlayer", 1)
			Goto LookingForPlayer
		
		See:
			TNT1 A 0
			TNT1 A 0 A_TakeInventory("DuckYouFool", 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_JumpIf(waterlevel >= 2, "Swim")
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			
			//TNT1 A 0 A_JumpIfInventory("IAmClassicMonster", 1, "VanillaSeeContinue")
			
			TROS A 1 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 38) // serverside
			TNT1 A 0 A_TakeInventory("EnemyMemory", 15)
			TNT1 A 0 A_Jump(128, "SeeContinue")
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 12, 42,0)
			TROT A 2 A_faceTarget
			TROT B 2
			TROT C 2
			
			
		SeeContinue:
			TNT1 A 0
			
			TNT1 A 0 A_JumpIfInventory("Fatality_Marine", 1, "FatalityMarine")
			//TNT1 A 0 A_JumpIf(MomZ < 0, "FallingAfterImpact")// funny thing I tried, better not implement
			//
			TNT1 A 0 A_JumpIf(waterlevel >= 2, "Swim")
			
		Advancing:	
			TNT1 A 0
			//TNT1 A 0 A_SpawnItemEx("FootStep", 0, 0, 10, 0, 0)
		
			TNT1 A 0
			TNT1 A 0 A_TAkeInventory("CantFire", 1)
			TNT1 A 0 A_JumpIfInventory("IAmClassicMonster", 1, "VanillaSeeContinue")
			TNT1 A 0 A_JumpIfInventory("EnemyMemory", 20, "ForgetTarget")
			TNT1 A 0 A_GiveInventory("EnemyMemory", 1)
			
			TNT1 A 0 A_TakeInventory("SKImp", 1)

			
			// slaughtermap manage
			TNT1 A 0 A_JumpIf(!user_sleeping, 3) // forgo the expensive sight check if already awake
			TNT1 A 0 A_CheckSight(2) // do not consider ourselves awake if none of the players can see us
			TNT1 A 0 A_SetUserVar("user_sleeping", 0)
			TNT1 A 0 A_JumpIf(user_serverside_sfchk != -1, 3) // -1 means ACS commands us to do the radiusgive
			// A_RadiusGive is:
			//  1. serverside-only: the call is skipped on the client; only if a player is involved, a network command to update his item count is sent, otherwise the item count only increases on the server
			//  2. iterates over all actors in an infinitely tall square column checking their flags and coordinates
			//  3. performs expensive precision radius calculation (using a square root) unless RGF_CUBE is given (which results in cheaper delta per-coordinate comparison)
			//  4. performs expensive sight check, for each thing that passes flag and radius checks, unless RGF_NOSIGHT is given
			TNT1 A 0 A_RadiusGive("SfestCounterServerside", 500, RGF_MONSTERS | RGF_CUBE | RGF_NOSIGHT, 1)			
			TNT1 A 0 A_SetUserVar("user_serverside_sfchk", 1) // reply that we did the deed			
			
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(waterlevel >= 2, "Swim")
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 42)
			
			TNT1 A 0 A_JumpIfInventory("Enraged", 1, "EnragedAdvancing")

			TROO AAA 2 A_Chase
			
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck") // player ssg short-range tracer relayed by headbox
			TROO BBB 2 A_Chase
			
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck") // player ssg short-range tracer relayed by headbox
			TROO CCC 2 A_Chase
			
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck") // player ssg short-range tracer relayed by headbox
			TROO DDD 2 A_Chase
			
			TNT1 A 0 A_JumpIfInventory("DuckYouFool", 1, "Duck") // player ssg short-range tracer relayed by headbox			
			
			Loop
			
		EnragedAdvancing: // moves twice as faster 

			TROO AAAABBBBCCCCDDDD 1 A_Chase
		
			Goto Advancing
			
		VanillaSeeContinue:
			TNT1 A 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_JumpIf(waterlevel >= 2, "Swim")
		
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 42)
			TROO A 2 A_Chase
			TROO A 1 A_Chase("","")
			TROO A 2 A_Chase
			TROO A 1 A_Chase("","")
			TROO B 2 A_Chase
			TROO B 1 A_Chase("","")
			TROO B 2 A_Chase
			TROO B 1 A_Chase("","")
			TROO C 2 A_Chase
			TROO C 1 A_Chase("","")
			TROO C 2 A_Chase
			TROO C 1 A_Chase("","")
			TROO D 2 A_Chase
			TROO D 1 A_Chase("","")
			Loop
			
		FishSee: //***Che: integrating impfish, replacing the unfinished IUSA with a custom hack 
				//(+TROO P,Q mirroring TROO N,O for the front and back, otherwise clones)
			
			TNT1 A 0 A_JumpIfInventory("EnemyMemory", 20, "FishForgetTarget")
			TNT1 A 0 A_GiveInventory("EnemyMemory", 1)
			
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? (CallAcs("GetZDeltaToTarget") < 0 ? -2 : 2) : -6,0,0) // gradually surfacing if no target in sight // DOESNT WORK WHY THE FUCK DOESNT IT WORK :(((((
			// Because set force to -4 instead of 4, moron. Feel sooooo stoopid :(
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 6, 37)
			TROO NN 2 A_Chase
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 0 : -6,0,1)
			TNT1 A 0 A_Recoil(-1)
			TROO NN 2 A_Chase
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 0 : -6,0,1)
			TNT1 A 0 A_Recoil(-1)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 3, 38)
			TROO OO 2 A_Chase
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 0 : -6,0,1)
			TNT1 A 0 A_Recoil(-1)
			TROO OO 2 A_Chase
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 A_Recoil(-1)
			
			TNT1 A 0 A_JumpIfTargetInLOS(2)
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? (CallAcs("GetZDeltaToTarget") < 0 ? -2 : 2) : -6,0,0) // gradually surfacing if no target in sight
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -6, 37)
			TROO PP 2 A_Chase
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 0 : -6,0,1)
			TNT1 A 0 A_Recoil(-1)
			TROO PP 2 A_Chase
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 0 : -6,0,1)
			TNT1 A 0 A_Recoil(-1)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, -3, 38) 
			TROO QQ 2 A_Chase
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 0 : -6,0,1)
			TNT1 A 0 A_Recoil(-1)
			TROO QQ 2 A_Chase
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 A_Recoil(-1)
			Loop
			
		FishForgetTarget:
			TNT1 A 0 A_ClearTarget
			TNT1 A 0 A_TakeInventory("EnemyMemory", 25)
			TNT1 A 0 A_GiveInventory("LookingForPlayer", 1)
			Goto FishWander
			
			
		FishWander: //***Che: integrating impfish, replacing the unfinished IUSA with a custom hack 
				//(+TROO P,Q mirroring TROO N,O for the front and back, otherwise clones)
			
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_sleeping", 1)			
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1) // gradually surfacing if no target in sight
			
			TNT1 A 0 A_Recoil(-1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 6, 37)
			TROO NN 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TROO NN 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			
			TNT1 A 0 A_SetAngle(angle - 40)
			
			TNT1 A 0 A_Recoil(-1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 3, 38)
			TROO OO 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TROO OO 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			
			TNT1 A 0 A_SetAngle(angle + 40)
			TNT1 A 0 A_Recoil(-1)
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1) // gradually surfacing if no target in sight
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -6, 37)
			TROO PP 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TROO PP 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			
			
		FishWander2:	
			
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 6, 37)
			TROO NN 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TNT1 A 0 A_Wander
			TROO NN 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 A_Wander
			
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 3, 38)
			TROO OO 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TNT1 A 0 A_Wander
			TROO OO 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 A_Wander
			
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -6, 37)
			TROO PP 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TNT1 A 0 A_Wander
			TROO PP 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 A_Wander
			
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, -3, 38) 
			TROO QQ 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 ThrustThingZ(0,waterlevel > 1 ? 1 : -6,0,waterlevel > 1 && velz > 1.5 ? 0 : 1)
			TNT1 A 0 A_Wander
			TROO QQ 2 A_Look
			TNT1 A 0 A_JumpIf(waterlevel < 1, "JumpOutOfWater")
			TNT1 A 0 A_Wander
			
			TNT1 A 0 A_jump(196, "FishWander2")
			
			Goto FishWander

		FishLunge:

		
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 6, 37)
			TROO NN 2 A_Recoil(-1)
			TNT1 A 0 A_JumpIf(waterlevel <= 1, "JumpOutOfWater")
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 3, 38)
			TROO OO 2 A_Recoil(-1)
			TNT1 A 0 A_CustomMissile("ImpAttack",10,0,0,0)
			TNT1 A 0 A_JumpIf(waterlevel <= 1, "JumpOutOfWater")
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -6, 37)
			TROO PP 2 A_Recoil(-1)
			TNT1 A 0 A_JumpIf(waterlevel <= 1, "JumpOutOfWater")
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, -3, 38) 
			TROO QQ 2 A_Recoil(-1)
			TNT1 A 0 A_CustomMissile("ImpAttack",10,0,0,0)
			TNT1 A 0 A_JumpIf(waterlevel <= 1, "JumpOutOfWater")
			
			TNT1 A 0 A_CustomMissile("ImpAttack",10,0,0,0)

			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 3, 38)
			TROO O 6 
		
			Goto FishSee
			
		Swim: //***Che: integrating impfish
		
			TNT1 A 0 A_JumpIf(user_is_fish, "FishSee")
			TNT1 A 0 A_SetUserVar("user_is_fish", 1)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1) 
			TNT1 A 0 A_ChangeFlag("FLOAT", 1)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 1)

			//TNT1 A 0 A_SetSpeed(2)
			// Execution could not continue.
			// Script error, "brutalv21.5franken.pk3:imps.txt" line 644:
			// Invalid state parameter a_setspeed
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SetSpeed",2)
			
			Goto FishSee
/*		
			//***Che: getting rid of swaps, integrating impfish
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Fall
			//TNT1 A 0 A_SpawnItem("ImpFish")
			TNT1 A 0 A_SpawnItemEx ("ImpFish",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
*/			
			
		SwimOnPain: 
		
			TNT1 A 0 A_JumpIf(!user_is_fish, "SwimOnPainContinue")
			TROO H 222 A_Pain
			Goto FishSee
		SwimOnPainContinue: 	
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_is_fish", 1)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1) 
			TNT1 A 0 A_ChangeFlag("FLOAT", 1)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SetSpeed",2)
			TROO H 333333
			
			Goto FishSee			


		FishStand:
			TNT1 A 0 A_JumpIf(user_is_fish, "FishStandContinue")
			TNT1 A 0 A_SetUserVar("user_is_fish", 1)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1) 
			TNT1 A 0 A_ChangeFlag("FLOAT", 1)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SetSpeed",2)
		FishStandContinue:
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 6, 37)
			TROO NN 5 A_JumpIf(waterlevel < 1, "StandOutOfWater")
			TNT1 A 0 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 3, 38)
			TROO OO 5 A_JumpIf(waterlevel < 1, "StandOutOfWater")
			TNT1 A 0 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -6, 37)
			TROO PP 5  A_JumpIf(waterlevel < 1, "StandOutOfWater")
			TNT1 A 0 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, -3, 38) 
			TROO QQ 5 A_JumpIf(waterlevel < 1, "StandOutOfWater")
			TNT1 A 0 A_Look
			Loop
			
		StandOutOfWater:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_is_fish, "Stand")
			TNT1 A 0 A_SetUserVar("user_is_fish", 0)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)			
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SetSpeed",6)
			Goto Stand
			
		JumpOutOfWater:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(user_is_fish, 1)
			Goto SeeContinue
			TNT1 A 0 A_SetUserVar("user_is_fish", 0)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)			
			//TNT1 A 0 A_SetSpeed(6)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SetSpeed",6)
			TROT F 1 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 42)
			TNT1 A 0 A_Recoil(-6)
			TNT1 A 0 ThrustThingZ(0,50,0,1)
			TNT1 A 0 A_PlaySound("world/watersplash", CHAN_BODY)
			TROT F 4
			Goto See
			
		FishOutOfWater:	
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_is_fish, "FallingAfterImpact")
			TNT1 A 0 A_SetUserVar("user_is_fish", 0)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)			
			//TNT1 A 0 A_SetSpeed(6)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SetSpeed",6)
			TNT1 A 0 A_PlaySound("world/watersplash", CHAN_BODY)
			Goto FallingAfterImpact
			
		FishFlopOutOfWater:	
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_is_fish, "FallingAfterImpact")
			TNT1 A 0 A_SetUserVar("user_is_fish", 0)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)			
			//TNT1 A 0 A_SetSpeed(6)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SetSpeed",6)
			TNT1 A 0 A_PlaySound("world/watersplash", CHAN_BODY)
			TNT1 A 0 A_ChangeVelocity(velx, vely, 0, CVF_REPLACE) 
			Goto FallingAfterImpact			
			
		FishSwitch: 
			// invoke: A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitch")
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("GHOST", 0)
			TNT1 A 0 A_ChangeFlag("THRUGHOST", 0)
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")
			Goto See

		FishSwitchOnPain:
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("GHOST", 0)
			TNT1 A 0 A_ChangeFlag("THRUGHOST", 0)
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishFlopOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "SwimOnPain")
			Goto See

		VanillaMissile:
			TNT1 A 0
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 48,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 8, 42)
			TROO E 8 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15 /*16*/, 0, 36)
			TROO F 8 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15 /*25*/, -12, 33)
			TROO G 6 A_TroopAttack 
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 8, 42)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_TakeInventory ("DuckYouFool", 1)
			Goto See

		OhNoIWasGoingToClawABadass:
			TNT1 A 0
			TROO E 1 A_Jump(256, "LeapBack", "LeapBack", "Dodge", "Dodge", "Dodge", "Cower")
			Wait
		MyTargetIsScary:	
			TNT1 A 0
			TROO E 1 A_Jump(256, "Dodge", "Dodge", "Cower")
			Wait
		MyTargetIsScaryToShootAt:	
			TNT1 A 0
			TROO E 1 A_Jump(256, "MissileContinue", "Dodge", "Dodge", "Cower")
			Wait
		WaitTargetsFatalityOut:
			TROO E 1 A_Jump(256, "WTF1", "WTF2", "WTF3", "Dodge", "Dodge", "Cower")
			Wait
		WTF1:	
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, 1, 32)
			TROT H Random(12, 24) A_SetAngle(angle + Random(-60, 60))
			TROT H 12 A_PlaySound("imp/sight", CHAN_VOICE)
			Goto See
		WTF2:
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 35)
			TROS ABA 6
			TNT1 A 0 A_PlaySound("imp/sight", CHAN_VOICE)
			TROS BAB 6
			Goto See
		WTF3:
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 11, 0, 36)
			TROZ ABA 6
			TNT1 A 0 A_PlaySound("imp/sight", CHAN_VOICE)
			TROZ BAB 6
			Goto See
		LeapAttack:
			
			TNT1 A 0 A_JumpIf(user_is_fish, "FishLunge")
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsACyberdemon", 1, "OhNoIWasGoingToClawABadass")
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAGreatTerribleBoss", 1, "OhNoIWasGoingToClawABadass")
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, "WaitTargetsFatalityOut")
			
			// troo e has (8,8,42) but one tick is too small, can't match it.
			// for future reference: TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 8, 42) // troo e
			TROO E 1 A_FaceTarget
			TNT1 A 0 A_TakeInventory("EnemyMemory", 100)
			TNT1 A 0 A_JumpIfInTargetInventory("IsInATank", 1, "LeapBack")
			TNT1 A 0 A_JumpIfCloser(80, "Melee")
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget6", 12, 42,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT CD 3 
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TNT1 A 0 ThrustThingZ(0,25,0,1)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 42)
			TNT1 A 0 A_Recoil (-10)
			TROT E 2
			TROT F 2
			TNT1 A 0 A_GiveInventory ("IsJumping")
			TNT1 A 0 A_FaceTarget
			TROT F 6 
			TNT1 A 0 A_CustomMissile("ImpAttack2",10,0,0, 2)
			TNT1 A 0 A_TakeInventory ("IsJumping")
			TNT1 A 0 A_JumpIfInventory("Fatality_Marine", 1, "FatalityMarine")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 36)
			TROT G 1
			TROT GG 2 A_CustomMissile("ImpAttack2",10,0,0,2)
			TROT G 1 A_CustomMissile("ImpAttack2",50,0,0,2)
			TNT1 A 0 A_JumpIfInventory("Fatality_Marine", 1, "FatalityMarine")
			TROT HH 2 A_JumpIfInventory("Fatality_Marine", 1, "FatalityMarine")
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_TakeInventory ("DuckYouFool", 1)
			TNT1 A 0 A_JumpIfCloser(80, "Melee")
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")				
			Goto SeeContinue
		
		Melee:
			//TNT1 D 0 A_SpawnItem("HeadshotTarget4", 18, 48, 0)
			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)
			
			// La Tailor Girl mod: make monkey noises instead if the player is naked. But only once.
			TNT1 A 0 A_JumpIf(CallAcs("FBD_CheckSurpsisedAtLTGPlayerBeingNaked"), "MakeMonkeyNoises") 
			
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAGreatTerribleBoss", 1, "OhNoIWasGoingToClawABadass")
			TNT1 A 0 A_JumpIfInTargetInventory("GoFatality", 1, "WaitTargetsFatalityOut")
			
			// Kinslayer check:	
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAnImp", 1, 2)
			TNT1 A 0 A_JumpIf(true, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_InfightFriendlyFireOn")
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 8, 42)
			TROO E 4 A_FaceTarget
			TNT1 A 0 A_Recoil(-5)
			//TNT1 D 0 A_SpawnItem("HeadshotTarget4", 18, 48, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 39)
			TROO F 4 A_FaceTarget
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			//TNT1 D 0 A_SpawnItem("HeadshotTarget4", 18, 48, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, -12, 36)
			TROO G 4 A_CustomMissile("ImpAttack",10,0,0,0)
			//TNT1 D 0 A_SpawnItem("HeadshotTarget4", 18, 48, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 36)
			TROO FE 4
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_TakeInventory ("DuckYouFool", 1)
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")				
			Goto SeeContinue

		Missile:
			TNT1 A 0
			TNT1 A 0 A_JumpIfHealthLower(1, "Death")

			// 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)

			// La Tailor Girl mod support:
			TNT1 A 0 A_JumpIf(CallAcs("FBD_CheckSurpsisedAtLTGPlayerBeingNaked"), "MakeMonkeyNoises") 

			// Kinslayer check:	
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAnImp", 1, 2)
			TNT1 A 0 A_JumpIf(true, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_InfightFriendlyFireOn")
		
			TNT1 A 0 A_JumpIfInventory("IAmClassicMonster", 1, "VanillaMissile")
			
			TNT1 A 0 A_JumpIfInTargetInventory("IsInATank", 1, "LeapBack")
			
			TNT1 A 0 A_JumpIfCloser(150, "LeapAttack")

			TNT1 A 0 A_JumpIf(user_is_fish || waterlevel >= 2, "MissileContinue") // no leapback while swimming
			
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMiniBoss", 1, "LeapBack")
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsABoss", 1, "LeapBack")			
			
			
			// The "great terrible" goes *far* beyond normal DooM bosses 
			//  - it is usually something that eats cyberdemons for breakfast.
			//  We are talking about super masterminds who fire bfg 9000 on full auto,
			//    EDAY bosses with 20000 health and the firepower of a volcanic eruption... 
			//  That kind of scary stuff
			TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAGreatTerribleBoss", 1, "MyTargetIsScaryToShootAt")
		
		MissileContinue:	
			TNT1 A 0 A_TakeInventory("EnemyMemory", 100)
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			
			//TNT1 A 0 A_CustomMissile("MonsterTargetCheck", 34, 0, 0, 0) 
			//TNT1 A 0 A_CustomMissile("MonsterTargetCheckFaster", 34, 0, 0, 0) 
			TROO E 3 A_FaceTarget
			//TNT1 A 0 A_JumpIfInventory("CantFire",1, "Advancing")
			
			//P.S. Each fireball now detects slaughtermap on its own
			//TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, "FireballAttackSlaughterFest") // double the threshold of BD22 (30)
			
		FireballAttack:
			//TNT1 D 0 A_SpawnItemEx("HeadshotTarget10", 12, 7, 48)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 8, 42)
		
				//***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
			
			TROO E 2 //A_FaceTarget
			
			TNT1 A 0 A_JumpIfCloser(170, "LeapAttack")
			
			TNT1 A 0 A_Playsound ("IMPCHARG")
			
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, 3)
			TNT1 A 0 A_CustomMissile ("SmallFlameTrails", 35, 30, random (0, 40), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("ImBallGettingReady", 35, 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
			
			TROO E 2 //A_FaceTarget
			
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, 3)
			TNT1 A 0 A_CustomMissile ("SmallFlameTrails", 35, 30, random (0, 40), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("ImBallGettingReady", 35, 30, random (0, 140), 2, random (0, 160))
			TROO E 2 //A_FaceTarget
			
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, 3)
			TNT1 A 0 A_CustomMissile ("SmallFlameTrails", 35, 30, random (0, 40), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("ImBallGettingReady", 35, 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
			
			TROO E 2 //A_FaceTarget
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, 3)
			TNT1 A 0 A_CustomMissile ("SmallFlameTrails", 35, 30, random (0, 40), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("ImBallGettingReady", 35, 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
			
			TROO E 2 //A_FaceTarget
			
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, 3)
			TNT1 A 0 A_CustomMissile ("SmallFlameTrails", 35, 30, random (0, 40), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("ImBallGettingReady", 35, 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
			
			TROO E 2 //A_FaceTarget
			
			TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, 2)			
			TNT1 A 0 A_CustomMissile ("SmallFlameTrails", 35, 30, random (0, 40), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("ImBallGettingReady", 35, 30, random (0, 140), 2, random (0, 160))
			
			//TNT1 A 0 A_Jump(100, "specialattack")
			
				//***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 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 36)
			TROO F 2 //A_FaceTarget
			//TNT1 D 0 A_SpawnItem("HeadshotTarget10", 18, 48, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15 /*25*/, -12, 33)
			TROO G 6 A_CustomMissile("FireBall_", 34, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH) 
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 36)
			TROO F 4
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_TakeInventory ("DuckYouFool", 1)
			TNT1 A 0 A_Chase("","") // jump to idle if target's dead
			TNT1 A 0 A_JumpIf(user_is_fish, "FishSee") // otherwise, an endless attacking loop 
			 //because leapattack redirects to fireball for them fishes
			TNT1 A 0 A_JumpIfCloser(150, "LeapAttack")
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")				
			Goto SeeContinue
			
/*			
		// imitating brutalv22test3
		FireballAttackSlaughterfest:
			
			// no leg target spamming!
			
			TNT1 A 0
			//TNT1 A 0 A_CustomMissile("MonsterTargetCheckBD22", 34, 0, 0, 0) 
			
			//TNT1 D 0 A_SpawnItemEx("HeadshotTarget10", 12, 7, 48)
			
			// testing revealed running this on 5000 monsters is a featherweight, barely one millisecond
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 8, 42)
		
			
			TROO E 3
			TNT1 A 0 A_JumpIfInventory("CantFire",1, "Advancing")

			TROO E 1 A_CustomMissile ("ImBallGettingReady", 35, 30, random (0, 140), 2, random (0, 160))
			
			TNT1 A 0
			TROO EEEE 2 A_CustomMissile ("ImBallGettingReadyNoLight", 35, 30, random (0, 140), 2, random (0, 160))

			TNT1 A 0 A_CustomMissile ("ImBallGettingReadyNoLight", 35, 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
			
			TROO F 2 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 36)

			//TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, -12, 33)
			TROO G 6 A_CustomMissile("FireBall_Slaughterfest", 34, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH) 
			//TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 36)
			TROO F 4
			
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_TakeInventory ("DuckYouFool", 1)			
			
			TNT1 A 0 A_JumpIfCloser(150, "LeapAttack")
			Goto SeeContinue
*/		
			
		LeapBack:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 11, 0, 32)
			TROT D 4 A_ChangeFlag("NOPAIN", 1)
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TNT1 A 0 ThrustThingZ(0,25,0,1)
			TNT1 A 0 A_FaceTarget
			
			TNT1 A 0 A_Recoil (10)
			//TNT1 D 0 A_SpawnItem("HeadshotTarget23", 18, 48, 0)
			TROT E 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 8, 1, 39)
			TROT EEEEEEEEEEEE 2 A_CheckFloor("LandAfterLeapBack")
		LandAfterLeapBack:
			TROT H 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, 1, 32)
			//TNT1 A 0 A_JumpIfInventory("IAmSfestMonster", 1, "FireballAttackSlaughterFest")
			Goto SpecialAttackPlus5 //SpecialAttack+5
		SpecialAttack:
			TROO F 2 A_FaceTarget
			//TNT1 D 0 A_SpawnItem("HeadshotTarget10", 18, 48, 0)
			//TNT1 A 0 A_SpawnItem ("LegTarget30", 10)
			TROO G 6 A_CustomMissile("FireBall_", 34, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH) 
			TROO F 4
			//TNT1 D 0 A_SpawnItem("HeadshotTarget10", 18, 48, 0)
			
		SpecialAttackPlus5:
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 36)

			TROO I 2 //A_FaceTarget
			//***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 D 0 A_SpawnItem("HeadshotTarget10", 18, 48, 0)

			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 6, 36)
			TROA H 6 A_CustomMissile("FireBall_", 34, 0, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH) 
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 36)
			TROO I 4
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")				
			Goto SeeContinue
			
			
		
		Death.Eat:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Scream
			TNT1 A 0 A_GiveToTarget("ImpFatality",1)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop	
			
		Death.HelperMarineFatallity:
		Death.RVFT:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 1 A_Pain
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("ImpFatality3", 1)
			TNT1 A 0 A_GiveToTarget("ImpFatality", 1)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop	
		
		Death.PussyGrab:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Pain
			TNT1 A 0 A_Chase("","")
			TNT1 A 0 A_Pain
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("GrabbedAImp", 1)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop	
			
		Death.Fatality:
			TNT1 A 0 A_Pain
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_FaceTarget
			//TNT1 A 0 A_SpawnItemEx("HealthPlusFatalityBonus", 0,0,20, random (-1, 1),random (-1, 1),8, 0, SXF_ABSOLUTEVELOCITY | SXF_NOCHECKPOSITION)
			//TNT1 A 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, 5, 5, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "Death_FatalityByPlayer")
			// npc marines, evil marines and barons only recognize this specific token 
			// and randomize fatality by themselves
		Death.Fatality3:
		Death.BHFT:
			TNT1 A 0 A_GiveToTarget("ImpFatality3", 1)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, the bonus drop script runs ownerless
			Stop
			
		Death_FatalityByPlayer:	
			TNT1 A 0 A_GiveToTarget("GoFatality", 1)
			TNT1 A 0 A_Jump(256, "Death.Fatality1", "Death.Fatality4", "Death.Fatality2", "Death.Fatality3")
			Goto Death.Fatality1
	 
		Death.Fatality1:
			TNT1 A 0 A_GiveToTarget("ImpFatality", 1)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, the bonus drop script runs ownerless
			Stop
		Death.Fatality2:
			TNT1 A 0 A_GiveToTarget("ImpFatality2", 1)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, the bonus drop script runs ownerless
			Stop

		Death.Fatality4:
			TNT1 A 0 A_GiveToTarget("ImpFatality4", 1)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, the bonus drop script runs ownerless
			Stop
			
		GotoStealthKill:
			TROO A 1
			TNT1 A 0 A_GiveToTarget("SKImp")
			TNT1 A 0 A_GiveToTarget("GoSpecial", 1)
			TNT1 A 0 A_GiveToTarget("GoFatality", 1)
			TROO A 1 A_Die("Stealthy")
			Stop
		Death.Stealthy:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		Pain.Melee:
			TNT1 D 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 42)
			TROO A 4
			TNT1 A 0 A_JumpIfInventory ("SKImp", 1, "GotoStealthKill")
			TROO A 4 A_Pain
			TNT1 A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")			
			Goto SeeContinue
			
		Pain.Stealth:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Pain
			TNT1 A 0 A_JumpIfInventory ("SKImp", 1, "GotoStealthKill")
			TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "GroundExecution")
			Goto See
			
		GroundExecution:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("ExecuteDownedImp", 1)
			TNT1 A 0 A_GiveToTarget("GoSpecial", 1)
			TNT1 A 0 A_Die("Vanish")
			Stop
			
		Death.Vanish:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop

		Pain.Cut:
		Pain.Saw:
			TNT1 A 0
			TNT1 A 0 A_Stop
		Pain:
			TNT1 A 0
			TNT1 A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_TakeInventory ("HitLeg", 10)
			TNT1 A 0 A_JumpIfInventory("IsDown", 1, "Pain.IsDown")
			//TNT1 D 0 A_SpawnItem("HeadshotTarget4", 18, 48, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 3, 42)
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TROO H 3
			TROO H 3 A_Pain
			TNT1 A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")				
			Goto SeeContinue
		
		Pain.IsDown:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -15 /*-20*/, 0, 11)
			ID11 B 1
			ID11 B 5 A_Pain
			"----" A 0 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			Goto GetUp
			

		Pain.KillMe:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 HealThing(1)
			Goto Missile		
		Pain.Taunt:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 HealThing(1)
			TNT1 A 0 A_GiveInventory("Enraged", 1)
			Goto Missile
		Death.KillMe:
		Death.Taunt:
		Death.Avoid:
			//TNT1 A 0 A_ChangeFlag("SOLID", 0)
			//TNT1 A 0 A_SpawnItem("Imp")
			//Stop
			//***Che: too hacky! Turns an 1-hp imp into a healthy imp, his TID and special lost.
			//  better just die -- say, the nearly dead demon tried getting angry but got an aneurism.
			
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			Goto Death

		Pain.Shrapnel:
			TNT1 A 0
			TNT1 A 0 A_TakeInventory ("HitLeg", 10)
			TNT1 A 0 A_SetUserVar("user_knows_what_grenade_is", 1)
		
		Pain.Head:
		Pain.HeadStun:
		Pain.HeadPlasma:
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_FaceTarget
			////TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 0, 40,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 40)
			TROH Q 3 A_Pain
			TROH R 3 A_FaceTarget
			////TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 12, 31,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 31)
			TROH SSSSSSSSSS 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			//TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 12, 31,0)
			TROH SSSSSSSSSS 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")				
			Goto SeeContinue
		Duck:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Pain")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 29) 
			// body hitbox height = 48 - headbox height = 18 - 1 = 29
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			TROH SSSSSSSSSS 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1) // player ssg short-range tracer relayed by headbox)
			TNT1 A 0 A_Jump(128, "LeapBack")
			Goto Missile

		Pain.FriendlyExplosion:
		Pain.ExplosiveImpact:
		Pain.Explosive:
		Pain.ExtremePunches:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
			TNT1 A 0 A_Pain
			TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Pain")
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TNT1 A 0 A_GiveInventory("IsDown", 1)
			TNT1 A 0 ThrustThingZ(0,40,0,1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 4, 34)
			IZD4 KKKKLLLL 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			Goto FallingAfterImpact
			
		Pain.Slide:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
			TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			TNT1 A 0 A_ChangeFlag("GHOST", 1)
			TNT1 A 0 A_ChangeFlag("THRUGHOST", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 4, 34)
			IZD4 K 1 A_Pain
			TNT1 A 0 A_GiveInventory("IsDown", 1)
			TNT1 A 0 ThrustThingZ(0,50,0,1)
			IZD4 K 1 A_facetarget
			IZD4 K 3
			IZD4 K 3 A_Recoil(-5)
			IZD4 L 2
			"----" AAA 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			Goto FallingAfterImpact

		Pain.Kick:
		Pain.HeavyImpact:
		Pain.Stomp:
		Pain.BlackHole:
		Pain.Bfg10k: //***Che changed damage type from extreme to custom		
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
			TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			TNT1 A 0 A_ChangeFlag("GHOST", 1)
			TNT1 A 0 A_ChangeFlag("THRUGHOST", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 4, 34)
			IZD4 K 1 A_Pain
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			TNT1 A 0 A_GiveInventory("IsDown", 1)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			IZD4 K 1 A_facetarget
			IZD4 K 2 ThrustThing(angle*256/360+128, 5, 0, 0)
			"----" AA 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("GHOST", 0)
			TNT1 A 0 A_ChangeFlag("THRUGHOST", 0)
			IZD4 L 2
			"----" AAA 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitchOnPain")
			TNT1 A 0 A_TakeInventory("DuckYouFool", 1)
			Goto FallingAfterImpact
			
		FallingAfterImpact:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 4, 30)
			IZD4 L 1 A_GiveInventory ("FallingHeight", 1)
			"----" AAA 2 A_JumpIf((user_is_fish && waterlevel < 2) || (!user_is_fish && waterlevel >= 2), "FishSwitch")
			IZD4 L 1 A_CheckFloor ("GetUp")
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			NULL A 0 A_JumpIf (momz == 0, "GetUp")
			Loop
			
		GetUp:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory ("FallingHeight", 7, "FallingDie")
			MARN A 0 A_SpawnItem("bdbodythud")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 17)
			IZD4 M 1
			
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")
			TNT1 A 0 A_ChangeFlag("GHOST", 1)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("GHOST", 0)
			TNT1 A 0 A_ChangeFlag("THRUGHOST", 0)
			TNT1 A 0 A_ChangeFlag("FORCEXYBILLBOARD", 1)
			TNT1 A 0 A_GiveInventory("ISDOWN", 1)
			IZD4 MMMMMMMM 5 A_JumpIf(momz < 0, "FallingAfterImpact")
			TNT1 A 0 A_TakeInventory("ISDOWN", 1)
			TNT1 A 0 A_ChangeFLag("USESPECIAL", 0)
			TNT1 A 0 A_ChangeFlag("FORCEXYBILLBOARD", 0)
			TNT1 A 0 A_TakeInventory("FallingHeight", 100)
			
			TNT1 A 0 A_TakeInventory("IsDown", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 32)
			IZD4 NO 7
			TNT1 A 0 A_TakeInventory ("DuckYouFool", 1)
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")			
			Goto SeeContinue
			 
		
		FallingDie:
			TNT1 A 0
			TNT1 A 0 A_Stop
			TNT1 A 0 A_CustomMissile("BodyCrash1", 10)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 17)
			IZD4 M 10
			Goto Getup+17
		
		
		Death.Fall:
			TROO M 1
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBLocking
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 AAAA 0 A_CustomMissile ("XDeath1", 32, 0, random (0, 360), 2, random (50, 130))
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TROO M -1
			Stop
		
		
		
		Active:
			TNT1 A 0
			
			TNT1 A 0 A_GiveToTarget("ExecuteDownedImp", 1)
			TNT1 A 0 A_GiveToTarget("GoSpecial", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 17)
			IZD4 M 0
			IZD4 MMMMMM 2 A_JumpIfInTargetInventory("IsExecutingOnAir", 1, "FinishActive")
			TNT1 A 0 A_JumpIfInTargetInventory("ExecuteBashWall", 1, "FinishActive")
			TNT1 M 1
			TNT1 A 0 A_JumpIfInTargetInventory("ExecuteStompWall", 1, "GetUp")
		FinishActive:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
			TNT1 A 0 A_ChangeFlag("USESPECIAL", 0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			

		

		PainHurt:
		
			TNT1 A 0 A_TakeInventory("SKImp", 1)
			//TNT1 D 0 A_SpawnItem("HeadshotTarget4", 18, 48, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 3, 42)
			TROO H 1
			TROO H 1 A_Pain
			TNT1 A 0 A_JumpIf(user_is_fish && waterlevel < 2, "FishOutOfWater") // was thrown out by an explosion or the water was drained
			TNT1 A 0 A_JumpIf(!user_is_fish && waterlevel >= 2, "Swim")			
			Goto SeeContinue
			
		Death.MonsterShotgunBullet:
		Death.Shotgun:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("HitLeg", 2, "Death.Leg") 
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_SpawnItem("MuchBlood", 0, 40)
			TNT1 A 0 A_JumpIf(waterlevel > 1, "UnderwaterDeath") //***Che: integrating ImpFish
			
			TNT1 A 0 A_CustomMissile ("SuperWallRedBlood", 42, 0, random (170, 190), 2, random (0, 20))
			TNT1 A 0 A_ChangeFlag("SLIDESONWALLS", 0)
			TNT1 A 0 A_Jump(42, "Death.Shotgunontheface")
			TNT1 A 0 A_JumpIfCloser(100, "Death.bLAST")
			TNT1 A 0 A_JumpIfCloser(320, "Death.Shotgunontheface")
			Goto Death
			
		Death.Shotgunontheface:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Stop
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			
			TNT1 A 0 A_NoBlocking
			TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 40, 0, random (0, 360), 2, random (30, 90))
			TNT1 A 0 A_Jump(128, "DeathJump")
			TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
			TNT1 A 0 A_Jump(32, "Death.ARm")
			TNT1 A 0 A_Jump(64, "DeathNoGuts")
			TNT1 A 0 A_Jump(64, "Death.Blast")
			TNT1 A 0 A_Jump(128, "DeathShotgunontheface2")
			TNT1 A 0 A_Stop
			TNT1 A 0 A_Pain
			TROO H 1 A_FaceTarget
			TNT1 A 0 A_Recoil(13)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 A_Scream
			TNT1 AA 0 A_CustomMissile ("XDeath1", 35, 0, random (0, 360), 2, random (0, 160))
			TR06 ABCDE 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TR06 FGHIJK 4 A_JumpIf((MomY == 0), "DSFStop")
			Goto DSFStop+1
			
		DSFStop:
			TNT1 A 0 A_SpawnItem("Ploft3")
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TNT1 A 0 A_CustomMissile ("SuperWallRedBlood", 2, 0, random (170, 190), 2, random (0, 0))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpTR06K")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImpTR06K",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
		
		DeathShotgunontheface2:	
			TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
			TNT1 A 0 A_Stop
			TNT1 A 0 A_Pain
			TROO H 1 A_FaceTarget
			TNT1 A 0 A_Scream
			TNT1 A 0 A_Recoil(13)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 40, 0, random (0, 360), 2, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("XDeath1", 35, 0, random (0, 360), 2, random (0, 160))
			TR06 LMNO 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TR06 QRSTU 4 A_JumpIf((MomY == 0), "DSFStop2")
			Goto DSFStop2+1
			
		DSFStop2:
			TNT1 A 0 A_SpawnItem("Ploft3")
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TNT1 A 0 A_CustomMissile ("SuperWallRedBlood", 2, 0, random (170, 190), 2, random (0, 0))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpTR06V")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImpTR06V",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop

		Death:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("HitLeg", 1, "Death.Leg") 
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_JumpIf(waterlevel > 1, "UnderwaterDeath") //***Che: integrating ImpFish
			TNT1 A 0 A_Jump(32, "Death.Arm")
			TNT1 A 0 A_Jump(24,"DeathNoGuts")
			TNT1 A 0 A_Jump(24,"Death20alt")
		Death.Minor:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Jump(128, "DeathMirror")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TR97 A 8 
			TR97 B 8 A_Scream
			TR97 C 6
			TR97 D 6 A_NoBlocking
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,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")
			Goto Death.Minor			
			
		Death.Down:
		Death.Trample:
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Stop
			TNT1 AAA 0 A_CustomMissile ("XDeath1", 2, 0, random (0, 360), 2, random (0, 40))
			ID11 DC 6
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		Death.Fire:
		Death.Flames:
		Death.FallInLava:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			//TNT1 A 0 A_SpawnItem("BurningImpRunning", 0, 10)
			TNT1 A 0 A_SpawnItemEx ("BurningImpRunning",0,0,10,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		Death.Burn: // imp fireball from infighting
			TNT1 A 0
			TNT1 A 0 A_Jump(48, "Death.Fire")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TROO LLLL 2 A_CustomMissile ("FlameTrails", 25, 0, random (0, 360), 2, random (50, 130))
			BOSB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2 A_CustomMissile ("FlameTrails", 15, 0, random (0, 360), 2, 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 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 20 A_CustomMissile ("SmallSmoke", 25, 0, random (0, 360), 2, random (70, 110))
			BOSB F -1
			Stop			
			
		Death20alt:
			TNT1 A 0
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TROD ABCD 6
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItemEx ("ImpDyingOfBloodLoss", 0,0,7,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_SpawnItemEx ("ImpDyingOfBloodLoss",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,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 A_CustomMissile ("XDeathImpArm", 35, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 40, 0, random (0, 360), 2, random (30, 90))
			TR08 A 4 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
			//TNT1 A 0 A_SpawnItemEx ("FBD_DyingImpNoArm",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_SpawnItemEx ("FBD_DyingImpNoArm",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop

		Death.Leg:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_JumpIfInTargetInventory("HeavyAutomaticWeapon", 1, "Death.LegMassacre")
			TNT1 A 0 A_JumpIfInTargetInventory("RandomHeadExploder", 1, "HeadExploder")
			TNT1 A 0 A_Jump(64, "DeathLeg2")
			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 35, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 10, 0, random (0, 360), 2, random (30, 90))
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TR09 A 4
			TR09 A 3 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
			TR09 B 3 A_Scream
			TR09 C 3 A_NoBlocking
			//TNT1 A 0 A_SpawnItemEx ("FBD_DyingImpNoLeg",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_SpawnItemEx ("FBD_DyingImpNoLeg",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			
			Stop
		
		DeathLeg2:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Fall
			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 35, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("BloodMistBig", 10, 0, random (0, 360), 2, random (30, 90))
				TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 10, 0, random (0, 360), 2, random (30, 90))
			//TNT1 A 0 A_SpawnItem("ImpSaciLol")
			TNT1 A 0 A_SpawnItemEx ("ImpSaciLol",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			
			Stop

		

		DeathJump:
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
			TNT1 A 0 A_ChangeFLag("SLIDESONWALLS", 0)
			TNT1 A 0 ThrustThingZ(0,40,0,1)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_Recoil (10)
			ID11 A 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
			ID11 A 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
			ID11 B 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
			ID11 B 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
			ID11 C 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
			ID11 C 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
			ID11 D 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
			ID11 D 4 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
			TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			
			
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			 
			Stop
		TakeASit:
			TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 6, 0, random (170, 190), 2, random (0, 40))
			ID11 B 5
			TNT1 A 0 A_SpawnItem("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItemEx("FBD_DeadImp_Slumped", 10)
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Slumped",10,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop	


		Death.Melee:
			TNT1 A 0 A_JumpIfInventory ("SKImp", 1, "StealthKill")
		Death.Kick:
		Death.BlackHole:
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 ThrustThingZ(0,30,0,1)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_Recoil (8)
			ID11 ABCD 8
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		HeadExploder:
			TNT1 A 0
			TNT1 A 0 A_Jump(72, "Death.HeadExplode")
			Goto DeathHeadMinor2
			
		Death.head:
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			//TNT1 A 0 A_JumpIfInTargetInventory("HasPlasmaWeapon", 1, "Death.Plasma")
			TNT1 A 0 A_CustomMissile ("BloodMistBig", 50, 0, random (0, 360), 2, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 50, 0, random (0, 360), 2, random (30, 90))
			//TNT1 A 0 A_JumpIfInTargetInventory("HasCutingWeapon", 1, "Death.Decaptate")
			TNT1 A 0 A_JumpIfHealthLower(-60, "Death.HeadExplode")
			TNT1 A 0 A_JumpIfInTargetInventory("RandomHeadExploder", 1, "HeadExploder")
			TNT1 A 0 A_JumpIfInTargetInventory("HeavyAutomaticWeapon", 1, "DeathHeadMinor2")
			TNT1 A 0 A_Jump(16, "DeathHeadminor2")
			
		Death.HeadMinor:
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_PlaySound("misc/xdeath4", CHAN_VOICE)
			TNT1 AA 0 A_CustomMissile ("Brains1", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains3", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains6", 50, 0, random (0, 360), 2, random (0, 160))
			//TNT1 A 0 A_CustomMissile ("Brains7", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("SmallBrainPieceFast", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
			TNT1 AA 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
			
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TROH K 5 A_NoBlocking
			TROH L 5 A_Scream
			TROH M 5
			TROH N 5 
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_MinorHeadDeadFront")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_MinorHeadDeadFront",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)			
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		DeathHeadminor2:
			TNT1 A 0
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_PlaySound("misc/xdeath4", CHAN_VOICE)
			TNT1 AA 0 A_CustomMissile ("Brains1", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains3", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains6", 50, 0, random (0, 360), 2, random (0, 160))
			//TNT1 A 0 A_CustomMissile ("Brains7", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("SmallBrainPieceFast", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
			TNT1 AA 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("BrainBlood", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 AAA 0 A_CustomMissile ("Teeth", 50, 0, random (0, 360), 2, random (0, 160))
			
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			//TNT1 A 0 A_SpawnItem("FBD_DyingImpHalfFace")
			TNT1 A 0 A_SpawnItemEx ("FBD_DyingImpHalfFace",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,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:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			//TNT1 A 0 A_SpawnItem("ImpHeadExplode", 0, 50)
			TNT1 A 0 A_SpawnItemEx ("ImpHeadExplode",0,0,50,0,0,0,0,SXF_NOCHECKPOSITION,0,0)
			
			TROH AAAA 2 A_CustomMissile ("Brutal_LiquidBlood2", 50, 0, random (0, 360), 2, random (60, 120))
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TROH BBBB 2 A_CustomMissile ("Brutal_LiquidBlood2", 40, 0, random (0, 360), 2, random (60, 120))
			TNT1 A 0 A_XScream
			TNT1 A 0 A_Jump(32, "Deathchickenhead")
			//TNT1 A 0 A_SpawnItem("FBD_DyingImpNoHeadClean")
			TNT1 A 0 A_SpawnItemEx ("FBD_DyingImpNoHeadClean",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)	
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		Death.StompWall:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			//TNT1 A 0 A_SpawnItem("ImpHeadExplode", 0, 30)
			TNT1 A 0 A_SpawnItemEx ("ImpHeadExplode",0,0,30,0,0,0,0,SXF_NOCHECKPOSITION,0,0)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_XScream
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Slumped_NoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Slumped_NoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the scripts and actors time to run and access us
			Stop
			
		Deathchickenhead:
			
			TNT1 A 0
			TROH AAAA 2 A_CustomMissile ("Brutal_LiquidBlood2", 50, 0, random (0, 360), 2, random (60, 120))
			//TNT1 A 0 A_SpawnItem("FBD_DyingImpNoHeadLikeChicken")
			TNT1 A 0 A_SpawnItemEx ("FBD_DyingImpNoHeadLikeChicken",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the script time to run
			Stop

/*			
			TNT1 A 0 A_PlaySound("misc/xdeath2c", CHAN_VOICE)
			TROH FFFGGGHHHIII 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (10, 90))
			
					TNT1 A 0 A_PlaySound("misc/xdeath2c", CHAN_VOICE)
			TROH FFFGGGHHHIII 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (10, 90))
			
					TNT1 A 0 A_PlaySound("misc/xdeath2c", CHAN_VOICE)
			TROH FFFGGGHHHIII 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (10, 90))
			
					TNT1 A 0 A_PlaySound("misc/xdeath2c", CHAN_VOICE)
			TROH FFFGGGHHHIII 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (10, 90))
			
							TNT1 A 0 A_PlaySound("misc/xdeath2c", CHAN_VOICE)
			TROH FFFGGGHHHIII 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (10, 90))
			
							TNT1 A 0 A_PlaySound("misc/xdeath2c", CHAN_VOICE)
			TROH FFFGGGHHHIII 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (10, 90))
			
					
			
			
			TROH CCCCCCCC 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (60, 120))
			TROH DDD 2 A_CustomMissile ("Brutal_LiquidBlood2", 20, 0, random (0, 360), 2, random (60, 120)) 
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TROH EEEEEEEEEEEEEEEEEEEEEEEEEEEEE 2 A_CustomMissile ("Brutal_LiquidBlood2", 15, 0, random (0, 360), 2, random (15, 40))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 3
			Stop
*/			
			
			
		DeathMirror:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)			
			
			TROO V 9
						
			TROO W 9 A_Scream

			TROO X 8 A_NoBlocking
			TROO Y 8 
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpMinorHeadShot")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImpMinorHeadShot",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop

		Death.decaptate:
		Death.CCFT:
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_CustomMissile ("BloodMistBig", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_PlaySound("misc/xdeath4", CHAN_VOICE)
			TNT1 A 0 A_CustomMissile ("XDeathImpHeadBeheaded", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (40, 90))
			TNT1 A 0 A_Jump(32, "Deathchickenhead")
			//TNT1 A 0 A_SpawnItem("FBD_DyingImpNoHeadClean")
			TNT1 A 0 A_SpawnItemEx ("FBD_DyingImpNoHeadClean",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the script time to run
			Stop
		
			
		Death.Minigun:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_JumpIf(waterlevel > 1, "UnderwaterDeath") //***Che: integrating ImpFish
			TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Death.Down")
			TNT1 A 0 A_Jump(32,"DeathNoGuts")
			TNT1 A 0 A_Jump(96, "Death")
/* //***Che: dafug, man?			
			Goto Death.Minigun
			
		Death.Minigun:
*/		
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 O 0 A_NoBlocking
			TNT1 A 0 A_JumpIf(waterlevel > 1, "UnderwaterDeath") //***Che: integrating ImpFish
			//TNT1 A 0 A_SpawnItem ("BrutalizedImp1", 1)
			TNT1 A 0 A_SpawnItemEx ("BrutalizedImp1",1,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)	
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
			
		Death.LegMassacre:
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 35, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), 2, random (0, 160))
			TR09 A 8 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TR09 B 8 A_Scream
			TNT1 A 0 A_NoBlocking
			//TNT1 A 0 A_SpawnItem ("ImpBrutalizedWithNoLeg")
			TNT1 A 0 A_SpawnItemEx ("ImpBrutalizedWithNoLeg",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
			
		Death.Desintegrate:
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_XScream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			//TNT1 A 0 A_SpawnItem("DesintegratedHuman")
			//TNT1 A 0 A_SpawnItemEx ("DesintegratedHuman",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0,0)
			TNT1 A 0 A_SpawnItemEx("DesintegratingImp", 0,0,0, momx,momy,momz, 0,SXF_NOCHECKPOSITION | SXF_ABSOLUTEVELOCITY)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
/*			
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TGIB ABCDEFGHIJKLMNOPQ 3 
			TGIB Q -1
			Stop
*/			
			
		Death.Slime:
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_PlaySound("burn", CHAN_VOICE)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx("MeltingImp", 0,0,0, momx,momy,momz, 0,SXF_NOCHECKPOSITION | SXF_ABSOLUTEVELOCITY)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
			
		Death.cut:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("HitLeg", 2, "Death.LegMassacre")
			TNT1 A 0 A_JumpIfInventory("HitLeg", 1, "Death.Leg")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_XScream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 O 0 A_NoBlocking
			TNT1 A 0 A_JumpIf(waterlevel > 1, "UnderwaterDeath") //***Che: integrating ImpFish
			TNT1 A 0 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
			TROG A 2 A_CustomMissile ("RipImp", 0, 0, random (0, 360), 2, random (0, 160))
			TROG AAA 4 A_SpawnItem ("MuchBlood", 0, 30)
			TROG BCDEFGH 8
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItem ("FBD_DeadImp_Half", 5)
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Half",5,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
			

		UnderwaterDeath: //***Che: integrating ImpFish
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TROO VW 4
			Goto Sink
		Sink:
			TROO X 4 A_CheckFloor ("Sunken")
			TNT1 A 0 ThrustThingZ (0,7,1,0)
			TROO X 4 A_CheckFloor ("Sunken")
			TNT1 A 0 ThrustThingZ (0,7,1,0)
			TNT1 A 0 A_CustomMissile ("Underblood1", 32, 0, random (0, 360), 2, random (0, 160))
			Loop
		Sunken:
			TROO YYYYYYY 8 A_CustomMissile ("Underblood1", 32, 0, random (0, 360), 2, random (0, 160))
			TROO Y -1
			Stop
			
			
		Death.HKFT:
		Death.Saw:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("HitLeg", 2, "Death.LegMassacre")
			TNT1 A 0 A_JumpIfInventory("HitLeg", 1, "Death.Leg")			
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_Jump(32, "Death.Arm")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_XScream
			TNT1 AA 0 A_CustomMissile ("Guts", 32, 0, random (0, -210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("XDeath1", 32, 0, random (0, -210), 2, random (0, 40))
			TNT1 A 0 A_CustomMissile ("XDeathHalfImpUpperPart32", 32, 0, random (0, -210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 A 0 A_CustomMissile ("XDeathImpHead", 32, 0, random (0, -210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("Xdeath3", 16, 0, random (0, -210), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("FBD_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("FBD_Bloodmist", 40, 0, random (0, 360), 2, random (30, 90))
			TNT1 A 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
			TRO3 A 6 A_Stop
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TRO3 BBBBBBBBBB 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (30, 60))
			TRO3 CCC 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (10, 40))
			TRO3 DD 3 A_CustomMissile ("Brutal_LiquidBlood2", 6, 0, random (0, 360), 2, random (30, 60))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpTRO3E")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImpTRO3E",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop	

		DeathNoGuts:
			TNT1 AAAAA 0
			TNT1 AA 0 A_CustomMissile ("Guts", 24, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 40, 0, random (0, 360), 2, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("XDeath1", 30, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			IMPC A 6 A_Scream
			IMPC B 1 A_NoBlocking
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItem ("FBD_DyingImp", 2)
			TNT1 A 0 A_SpawnItemEx ("FBD_DyingImp",2,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop

		Death.Plasma: 
		Death.Plasma2:
		XDeath.Electric:
		Death.HeadPlasma:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Stop
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			PBR1 A 6 A_XScream
			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), 2, random (0, 180))
			TNT1 AAA 0 A_CustomMissile ("BloodMistSmall", 32, 0, random (0, 360), 2, random (0, 180))
			TNT1 AAA 0 A_CustomMissile ("FBD_FlyingBlood", 32, 0, random (0, 360), 2, random (0, 180))
			PBR1 B 6 A_NoBlocking
			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))
			PBR1 CCDD 3 A_CustomMissile ("BluePlasmaFireNonStatic", 32, 0, random (0, 360), 2, random (0, 180))
			PBR1 EEFF 3 A_CustomMissile ("BluePlasmaFireNonStatic", 24, 0, random (0, 360), 2, random (0, 180))
			PBR1 GG 3 A_CustomMissile ("BluePlasmaFireNonStatic", 22, 0, random (0, 360), 2, random (0, 180))
			PBR1 H -1
			Stop
		
		Death.SuperPlasma:
		Death.Bfg10k: //***Che changed damage type from extreme to custom		
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_XScream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			
			TNT1 A 0 A_NoBlocking
			XBRN AA 2 BRIGHT A_SpawnItem("BlueFlare",0,43)
			TNT1 AAAA 0 A_CustomMissile ("FBD_Blood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			
			TNT1 A 0 A_CustomMissile ("XDeathBurnedImpArm", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedImpLeg", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat2", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat3", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))

			XBRN BB 2 BRIGHT A_SpawnItem("BlueFlare",0,43)
			TNT1 A 0 A_CustomMissile ("FBD_Blood", 30, 0, random (0, 360), 2, random (0, 160))
			XBRN CC 2 BRIGHT A_SpawnItem("BlueFlare",0,43)
					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))
			TNT1 A 0
			
			TNT1 A -1 //***Che: allow raising/respawning
			Stop
			
		Death.GreenFire:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_XScream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 AAAA 0 A_CustomMissile ("FBD_Blood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			
			
			TNT1 A 0 A_CustomMissile ("XDeathBurnedImpLeg", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("XDeathBurnedMeat", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat2", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat3", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			
			EXPL AAAAAAAAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("GreenFlameTrails", 50, 0, random (0, 360), 2, random (0, 360))
			XBRN AAAA 2 BRIGHT A_SpawnItem("GreenFlare",0,43)
			
			TNT1 A -1 //***Che: allow raising/respawning
			Stop

		Death.Blast:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_Jump(12, "Death.Arm")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Jump(128, "Death.Blast2")
			TNT1 A 0 A_XScream
			TNT1 AAA 0 A_CustomMissile ("Guts", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("XDeath1", 32, 0, random (150, 210), 2, random (0, 40))
			TNT1 A 0 A_CustomMissile ("XDeathImpArm", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 A 0 A_CustomMissile ("XDeathImpHead", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("Xdeath3", 16, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("FBD_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
			TRO3 A 6 A_Stop
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TRO3 BBBBBBBBBB 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (30, 60))
			TRO3 CCC 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (10, 40))
			TRO3 DD 3 A_CustomMissile ("Brutal_LiquidBlood2", 6, 0, random (0, 360), 2, random (30, 60))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpTRO3E")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImpTRO3E",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
		
		Death_Blast2:
			//TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_XScream
			//TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			//TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			//TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			//TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 AAA 0 A_CustomMissile ("Guts", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("XDeath1", 32, 0, random (150, 210), 2, random (0, 40))
			TNT1 A 0 A_CustomMissile ("XDeathImpArm", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 A 0 A_CustomMissile ("XDeathImpHead", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("Xdeath3", 16, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("FBD_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
			TRO4 A 6 A_Stop
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TRO4 BBBBBBBBBB 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (30, 60))
			TRO4 CCC 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (10, 40))
			TRO4 DD 3 A_CustomMissile ("Brutal_LiquidBlood2", 6, 0, random (0, 360), 2, random (30, 60))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpTRO4E")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImpTRO4E",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop

		Death.SSG:
		Death.Railgun:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("HitLeg", 1, "Death.Leg")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_Stop
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			IZD1 E 1 A_Pain
			IZD1 E 1 A_FaceTarget
			TNT1 AA 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
			TNT1 AAA 0 A_CustomMissile ("FBD_Bloodmist", 40, 0, random (0, 360), 2, random (30, 90))
			
			TNT1 AAA 0 bright A_CustomMissile ("SuperGoreSpawner", 35, 0, random (170, 190), 2, random (0, 40))
			//TNT1 A 0 A_CustomMissile ("MeatDeath", 0, 0, random (0, 360), 2, random (0, 160))
			//TNT1 AA 0 A_CustomMissile ("XDeath1", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AA 0 A_CustomMissile ("XDeath2", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 A 0 A_CustomMissile ("XDeath3", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("Guts", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			//TNT1 AAAA 0 A_CustomMissile ("FBD_FlyingBlood", 32, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			//TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			//TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			//TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			//TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AA 0 A_CustomMissile ("XDeathImpArm", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 A 0 A_CustomMissile ("XDeathImpHead", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			IZD1 EEFFG 6
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpIZD1H")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImpIZD1H",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
			
		XDeath:
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_JumpIf(waterlevel > 1, "UnderwaterAsplode") //***Che: integrating ImpFish
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_XScream
			TNT1 A 0 A_FaceTarget
			TNT1 AAA 0 A_CustomMissile ("XDeath1", 42, 0, random (0, 190), 2, random (10, 60))
			TNT1 AAA 0 A_CustomMissile ("XDeath3", 42, 0, random (0, 190), 2, random (10, 60))
			TNT1 A 0 A_CustomMissile ("XDeath2", 42, 0, random (0, 190), 2, random (10, 60))
			TNT1 A 0 A_CustomMissile ("XDeath4", 42, 0, random (0, 190), 2, random (10, 60))
			TNT1 A 1 A_CustomMissile ("ImpXDeath", 0, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			
			// ImpXDeath is a pure gore spawner
			TNT1 A -1 //***Che: allow raising/respawning
			Stop
			
			
		UnderwaterAsplode:  //***Che: integrating ImpFish
			TNT1 A 0
			TNT1 A 0 A_CustomMissile ("XDeath1", 32, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2", 32, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
			//TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			//TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 AAAA 0 A_CustomMissile ("Brains1", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains3", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains6", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains7", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("SmallBrainPieceFast", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
			TNT1 AAAA 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAAAAA 0 A_CustomMissile ("BrainBlood", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 AAAAAA 0 bright A_CustomMissile ("SuperGoreSpawner", 5, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_CustomMissile ("XDeathImpArm", 35, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3", 40, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 32, 0, random (0, 360), 2, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
			Goto FloatXDEath
		
		FloatXDeath:
			ID17 C 5 A_CheckFloor ("FloatXDeath_Rest")
			TNT1 A 0 A_CustomMissile ("Underblood3", 32, 0, random (0, 360), 2, random (0, 160))
			BLUD C 0 ThrustThingZ (0,7,1,0)
			ID17 DEF 5 A_CheckFloor ("FloatXDeath_Rest")
			TNT1 A 0 A_CustomMissile ("Underblood3", 32, 0, random (0, 360), 2, random (0, 160))
			BLUD C 0 ThrustThingZ (0,7,1,0)
			Loop
			
		FloatXDeath_Rest:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx ("ThisImpGotFuckedHard",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERTRANSLATION,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory 
			Stop			
		
		Death.ExtremePunches:
		Death.DHFT:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			//TNT1 A 0 A_JumpIfInTargetInventory("HeavyStrikeRight", 1, "HeavyPunchRight")
			//TNT1 A 0 A_JumpIfInTargetInventory("HeavyStrikeLeft", 1, "HeavyPunchLeft") 
			//TNT1 A 0 A_JumpIfInTargetInventory("HeavyStrikeUpper", 1, "HeavyPunchUpper")
			TNT1 A 0 A_XScream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_CustomMissile ("ExtremePunchedImp", 8, 0, random (175, 185), 2, random (10, 20))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory 
			Stop
		Death.Shrapnel:
			TNT1 A 0
			TNT1 A 0 A_JumpIfHealthLower(-50, 4)
			TNT1 A 0 A_SpawnItem("MuchBlood", 0, 32)
			TNT1 A 0 ThrustThingZ(0, 30, 0, 0)
			TNT1 A 0 A_Jump(128, "Death.Head")
			Goto Death
			TNT1 AA 0
			TNT1 A 0 A_Jump(256, "Death.ExplosiveImpact", "Death.Leg")
			Goto Death
			
		Death.ExplosiveImpact:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_JumpIf(waterlevel > 1, "UnderwaterAsplode") //***Che: integrating ImpFish
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_XScream
			TNT1 A 0 A_SpawnItemEx("MuchBlood2", 0, 0, 40)
			TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
			TNT1 A 0 ThrustThingZ(0,25,0,1)
			TNT1 A 0 A_JumpIfHealthLower(-10, 2)
			TNT1 A 0 A_Jump(256, "Death.Leg", "Death.ARm")
			TNT1 A 0 A_Jump(32,"Death.LandMine")
			
			TNT1 AAAA 0 A_CustomMissile ("Brains1", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains3", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains6", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("Brains7", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("SmallBrainPieceFast", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
			TNT1 AAAA 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathImpArm", 35, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3", 40, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 ThrustThingZ(0,15,0,1)
			ID17 AB 5
			ID17 CDEF 5 A_CheckFloor ("Dead.ExplosiveImpact")
			ID17 EEEEEEEEEE 5 A_CheckFloor ("Dead.ExplosiveImpact")
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpID17G")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImpID17G",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
			
		Dead.ExplosiveImpact:
			TNT1 A 0
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			//TNT1 A 0 A_SpawnItem ("ThisImpGotFuckedHard")
			TNT1 A 0 A_SpawnItemEx ("ThisImpGotFuckedHard",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_SpawnItem ("Ploft")
			TNT1 AAAA 0 A_SpawnItem ("Blood")
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the script time to run
			Stop
			
			
		Death.Landmine:
		Death.LandMine2:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0,15,0,1)
		Death.LegInTheAir:
			TNT1 A 0 ThrustThingZ(0,35,0,1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)

			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
		
			ID13 A 1 A_Scream
			ID17 HI 4
			ID17 JKLMN 4 A_CheckFloor ("Dead.Landmine")
			ID17 NNNNNNNN 4 A_CheckFloor ("Dead.Landmine")
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoLeg")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoLeg",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
		
		Dead.Landmine:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TR09 E 0
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TNT1 A 0 A_SpawnItem ("Ploft")
			TNT1 AAAA 0 A_SpawnItem ("Blood")
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoLeg")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoLeg",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop		
			
		Death.Stomp:
			// if 15% random chance or the cyberdemon is below us, be catapulted violently
			TNT1 A 0 A_JumpIf(Random(0,100) < 15 || CallAcs("GetZDeltaToTarget") < - 32, "Death.ExtremePunches") 
			TNT1 A 0 A_Scream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0) //***Che: integrating impfish
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
			TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
			TNT1 A 0 A_NoBlocking
			TROO KL 2
			TNT1 AA 0 A_SpawnItem("MeatDeathSmall")
			TNT1 AAA 0 bright A_CustomMissile ("SuperGoreSpawner", 5, 0, random (0, 360), 2, random (30, 180))
			TNT1 AAAA 0 bright A_CustomMissile ("XDeath1", 5, 0, random (0, 360), 2, random (30, 180))
			TNT1 AA 0 bright A_CustomMissile ("XDeath2b", 55, 0, random (0, 360), 2, random (30, 180))
			TNT1 AA 0 bright A_CustomMissile ("XDeath3b", 55, 0, random (0, 360), 2, random (30, 180))
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
			TNT1 A 0 A_SpawnItem ("CrushedRemains")
			TNT1 A 1
			TNT1 A 1 A_XScream
			
			TNT1 A -1 //***Che: allow raising/respawning
			Stop
			
		Crush:
			TNT1 A 0
			TNT1 AAAAA 0 A_CustomMissile ("Brutal_FlyingBloodTrail8", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAAA 0 A_SpawnItemEx ("BodyRemovalThing",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 1 A_XScream
			
			//TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the script time to run
			TNT1 A -1 // rezzable
			Stop

		FatalityMarine:
			
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 42) // misses the head but the sprite has no directions
			IPFP ABCD 4
			TNT1 A 0 A_SpawnItemEx ("MarineGotOwnedByImp",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0) // no slaughter optimizations for fatalized players, NOR for monsters fatalized by player
			TNT1 A 0 A_SpawnItemEx("FootStep5", 0, 0, 40, 0, 0)
			IPFP EE 6

			IPFP F 8

			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 34) // misses the head but the sprite has no directions
			IPFP G 8
			TNT1 A 0 A_CustomMissile ("MuchBlood", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP H 8

			IPFP I 8
			TNT1 A 0 A_CustomMissile ("MuchBlood", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP J 8

			IPFP K 8
			TNT1 A 0 A_CustomMissile ("MuchBlood", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP H 8

			IPFP I 8
			TNT1 A 0 A_CustomMissile ("MuchBlood", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP J 8

			IPFP K 8
			TNT1 A 0 A_CustomMissile ("MuchBlood", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP H 8

			IPFP I 8
			TNT1 A 0 A_CustomMissile ("MuchBlood", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP J 8
		   
		   
			IPFP L 8
			TNT1 A 0 A_CustomMissile ("MuchBlood2", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP M 8
			TNT1 A 0 A_CustomMissile ("Guts", 12, 0, random (0, 360), 2, random (0, 40))

			IPFP N 8
			TNT1 A 0 A_CustomMissile ("MuchBlood2", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP O 8
			TNT1 A 0 A_CustomMissile ("Guts", 12, 0, random (0, 360), 2, random (0, 40))

			IPFP L 8
			TNT1 A 0 A_CustomMissile ("MuchBlood2", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP M 8
			TNT1 AA 0 A_CustomMissile ("Guts", 12, 0, random (0, 360), 2, random (0, 40))

			IPFP N 8
			TNT1 A 0 A_CustomMissile ("MuchBlood2", 5, 0, random (0, 360), 2, random (0, 160))
			IPFP O 8
			TNT1 AAA 0 A_CustomMissile ("Guts", 12, 0, random (0, 360), 2, random (0, 40))


			TNT1 A 0 A_TakeInventory("Fatality_Marine",1)
			TNT1 A 0 A_SpawnItem ("GrowingBloodPool")

			Goto See 
			 
		StealthKill:
			TNT1 A 0
			
			//***Che
			//TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, 1)
			//TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, 2)
			//***Che: What was I DRINKING? :((((((
			TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, 1)
			Goto Death
			TNT1 A 0 A_GiveToTarget("GoFatality", 1)
			TNT1 A 0 A_GiveToTarget("GoSpecial", 1)
			TNT1 A 0 A_GiveToTarget("SKImp", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Fall
			TNT1 A 1
			TNT1 A 0 A_Die("Stealthy")
			Stop
		Death.Stealthy:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
		
			
		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("FrozenImp")
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx ("FrozenImp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERSCALE,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
			
		Death.IOS_Frost:
			//TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			//TNT1 A 0 A_ChangeFlag("SOLID", 0)
			//TNT1 A 0 A_SpawnItem("FrozenImp")
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx ("PermafrostImp",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERSCALE,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop			
		
		Death.Massacre:
			Goto Death
			
		
		MakeMonkeyNoises:
			TNT1 A 0 A_GiveInventory("AlreadyPerformedLTGCatCall", 1)
			
			TNT1 A 0 A_PlaySound("imp/monkeynoises", CHAN_VOICE)
			
			TNT1 A 0 A_Jump(256, "MMN1", "MMN2", "MMN3")
			
		MMN1:
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT CDCDCDCDCDCDCDCDCDCDCDCCDCDCDC 4 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 1, 40)
			Goto See
		MMN2:
			TNT1 A 0 A_FaceTarget
			TROT D 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 42)
			TROT D 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 42)
			TROT D 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 42)
			TNT1 A 0 A_FaceTarget
			TROT D 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT D 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 42)
			TROT D 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 42)
			TROT D 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
			TROT F 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 42)
			TROT D 6 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 12, 0, 36)
		
			Goto See
		MMN3:
			TNT1 A 0 A_FaceTarget	
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 32)
			TROT AVAVAVAVAVAVAVAVAVAVAVAVAVAVAV 4 // front only frames, no need to face target
			Goto See
			


		Death.ImpFatalityMarine: //imp's melee damage fom a leap attack, infighting
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DropGrenade")
			TNT1 A 0 A_NoBlocking
			TROO H 1 A_Jump(256, "DeathHeadminor2","Death.Leg","Death.Arm","DeathNoGuts","Death.Arm","Death.decaptate","Death.LegMassacre","Death.Kick","Death.Saw")
			Wait
		
	
	}
}


Actor Imp_PP: FBD_Imp
{
	States
	{
		PotPourriSwap:
			TNT1 A 0
			Goto PotPourriCancel		
	}
}


ACTOR ImpAttack: ZandronumBaronBall //BaronBall
{
	Radius 10
	Height 18
	DamageType Rip
	Projectile 
	Radius 4
	+RANDOMIZE
    Damage (random(20,20))
	+FORCEXYBILLBOARD
    +THRUGHOST
    +BLOODSPLATTER 
	RenderStyle Add
	Alpha 0.6
	HitObituary "$OB_IMPHIT"
    Obituary "$OB_IMPHIT"
	+DONTHURTSPECIES

	SeeSound "None"
	DeathSound "none"
	Decal "none"
    Speed 20
	States
	{
		Spawn:
			TNT1 A 4 BRIGHT
			Stop
		Death: // Wall
		Crash: // Non-bleeding actor
			TNT1 A 0 BRIGHT
			Stop
		XDeath: // Bleeding actor
			TNT1 A 0 A_PlaySound("imp/melee")
			TNT1 A 0 BRIGHT
			Stop		
	}
}


ACTOR ImpAttack2: ImpAttack // for leap attack, induces fatalities
{
    +THRUGHOST
	DamageType ImpFatalityMarine
    Damage (random(10,10))
}

//***Che AFAIR, those target checkers are never used
ACTOR MonsterTargetCheck
{
	Radius 4
	Height 4
    Damage 0
	PROJECTILE
    -BLOODSPLATTER 
	+SEEKERMISSILE
	+THRUSPECIES
	SeeSound "None"
	DeathSound "none"
	Decal "none"
	Species "NonCombatant"
    Speed 300
	States
	{
	Spawn:
		TNT1 AAAAAAAAAAA 1 A_SeekerMissile (99,99)
		Stop
	Death:		
	XDeath:
		TNT1 A 0
		TNT1 A 0 A_JumpIfTargetInLOS("NoSight", 0, JLOSF_PROJECTILE, 50) 
		TNT1 A 0 A_GiveToTarget("CantFire")
		PLAY A 0
		TNT1 A 0 BRIGHT
		Stop
	NoSight:
		TNT1 A 0
		PLAY A 0
		TROO A 0
		TNT1 A 1
		Stop
	}
}

// backported from brutalv22test3, prevents firing fireballs in a crowd,
// if there is something in front of the imp in a range of 60
ACTOR MonsterTargetCheckBD22 
{
	Radius 2
	Height 2
    Damage 0
	PROJECTILE
    -BLOODSPLATTER 
	+SEEKERMISSILE
	+THRUSPECIES
	SeeSound "None"
	DeathSound "none"
	Decal "none"
	Species "Marines"
    Speed 30
	States
	{
		Spawn:
			TNT1 AA 1 A_SeekerMissile (99,99)
			Stop
		Death:		
			TNT1 A 0
			Stop
		XDeath:
			TNT1 A 0
			TNT1 A 0 A_JumpIfTargetInLOS("NoSight", 0, JLOSF_PROJECTILE, 50) 
			TNT1 A 0 A_GiveToTarget("CantFire")
			TNT1 A 0
			TNT1 A 0 BRIGHT
			Stop
		NoSight:
			TNT1 A 0
			PLAY A 0
			TROO A 0
			TNT1 A 1
			Stop
	}
}


ACTOR MonsterTargetCheckFaster: FastProjectile
{
	Radius 4
	Height 4
	Projectile 
    Damage 0
    -BLOODSPLATTER 
	+SEEKERMISSILE
	+THRUSPECIES
	SeeSound "None"
	DeathSound "none"
	Decal "none"
	Species "NotACover"
    Speed 900
	States
	{
	Spawn:
		TNT1 AAAAAAAAAAA 1 A_SeekerMissile (99,99)
		Stop
	Death:		
	XDeath:
		TNT1 A 0
		TNT1 A 0 A_JumpIfTargetInLOS("NoSight", 0, JLOSF_PROJECTILE, 50) 
		TNT1 A 0 A_GiveToTarget("CantFire")
		PLAY A 0
		TNT1 A 0 BRIGHT
		Stop
	NoSight:
		TNT1 A 0
		PLAY A 0
		TROO A 0
		TNT1 A 1
		Stop
	}
}



ACTOR ImpFireballTrails: FlameTrails
{
    Scale 0.3
	Speed 1
	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 
			FIR3 MP 1 BRIGHT
			Stop
	}
}

ACTOR FireBall_ Replaces DoomImpBall
{
	Game Doom
	DamageType Burn
	Radius 4
	Height 10
	Speed 16
	FastSpeed 24
	Damage (random(20,20))
	PROJECTILE
    +THRUGHOST
	+FORCEXYBILLBOARD
	RenderStyle Add
	Alpha 1
	SeeSound "imp/attack"
	DeathSound "imp/shotx"
	Decal "Scorch"
	Species "Imps"
	+DONTHURTSPECIES
	Scale 0.3
	
	//***Che
	-NOBLOCKMAP // without this, A_RadiusGive does not see them 
	 // and so projectile-destroying effects do not work
	 // see Demon EleTech gun's ligtning element alt fire. 	
	
	States
	{
		StopInAir:
			TNT1 A 0
			EXPL A 0 A_CustomMissile ("FireBallExplosionFlames", 1, 0, random (0, 360), 2, random (0, 360))
			Stop
			
		Spawn:
			TNT1 A 0 NODELAY ACS_NamedExecuteWithResult("ImpFireballTrails") // a load-balanced clientside script
			//A_JumpIf(CallAcs("GetIsSfestMissile"), "FlyCheap")
		Fly:
			TNT1 A 0 
			TNT1 A 0 A_JumpIf(waterlevel > 1, "FlyUnderwater")
			BLHD AB 1 BRIGHT //A_SpawnItem ("CoolAndNewFlameTrails", 0, random( -2, 2))
			//TNT1 A 0 A_CustomMissile ("OldschoolRocketSmokeTrailDarker", 2, 0, random (160, 210), 2, random (-30, 30))
			Loop
/*			
		FlyCheap:
			BLHD AB 1 BRIGHT// A_SpawnItem ("CoolAndNewFlameTrails")
			Loop
*/			
		FlyUnderwater:
			FR7X A 1 BRIGHT //A_SpawnItem("FireballFlare",0,0)
			//TNT1 A 0 A_CustomMissile ("BUBULZ", 0, 0, random (0, 360), 2, random (0, 180))
			FR7X B 1 BRIGHT //A_SpawnItem("FireballFlare",0,0)
			//TNT1 A 0 A_CustomMissile ("BUBULZ", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 A 0 A_JumpIf(waterlevel > 1, "FlyUnderwater")
			Goto Fly	
			
		Death: // hit wall
		Crash: // hit a non-bleeding actor
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!CallAcs("FBD_RequestExpensiveSfx", 30), "DeathCheap")
			TNT1 A 0 A_SpawnItemEx ("SmallUnderwaterExplosion",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			EXPL A 0 A_CustomMissile ("FireBallExplosionFlames", 1, 0, random (0, 360), 2, random (0, 360))
			//FRFX CDEFGHIJKLMNOP 1 BRIGHT A_SpawnItem("RedFlare",0,0)
			TNT1 A 0 A_SpawnItemEx("TinyBurningPiece3", random (-5, 5), random (-5, 5))
			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 A 0 A_CustomMissile ("BDExplosionparticlesSmall", 10, 0, random (0, 180), 2, random (40, 90))
			TNT1 A 0 A_CustomMissile ("PlasmaSmoke", 1, 0, random (0, 360), 2, random (0, 160))
			Stop
		XDeath: // hit a bleeding actor
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!CallAcs("FBD_RequestExpensiveSfx", 30), "DeathCheap")//CallAcs("GetIsSfestMissile"), "DeathCheap")
			TNT1 A 0 A_SpawnItemEx ("SmallUnderwaterExplosion",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
			TNT1 A 0 A_CustomMissile ("BDExplosionparticlesSmall", 10, 0, random (0, 180), 2, random (40, 90))
			EXPL A 0 A_CustomMissile ("FireBallExplosionFlames", 1, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_SpawnItemEx("TinyBurningPiece3", random (-15, 15), random (-15, 15))
			TNT1 A 0 A_CustomMissile ("PlasmaSmoke", 1, 0, random (0, 360), 2, random (0, 160))
			//FRFX CDEFGHIJKLMNOP 1 BRIGHT A_SpawnItem("RedFlare",0,0)
			Stop
		DeathCheap:
			TNT1 A 0
			EXPL A 0 A_CustomMissile ("FireBallExplosionFlames", 1, 0, random (0, 360), 2, random (0, 360))
			Stop			
	}
}

//***Che
Actor ImpRaisedByVile: FBD_Imp {
	// a separate actor in case the raising fails due to insufficient space.
	// if i made the corpse itself play the raising animation 
	// and then spawning failed, it would look like a bug.
	States {
		Spawn:
			
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			TNT1 A 0 A_GiveInventory("SKImp", 1)
			TNT1 A 0 A_GiveInventory("TargetIsAnImp", 1)
			TROO TSRQPONJH 3
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_CustomizeOnRez") // it runs OnRezMapScript
				// if the map prpvides one
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_RunMonster", 5)	
			TNT1 A 0 A_JumpIf(waterlevel >= 2, "Swim")
			Goto See
	}		
}

/*
// imitating brutalv22test3
ACTOR FireBall_Slaughterfest: FireBall_ {
	Decal "None"
	States
	{
		Spawn:
			BLHD AB 1 BRIGHT// A_SpawnItem ("CoolAndNewFlameTrails")
			Loop
		Death:
		XDeath:
			TNT1 A 0
			EXPL A 0 A_CustomMissile ("FireBallExplosionFlames", 1, 0, random (0, 360), 2, random (0, 360))
			Stop
	}	
}
*/

ACTOR FireBallWeapon: FireBall_
{
	-THRUGHOST
}


ACTOR ImpTorso: AbstractCorpse // never used anywhere
{
    Radius 16 //0
    Height 16
    Scale 1.1
	Mass 20
    Health 50
    +SHOOTABLE
    -SOLID
    +NOTELEPORT
	+FLOORCLIP
    +MOVEWITHSECTOR
	+CORPSE
    damagefactor "Blood", 0.0
    damagefactor "Trample", 0.0
    States
    {
		Spawn:
			BLUD C 0 A_Recoil (3)
			BLUD C 0 ThrustThing (random(0,255),random(1,5))
			BLUD C 0 ThrustThingZ (0,random(0,50),random(0,1),0)
			TNT1 A 0 A_SetInvulnerable
			GORX B 10
			TNT1 A 0 A_UnSetInvulnerable
			Goto Dead
			
		//***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", 2005), "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 ("ImpRaisedByVile",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, 7, 0, 0)//"ImpRaisedByVile"
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 2005) // see _mob_list.xlsx
			Stop
		Dead:
			//***Che
			//GORX B 10
			//Loop
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("BDCheckFloorType", 0, 0, 0, 0)
			GORX B 30
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			GORX B -1 // torsoes are not raiseable
			Stop
		LandOnLava:
			TNT1 A 0
			TNT1 A 0 A_SpawnItem("CharredMeatsplosionIntoGoryAshes")
			TNT1 A 3
			
			Stop
			
		Death:
			TNT1 A 0
			TNT1 A 0 A_NoBlocking
			TNT1 AA 0 A_CustomMissile ("XDeath1", 0, 0, random (0, 180), CMF_AIMDIRECTION, random (0, 180))
			TNT1 A 0 A_CustomMissile ("XDeath2", 0, 0, random (0, 180), CMF_AIMDIRECTION, random (0, 180))
			TNT1 A 3 // torsos are not raiseable  
			Stop
		Death.HeadPlasma:
		Death.Plasma: 
		Death.Plasma2:
		Death.Electric:
		Death.Bfg10k: //***Che changed damage type from extreme to custom
			TNT1 A 0
			TNT1 A 0 A_XScream
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_NoBlocking
			TNT1 AAA 0 A_CustomMissile ("FBD_FlyingBlood", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat", 32, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat2", 32, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat3", 32, 0, random (0, 360), 2, random (0, 160))
			EXPL AAA 0 A_CustomMissile ("ExplosionSmoke", 32, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned gore time to access our inventory
			// torsos are not raiseable
			Stop

    }
}










Actor FBD_DeadImp: FBD_CurbstompedMarine Replaces DeadDoomImp
{
    //***Che: and herein lies the problem with viles failing to raise them:
	// vile makes sure the vile himself does not intersect the corpse he raises
	// but then the corpse tries spawning an imp... who DOES intersect the vile
	// and thus fails to spawn!
	Radius 16 //12
    Height 12
    +SHOOTABLE
    +NOTELEPORT
    +MOVEWITHSECTOR
    +CORPSE
	-SOLID
	+FLOORCLIP
	+THRUACTORS
	+SHOOTABLE
	damagefactor "Crush", 50.0
    Mass 1000
    Health 100
    damagefactor "Blood", 0.0
    damagefactor "Trample", 0.0
    damagefactor "Melee", 10.0
    damagefactor "Fatality", 10.0
	damagefactor "Kick", 10.0
	damagefactor "ExplosiveImpact", 10.0
	
	//***Che
	DamageFactor "FriendlyExplosion", 10.0
	+CORPSE
	
	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", 2005), "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 ("ImpRaisedByVile",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, 7, 0, 0)//"ImpRaisedByVile"
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 2005) // see _mob_list.xlsx
			Stop
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			TROO M 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
			TROO M 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TROO M -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
		LandOnLavaPrivate: // used by this class only
			TNT1 A 0
			TNT1 A 0 A_PlaySound("props/redfire")
			TNT1 AAAA 0 A_SpawnItemEx("GoreLandingOnLava", random(-14, 14), random(-14, 14))
			// classic imp dead on his back
			TROO MMMMM 10 A_CustomMissile ("SmallSmoke", 1, 0, random (0, 360), 2, random (0, 160))
			Goto Death.Burn
		LandOnLava: // used by descendants only
			TNT1 A 0
			TNT1 A 0 A_SpawnItem("CharredMeatsplosionIntoGoryAshes")
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop	
		Death.Burn:
			TNT1 A 0
			TNT1 A 0 A_NoBlocking
			TNT1 AAAA 0 A_SpawnItemEx("GoreLandingOnLava", random(-14, 14), random(-14, 14))
			// charred version of the classic dead imp on his back
			BOSB FFFFF 10 A_CustomMissile ("SmallSmoke", 1, 0, random (0, 360), 2, random (0, 160))
			BOSB F -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
		Death.FriendlyExplosion:
			TNT1 A 0
			goto Death.ExplosiveImpact				
			
		Death:
			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			//TNT1 A 0 A_SpawnItem ("FBD_DeadImp_NoLeg", 5)
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoLeg",5,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
			
		Death.Plasma: 
		Death.Plasma2:
		Death.Electric:
		Death.Bfg10k: //***Che changed damage type from extreme to custom
			TNT1 A 0
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			TNT1 AAA 0 A_CustomMissile ("FBD_FlyingBlood", 50, 0, random (0, 360), 2, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat2", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat3", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			EXPL AAA 0 A_CustomMissile ("ExplosionSmoke", 32, 0, random (0, 360), 2, random (0, 360))
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}


Actor DesintegratingImp: FBD_DeadImp
{
	Health 300
	damagefactor "Desintegrate", 0.0
	States
	{
		Spawn:
			ID50 HIJKL 5 
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			ID50 M 5 
			"----" A 0 A_CheckFloor("Slide")  // if this goes before the non-zero frame, we have an infinite loop!
			Loop
		Slide:
			"----" A 0
			"----" A 0 A_JumpIf(momx != 0 || momy != 0, "Stay") // not until the actor stops sliding		
		Land:	
			"----" A 0
			"----" A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			ID50 N 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			ID50 N -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
		Death:
		XDeath:
		Death.Stomp:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx("SmalllMeatDeath", 0,0,10, 0,0,0, 0, SXF_NOCHECKPOSITION)
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
	}
}


Actor MeltingImp: DesintegratingImp
{
	damagefactor "Desintegrate", 0.3
	damagefactor "Slime", 0.0
	States
	{
		Spawn:
			ID50 H 0 NODELAY ACS_NamedExecuteWithResult("MeltingImpSmoke")
			ID50 HIJKL 7 A_PlaySound("burn") 
			Goto Stay
	}
}
		

Actor FBD_DeadImp_NoArm: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			TR08 E 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
			TR08 E 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TR08 E -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
		Death.Burn: // removing this special case
			Stop
		Death:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("ImpHeadExplode", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoArmNoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoArmNoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}



Actor FBD_DeadImp_NoArmNoHead: FBD_DeadImp_NoArm
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			TR08 G 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
			TR08 G 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TR08 G -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
		Death:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("RipGuts", 0, 10)
			TNT1 AA 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			TNT1 A 0 A_CustomMissile ("XDeathImpArm", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Half")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Half",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}

Actor FBD_DeadImp_NoLeg: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			TR09 E 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
			TR09 E  30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TR09 E -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop	
			
		Death:
			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			//TNT1 A 0 A_SpawnItem ("RipImp", 5)
			// RipImp is a pure gore spawner!
			TNT1 A 0 A_SpawnItemEx ("RipImp",5,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}


Actor FBD_DeadImp_NoHead: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			TROH E 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
			TROH E 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TROH E -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
        Death:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			TNT1 A 0 A_CustomMissile ("XDeathImpArm", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoArmNoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoArmNoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}

Actor FBD_DeadImp_MinorHeadDeadFront: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			TROH 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
			TROH O 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TROH O -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
		Death:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("ImpHeadExplode", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}
		 
Actor FBD_DeadImpMinorHeadShot: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			TROO Y 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
			TROO Y 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TROO Y -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}
		
Actor FBD_DeadImpNoFace: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			T6SW G 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
			T6SW G 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			T6SW G -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}		

Actor FBD_DeadImp_Half: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			TROG 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
			TROG H 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TROG H -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
        Death:
			TNT1 AA 0 A_CustomMissile ("XDeathImpLeg", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			TNT1 A 0 A_NoBlocking
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}
		  
Actor impfacesorapedomgthisiscruel: FBD_DeadImp_Half
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			FTCI K 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
			FTCI K 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			FTCI K -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop		
		Death:
			TNT1 A 0 A_SpawnItem("RipGuts", 0, 10)
			TNT1 A 0 A_CustomMissile ("XDeathImpArm", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			//TNT1 A 0 A_CustomMissile ("XDeathHalfImpUpperPart32", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (10, 60))
			TNT1 A 0 A_SpawnItemEx ("XDeathHalfImpUpperPart32",32,0,0,6,random(-3,3),2,0,SXF_NOCHECKPOSITION,0,0)
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Half")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Half",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}		  


ACTOR StompedImp: impfacesorapedomgthisiscruel
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			FTYI Z 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
			FTYI Z 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			FTYI Z -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop				
	}
}



Actor FBD_DeadImp_NoStomach: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			IMPC 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
			IMPC I 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			IMPC I -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
		Death:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("ImpHeadExplode", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}



Actor FBD_DeadImp_NoStomachNoHead: FBD_DeadImp
{
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			IMPC L 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
			IMPC L 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			IMPC L -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
			
       Death:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("ImpHeadExplode", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}
		
		
Actor FBD_DeadImp_BaronFatality: FBD_DeadImp
{
	-SHOOTABLE
	Health 200 
	States{
		Spawn:
		Stay: // ancestor's Pain.Kick, Pain.ExplosiveImpact and Pain.Trample redirect here after z-thrusting the actor
			3HF2 K 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
			3HF2 K 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			3HF2 K -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}		


Actor ImpMessyCorpse: FBD_CurbstompedMarine
{
	Health 200 
	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", 2005), "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 ("ImpRaisedByVile",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, 7, 0, 0)//"ImpRaisedByVile"
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 2005) // see _mob_list.xlsx
			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
			FTBI H 5 
			TNT1 A 0 A_CheckFloor("Land")
			Loop
		Land:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			FTBI H 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			FTBI H -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
		Death:
			TNT1 A 0 A_NoBlocking
			TNT1 AA 0 A_CustomMissile ("XDeathImpArm", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("XDeathImpLeg", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_NoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_NoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}
		
		
Actor FBD_DeadImpBloodLoss: FBD_CurbstompedMarine
{
	Health 200 
	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", 2005), "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 ("ImpRaisedByVile",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, 7, 0, 0)//"ImpRaisedByVile"
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 2005) // see _mob_list.xlsx
			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
			TROD J 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
			TROD J 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")	
			TROD J -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
		Death:
			//TNT1 A 0 A_SpawnItem("RipImp", 0, 10)
			TNT1 A 0 A_SpawnItemEx ("RipImp",0,0,10,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Half")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Half",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}		



Actor FBD_DeadImp_Slumped: AbstractSlumpedBodyWithHeadbox //FBD_ZombiemanTorso
{

	//***Che: switching to being a monster (required by headboxes),
	//	paying for that with inability to inherit progenitor's sfest status.
	//  have to run a sfest detection script
	//  P.S. Solved, not anymore
	
	//***Che: slumped corpses cannot be made raiseable/respawnable
	
	+NOPAIN
	+NOBLOCKMONST
	Health 200
	DamageFactor "Head", 15.0
	DamageFactor "HeadStun", 15.0
	Height 22
	Radius 8
	States {
		Spawn:
			TNT1 A 0 NODELAY ACS_NamedExecuteAlways("FBD_RunMonster", 12)  // dying guy headbox, ignores the SOLID snd CORPSE flags
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 22, 1) // force create
		SitSlumped:	
			TNT1 A 0 A_Recoil(6)
			BR94 A 6
			TNT1 A 0 A_JumpIf(momx != 0 || momy != 0, "LayDown")
			//TNT1 A 0 A_JumpIf(momx < 0, "LayDown")
			//TNT1 A 0 A_JumpIf(momy < 0, "LayDown")
			//TNT1 A 0 A_JumpIf(momx > 0, "LayDown")
			//TNT1 A 0 A_JumpIf(momy > 0, "LayDown")
			////TNT1 A 0 A_SpawnItemEx("HeadshotTarget20", 0, 0, 22)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 22)
			//***Che
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava", 0, 0, 0, 0)
			BR94 A 16
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			Loop
			
		LayDown:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp",radius + 16,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
		XDeath:
		Death.Explosives:
		Death.ExplosiveImpact:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			//TNT1 A 0 A_SpawnItem("ImpXDeath")
			TNT1 A 0 A_SpawnItemEx ("ImpXDeath",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop	
		
		Death.Head:
		Death.HeadStun:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx("ImpHeadExplode", 0, 0, 22,0,0,0,0,SXF_NOCHECKPOSITION)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Slumped_NoHead")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Slumped_NoHead",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // give the spawned corpse time to access our inventory
			Stop
			
		Death:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 AAA 0 A_CustomMissile ("Guts", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("XDeath1", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("Xdeath3", 16, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("FBD_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("XDeathImpArm", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			TNT1 A 0 A_SpawnItemEx("ImpHeadExplode", 0, 0, 22,0,0,0,0,SXF_NOCHECKPOSITION)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpJustLegsAreLeft")
			TNT1 A -1 // be rezzable (the fallback ACS script takes care of us being too close to a wall)
			Stop
		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", 2005), "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 ("ImpRaisedByVile",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, 7, 0, 0)//"ImpRaisedByVile"
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 2005) // see _mob_list.xlsx
			Stop			
	}
}


		
Actor FBD_DeadImp_Slumped_NoHead: FBD_ZombiemanTorso
{
	+NOPAIN
	+NOBLOCKMONST
	Height 22
	States{
		//***Che // this is a descendant of FBD_CurbstompedMarine, which is neither a missile nor a monster
		Spawn:
		Sit:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("FBD_CheckFloorIsLava_V", 0, 0, 0, 0) // also spawns smoke for 30 tics if succeeds
			BR94 B 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "LandOnLava")
			BR94 B 70
			Loop
		LandOnLava:
			TNT1 A 0
			TNT1 A 0 A_SpawnItem("CharredMeatsplosionIntoGoryAshes")
			TNT1 A 0
			Stop
			
		XDeath:
		Death.Explosives:
		Death.ExplosiveImpact:
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("ImpXDeath") // gore spammer
			TNT1 A -1 // be rezzable (the fallback ACS script takes care of us being too close to a wall)
			Stop	
		Death:
			TNT1 A 0 A_NoBlocking
			TNT1 AAA 0 A_CustomMissile ("Guts", 32, 0, random (150, 210), 2, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("XDeath1", 32, 0, random (150, 210), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("Xdeath3", 16, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("FBD_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
			TNT1 AAA 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
			TNT1 AA 0 A_CustomMissile ("XDeathImpArm", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 90))
			//TNT1 A 0 A_SpawnItem("FBD_DeadImpJustLegsAreLeft")
			TNT1 A -1 // be rezzable (the fallback ACS script takes care of us being too close to a wall)
			Stop
		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", 2005), "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 ("ImpRaisedByVile",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, 7, 0, 0)//"ImpRaisedByVile"
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 2005) // see _mob_list.xlsx
			Stop			
	}
}
		


Actor FBD_DeadImpTR06K: FBD_DeadImp
{
	States{
		Spawn:
			//***Che
			//TR06 K -1
			//Stop 
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("BDCheckFloorType", 0, 0, 0, 0)
			TR06 K 30
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			TR06 K -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
		
		Death:
			TNT1 A 0 A_SpawnItem("RipImp", 0, 10)
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Half")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Half",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}
		
		

Actor FBD_DeadImpTR06V: FBD_DeadImp
{
	States{
		Spawn:
			//***Che
			//TR06 V -1
			//Stop
			TNT1 A 0
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteAlways("BDCheckFloorType", 0, 0, 0, 0)
			TR06 V 30
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			TR06 V -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop			
		Death:
			TNT1 A 0 A_SpawnItem("RipImp", 0, 10)
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Half")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Half",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}	


Actor FBD_DeadImpTRO3E: FBD_DeadImp
{
	States{
		Spawn:
			//***Che
			//TRO3 E -1
			//Stop 
			TNT1 A 0
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteAlways("BDCheckFloorType", 0, 0, 0, 0)
			TRO3 E 30
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			TRO3 E -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop		
		Death:
			TNT1 A 0 A_CustomMissile ("XDeathHalfImpUpperPart32", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (10, 60))
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Half")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Half",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}	


Actor FBD_DeadImpTRO4E: FBD_DeadImp
{
	States{
		Spawn:
			//***Che
			//TRO4 E -1
			//Stop
			TNT1 A 0
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteAlways("BDCheckFloorType", 0, 0, 0, 0)
			TRO4 E 30
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			TRO4 E -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop		
		Death:
			TNT1 A 0 A_CustomMissile ("XDeathHalfImpUpperPart32", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (10, 60))
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			//TNT1 A 0 A_SpawnItem("FBD_DeadImp_Half")
			TNT1 A 0 A_SpawnItemEx ("FBD_DeadImp_Half",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERTRANSLATION | SXF_TRANSFERSCALE,0,0)
			TNT1 A 0 A_NoBlocking
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
	}
}	


Actor FBD_DeadImpIZD1H: FBD_DeadImp_Half
{
	States{
		Spawn:
			//***Che
			//IZD1 H -1
			//Stop 
			TNT1 A 0
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteAlways("BDCheckFloorType", 0, 0, 0, 0)
			IZD1 H 30
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			IZD1 H -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}	


Actor FBD_DeadImpID17G: FBD_DeadImp
{
	States{
		Spawn:
			//***Che
			//ID17 G -1
			//Stop
			TNT1 A 0
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteAlways("BDCheckFloorType", 0, 0, 0, 0)
			ID17 G 30
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			ID17 G -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop		
		Death:
			TNT1 A 0 A_CustomMissile ("XDeathHalfImpUpperPart32", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (10, 60))
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			TNT1 A 0 A_CustomMissile ("XDeathImpLeg", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem("RipGuts", 0, 10)
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}	
		
		

Actor FBD_DeadImpIZD3D: FBD_DeadImp
{
	States{
		Spawn:
			//***Che
			//IZD3 D -1
			//Stop
			TNT1 A 0
			TNT1 A 0 
			TNT1 A 0 ACS_NamedExecuteAlways("BDCheckFloorType", 0, 0, 0, 0)
			IZD3 D 30
			TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "LandOnLava")
			IZD3 D -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop		
		Death:
			TNT1 A 0 A_CustomMissile ("XDeathHalfImpUpperPart32", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (10, 60))
			TNT1 A 0 A_SpawnItem("MeatDeathSmall", 0, 10)
			TNT1 AA 0 A_CustomMissile ("XDeathImpLeg", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem("RipGuts", 0, 10)
			TNT1 A -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)
			Stop
	}
}			


