freeslot("SPR_TIER1")
freeslot("SPR_TIER2")
freeslot("SPR_TIER3")
addHook("MapLoad", function()
	for player in players.iterate
		player.tier = 0
		player.charability2 = skins[player.mo.skin].ability2
		player.price = 15
		player.heat = 0
		player.heattimer = 0
	end
end)
local cv_freetier = CV_RegisterVar({
    "freetiering",
    "Off",
    CV_NETVAR|CV_CHEAT,
    CV_OnOff,
    nil
})

-- HOOK BELOW BY GOLDEN FROM SRB2 DISCORD AND A DELETED USER <@456226577798135808> 
local boss = false
addHook("MapLoad", function(map)
    for mo in mobjs.iterate() do -- For each mapthing in the map...
        if mo and mo.valid then -- the mobj is there and valid...
            if mo.flags & MF_BOSS then -- If the mobj has the boss flag...
                boss = true -- We think this is a boss level!
                break
            end
        end
    end
    -- But just to make sure..
    for sector in sectors.iterate do -- We iterate through all the sectors.
        if GetSecSpecial(sector.special, 4) == 2 and not (string.upper(mapheaderinfo[map].lvlttl) == "EGG ROCK" and mapheaderinfo[map].actnum == 3 and gamemap == 26) and not (string.upper(mapheaderinfo[map].lvlttl) == "EGG ROCK CORE")  then -- And if one's an exit sector?
            boss = false -- Then this probably isn't a boss level (like ERZ2).
            break
        end
    end
end)
addHook("PlayerThink", function(player)
	if not (player.currentskin == player.skin)
        player.currentskin = player.skin
        player.tier = 0
    end
end)
addHook("PlayerThink", function(player)
if (player.mo and player.valid) and (player.mo.skin == "sonic" or player.mo.skin == "tails" or player.mo.skin == "knuckles" or player.mo.skin == "fang" or player.mo.skin == "amy" or player.mo.skin == "metalsonic" or player.mo.enabletiering == true) and player.powers[pw_carry] != CR_NIGHTSMODE
	if not player.tier
		player.tier = 0
	end
	if player.tier > 2
		player.tier = 0
	end
	if boss == true or (maptol & TOL_NIGHTS or maptol & TOL_XMAS) or ultimatemode == true or (gamemap >= smpstage_start and gamemap <= smpstage_end) or ((string.upper(mapheaderinfo[gamemap].lvlttl) == "TUTORIAL") and gamemap == 1000) or (cv_freetier.value == 1 and (modifiedgame == true or netgame == true))
			player.price = 0
	else
			player.price = 15
	end
	if player.mo.state == S_PLAY_DEAD
		player.tier = 0
	end
	if (player.mo.skin == "sonic" or player.mo.skin == "tails" or player.mo.skin == "knuckles" or player.mo.skin == "fang" or player.mo.skin == "amy" or player.mo.skin == "metalsonic")
		player.tierbutton = BT_CUSTOM1
	end
	 if ((player.cmd.buttons & player.tierbutton) and (player.c1ready == true) and (player.c1tapping == false)) and player.rings >= player.price and not (player.mo.state == S_PLAY_SPINDASH or player.mo.state == S_PLAY_ROLL) and P_IsObjectOnGround(player.mo) and not player.powers[pw_carry] and  player.powers[pw_nocontrol] == 0 and player.exiting == 0 and not (player.mo.state == S_PLAY_DEAD) and player.bot ~= 1 and not (player.mo.state == S_PLAY_PAIN)
		player.speed = 0
		if not (player.mo.state == S_PLAY_SUPER_TRANS1 or player.mo.state == S_PLAY_SUPER_TRANS2 or player.mo.state == S_PLAY_SUPER_TRANS3 or player.mo.state == S_PLAY_SUPER_TRANS4 or player.mo.state == S_PLAY_SUPER_TRANS5 or player.mo.state == S_PLAY_SUPER_TRANS6)
			player.mo.state = S_PLAY_SUPER_TRANS1
			S_StartSound(nil, 137, player)
		end
		P_GivePlayerRings(player, -player.price)
		player.tier = $ + 1
	end
	if not (player.cmd.buttons & BT_CUSTOM1) then
			player.c1ready = true
			player.c1tapping = false
		elseif player.c1ready then
			player.c1tapping = true
			player.c1ready = false
		else
			player.c1tapping = false
		end
end
end)

local function tier(tier, player)
    if (player.mo and player.valid) and (player.mo.skin == "sonic" or player.mo.skin == "tails" or player.mo.skin == "knuckles" or player.mo.skin == "fang" or player.mo.skin == "amy" or player.mo.skin == "metalsonic" or player.mo.enabletiering == true) and player.powers[pw_carry] != CR_NIGHTSMODE
        if (player.tier == 0) and modeattacking == false 
            tier.draw(27, 175, tier.cachePatch("TIER1"), V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER)
		elseif (player.tier == 0) and modeattacking == true
			tier.drawString(55, 162, "I", V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_BLUEMAP|V_PERPLAYER|V_6WIDTHSPACE)
		elseif (player.tier == 1) and modeattacking == false 
           tier.draw(27, 175, tier.cachePatch("TIER2"), V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER)
		elseif (player.tier == 1) and modeattacking == true
            tier.drawString(55, 162, "II", V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_REDMAP|V_PERPLAYER|V_6WIDTHSPACE)
        elseif (player.tier == 2) and modeattacking == false 
            tier.draw(27, 175, tier.cachePatch("TIER3"), V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_PERPLAYER)
		elseif (player.tier == 2) and modeattacking == true
            tier.drawString(47, 162, "III", V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_GREENMAP|V_PERPLAYER|V_6WIDTHSPACE)
        end
    end
end
hud.add(tier, "game")
local function prompt(prompt, player)
    if (player.mo and player.valid) and (player.mo.skin == "sonic" or player.mo.skin == "tails" or player.mo.skin == "knuckles" or player.mo.skin == "fang" or player.mo.skin == "amy" or player.mo.skin == "metalsonic" or player.mo.enabletiering == true) and player.powers[pw_carry] != CR_NIGHTSMODE and (player.price != nil) and player.powers[pw_nocontrol] == 0 and player.tierbutton == BT_CUSTOM1 and player.exiting == 0 and not (player.mo.state == S_PLAY_DEAD)
        if player.price == 15
            prompt.drawString(18, 55, "Custom 1 - Switch Tier (-15 RINGS)", V_HUDTRANSHALF|V_PERPLAYER|V_SNAPTOLEFT|V_SNAPTOTOP, "small")
		elseif player.price == 0
			prompt.drawString(18, 55, "Custom 1 - Switch Tier (FREE)", V_HUDTRANSHALF|V_PERPLAYER|V_SNAPTOLEFT|V_SNAPTOTOP, "small")
        end
    end
end
hud.add(prompt, "game")