// Demo Invincibility Monitor - Ported by MIDIMan
// Use with LUA_DBOX

freeslot(
	"SPR_DBXI",
	"MT_DEMOBOX_INVIN",
	"S_DEMOBOX_INVIN_IDLE",
	"S_DEMOBOX_INVIN_BREAK1",
	"S_DEMOBOX_INVIN_BREAK2",
	"S_DEMOBOX_INVIN_BREAK3",
	"S_DEMOBOX_INVIN_BREAK4",
	"S_DEMOBOX_INVIN_BREAK5",
	"S_DEMOBOX_INVIN_BREAK6"
)

// Only give the player invincibility in singleplayer
function A_DemoInvincibility(actor, var1, var2)
	if not (actor and actor.valid) then return end
	
	if not (netgame or multiplayer) then
		A_Invincibility(actor, var1, var2)
	end
end

// Give the player the monitor's rings as soon as it breaks
addHook("MobjDeath", function(target, inflictor, source, damagetype)
	if not (target and target.valid) then return end
	
	if netgame or multiplayer then
		if source and source.valid and source.player then
			target.target = source
		elseif inflictor and inflictor.valid and inflictor.player then
			target.target = inflictor
		else
			return
		end
	
		A_Invincibility(target, var1, var2)
	end
end, MT_DEMOBOX_INVIN)

mobjinfo[MT_DEMOBOX_INVIN] = {
	//$Name Demo Invincibility
	//$Sprite DBXIA0
	//$Category Monitors
	doomednum = 456,
	spawnstate = S_DEMOBOX_INVIN_IDLE,
	spawnhealth = 1,
	painstate = S_DEMOBOX_INVIN_IDLE,
	deathstate = S_DEMOBOX_INVIN_BREAK1,
	deathsound = sfx_pop,
	radius = 16*FRACUNIT,
	height = 32*FRACUNIT,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}

states[S_DEMOBOX_INVIN_IDLE] =	{SPR_DBXI,	A,	2,	nil,	0,	0,	S_DEMOBOX_FLICKER}

states[S_DEMOBOX_INVIN_BREAK1] =	{SPR_DBXI,	B,	2,	A_DemoFall,				0,	0,	S_DEMOBOX_INVIN_BREAK2}
states[S_DEMOBOX_INVIN_BREAK2] =	{SPR_DBXI,	C,	2,	A_Scream,				0,	0,	S_DEMOBOX_INVIN_BREAK3}
states[S_DEMOBOX_INVIN_BREAK3] =	{SPR_DBXI,	D,	2,	nil,					0,	0,	S_DEMOBOX_INVIN_BREAK4}
states[S_DEMOBOX_INVIN_BREAK4] =	{SPR_DBXI,	E,	2,	nil,					0,	0,	S_DEMOBOX_INVIN_BREAK5}
states[S_DEMOBOX_INVIN_BREAK5] =	{SPR_DBXI,	F,	16,	nil,					0,	0,	S_DEMOBOX_INVIN_BREAK6}
states[S_DEMOBOX_INVIN_BREAK6] =	{SPR_DBXI,	F,	48,	A_DemoInvincibility,	0,	0,	S_DEMOBOX_DEAD}
