-- 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)