local myver = 1
if SHADOW_HAS_MONITOR ~= nil then
	print("Tried to add "..(devparm and "Shadow Monitor" or "a monitor")..", but it was already added.")
	if SHADOW_HAS_MONITOR < myver then
		print("...by the way, whatever mod added the monitor has an older version of it. Let the author know.")
	end
	return
end

rawset(_G, "SHADOW_HAS_MONITOR", myver)

freeslot(
	"SPR_TVOW",
	"MT_SHADOW_BOX",
	"S_SHADOW_BOX",
	"MT_SHADOW_GOLDBOX",
	"S_SHADOW_GOLDBOX",
	
	"MT_SHADOW_ICON",
	"S_SHADOW_ICON1",
	"S_SHADOW_ICON2"
)
local interactions = {}

rawset(_G, "AddBikeTvInteraction", function(skin, func)
	interactions[skin] = func
	if devparm then print("Added TV interaction with "..skin..".") end
end)
if devparm then print("INTERACTION FRAME READY") end

function A_ThisActionGrantsShadowAMotorcycle(a, v1, v2)
	if a then
		if a.target and a.target.valid and a.target.player then
			local m = a.target
			local p = m.player
			// Bike stuff here
			/*
			if m.skin ~= "shadow" then
				//print("Interactions with anyone else that isn't Shadow haven't been implemented yet")
				CONS_Printf(p, "This monitor has no interaction set with "..skins[a.skin].realname..".")
				S_StartSound(m, sfx_lose)
			end
			if p.shadow then
				p.shadow.bike = $ + 45*TICRATE
				if p.sbike then
					p.sbike.starttime = p.shadow.bike -- (extend)
				end
			end
			*/
			local golden = a.type == MT_SHADOW_GOLDBOX
			local func = interactions[m.skin]
			if func ~= nil then func(m, v1, v2, golden)
			else
				CONS_Printf(p, "This monitor has no interaction set with "..skins[m.skin].realname..".")
				S_StartSound(m, sfx_lose)
			end
		end
	end
end

mobjinfo[MT_SHADOW_BOX] = {
	//$Name Shadow Monitor
	//$Sprite TVOWA0
	//$Category Shadow
	doomednum = 3524,
	spawnstate = S_SHADOW_BOX,
	spawnhealth = 1,
	radius = 18*FRACUNIT,
	height = 40*FRACUNIT,
	speed = 1,
	damage = MT_SHADOW_ICON,
	deathsound = sfx_pop,
	deathstate = S_BOX_POP1,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR
}
states[S_SHADOW_BOX] = {SPR_TVOW, A, 2, nil, 0, 0, S_BOX_FLICKER}

mobjinfo[MT_SHADOW_GOLDBOX] = {
	//$Name Golden Shadow Monitor
	//$Sprite TVOWB0
	//$Category Shadow
	doomednum = 3525,
	spawnstate = S_SHADOW_GOLDBOX,
	spawnhealth = 1,
	radius = 18*FRACUNIT,
	height = 40*FRACUNIT,
	speed = 1,
	damage = MT_SHADOW_ICON,
	deathsound = sfx_pop,
	deathstate = S_GOLDBOX_OFF1,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}
states[S_SHADOW_GOLDBOX] = {SPR_TVOW, B, 2, nil, 0, 0, S_GOLDBOX_FLICKER}

mobjinfo[MT_SHADOW_ICON] = {
	spawnstate = S_SHADOW_ICON1,
	spawnhealth = 1,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	speed = 2*FRACUNIT,
	damage = 62*FRACUNIT,
	reactiontime = 8,
	seesound = sfx_shield,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON
}
// {SPR_DFLM, FF_FULLBRIGHT|TR_TRANS40|B, 1, A_MoveRelative, 0, 5, S_FLAMEJETFLAMEB2}
states[S_SHADOW_ICON1] = {SPR_TVOW, FF_ANIMATE|C, 18, nil, 3, 4, S_SHADOW_ICON2}
states[S_SHADOW_ICON2] = {SPR_TVOW,            C, 18, A_ThisActionGrantsShadowAMotorcycle, 69, 420, S_NULL}