local function TailsTweaks(player)	
	local verticalspeed = 1
	
	if player.whirljump == nil
		player.whirljump = false
	end
	
	if player.whirljump
		if P_IsObjectOnGround(player.mo)
		or P_PlayerInPain(player)
		or player.powers[pw_carry]
		or player.powers[pw_justsprung]
		or (player.mo.state == S_PLAY_FLY or player.mo.state == S_PLAY_SWIM)
			player.whirljump = false
		end
	end
	
	if player.whirljump
	and not (player.pflags & PF_JUMPED)
	and player.mo.momz * P_MobjFlip(player.mo) < 0
		player.pflags = $1|PF_JUMPED
	end
	
	if player.mo.skin == "tails"
	and player.charability == CA_FLY
		if player.powers[pw_super]
			player.actionspd = skins[player.mo.skin].actionspd * 3/2
		else
			player.actionspd = skins[player.mo.skin].actionspd
		end
	end
end

addHook("PlayerThink", TailsTweaks)

local function SuperWhirlwindJump(player)
	if not (player.mo and player.mo.valid) then return end 
	if player.mo.skin != "tails" return end
	
	if (player.powers[pw_super] > 1)
	and player.pflags & PF_JUMPED
	and not player.whirljump
		S_StartSound(player.mo, sfx_wdjump, player)
		P_SetObjectMomZ(player.mo, 20*FRACUNIT, false)
		player.mo.state = S_PLAY_FALL
		player.pflags = $ & ~PF_JUMPED
		player.whirljump = true
		for i = 0, 8
			local fa = (i*(ANGLE_180/4))
			local strikesparkle = P_SpawnMobj(player.mo.x, player.mo.y, player.mo.z-player.mo.height, MT_STRIKESPARKLES)
			strikesparkle.momx = FixedMul(sin(fa),5*FRACUNIT)
			strikesparkle.momy = FixedMul(cos(fa),5*FRACUNIT)
			strikesparkle.color = player.mo.color
			strikesparkle.scale = player.mo.scale * 3 / 2
			strikesparkle.colorized = true
			P_SetObjectMomZ(strikesparkle, -5*FRACUNIT, false)
		end
		return true
	end
end

addHook("JumpSpinSpecial", SuperWhirlwindJump)	