local player = game.Players.LocalPlayer local uis = game:GetService("UserInputService") local camera = workspace.CurrentCamera local runService = game:GetService("RunService") -- Wait for character local function getCharacter() local char = player.Character or player.CharacterAdded:Wait() return char, char:WaitForChild("Humanoid"), char:WaitForChild("HumanoidRootPart") end -- GUI setup local gui = Instance.new("ScreenGui", game.CoreGui) gui.Name = "WallhopGUI" local label = Instance.new("TextLabel", gui) label.Size = UDim2.new(0, 200, 0, 40) label.Position = UDim2.new(0, 20, 0, 100) label.BackgroundColor3 = Color3.fromRGB(30, 30, 30) label.TextColor3 = Color3.new(1, 1, 1) label.TextScaled = true label.BorderSizePixel = 1 label.Font = Enum.Font.SourceSansBold label.Text = "Press H to Wallhop" -- Flicking the camera up then resetting it instantly local function flickCamera() local original = camera.CFrame camera.CFrame = camera.CFrame * CFrame.Angles(math.rad(-30), 0, 0) task.wait(0.02) camera.CFrame = original end -- Do wallhop local function doWallhop() local char, humanoid, hrp = getCharacter() local state = humanoid:GetState() -- Only if player is jumping or falling if state ~= Enum.HumanoidStateType.Jumping and state ~= Enum.HumanoidStateType.Freefall then return end -- Raycast forward to check for a wall local params = RaycastParams.new() params.FilterDescendantsInstances = {char} params.FilterType = Enum.RaycastFilterType.Blacklist local wall = workspace:Raycast(hrp.Position, hrp.CFrame.LookVector * 2, params) if wall then -- Flick-style velocity hrp.Velocity = Vector3.new(0, 48, 0) + hrp.CFrame.LookVector * 6 -- Camera flick up/down flickCamera() end end -- Keybind uis.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.KeyCode == Enum.KeyCode.H then doWallhop() end end)