// Final Demo Blue Shield Box - Ported by MIDIMan
// Use with LUA_FBOX

/*
The blue shield originally acted as a pity shield until 1.09, where behaved more 
like a water-protecting shield. Then, 2.0 replaced its behavior with that of the 
force shield (without the passive ability).
*/

freeslot(
	"SPR_FBXB",
	"MT_FDBOX_BLUE",
	"MT_FDBOX_BLUE_ICON",
	"S_FDBOX_BLUE_IDLE",
	"S_FDBOX_BLUE_ICON1",
	"S_FDBOX_BLUE_ICON2"
)

function A_FDBlueShield(actor, var1, var2)
	if not (actor and actor.valid) then return end
	
	if not actor.FDAltOption then
		// Give the player a 2-hit force shield (2.0 behavior)
		A_GiveShield(actor, SH_FORCE|1, var2)
	elseif actor.FDAltOption == 1 then
		// Give the player a bubble shield (1.09.4 behavior)
		A_GiveShield(actor, SH_BUBBLEWRAP, var2)
	elseif actor.FDAltOption >= 2 then
		// Give the player a pity shield (1.01-1.08 behavior)
		A_GiveShield(actor, SH_PITY, var2)
	end
end

addHook("MobjFuse", function(mobj)
	if not (mobj and mobj.valid) then return end
	
	P_FDMonitorFuseThink(mobj)
	return true
end, MT_FDBOX_BLUE)

addHook("MapThingSpawn", function(mobj, mthing)
	if not (mobj and mobj.valid
	and mthing and mthing.valid) then
		return
	end
	
	P_FDMonitorTypeSpawn(mobj, mthing)
	
	if mobj and mobj.valid then
		if ultimatemode and not G_IsSpecialStage(gamemap) then
			P_RemoveMobj(mobj)
		end
	end
end, MT_FDBOX_BLUE)

mobjinfo[MT_FDBOX_BLUE] = {
	//$Name Final Demo Blue Shield
	//$Sprite FBXBA0
	//$Category Monitors
	//$Flags4Text Random (Strong)
	//$Flags8Text Random (Weak) / Random (Pre-2.0)
	//$ParameterText Behavior
	doomednum = 469,
	spawnstate = S_FDBOX_BLUE_IDLE,
	spawnhealth = 1,
	painstate = S_FDBOX_BLUE_IDLE,
	deathstate = S_FDBOX_EXPLOSION1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 16*FRACUNIT,
	height = 32*FRACUNIT,
	damage = MT_FDBOX_BLUE_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}

states[S_FDBOX_BLUE_IDLE] =	{SPR_FBXB,	A,	2,	nil,	0,	0,	S_FDBOX_FLICKER}

mobjinfo[MT_FDBOX_BLUE_ICON] = {
	doomednum = -1,
	spawnstate = S_FDBOX_BLUE_ICON1,
	spawnhealth = 1,
	seesound = sfx_shield,
	speed = 4*FRACUNIT,	// Originally 2*FRACUNIT; Changed to match pre-2.1's speed
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	damage = 62*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON
}

states[S_FDBOX_BLUE_ICON1] =	{SPR_FBXB,	B,	18,	nil,			0,	0,	S_FDBOX_BLUE_ICON2}
states[S_FDBOX_BLUE_ICON2] =	{SPR_FBXB,	B,	18,	A_FDBlueShield,	0,	0,	S_NULL}
