freeslot("MT_SNOW")

addHook("PlayerThink", function(player)
    if not player.mo or player.mo.skin ~= "megaman" then
        return
    end
    
    if player.mo.frozen then
        return true
    elseif player.cmd.buttons & BT_CUSTOM2 and player.bot == 0 then
        if not player.mo.thokk then
            player.mo.oldf = player.mo.flags
            player.mo.flags = $1 & MF2_INVERTAIMABLE
            player.mo.snow = P_SpawnPlayerMissile(player.mo, MT_SNOW)
            player.mo.state = S_PLAY_FIRE
            if player.mo.snow and player.mo.snow.valid then
                player.mo.snow.angle = player.mo.angle
                P_SetOrigin(player.mo.snow, player.mo.x + player.mo.momx + FixedMul(40*FRACUNIT, cos(player.mo.angle)), player.mo.y + player.mo.momy + FixedMul(40*FRACUNIT, sin(player.mo.angle)), player.mo.z + player.mo.height / 2 + 20*FRACUNIT)
                player.mo.snow.fotimer = 35
            end
            player.mo.flags = player.mo.oldf
        end
        player.mo.thokk = true
    else
        player.mo.thokk = false
    end
end)

addHook("MobjMoveCollide", function(bullet, mobj)
    if bullet.type ~= MT_SNOW then return end
    if mobj and bullet and bullet.z <= mobj.z + mobj.height and bullet.z + bullet.height >= mobj.z then
        if mobj.type == MT_PLAYER and mobj.snow then
            P_InstaThrust(bullet, bullet.angle, 60*FRACUNIT)
        else
            if not mobj.oldc then
                mobj.oldc = mobj.color
            end
            if not mobj.oldf then
                if mobj.type == MT_PLAYER then
                    mobj.oldpf = mobj.pflags
                end
                mobj.oldf = mobj.flags
            end
            mobj.frozen = true
            mobj.frozent = 175
            S_StartSound(mobj, sfx_s3kces)
            mobj.colorized = true
            mobj.color = SKINCOLOR_ICY
            mobj.flags = MF_SOLID | MF_PUSHABLE | MF_NOGRAVITY
            if mobj.type == MT_PLAYER then
                mobj.player.powers[pw_nocontrol] = 1
                mobj.pflags = PF_FULLSTASIS
            end
        end
    end
end)

addHook("MobjThinker", function(mobj)
    if mobj.frozen then
        if mobj.frozent then
            mobj.frozent = $1 - 1
        else
            mobj.frozen = false
            mobj.flags = mobj.oldf
            if mobj.oldpf then 
                mobj.pflags = mobj.oldpf
                mobj.player.powers[pw_nocontrol] = 0
            end
            mobj.color = mobj.oldc
            mobj.colorized = false
            S_StartSound(mobj, sfx_shattr)
            mobj.momx = 0
            mobj.momy = 0
        end
        return true
    end
    if mobj.valid and mobj.type == MT_SNOW then
        if mobj.fotimer then
            mobj.fotimer = $1 - 1
        else
            P_RemoveMobj(mobj)
            return
        end
    end
end)