
#include MARINES_fat.txt


//***Che this class encapsulates all the death states for both the evil marines
// and the NPC marines. 


// The OnDeath state must be provided by the descendant classes
// for things like dropping ammo/ weapon
// and unsubscribing NPCs from the party,
// and must ultimately end in
//			"----" A -1
//			Stop


ACTOR Marine_AbstractDeath: Marine_AbstractFat
{
	
	States
	{
		OneDeath:
			"----" A 0 
			"----" A 0 A_StopSound(CHAN_WEAPON)
			"----" A 1 A_Jump(256, "OnDeath") // OnDeath must be provided by the descendant classes
			Wait
		

		Death:
		Death.Bullet:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_Scream
			PLAY H 10
			PLAY I 10 A_NoBlocking
			PLAY J 10 
			PLAY KLM 10
			TNT1 A 0 A_SpawnItem ("MediumBloodSpot")
			PLAY N 1
			Goto OneDeath
			
	

		//***Che: had two Death.SSG, changing into a variation
		Death.SSG:
			TNT1 A 0
			TNT1 A 0 A_Jump(128, "Death.SuperPunch")
			Goto Death_RegularEat
			
		Death.Shotgun:
			TNT1 A 0
			TNT1 A 0 A_Jump(96, "Death_Arm")
			Goto Death_RegularEat		
			
		Death.Eat:
			TNT1 A 0
			TNT1 A 0 A_Jump(96, "Death_AltEat")
			Goto Death_RegularEat
			
		Death_RegularEat:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_GiveToTarget("EatMe",1)
			TNT1 AAA 0 A_CustomMissile ("XDeath1", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("muchblood3", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL1 A 10 A_XScream
			XPL1 B 20 A_NoBlocking
			XPL1 CDE 10 
			TNT1 A 0 A_SpawnItem ("MediumBloodSpot")
			XPL1 E 1
			Goto OneDeath
			
		Death_Arm:	
			NULL A 0 A_CustomMissile ("XDeathArm1", 50, 0, random (0, 360), 2, random (0, 160))
		Death_AltEat:
			// no giving EatMe because that results in the pinkie chewing. One arm is not enough to chew on.
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			NULL AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), 2, random (0, 160))
			NULL A 0 A_Scream
			XPL5 A 10
			NULL A 0 A_NoBlocking
			XPL5 BBCCBBCCBBCCBBCCBBCC 5 A_CustomMissile ("Brutal_LiquidBlood", 30, 0, -90, 2, random (0, 40))
			XPL5 DDEE 3 A_CustomMissile ("Brutal_LiquidBlood", 15, 0, -90, 2, random (0, 40))
			NULL A 0 A_SpawnItem ("GrowingBloodPool")
			XPL5 E 1
			Goto OneDeath			
			
		Death.Desintegrate:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItem("DesintegratedHuman")
			TNT1 A 0 A_Stop
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			TGIB ABCDEFGHIJKLMNOPQ 3
			TGIB Q 1 
			Goto OneDeath
			
		Death.Cut:
		Death.Saw:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_CustomMissile ("XDeath1", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath4", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("RipGuts", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			
			//***Che: TODO: make this transfer translation
			TNT1 A 0 A_CustomMissile ("XDeathHalfMarine", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			
			TNT1 AA 0 A_CustomMissile ("muchblood3", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL2 A 10 A_XScream
			TNT1 AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL2 B 20 A_NoBlocking
			TNT1 AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL2 C 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL2 DE 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem ("MediumBloodSpot")
			XPL2 E 1
			Goto OneDeath

		Death.Slime:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			//TNT1 A 0 A_PlaySound("BIGSCREA", CHAN_VOICE)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SynthMarineVoice", CHE_HORRIBLESCREAM)
			PMET AABBCCDDEEFFGGHHIIIII 10 A_CustomMissile ("PlasmaSmoke", 25, 0, random (0, 180), 2, random (0, 180))
			PMET IIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLL 3 A_CustomMissile ("PlasmaSmoke", 25, 0, random (0, 180), 2, random (0, 180))
			TNT1 A 0 A_NoBlocking
			TNT1 A 1
			Goto OneDeath

		Death.SniperBullet:
		Death.Bullet792:		
		Death.Minigun:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Scream
			TNT1 A 0 A_Jump (128, 3)
			Goto Death
			TNT1 AAA 0
			TNT1 A 0 A_CustomMissile ("XDeath1", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath4", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("RipGuts", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathHalfMarine", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL2 A 10 A_XScream
			TNT1 AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL2 B 20 A_NoBlocking
			TNT1 AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL2 C 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL2 DE 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem ("MediumBloodSpot")
			XPL2 E 1
			Goto OneDeath

		Death.Rip: // imp regular attack
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 AAAAAAAAAAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL3 A 10 A_XScream
			TNT1 AAAAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL3 B 20 A_NoBlocking
			TNT1 A 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL3 C 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL3 D 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL3 E 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL3 F 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL3 F 10 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem ("MediumBloodSpot")
			XPL3 F 1
			Goto OneDeath
			
		Death.Massacre:
		Death.Explosives:
		Death.Bfg10k: //***Che changed damage type from extreme to custom
		XDeath:
		DefaultXDeath:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 ThrustThingZ(0,60,0,1)
			TNT1 A 0 A_CustomMissile ("MarineXDeath", 0, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			PPOD A 0 A_SpawnItemEx("BasicMarineGib1", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			PPOD A 0 A_SpawnItemEx("BasicMarineGib2", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			PPOD A 0 A_SpawnItemEx("BasicMarineGib3", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			PPOD A 0 A_SpawnItemEx("BasicMarineGib4", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			MHEA A 7 A_XScream
			MHEA B 7 A_NoBlocking
			MHEA CD 7
			MHEA E 1
			Goto OneDeath
			
		
		Death.Stomp: // is overridden by NPCs who respawn if crushed by player tank
			TNT1 A 0
			Goto DefaultDeathStomp
		
		Crush:
		DefaultDeathStomp:
			TNT1 A 0
			// 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_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 AAAAAAAAAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("Brutal_FlyingBloodTrail8", 0, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 360))
			TNT1 AAAAAA 0 bright A_CustomMissile ("SuperGoreSpawner", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AAAAAA 0 bright A_CustomMissile ("XDeath1", 5, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AA 0 bright A_CustomMissile ("XDeath2", 55, 0, random (0, 360), CMF_AIMDIRECTION, random (30, 180))
			TNT1 AA 0 bright A_CustomMissile ("XDeath3", 55, 0, random (0, 360), CMF_AIMDIRECTION, 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 A_NoBlocking
			Goto OneDeath	

		Death.Blast:
		Death.SuperPunch:
		//Death.SSG: //***Che: we already have a Death.SSG. I re-made this into a random variation of that.
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			PLAY O 2 A_FaceTarget
			//TNT1 A 0 A_CustomMissile ("MeatDeath", 0, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("XDeath1", 32, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("XDeath2", 32, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			TNT1 AAAA 0 A_CustomMissile ("XDeath3", 32, 0, random (170, 190), 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 A 0 A_CustomMissile ("XDeathArm1", 32, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			//***Che: this (original DoomII xdeath animation) was missing VW frames, blood and meat hanging in the air
			PLAY OPQRSTUVW 8
			TNT1 A 0 A_SpawnItem ("MediumBloodSpot")
			PLAY W 1
			Goto OneDeath

/*
//***Che: this is never used anymore, used to be archvile's damage type.
		Death.Rape:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 AAAAAAAAAAAAAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL4 A 20 A_XScream
			TNT1 A 0 A_CustomMissile ("XDeath1", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath2", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath3", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeath4", 1, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 AAAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL4 B 20 A_NoBlocking
			TNT1 AAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL4 C 20
			TNT1 AAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL4 D 20
			TNT1 AAAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL4 E 20
			TNT1 AAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			XPL4 F 20
			TNT1 AAAA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_SpawnItem ("MediumBloodSpot")
			XPL4 F 1
			Goto OneDeath
*/			

		Death.plasma:
		XDeath.Electric:
		Death.HeadPlasma:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			//***Che: this is designed for removing *friendly* marine npc allies from the player's pockets
			//  when a deployed npc dies
			//TNT1 A 0 A_SpawnItem("RemoveMarine")
			TNT1 AAA 0 A_CustomMissile ("FBD_FlyingBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedArm", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedLeg", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedSkull", 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))
			EXPL AAAAAA 0 A_CustomMissile ("ExplosionSmoke", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 360))
			TNT1 A 1
			Goto OneDeath


		Death.GreenFire:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			//***Che: this is designed for removing *friendly* marine npc allies from the player's pockets
			//  when a deployed npc dies
			//TNT1 A 0 A_SpawnItem("RemoveMarine")
			TNT1 AAAA 0 A_CustomMissile ("FBD_Blood", 30, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			
			TNT1 A 0 A_CustomMissile ("XDeathBurnedArm", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedLeg", 32, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			TNT1 A 0 A_CustomMissile ("XDeathBurnedSkull", 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))
			
			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
			Goto OneDeath
			
		Death.Electric: // imp fireball
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			PBUR A 1
			PBUR A 1 A_Scream
			PBUR A 1 A_NoBlocking
			PBUR AAAABBBBCCCC 2 A_CustomMissile ("PlasmaSmoke", 32, 0, random (0, 180), 2, random (0, 180))
			PBUR DDDDEEEE 2 A_CustomMissile ("PlasmaSmoke", 16, 0, random (0, 180), 2, random (0, 180))
			PBUR EEEEE 4 A_CustomMissile ("PlasmaSmoke", 8, 0, random (0, 180), 2, random (0, 180))
			PBUR EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 6 A_CustomMissile ("PlasmaSmoke", 8, 0, random (0, 180), 2, random (0, 180))
			PBUR E 1
			Goto OneDeath			

		Death.burn: // imp fireball
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			PBUR A 1
			PBUR A 1 A_Scream
			PBUR A 1 A_NoBlocking
			//***Che: this is designed for removing *friendly* marine npc allies from the player's pockets
			//  when a deployed npc dies
			//TNT1 A 0 A_SpawnItem("RemoveMarine")
			PBUR AAAABBBBCCCC 2 A_CustomMissile ("SmallFlameTrails", 32, 0, random (0, 180), 2, random (0, 180))
			PBUR DDDDEEEE 2 A_CustomMissile ("SmallFlameTrails", 16, 0, random (0, 180), 2, random (0, 180))
			PBUR EEEEE 4 A_CustomMissile ("SmallFlameTrails", 8, 0, random (0, 180), 2, random (0, 180))
			PBUR EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 6 A_CustomMissile ("PlasmaSmoke", 8, 0, random (0, 180), 2, random (0, 180))
			PBUR E 1
			Goto OneDeath

		Death.Fire:
		Death.Flames:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			//TNT1 A 0 A_PlaySound("BIGSCREA", CHAN_VOICE)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_SynthMarineVoice", CHE_HORRIBLESCREAM)
			BURN W 6 //A_Scream
			BURN X 6 A_NoBlocking
			//***Che: this is designed for removing *friendly* marine npc allies from the player's pockets
			//  when a deployed npc dies
			//TNT1 A 0 A_SpawnItem("RemoveMarine")
			BUR2 ABCD 6 BRIGHT A_CustomMissile ("PlasmaSmoke", 8, 0, random (0, 180), 2, random (0, 180))
			BURN FGHIJKL 6 BRIGHT A_CustomMissile ("PlasmaSmoke", 8, 0, random (0, 180), 2, random (0, 180))
			BURN MNOPQRSTUV 6 BRIGHT A_CustomMissile ("PlasmaSmoke", 8, 0, random (0, 180), 2, random (0, 180))
			BURN VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV 6 A_CustomMissile ("PlasmaSmoke", 8, 0, random (0, 180), 2, random (0, 180))
			BURN V 1
			Goto OneDeath
		  
		
		Death.FriendlyExplosion: //***Che
		Death.ExplosiveImpact:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			NULL A 0 ThrustThingZ(0,30,0,1)
			NULL AAAA 0 A_CustomMissile ("Brains1", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL A 0 A_CustomMissile ("Brains2", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL A 0 A_CustomMissile ("Brains3", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL A 0 A_CustomMissile ("Brains4", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL A 0 A_CustomMissile ("Brains5", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL AAAA 0 A_CustomMissile ("SmallBrainPiece", random (45, 55), random (5, -5), random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			NULL AAAA 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL AA 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), CMF_AIMDIRECTION, random (0, 40))
			NULL AAAAAAAAAAA 0 A_CustomMissile ("BrainBlood", 50, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL A 0 A_CustomMissile ("XDeathArm1", 35, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL A 0 A_CustomMissile ("XDeath3", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			PPOD A 0 A_SpawnItemEx("BasicMarineGib1", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			NULL AAAA 0 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), CMF_AIMDIRECTION, random (0, 160))
			NULL A 0 A_XScream
			XPL6 A 5
			NULL A 0 A_NoBlocking
			XPL6 BCDE 5
			XPL6 F 1
			Goto OneDeath

		Crush:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_PlaySound("misc/xdeath4", CHAN_VOICE)
			CRS1 A 5
			Goto OneDeath

		Death.HKFT:
		Death.BHFT:
		Death.RVFT:
		Death.DHFT:
		Death.CCFT: // cacodemon bite
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 1 A_Scream //A_PlayerScream
			TNT1 A 1 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("Curbstomp_Marine",1)
			//***Che: no raising fatalized bodies
			TNT1 A 1 A_ChangeFlag("CORPSE", 0) 
			Goto OneDeath

		Death.FatalityMarine:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 1 A_Scream //A_PlayerScream
			TNT1 A 0 A_GiveToTarget("GoFatality", 1)
			TNT1 A 1 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("Fatality_Marine", 1)
			//***Che: no raising fatalized bodies
			TNT1 A 1 A_ChangeFlag("CORPSE", 0) 
			Goto OneDeath
			
		Death.PussyGrab:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Pain
			TNT1 A 0 A_Chase("","")
			TNT1 A 0 A_Pain
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("GrabbedAEvilMarine", 1)
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			TNT1 A 1 A_ChangeFlag("CORPSE", 0)
			Goto OneDeath
	
	//***Che: adding beheaded death:
		Death.Head:
		Death.HeadStun:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")		
			TNT1 A 0 A_PlaySound("misc/xdeath4", CHAN_VOICE)
			TNT1 A 0 A_SpawnItem("MarineHeadExplode", 0, 40)
			
			XPLK A 3 A_NoBlocking
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			
			XPLK ABCDE 3
			XPLK E 1
			Goto OneDeath
			
		Death.Decapitate:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")		
			TNT1 A 0 A_PlaySound("misc/xdeath4", CHAN_VOICE)
			XPLK A 0 A_NoBlocking
			TNT1 A 0 A_SpawnItemEx("MarineHead", 0, 0, 40, 0,random(-4,4), 1)
			
			XPLK A 3 A_FaceTarget
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			
			XPLK ABCDE 3
			XPLK E 1
			Goto OneDeath
		
		Death.ExtremePunches: // player's berserk kick.
			TNT1 A 0
			//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_Scream
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_FaceTarget
			
			//***Che: note friendly marines are immune anyway while maradeur overrides this death.
			TNT1 A 0 A_CustomMissile ("ExtremePunchedEvilMarine", 8, 0, random (175, 185), 2, random (10, 20))
			TNT1 A 1 A_ChangeFlag("CORPSE", 0)
			Goto OneDeath

		Death.Ice:
		Death.Freeze:
		Death.Frost:
		//Death.IOS_Frost:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Scream
			TNT1 A 0 A_Jump(128, "Death_Ice_2")
			TNT1 A 0 A_SpawnItemEx ("FrozenMarineFake",0,0,0,momx,momy,momz,0,SXF_NOCHECKPOSITION | SXF_ABSOLUTEVELOCITY,0)
			TNT1 A 1
			Goto OneDeath
			
		Death_Ice_2:
			TNT1 A 0 A_SpawnItemEx ("FrozenMarineFake2",0,0,0,momx,momy,momz,0,SXF_NOCHECKPOSITION | SXF_ABSOLUTEVELOCITY,0)
			TNT1 A 1
			Goto OneDeath
			
		Death.IOS_Frost:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!user_head_tid, 2)
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_Jump(128, "Death_Permafrost_2")
			TNT1 A 0 A_SpawnItemEx ("PermafrostMarineFake",0,0,0,momx,momy,momz,0,SXF_NOCHECKPOSITION | SXF_ABSOLUTEVELOCITY,0)
			TNT1 A 1
			Goto OneDeath
			
		Death_Permafrost_2:
			TNT1 A 0 A_SpawnItemEx ("PermafrostMarineFake2",0,0,0,momx,momy,momz,0,SXF_NOCHECKPOSITION | SXF_ABSOLUTEVELOCITY,0)
			TNT1 A 1
			Goto OneDeath
			
	}
}


ACTOR MarineHead: XDeathBullArm1
{
	-CLIENTSIDEONLY
	SeeSound "HEDBON"
	DeathSound "HEDBON"
	PainSound "HEDBON"
	Radius 6
	Height 6
	-NOBLOCKMAP
	+NORADIUSDMG
	Health 1
    Scale 1.0
    States
    {
		Spawn:
		Spawn1:
			TNT1 A 0 A_JumpIf(waterlevel > 1, "Death")
			TNT1 A 0 A_JumpIf(momz == 0, "Death")
			MHEA AB 3
			TNT1 A 0 A_ChangeFlag("THRUSPECIES", 0)
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 1)
			MHEA CDEEEE 3
			Loop
		Death:
			MHEA E 1
			TNT1 A 0 A_JumpIfHealthLower(0, "Death2")
			MHEA E 1 A_SpawnItem("MarineHead",0,0,0,1)
			Stop
		
		Death2:
			TNT1 A 0
			TNT1 A 0 A_SpawnItem("MarineHeadExplode")
			Stop
	}
}


ACTOR MarineHeadExplode: ZombieXDeath
{
    States
    {
		Spawn:
			TNT1 A 0
			
			TNT1 A 0 A_PlaySound("misc/xdeath4")
			TNT1 AA 0 A_CustomMissile ("FBD_Bloodmist", 0, 0, random (0, 360), 2, random (60, 90))
			TNT1 AAAAA 0 A_CustomMissile ("BloodmistSpraySmall", 0, 0, random (0, 360), 2, random (30, 90))
			TNT1 AAAAA 0 A_CustomMissile ("FBD_FlyingBlood", 0, 0, random (0, 360), 2, random (30, 90))
			TNT1 A 0 A_CustomMissile ("Brains2", 0, 0, random (0, 360), 2, random (10, 90))
			TNT1 A 0 A_CustomMissile ("Brains3", 0, 0, random (0, 360), 2, random (10, 90))
			TNT1 AAA 0 A_CustomMissile ("SmallBrainPieceFast", 0, 0, random (0, 360), 2, random (10, 20))
			TNT1 AAAAA 0 A_CustomMissile ("SmallBrainPieceSlow", 0, 0, random (0, 360), 2, random (10, 90))
			TNT1 AAA 0 A_CustomMissile ("Teeth", 0, 0, random (0, 360), 2, random (10, 90))
			TNT1 AA 0 A_CustomMissile ("XDeath1", 0, 0, random (0, 360), 2, random (10, 90))
			TNT1 AA 0 A_CustomMissile ("XDeath3b", 10, 0, random (0, 360), 2, random (50, 90))
			
			// bone crumbles -- play the role of helmet fragments
			TNT1 AAAA 0 A_CustomMissile ("SmallLSPart1", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAAA 0 A_CustomMissile ("SmallLSPart3", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAA 0 A_CustomMissile ("LSpart1", 2, 0, random (0, 360), 2, random (0, 160))			
			
			TNT1 A 10
			Stop
	}
}