addHook("PlayerThink", function(player)
	if (player.mo and player.mo.valid and player.mo.skin == "rafael")
		if not (player.cmd.buttons & BT_CUSTOM2) then
			player.jumptapready = true
			player.jumptapping = false
		elseif player.jumptapready then
			player.jumptapping = true
			player.jumptapready = false
		else
			player.jumptapping = false
		end
		
		if player.jumptapping then
			if P_IsObjectOnGround(player.mo) == false and player.smakuse == false then
				player.mo.momz = $ - 20*FRACUNIT
				S_StartSound(player.mo,sfx_zoom, player)
				player.smakuse = true
				player.mo.state = S_PLAY_FALL
				player.timon = true
				player.pflags = $ |PF_SPINNING
			end
		elseif P_IsObjectOnGround(player.mo) == true then
			player.smakuse = false
			player.timon = false
			player.timer = 0
		elseif player.timon == true then
			player.timer = $ + 1
			P_SpawnGhostMobj(player.mo)
			if player.timer >= 5 and player.timer <= 35 and player.mo.momz <= 15*FRACUNIT then
				player.mo.momz = $ + 4*FRACUNIT
				player.mo.state = S_PLAY_ROLL
				player.pflags = $ & ~PF_SPINNING
				S_StartSound(player.mo,sfx_spndsh, player)
			elseif player.timer >= 1*TICRATE - 1*TICRATE/2 and player.timer <= 2*TICRATE then
				player.mo.state = S_PLAY_SPRING
				player.pflags = $ & ~PF_SPINNING
				player.timon = false
				player.timer = 0
			end
		end
	end
end)
