freeslot(
"sfx_walk",
"sfx_run",
"sfx_step"
)


addHook("AbilitySpecial", function(player)
    if player.mo and player.mo.skin == "sonic"
	and player.pflags & PF_THOKKED
	P_SpawnSkidDust(player, -4*FRACUNIT, sfx_none)
	P_SetObjectMomZ(player.mo, -27*FRACUNIT, true)
		S_StartSound(player.mo, sfx_thok, player)
		P_SpawnGhostMobj(player.mo)
		P_InstaThrust(player.mo, player.mo.angle, 47*FRACUNIT)
	end
end)


addHook("PlayerThink", function(player)
	if player.mo and player.mo.skin == "tails" and (player.cmd.buttons & BT_CUSTOM1)
	    if player.mo.state == S_PLAY_FLY or player.mo.state == S_PLAY_FLY_TIRED or player.mo.state == S_PLAY_SWIM
		   S_StartSound(player.mo, sfx_spin, player)
           player.pflags = $1|PF_THOKKED|PF_JUMPED
		   P_SpawnThokMobj(player)
		   player.mo.state = S_PLAY_ROLL
		end
	end
end)


addHook("PlayerThink", function(player)
	if player.mo and player.mo.skin == "knuckles" and (player.cmd.buttons & BT_SPIN)
	    if player.mo.state == S_PLAY_GLIDE
		   S_StartSound(player.mo, sfx_spin, player)
           player.pflags = $1|PF_THOKKED|PF_JUMPED
		   player.pflags = $ & ~PF_GLIDING
		   P_SpawnThokMobj(player)
		   player.mo.state = S_PLAY_ROLL
		end
	end
end)


addHook("PlayerThink", function(player)
	if player.mo and player.mo.skin == "knuckles"
		if(player.mo.state == S_PLAY_JUMP)
		and(player.cmd.buttons & BT_CUSTOM1)
		and(player.playerstate == PST_LIVE)
		and not (player.pflags & PF_STASIS)
		and not (player.pflags & PF_FULLSTASIS)
        and(P_IsObjectOnGround(player.mo) == false)
           P_SpawnThokMobj(player)
		   player.mo.state = S_PLAY_FALL
		   player.stomp = true
		   player.mo.momx = 0
		   player.mo.momy = 0
		   player.mo.momz = 0
		   player.mo.momz = -35*FRACUNIT
		   S_StartSound(player.mo, sfx_zoom, player)
		   P_SpawnSkidDust(player, 10*FRACUNIT, sfx_none)
		end
		
		if(player.stomp)
	    and not(player.powers[pw_super])
        and(P_IsObjectOnGround(player.mo) == true)
		   player.mo.state = S_PLAY_FALL
		   player.stomp = false
		   player.mo.momx = 0
		   player.mo.momy = 0
		   player.mo.momz = 0
		   player.mo.state = S_PLAY_GLIDE_LANDING
		   S_StartSound(player.mo, sfx_s3k4c, player)
		end
		
		if(player.stomp)
		and(player.powers[pw_super])
        and(P_IsObjectOnGround(player.mo) == true)
		   player.mo.state = S_PLAY_FALL
		   player.stomp = false
		   player.mo.momx = 0
		   player.mo.momy = 0
		   player.mo.momz = 0
		   player.mo.state = S_PLAY_GLIDE_LANDING
		   S_StartSound(player.mo, sfx_s3k49, player)
		   P_StartQuake(15*FRACUNIT, 11)
		   P_NukeEnemies(player.mo, player.mo, 1100*FRACUNIT)
		end
	end
end)


addHook("PlayerThink", function(player)
	if player.mo and player.mo.skin == "amy" and (player.cmd.buttons & BT_CUSTOM1)
	    if P_IsObjectOnGround(player.mo) and (player.mo.state == S_PLAY_WALK or player.mo.state == S_PLAY_RUN or player.mo.state == S_PLAY_STND or player.mo.state == S_PLAY_WAIT)
		   P_SetObjectMomZ(player.mo, 6*FRACUNIT, true)
           P_InstaThrust(player.mo, player.mo.angle, 35*FRACUNIT)
		   S_StartSound(player.mo, sfx_step, player)
	       player.mo.sprite2 = SPR2_RUN
		end
	end
end)


addHook("PlayerThink", function(player)
	if player.mo and player.mo.skin == "amy"
		if(player.mo.state == S_PLAY_MELEE_LANDING)
		and(player.playerstate == PST_LIVE)
		and not (player.pflags & PF_STASIS)
		and not (player.pflags & PF_FULLSTASIS)
        and(P_IsObjectOnGround(player.mo) == true)
		   player.mo.state = S_PLAY_SPRING
		   player.mo.momz = 15*FRACUNIT
		end
	end
end)




addHook("PlayerThink", function(player)
	if (player.cmd.forwardmove or player.cmd.sidemove)
	and player.normalspeed <= player.speed then
	    player.mo.friction = FRACUNIT
    else
	    player.mo.friction = 28*FRACUNIT/31
	end
end)


addHook("PlayerThink", function(player)
	if (P_IsObjectOnGround(player.mo))
	and player.speed then
	    player.mo.speed = FRACUNIT
    else
	    player.mo.speed = 999*FRACUNIT/1001
	end
end)