addHook("ThinkFrame", function()
for player in players.iterate do
if player.mo and player.mo.valid and player.mo.skin == "ikemin" then
-- initialize custom variables properly
if player.ikeminball == nil then player.ikeminball = false end

if P_IsObjectOnGround(player.mo) and (player.cmd.buttons & BT_CUSTOM1) ~= 0 and player.ikeminball == false and player.speed <= 6 * FRACUNIT then
player.mo.state = S_PLAY_ROLL
S_StartSound(player.mo, sfx_iwmp)
player.ikeminball = true
end
if P_IsObjectOnGround(player.mo) and (player.cmd.buttons & BT_CUSTOM1) ~= 0 and player.ikeminball == false and player.speed >= 7 * FRACUNIT then
player.mo.state = S_PLAY_ROLL
P_SpawnThokMobj(player)
S_StartSound(player.mo, sfx_ding)
player.ikeminball = true
end
if player.ikeminball == true then
player.mo.state = S_PLAY_ROLL
player.pflags = $ |PF_SPINNING|PF_THOKKED
player.powers[pw_strong] =  STR_ATTACK
end
if player.ikeminball == true and not P_IsObjectOnGround(player.mo) then
player.mo.state = S_PLAY_ROLL
player.pflags = $ |PF_SPINNING|PF_THOKKED
end
if player.ikeminball == true and player.speed <= 15 * FRACUNIT and (player.cmd.buttons & BT_CUSTOM2) ~= 0 and P_IsObjectOnGround(player.mo) then
player.ikeminball = false
player.powers[pw_strong] =  STR_NONE
end
if player.pflags & PF_JUMPED and player.ikeminball == true then
player.mo.state = S_PLAY_ROLL
player.pflags = $ |PF_SPINNING|PF_THOKKED
end
if player.playerstate == PST_DEAD then
player.ikeminball = false
player.pflags = $ |PF_THOKKED
player.mo.state = S_PLAY_DEAD
end
if player.exiting then
player.ikeminball = false
player.pflags = $ |PF_THOKKED
end
end
end
end)

addHook("ThinkFrame", function()
for player in players.iterate do
if player.mo and player.mo.valid and player.mo.skin == "ikemin" then
-- initialize custom variables properly
if player.ikeminbdive == nil then player.ikeminbdive = false end

if not P_IsObjectOnGround(player.mo) and (player.cmd.buttons & BT_SPIN) ~= 0 and player.ikeminball == true and player.ikeminbdive == false then
S_StartSound(player.mo, sfx_zoom)
player.ikeminbdive = true
P_SetObjectMomZ(player.mo, -20 * FRACUNIT)
end
if player.ikeminbdive == true and P_IsObjectOnGround(player.mo) then
P_SetObjectMomZ(player.mo, 15 * FRACUNIT)
S_StartSound(player.mo, sfx_bnce2)
player.ikeminbdive = false
end
end
end
end)