
//Sonic & ashuro run ghosts
addHook("PlayerThink", function(player)
	if not (player.mo and player.mo.skin == "ultclsonic") then return end
	if (player.powers[pw_super])
	and player.speed + abs(player.mo.momz) > FixedMul(20*FRACUNIT,player.mo.scale)
		local gmobj = P_SpawnGhostMobj(player.mo)
		gmobj.fuse = 3
		if gmobj.tracer then gmobj.tracer.fuse = 3 end
		if (leveltime & 1)
			gmobj.frame = $&~FF_TRANSMASK
			gmobj.frame = $|tr_trans70<<FF_TRANSSHIFT
			if (gmobj.tracer)
				gmobj.tracer.frame = $&~FF_TRANSMASK
				gmobj.tracer.frame = $|tr_trans70<<FF_TRANSSHIFT
			end
		end
	end
end)

COM_AddCommand("csonicsupermusic", function(player)
	if not player.cssm
		player.cssm = true
		CONS_Printf(player,"sonic 3 super music")
	else
		player.cssm = false
		CONS_Printf(player,"sonic 2 super music")
	end
end)
//Music
addHook("ThinkFrame", do
    for player in players.iterate do
        if (player.mo and player.mo.valid)
        player.hassupermusic = true
            if not player.powers[pw_extralife]
            and not (player.exiting)
            if player.powers[pw_super] and not (player.hyper and player.hyper.capable) then
                if player.mo.skin == "ultclsonic"
                    if player.cssm == true
                    S_ChangeMusic("s3super",true,player) //(ALT) Sonic Mania Super theme
                    else
                    S_ChangeMusic("s2super",true,player) //SATFS Stardom Santuary's True Final Boss
                    end
                end
            end    
        else
            P_RestoreMusic(player)
            end
        end
    end
end)

//fast run
freeslot("S_FASTER1", "S_FASTER2", "S_FASTER3", "S_FASTER4", "SPR_FAST")

states[S_FASTER1] = {SPR_FAST, A, 1, nil, 0, 0, S_FASTER2}
states[S_FASTER2] = {SPR_FAST, B, 1, nil, 0, 0, S_FASTER3}
states[S_FASTER3] = {SPR_FAST, C, 1, nil, 0, 0, S_FASTER4}
states[S_FASTER4] = {SPR_FAST, D, 1, nil, 0, 0, S_FASTER1}
addHook("ThinkFrame", do
    for player in players.iterate
        if (player.mo and player.mo.skin == "ultclsonic")
		and not player.powers[pw_super] then
            if (player.speed > 60*FRACUNIT)
				if not player.powers[pw_sneakers]
					player.normalspeed = 60*FRACUNIT
				end
				player.charflags = $1|SF_RUNONWATER
				
				if (player.mo and player.mo.skin == "ultclsonic")
				and not player.powers[pw_super]
					if not (player.mo.state >= S_FASTER1)
					and (player.mo.state <= S_FASTER4)
					and not (player.pflags & PF_SPINNING)
					and P_IsObjectOnGround(player.mo)
					and (player.panim == PA_RUN)
						player.mo.state = S_FASTER1
					end
				end
			elseif (player.speed >= 0)
			and (player.speed < 53*FRACUNIT)
				player.charflags = $1 & ~SF_RUNONWATER
				if (player.mo and player.mo.skin == "ultclsonic")
				and not player.powers[pw_super] then
					player.normalspeed = 36*FRACUNIT
				end	
				if (player.mo.state >= S_FASTER1) and (player.mo.state <= S_FASTER4)
				and not ((player.mo.state >= S_PLAY_PWALK1) and (player.mo.state <= S_PLAY_PWALK8))
				and P_IsObjectOnGround(player.mo)
					player.mo.state = S_PLAY_SKID
				end
            end
        end
    end
end)
