addHook("AbilitySpecial", function(player)
	if player.mo.skin ~= "ikemin" then return end
	if player.pflags & PF_THOKKED then return end
	if player.ikeminflight == nil then player.ikeminflight = 0 end
	
	local actionspd = player.actionspd

	player.pflags = $ & ~PF_JUMPED
	P_DoJump(player, false)

	if (player.mo.info.attacksound and not player.spectator) then S_StartSound(player.mo, sfx_ijm2) end
	player.mo.state = S_PLAY_ROLL
	player.mo.state = S_PLAY_SPRING
	P_SetObjectMomZ(player.mo, 10 * FRACUNIT)
	player.ikeminflight = 1
	player.pflags = $ |PF_THOKKED
	P_SpawnThokMobj(player)
	return true
end)

addHook("PlayerThink", function(player)
	if (player.mo and player.mo.valid and player.mo.skin == "ikemin") and player.ikeminflight and not P_IsObjectOnGround(player.mo) and (player.cmd.buttons & BT_SPIN) then
	P_SetObjectMomZ(player.mo, -1 * FRACUNIT)
	end
	if P_IsObjectOnGround(player.mo) then
	player.ikeminflight = 0
end
end)