
Key RequiredUniversal

-- LocalScript in StarterPlayerScripts
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local player = Players.LocalPlayer
local cam = Workspace.CurrentCamera
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local hrp = character:WaitForChild("HumanoidRootPart")
-- SETTINGS
local wallCheckDistance = 2
local jumpCooldown = 0.3
local flickAngle = 20 -- degrees left/right
local flickTime = 0.15 -- duration per flick phase
-- STATE
local lastJumpTime = 0
local flicking = false
local autoWallHop = true
-- Raycast config
local rayParams = RaycastParams.new()
rayParams.FilterType = Enum.RaycastFilterType.Blacklist
rayParams.FilterDescendantsInstances = {character}
-- 🔍 Wall Detection
local function isTouchingWall()
local origin = hrp.Position
local directions = {
hrp.CFrame.LookVector,
-hrp.CFrame.LookVector,
hrp.CFrame.RightVector,
-hrp.CFrame.RightVector
}
for _, dir in pairs(directions) do
local result = Workspace:Raycast(origin, dir * wallCheckDistance, rayParams)
if result and result.Instance and result.Instance.CanCollide then
return true
end
end
return false
end
-- 🔄 Character Flick (HRP Rotation)
local function rotateCharacter(offsetYaw)
local currentPos = hrp.Position
local currentRot = hrp.Orientation
local newYaw = currentRot.Y + offsetYaw
local newCFrame = CFrame.new(currentPos) * CFrame.Angles(0, math.rad(newYaw), 0)
local tween = TweenService:Create(hrp, TweenInfo.new(flickTime, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {
CFrame = newCFrame
})
tween:Play()
tween.Completed:Wait()
end
-- 🤸 Full Flick Sequence
local function flickCharacter()
if flicking then return end
flicking = true
-- Flick left
rotateCharacter(-flickAngle)
-- Flick right
rotateCharacter(flickAngle * 2)
-- Return to center
rotateCharacter(-flickAngle)
flicking = false
end
-- 🎮 Main Loop
RunService.RenderStepped:Connect(function()
if not autoWallHop then return end
if tick() - lastJumpTime < jumpCooldown then return end
if humanoid:GetState() == Enum.HumanoidStateType.Freefall and isTouchingWall() then
lastJumpTime = tick()
flickCharacter()
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
end)



Ts sucks *
chat gpt
I never said this was good
thanks man, this helped alot for me because im not going to spend an hour on a trick that i probably would never have to do again
This is trash so i made a BETTER ONE
.
play you're one let the man be
f
@heheheh123 ?
its ai
like make a normal one