-- Created by Angular(?)
-- Modified by Eldog

if (tumblegems_initialized) then return end -- Check if the script has already been run

freeslot("MT_TUMBLEGEM", "MT_TUMBLECOIN")

local function TumbleObject(special, toucher)
	if (toucher and (toucher.momx or toucher.momy))
		special.momx = toucher.momx
		special.momy = toucher.momy
		special.momz = P_AproxDistance(toucher.momx, toucher.momy)/4
		if (toucher.momz > 0)
			special.momz = $1 + toucher.momz/8;
		end
		special.state = special.info.seestate
	end
	return true
end

local function TumbleThinker(mo)
    if (abs(mo.momx) < FixedMul(FRACUNIT, mo.scale)
        and abs(mo.momy) < FixedMul(FRACUNIT, mo.scale)
        and abs(mo.momz) < FixedMul(FRACUNIT*3, mo.scale))
    then
        mo.momx, mo.momy, mo.momz = 0,0,0
        mo.state = mo.info.spawnstate
    end
	mo.friction = 95*FRACUNIT/100
end

/* Randomize object color */
local function RandomizeColor(mo)
	mo.color = P_RandomRange(1,MAXSKINCOLORS-1)
end -- Close function

addHook("TouchSpecial",	TumbleObject,	MT_TUMBLEGEM)
addHook("TouchSpecial",	TumbleObject,	MT_TUMBLECOIN)

addHook("MobjThinker",	TumbleThinker,	MT_TUMBLEGEM)
addHook("MobjThinker",	TumbleThinker,	MT_TUMBLECOIN)

addHook("MobjSpawn",	RandomizeColor,	MT_TUMBLEGEM)

rawset(_G, "tumblegems_initialized", true) -- The script ran, don't run it again