
actor FBD_Walker: FBD_Mummy 17760 // for EDAY only, not used in FBD

// no "raised by vile" variation: we assume this *is* a civilian raised by vile

{

	//***Che radius, height and maxdropoffheight (n/a for flying ones) MUST be kept consistent with FBD_TrySpawn in FBD_CORE.acs!
	
	//$category "FBD Monsters"
	
	Health 40
	
	Tag "$FBD_WALKER" 
	Obituary "$O_FBD_WALKER"
	
	// ZKEL is a clone of MUMA recolored dark bloody red
	
	States
	{
		Pain.Ice:
			"----" A 20 A_Pain
			Goto See
		
		WaitTargetsFatalityOut:
			TNT1 A 0 A_PlaySound("MUMYSEE", CHAN_VOICE)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -1, 40)
			ZKEL BBBBBB 8 A_SetAngle(angle + Random(-15, 15))
			Goto See			
		
		Death.Fatality:
		
			// ersatz fatality: doomguy punches, we asplode, doomguy flexes
			TNT1 A 0 
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			
			TNT1 A 0 A_GiveToTarget("GoFatality", 1)
			TNT1 A 0 A_GiveToTarget("ErsatzFatality", 1)	
			
			// after exactly 15 tics, asplode
			ZKEL G 9 A_FaceTarget
			HUMA H 6
			
			TNT1 A 0 ACS_NamedExecuteAlways("DropFatalityBonuses", 0, 5, 0, 0) // 0, health, armor, 0 -- rounded down to nearest 2
			
			TNT1 A 0 A_StopSound(CHAN_VOICE)
			Goto XDeath
			
		
		Raise: 
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII") //should not have a headbox by now -- but what if?
			TNT1 A 0 A_SetUserVar("user_head_type", 0) //default headbox
			TNT1 A 0 A_SpawnItemEx("StandaloneRezSfx",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			ID50 GFEDCB 3 // desintegrated human, gore flowing up into a human shape
			ZKEL L 10
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			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)
			// walking corpse does not occur naturally, results from archvile raising a civilian corpse
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 307) // 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			
			
		Spawn:
			// Also replaces BDCHeckClassicMonsters with a different mechanism
			// The slaughter-aware blood checks the parent monster and goes low-res automatically

			ZKEL B 0 NODELAY ACS_NamedExecuteWithResult("FBD_RunMonster") // default headbox, unlike the mummy
			"----" A 0 A_GiveInventory("TargetIsAFormerHuman", 1) //used by AOE DOT inflictors to reward players with soul ammo -- otherwise untraceable
			
			TNT1 A 0 A_SpawnItemEx("StandaloneRezSfx",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			ID50 GFEDCB 3 // desintegrated human, gore flowing up into a human shape
			ZKEL L 10
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_CustomizeOnRez")
		Stand:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(user_serverside_sfchk >= 4, "StandSfestExtreme") //2) // extreme slaughtermap optimization
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -1, 40)
			TNT1 A 0 A_CheckSight("Stand2")
			ZKEL B 11 A_Look
			Loop
		Stand2:
			ZKEL B 11 A_Look
			Goto Stand
		StandSfestExtreme:
			ZKEL B 18 A_Look
			Loop
		See:
			// 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_TakeInventory("EnemyMemory", 25)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, -3, 36)
			ZKEL AA 2 A_Chase
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -1, 40)
			ZKEL BB 2 A_Chase
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 3, 4, 41)
			ZKEL CC 2 A_Chase
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, 3, 36)
			ZKEL DD 2 A_Chase
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 1, 40)
			ZKEL EE 2 A_Chase
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 3, -4, 41)
			ZKEL FF 2 A_Chase
			
			TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), "ForgetFaster")
			TNT1 A 0 A_CheckSight("CheckIdle")
			TNT1 A 0 A_TakeInventory("EnemyMemory", 5)
			Loop
			
		CheckIdle:	
			TNT1 A 0
			TNT1 A 0 A_GiveInventory("EnemyMemory", 1)
			TNT1 A 0 A_JumpIfInventory("EnemyMemory", 15, "Idle")
			Goto See
		ForgetFaster:
			TNT1 A 0
			TNT1 A 0 A_GiveInventory("EnemyMemory", 4)
			TNT1 A 0 A_JumpIfInventory("EnemyMemory", 15, "Idle")
			Goto See
		Idle:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_sleeping", 1)
		LookingForPlayer:	
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -1, 40)
			
			ZKEL BBB 10 A_Look
			TNT1 A 0 A_SetAngle(angle - 40)
			ZKEL BBB 10 A_Look
			TNT1 A 0 A_SetAngle(angle + 40)
			ZKEL BBB 10 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, -3, 36)
			ZKEL A 2 A_Wander
			ZKEL AA 3 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -1, 40)
			ZKEL B 2 A_Wander
			ZKEL BB 3 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 3, 4, 41)
			ZKEL C 2 A_Wander
			ZKEL CC 3 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, 3, 36)
			ZKEL D 2 A_Wander
			ZKEL DD 3 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 1, 40)
			ZKEL E 2 A_Wander
			ZKEL EE 3 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 3, -4, 41)
			ZKEL F 2 A_Wander
			ZKEL FF 3 A_Look

			TNT1 A 0 A_jump(128, "LookingForPlayer")
			
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, -3, 36)
			ZKEL A 2 A_Wander
			ZKEL A 10
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, -1, 40)
			ZKEL B 2 A_Wander
			ZKEL B 10
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 3, 4, 41)
			ZKEL C 2 A_Wander
			ZKEL C 10 A_Look
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 13, 3, 36)
			ZKEL D 2 A_Wander
			ZKEL D 10
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 10, 1, 40)
			ZKEL E 2 A_Wander
			ZKEL E 10
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 3, -4, 41)
			ZKEL F 2 A_Wander
			ZKEL F 10 A_Look
			
			//***Che: HERESY! What was I thinking? TNT1 A 0 A_jump(32, "Stand") // them undead, stops moving completely
		
			Loop
		Melee:
			TNT1 A 0
			
			// slaughtermap manage - warming the headbox up
			TNT1 A 0 A_JumpIf(!user_sleeping, 4) // forgo the expensive sight check if already awake
			TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, 2) // bypass the sight check 
			TNT1 A 0 A_CheckSight(2) // out of sight of any player, AND attacking another monster, keep slumbering
			TNT1 A 0 A_SetUserVar("user_sleeping", 0)	
			
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -11, -7, 32)
			ZKEL G 1 A_FaceTarget
			TNT1 A 0 A_Recoil(-5)
			ZKEL G 6 A_SkelWhoosh
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 7, -6, 38)
			ZKEL H 6 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 26)
			ZKEL I 6 A_SkelFist
			Goto See
		Pain:
			ZKEL L 0
			TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "FallingAfterImpact")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -12, 3, 32)
			ZKEL L 5
			ZKEL L 5 A_Pain
			Goto See
			
		Pain.Argent:

			TNT1 A 0
			TNT1 A 0 HealThing(15)
			TNT1 A 0 ACS_NamedExecuteWithResult("DisplayArgentDischarge", 10, 45, 0)	
			
			Goto Pain


		Pain.Bullet792:
		Pain.SniperBullet:		
			TNT1 A 0 A_Jump(100, "Pain")
		Pain.Kick:
		Pain.HeavyImpact:
		Pain.SuperPunch:
		Pain.ExtremePunches:
		Pain.Stomp:
			TNT1 A 0
			ZKEL L 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -12, 3, 32)
			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)			
			ZKEL L 5 A_Pain
			
			TNT1 A 0 A_GiveInventory("IsDown", 1)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 22)
			ZKEL N 1 A_facetarget
			ZKEL N 6 ThrustThing(angle*256/360+128, 5, 0, 0)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			TNT1 A 0 A_ChangeFlag("GHOST", 0)
			TNT1 A 0 A_ChangeFlag("THRUGHOST", 0)
			ZKEL N 8
			Goto FallingAfterImpact
			
		Pain.ExplosiveImpact:
		Pain.Explosive:
		Pain.Bfg10k: //***Che changed damage type from extreme to custom
	        TNT1 A 0
			TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
	        TNT1 A 0 A_Pain
			TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Pain")
			TNT1 A 0 A_GiveInventory("IsDown", 1)
			TNT1 A 0 ThrustThingZ(0,40,0,1)
			ZKEL N 8 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 22)
			Goto FallingAfterImpact
		
		Pain.Slide:
			TNT1 A 0
			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, 0, 22)
			ZKEL N 1 A_Pain
			TNT1 A 0 A_GiveInventory("IsDown", 1)
			TNT1 A 0 ThrustThingZ(0,50,0,1)
			ZKEL N 1 A_facetarget
			ZKEL N 3
			ZKEL N 3 A_Recoil(-5)
			ZKEL N 1
			Goto FallingAfterImpact			
		
		FallingAfterImpact:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 22)
			ZKEL N 1 A_GiveInventory ("FallingHeight", 1)
			ZKEL N 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", 11, "FallingDie")
			MARN A 0 A_SpawnItem("bdbodythud")
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 0, 0, 1)
			ZKEL Q 1
			//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)
			ZKEL QQQQQQQQQQQ 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)
			ZKEL N 7 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -15, -6, 22)
			ZKEL L 7 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -12, 3, 32)
			ZKEL G 7 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -11, -7, 32)
			ZKEL H 7 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 7, -6, 38)
			ZKEL I 7 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", 15, 0, 26)
			Goto See
			
		FallingDie:	 
			TNT1 A 0
			TNT1 A 0 A_CustomMissile("BodyCrash1", 10)
			goto Death.Down
			
		Death.Down:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Stop
			TNT1 A 0 A_CustomMissile("BodyCrash1", 10)
			ZKEL P 7 A_Scream
			ZKEL Q 1 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			TNT1 A 0 A_SpawnItemEx("FBD_WalkerCorpse",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0) 
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, scripts runs ownerless
			Stop
		Death:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Death.Down")
			ZKEL LM 7
			ZKEL N 7 A_Scream
			ZKEL O 7 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			ZKEL P 7
			TNT1 A 0 A_SpawnItemEx("FBD_WalkerCorpse",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0) 
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, scripts runs ownerless
			Stop
		Death.flames:
		Death.burn:
		Death.Plasma: 
		Death.Electric:
		Death.Plasma2:
		Death.HeadPlasma:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Death.Down")
			ZKEL LM 7
			ZKEL N 7 A_Scream
			ZKEL O 7 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			ZKEL P 7
			Goto BurnDownContinue
		LandOnLava:
			SKEL P 1
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_Playsound("props/redfire")
			TNT1 AAAA 0 A_SpawnItemEx("GoreLandingOnLava", random(-14, 14), random(-14, 14))
			ZKEL QQQQQQQ 10 A_CustomMissile ("SmallSmoke", 1, 0, random (0, 360), 2, random (0, 160))
		BurnDownContinue:	
			TNT1 AAAA 0 A_SpawnItemEx("GoreLandingOnLava", random(-14, 14), random(-14, 14))
			CARB NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 10 A_CustomMissile ("PlasmaSmoke", 25, 0, random (0, 360), 2, random (70, 130))
			CARB N -1
			Stop


		
		Death.decaptate:
		Death.Head:
		Death.HeadStun:
		Death.CCFT:
			// copied from revenant
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_SpawnItemEx("ShotgunguyHeadExplode",0,0,30,0,0,0,0,SXF_NOCHECKPOSITION,0)
			
			// is falling backwards; N is first frame where head not visible -- Cheb is so clever
			
			ZKEL N 7 A_StopSound(CHAN_VOICE) 
			ZKEL O 7 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			ZKEL P 7
			TNT1 A 0 A_SpawnItemEx("FBD_WalkerCorpse",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0) 
			TNT1 A 30 A_ChangeFlag("CORPSE", 0) // without at least 8 tics delay, scripts runs ownerless
			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") 
		XDeath:
		Death.ExplosiveImpact:
		Death.FriendlyExplosion:
		Death.Bfg10k: //***Che changed damage type from extreme to custom
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			
			TNT1 A 0 A_SpawnItemEx("WalkerHeadExplode",0,0,40,0,0,0,0,SXF_NOCHECKPOSITION,0)
			
			TNT1 A 0 A_CustomMissile ("XDeath1", 47, 0, random (0, 360), 2, random (30, 150))
			TNT1 A 0 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_CustomMissile ("XDeath2b", 40, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_CustomMissile ("XDeath3b", 40, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_SpawnItem("MuchBlood2", 0, 50)
			
			TNT1 AAAAAAAA 0 A_CustomMissile ("SmallSuperGore", Random(15,40), 0, random (0, 360), 2, random (10, 170))
			TNT1 AAAA 0 A_CustomMissile ("BloodMistSmall", Random(15,35), 0, random (0, 360), 2, random (40, 90))
			TNT1 AA 0 A_CustomMissile ("BloodMistBig", 35, 0, random (0, 360), 2, random (0, 60))
			
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			TNT1 A 0 A_Scream
			TNT1 A -1 // be raiseable
			Stop

		Death.ExtremePunches:
		Death.DHFT:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_XScream
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_CustomMissile ("ExtremePunchedWalker", 8, 0, random (175, 185), 2, random (10, 20))
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
		Death.Kick:	
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 A 0 A_NoBlocking
			TNT1 A 0 ThrustThingZ(0,30,0,1)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_Recoil (8)
			ZKEL LM 7
			ZKEL N 7 A_Scream
			ZKEL O 7 A_NoBlocking
			TNT1 A 0 A_GiveToTarget("SoulAmmo", 1)
			ZKEL P 7
			TNT1 A 0 A_SpawnItemEx("FBD_WalkerCorpse",0,0,0, momx,momy,momz, 0,SXF_NOCHECKPOSITION | SXF_ABSOLUTEVELOCITY,0) 
			TNT1 A 30 A_ChangeFlag("CORPSE", 0)
			Stop
		Crush:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DeleteHeadboxMkII")
			TNT1 AAAAA 0 A_CustomMissile ("BloodMistSmall", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAAAAA 0 A_CustomMissile ("BloodMist", 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 1 A_XScream
			TNT1 A -1 // rezzable
			Stop			
			
		// inherits ice death states, will thaw out as a mummy!	

		
			
	}
}

Actor FBD_WalkerCorpse: FBD_CurbstompedMarine {
	+CORPSE
	-ISMONSTER
	Scale 0.6
	Radius 16
	States {
		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", 307), "FallbackRaise") // on success, this script shifts its activator by rounding its x and y to integer
			// 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 ("FBD_Walker",0,0,0, 0,0,0, 0, 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, 23, 0, 0) //"FBD_Walker"
			"----" A -1 ACS_NamedExecuteWithResult("FallbackRezMkII", 307) // 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
			ZKEL Q 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
			ZKEL Q 30
			TNT1 A 0 A_JumpIf(user_floor_is_lava, "Death.Burn")
			
			//***Che: prevent the game engine from auto-respawning this gibbed corpse on nightmare as a corpse
			// while allowiing archviles raising it (they only check for the CORPSE flag)
			// and respawning via script on nightmare
			TNT1 A 0 A_ChangeFlag("CORPSE", 1)
			TNT1 A 0 A_ChangeFlag("ISMONSTER", 0)
			ZKEL Q -1 ACS_NamedExecuteAlways("RespawnCorpseAfter60sIfNightmare", 0, 0, 0, 0)	
			
			Stop
			
		// no custom death states, use ancestor's	
	}
}


Actor FBD_WalkerCorpseIntangible: FBD_WalkerCorpse // left after meatsplosions, intangible but raiseable
{
	-SHOOTABLE
	States
	{
		Spawn:
			TNT1 A 1
			TNT1 A -1
	}
}

