actually good BHOP script
Key RequiredUniversal

actually good BHOP script

Universal Scriptegg364635653egg364635653 790 views 167 executesUpdated Jan 26, 2026
Unrated
00
Lua Script•486 lines (13188 chars)
-- skidded from vibe cafe
local v_u_1 = {}
local v_u_2 = nil
local v_u_3 = nil
local v_u_4 = nil
local v_u_5 = nil
local v_u_6 = nil
local v_u_7 = nil
local v_u_8 = nil
local v_u_9 = nil
local v_u_10 = nil
local v_u_11 = nil
local v_u_12 = nil
local v_u_13 = nil
local v_u_14 = nil
local v_u_15 = nil
local v_u_16 = nil
local v_u_17 = nil
local v_u_18 = nil
local v_u_19 = nil
local v_u_20 = nil
local v_u_21 = nil
local v_u_22 = nil
local v_u_23 = nil
local v_u_24 = nil
local v_u_25 = nil
local v_u_26 = 0.016666666666666666
local v_u_27 = nil
local v_u_28 = nil
local v_u_29 = nil
local v_u_30 = nil
local v_u_31 = nil
local v_u_32 = nil
local v_u_33 = nil
local v_u_34 = nil

-- Sound effects for jumping
for _, v35 in ipairs({
    "rbxassetid://7338942417",
    "rbxassetid://7338942345",
    "rbxassetid://7338942259",
    "rbxassetid://7338942180",
    "rbxassetid://7338942417"
}) do
    local v36 = Instance.new("Sound")
    v36.SoundId = v35
    v36.Volume = 2
    v36.Parent = game.Workspace
    table.insert(v_u_1, v36)
end

function init(p37, p38, p39)
    v_u_4 = p37
    v_u_31 = v_u_4.Character
    v_u_5 = v_u_31.HumanoidRootPart
    v_u_16 = p38
    v_u_21 = p39
    v_u_17 = 0
    v_u_6 = false
    v_u_32 = {
        ["forward"] = 0,
        ["side"] = 0
    }
    v_u_19 = 10000
    v_u_20 = 3
    v_u_14 = 250
    v_u_3 = 20
    v_u_15 = 10
    v_u_30 = 3
    v_u_22 = 0.5
    v_u_33 = 53.5
    v_u_11 = 400000
    v_u_23 = 300000
    v_u_24 = 0.6
    v_u_25 = v_u_30 + v_u_22
    v_u_7 = 125
    v_u_27 = 14000
    v_u_12 = 1500
    v_u_13 = 0.4
    externalVelocityImpulse = Vector3.new(0, 0, 0)
end

function initBodyMovers()
    v_u_8 = Instance.new("BodyPosition", v_u_5)
    v_u_8.Name = "movementPosition"
    v_u_8.D = v_u_7
    v_u_8.P = v_u_27
    v_u_8.maxForce = Vector3.new()
    v_u_8.position = Vector3.new()
    v_u_28 = Instance.new("BodyVelocity", v_u_5)
    v_u_28.Name = "movementVelocity"
    v_u_28.P = v_u_12
    v_u_28.maxForce = Vector3.new()
    v_u_28.velocity = Vector3.new()
    v_u_29 = Instance.new("BodyForce", v_u_5)
    v_u_29.Name = "gravityForce"
    local v40 = v_u_29
    local v41 = (1 - v_u_13) * 196.2
    v40.force = Vector3.new(0, v41, 0) * getCharacterMass()
end

function update(p42)
    v_u_26 = p42
    updateMoveInputSum()
    v_u_18 = getYaw()
    v_u_9 = v_u_18.lookVector
    if v_u_9 ~= nil then
        local v43, v44, v45, v46, v47 = findCollisionRay()
        v_u_34 = v46
        v_u_10 = v47
        v_u_6 = v43 ~= nil
        local v48 = v_u_5.Velocity
        local v49 = v_u_5.Velocity.y
        v_u_17 = v48 - Vector3.new(0, v49, 0)
        if v_u_6 and (v_u_21.Space or v_u_2) then
            v_u_2 = true
        else
            v_u_2 = false
        end
        setCharacterRotation()
        if v_u_2 then
            jump()
        elseif v_u_6 then
            run(v44, v45)
        else
            air()
        end
        applyVelocityCap()
    end
end

function updateMoveInputSum()
    v_u_32.forward = v_u_21.W == true and 1 or 0
    v_u_32.forward = v_u_21.S == true and v_u_32.forward - 1 or v_u_32.forward
    v_u_32.side = v_u_21.A == true and 1 or 0
    v_u_32.side = v_u_21.D == true and v_u_32.side - 1 or v_u_32.side
end

local v_u_50 = 100  -- Velocity cap (hardcoded)

function applyVelocityCap()
    if v_u_6 then
        if v_u_28 and v_u_28.velocity then
            local v51 = v_u_28.velocity
            local v52 = v51.X
            local v53 = v51.Z
            local v54 = Vector3.new(v52, 0, v53)
            local v55 = v54.Magnitude
            if v_u_50 < v55 then
                local v56 = v_u_50
                local v57 = v55 - 25
                local v58 = math.max(v57, v56)
                v54 = v54.Unit * v58
            end
            local v59 = v_u_28
            local v60 = v54.X
            local v61 = v51.Y
            local v62 = v54.Z
            v59.velocity = Vector3.new(v60, v61, v62)
        end
    end
end

local v_u_63 = {}
local v_u_64 = 0

function updateIgnoreList()
    table.clear(v_u_63)
    local v65 = v_u_63
    local v66 = v_u_31
    table.insert(v65, v66)
    local v67 = v_u_63
    local v68 = v_u_16
    table.insert(v67, v68)
end

local v_u_69 = nil

function findCollisionRay()
    v_u_64 = v_u_64 + v_u_26
    if v_u_64 >= 1 or #v_u_63 == 0 then
        updateIgnoreList()
        v_u_64 = 0
    end
    if not v_u_69 then
        v_u_69 = RaycastParams.new()
        v_u_69.RespectCanCollide = true
        v_u_69.FilterType = Enum.RaycastFilterType.Exclude
    end
    v_u_69.FilterDescendantsInstances = v_u_63
    local v70 = v_u_31.HumanoidRootPart.CFrame
    local v71 = {
        v_u_31.HumanoidRootPart.Position,
        (v70 * CFrame.new(-0.8, 0, 0)).p,
        (v70 * CFrame.new(0.8, 0, 0)).p,
        (v70 * CFrame.new(0, 0, 0.8)).p,
        (v70 * CFrame.new(0, 0, -0.8)).p
    }
    local v72 = -v_u_25
    local v73 = Vector3.new(0, v72, 0)
    local v74 = {}
    for _, v75 in ipairs(v71) do
        local v76 = game.Workspace:Raycast(v75, v73, v_u_69)
        if v76 then
            local v77 = { v76.Instance, v76.Position, v76.Normal }
            table.insert(v74, v77)
        end
    end
    if #v74 > 0 then
        return v74[1][1], v74[1][2], v74[1][3], 0, 0
    else
        return nil, nil, nil, 0, 0
    end
end

function setCharacterRotation()
    local v78 = v_u_5.Position + v_u_16.CoordinateFrame.lookVector
    local v79 = v_u_5
    local v80 = CFrame.new
    local v81 = v_u_5.Position
    local v82 = v78.x
    local v83 = v_u_5.Position.y
    local v84 = v78.z
    v79.CFrame = v80(v81, (Vector3.new(v82, v83, v84)))
    v_u_5.RotVelocity = Vector3.new()
end

function jump()
    v_u_1[math.random(1, #v_u_1)]:Play()
    local v85 = v_u_5
    local v86 = v_u_5.Velocity.x
    local v87 = v_u_33
    local v88 = v_u_5.Velocity.z
    v85.Velocity = Vector3.new(v86, v87, v88)
    air()
end

function air()
    v_u_8.maxForce = Vector3.new()
    v_u_28.velocity = getMovementVelocity(v_u_5.Velocity, v_u_19, v_u_20)
    v_u_28.velocity = v_u_28.velocity + externalVelocityImpulse
    externalVelocityImpulse = Vector3.new(0, 0, 0)
    v_u_28.maxForce = getMovementVelocityAirForce()
end

function run(p89, _)
    if p89 then
        local v90 = v_u_5.Velocity.magnitude
        local v91 = v_u_5.Velocity
        if v90 ~= 0 then
            local v92 = v90 - v90 * v_u_15 * v_u_26
            v91 = v91 * math.max(v92, 0) / v90
        end
        local v93 = v_u_30
        v_u_8.position = p89 + Vector3.new(0, v93, 0)
        local v94 = v_u_11
        v_u_8.maxForce = Vector3.new(0, v94, 0)
        v_u_28.velocity = getMovementVelocity(v91, v_u_14, v_u_3)
        v_u_28.velocity = v_u_28.velocity + externalVelocityImpulse
        externalVelocityImpulse = Vector3.new(0, 0, 0)
        v_u_28.maxForce = getMovementVelocityForce()
        v_u_28.P = v_u_12
    end
end

function getMovementVelocity(p95, p96, p97)
    local v98 = (v_u_9 * v_u_32.forward + (v_u_18 * CFrame.Angles(0, 1.5707963267948966, 0)).lookVector * v_u_32.side).unit
    local v99 = v_u_32.forward == 0 and v_u_32.side == 0 and Vector3.new(0, 0, 0) or v98
    local v100 = p95:Dot(v99)
    local v101 = p96 * v_u_26
    if p97 < v100 + v101 then
        local v102 = p97 - v100
        v101 = math.max(v102, 0)
    end
    return p95 + v99 * v101
end

function getMovementVelocityForce()
    local v103 = v_u_23
    local v104 = v_u_23
    return Vector3.new(v103, 0, v104)
end

function getMovementVelocityAirForce()
    local v105 = (v_u_9 * v_u_32.forward + (v_u_18 * CFrame.Angles(0, 1.5707963267948966, 0)).lookVector * v_u_32.side).unit
    local v106 = v_u_32.forward == 0 and v_u_32.side == 0 and Vector3.new(0, 0, 0) or v105
    local v107 = v106.x
    local v108 = math.abs(v107)
    local v109 = v106.z
    local v110 = math.abs(v109)
    local v111 = v_u_23 * v108
    local v112 = v_u_23 * v110
    return Vector3.new(v111, 0, v112)
end

function getPartYRatio(p113)
    local v114 = -p113.x
    local v115 = -p113.z
    local v116 = Vector3.new(v114, 0, v115)
    if v116.magnitude == 0 then
        return 0, 0
    end
    local v117 = v116.magnitude
    local v118 = p113.y
    local v119 = math.atan2(v117, v118) / 1.5707963267948966
    local v120 = v_u_9.x
    local v121 = v_u_9.z
    local v122 = Vector3.new(v120, 0, v121) * v119
    return v122:Dot(v116), -v116:Cross(v122).y
end

function getYaw()
    return v_u_16.CoordinateFrame * CFrame.Angles(-getPitch(), 0, 0)
end

function getPitch()
    local v123 = v_u_16.CoordinateFrame.lookVector:Dot(Vector3.new(0, 1, 0))
    return 1.5707963267948966 - math.acos(v123)
end

function getCharacterMass()
    return v_u_31.HumanoidRootPart:GetMass() + v_u_31.Head:GetMass()
end

function magnitude2D(p124, p125)
    local v126 = p124 * p124 + p125 * p125
    return math.sqrt(v126)
end

local v_u_127 = {
    ["W"] = false,
    ["S"] = false,
    ["A"] = false,
    ["D"] = false,
    ["Space"] = false
}

local v_u_128 = false
local v_u_129 = nil
local v_u_130 = nil
local v_u_131 = game:GetService("Players").LocalPlayer
local v_u_132 = workspace.CurrentCamera
local v_u_133 = game:GetService("UserInputService")

-- Set camera FOV to 70 (hardcoded)
v_u_132.FieldOfView = 70

function onInput(p134, _)
    local v135
    if p134.UserInputState == Enum.UserInputState.Begin then
        v135 = true
    else
        if p134.UserInputState ~= Enum.UserInputState.End then
            return
        end
        v135 = false
    end
    if p134.UserInputType == Enum.UserInputType.Keyboard then
        local v136 = p134.KeyCode.Name
        if v_u_127[v136] ~= nil then
            v_u_127[v136] = v135
        end
    end
end

-- Key toggle system (no GUI)
local toggleKey = Enum.KeyCode.F  -- You can change this key
_G.bhopEnabled = false

function setupKeyToggle()
    v_u_133.InputBegan:Connect(function(input)
        if input.KeyCode == toggleKey then
            toggleBhop()
        end
    end)
    
    -- Also listen for regular movement keys
    v_u_133.InputBegan:connect(onInput)
    v_u_133.InputEnded:connect(onInput)
end

function toggleBhop()
    if v_u_131.Character and v_u_131.Character:FindFirstChild("HumanoidRootPart") then
        v_u_128 = not v_u_128
        _G.bhopEnabled = v_u_128
        
        if v_u_128 then
            print("BHOP Enabled (Toggle with F)")
            local humanoid = v_u_131.Character:FindFirstChildOfClass("Humanoid") or v_u_131.Character:WaitForChild("Humanoid")
            humanoid.PlatformStand = true
            
            init(v_u_131, v_u_132, v_u_127)
            initBodyMovers()
            updateIgnoreList()
            v_u_64 = 0
            
            -- Seat prevention
            if v_u_130 then
                v_u_130:Disconnect()
            end
            v_u_130 = game.Workspace.DescendantAdded:Connect(function(p147)
                if v_u_128 and (p147:IsA("Seat") or p147:IsA("VehicleSeat")) then
                    p147.Disabled = true
                end
            end)
            
            for _, v148 in pairs(game.Workspace:GetDescendants()) do
                if v148:IsA("Seat") or v148:IsA("VehicleSeat") then
                    v148.Disabled = true
                end
            end
            
            print("Seat prevention enabled - all seats disabled")
            game:GetService("RunService"):BindToRenderStep("updateLoop", 1, updateLoop)
        else
            print("BHOP Disabled (Toggle with F)")
            local humanoid = v_u_131.Character:FindFirstChildOfClass("Humanoid")
            if humanoid then
                humanoid.PlatformStand = false
            end
            
            if v_u_130 then
                v_u_130:Disconnect()
                v_u_130 = nil
            end
            
            for _, v152 in pairs(game.Workspace:GetDescendants()) do
                if v152:IsA("Seat") or v152:IsA("VehicleSeat") then
                    v152.Disabled = false
                end
            end
            
            print("Seat prevention disabled - all seats re-enabled")
            game:GetService("RunService"):UnbindFromRenderStep("updateLoop")
            
            if v_u_8 then
                v_u_8:Destroy()
            end
            if v_u_28 then
                v_u_28:Destroy()
            end
            if v_u_29 then
                v_u_29:Destroy()
            end
        end
    else
        warn("Cannot toggle BHOP - character not ready")
    end
end

function main()
    setupKeyToggle()
    
    v_u_131.CharacterAdded:Connect(function(_)
        print("Character respawned - re-initializing BHOP")
        v_u_128 = false
        task.wait(0.5)
    end)
    
    print("BHOP Script Loaded")
    print("Toggle with: F key")
    print("Velocity Cap: 100")
    print("FOV: 70")
    print("Crosshair: Disabled")
end

local v_u_162 = nil
local v_u_163 = 0.016666666666666666

function setDeltaTime()
    local v164 = tick()
    if v_u_162 == nil then
        v_u_163 = 0.016666666666666666
    else
        v_u_163 = v164 - v_u_162
    end
    v_u_162 = v164
end

function updateLoop()
    setDeltaTime()
    update(v_u_163)
end

-- Start the script
main()

Features & Information

amazing bhop yay decompiled with velocity

Community Comments (2)

heeroomyth4heeroomyth4Jan 26, 2026

What's this

Replying to @heeroomyth4
egg364635653egg364635653Jan 26, 2026

@heeroomyth4 its a bhop script the reason it looks weird is its decompiled from vibe cafe

More Scripts for Universal Scripts