-- Dimension Disaster objects and visuals.

-- UFO alternate behavior stuff.
-- To hardcode if we make this happen.

/*addHook("MobjThinker", function(mo)
	if not mo or not mo.valid return end
	if mo.spawnpoint and mo.spawnpoint.valid and mo.spawnpoint.options & MTF_OBJECTSPECIAL
		mo.scale = $*2
		mo.canrespawn = true
	end
end, MT_CDUFO)*/

-- ^ WHY DOES THE ABOVE CODE KILL THE FRAMERATE????


-- OBJECT DEFS
freeslot("MT_DVDEMERALD", "MT_DVDPARTICLE", "MT_DVDTRUMPET", "SPR_SPRC", "SPR_DVDD", "S_DVDTRUMPET", "SPR_DSHA")

states[S_DVDTRUMPET] = {SPR_DVDD, B, -1, nil, 0, 0, 0}
mobjinfo[MT_DVDTRUMPET] = {
	doomednum = 3181,
    spawnstate = S_DVDTRUMPET,
    spawnhealth = 1000,
    radius = 8*FRACUNIT,
    height = 14*FRACUNIT,
    flags = MF_SCENERY|MF_NOTHINK,
}

for i = 1, 5
	freeslot("S_DVDSHINE"..i)
end
for i = 1, 5
	states[S_DVDSHINE1+(i-1)] = {SPR_SPRC, (i+1)|FF_FULLBRIGHT, 3, nil, 0, 0, i < 5 and S_DVDSHINE1+i or S_DVDSHINE1}
end

for i = 1, 3
	freeslot("S_DVDSPARK"..i)
end
local trans = {0, FF_TRANS20, FF_TRANS40}
for i = 1, 3
	states[S_DVDSPARK1+(i-1)] = {SPR_SPRC, G+(i-1)|FF_FULLBRIGHT|trans[i], 3, nil, 0, 0, i < 3 and S_DVDSPARK1+i or S_NULL}
end

mobjinfo[MT_DVDPARTICLE] = {
	doomednum = -1,
    spawnstate = S_DVDSPARK1,
    spawnhealth = 1,
    reactiontime = 8,
    speed = 2*FRACUNIT,
    radius = 8*FRACUNIT,
    height = 14*FRACUNIT,
    mass = 100,
    damage = 62*FRACUNIT,
    flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY,
}

-- SKYBOX: Ideally this will be replaced by an object within the skybox itself for ease for hardcoding.
local skybox

local function getskybox()
	if not mapheaderinfo[gamemap].dvdss6 return end
	for c in mapthings.iterate
		if not c continue end
		if c.type ~= mobjinfo[MT_SKYBOX].doomednum
			continue -- no
		end
		skybox = c.mobj
	end
end

addHook("MapLoad", do
	getskybox()
end)

addHook("NetVars", function(net)
	skybox = net(skybox)
end)

addHook("ThinkFrame", do
	if not mapheaderinfo[gamemap].dvdss6 return end

	if not skybox or not skybox.valid
		getskybox()
	return
	end
	for i = 1,8
		local rang = N_RandomRange(0, 360)*ANG1	-- random angle
		local randomz = N_RandomRange(10, 160)*FRACUNIT	-- abs z

		local x, y = skybox.x + 800*cos(rang), skybox.y + 800*sin(rang)
		local prt = P_SpawnMobj(x, y, randomz, MT_DVDPARTICLE)
		prt.color = N_RandomRange(1, 24)
		prt.scale = FRACUNIT*3
	end
end)