local activelock = false
local active = false
local clones = {}

addHook("LinedefExecute", do active = true activelock = true end, "RK_AVOID")

addHook("MapLoad", do
	if activelock == false
		active = false
	else
		activelock = false
	end
	clones = {}
end)

addHook("NetVars", function(net)
	active = net($)
	activelock = net($)
end)

local SpawnClonesRK = function(pmo, x, y)
	local N = {}
	if pmo.player.playerstate != PST_LIVE and pmo.fuse == 0 then return end
	N[#N+1] = P_SpawnGhostMobj(pmo)
	if pmo.tracer and pmo.tracer.valid and not pmo.tracer.player
		N[#N+1] = P_SpawnGhostMobj(pmo.tracer)
	end
	if pmo.player.followmobj and pmo.player.followmobj.valid
		N[#N+1] = P_SpawnGhostMobj(pmo.player.followmobj)
	end
	for i = 1, #N do
		N[i].dontdrawforviewmobj = nil
		P_SetOrigin(N[i], N[i].x+x, N[i].y+y, N[i].z)
		N[i].frame = $ - FF_TRANS50
		N[i].fuse = 35
		local t
		if i == 1
			if N[i].tracer and N[i].tracer.valid then P_RemoveMobj(N[i].tracer) end
			t = {fuse = 0, mo = N[i], x = x, y = y, original = pmo}
		elseif i == 2
			t = {fuse = 1, mo = N[i], x = x, y = y, original = pmo.tracer}
		elseif i == 3
			t = {fuse = 0, mo = N[i], x = x, y = y, original = pmo.player.followmobj}
		end
		table.insert(clones, t)
	end
end

addHook("PlayerThink", function(player)
	if active and leveltime > 0
		if player and player.valid
			if player.mo and player.mo.valid
				SpawnClonesRK(player.mo, 4096*FRACUNIT, 0)
				SpawnClonesRK(player.mo, -4096*FRACUNIT, 0)
				SpawnClonesRK(player.mo, 0, 4096*FRACUNIT)
				SpawnClonesRK(player.mo, 0, -4096*FRACUNIT)
				SpawnClonesRK(player.mo, 4096*FRACUNIT, 4096*FRACUNIT)
				SpawnClonesRK(player.mo, -4096*FRACUNIT, -4096*FRACUNIT)
				SpawnClonesRK(player.mo, 4096*FRACUNIT, -4096*FRACUNIT)
				SpawnClonesRK(player.mo, -4096*FRACUNIT, 4096*FRACUNIT)
			end
		end
	end
end)

addHook("PreThinkFrame", do
	if active and leveltime > 0
		if clones[1]
			for i = 1, 4 do
				for i = 1, #clones do
					if clones[i]
						clones[i].mo.fuse = -1
						if clones[i].original and clones[i].original.valid
							local clone = clones[i].mo
							local orig = clones[i].original
							local x = clones[i].x
							local y = clones[i].y
							P_SetOrigin(clone, orig.x+x, orig.y+y, orig.z)
						end
						if clones[i].fuse > 0
							clones[i].fuse = $ - 1
						else
							P_RemoveMobj(clones[i].mo)
							table.remove(clones, i)
						end
					end
				end
			end
		end
	end
end)
