-- SERVICES local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") -- SAVE DEFAULT WALK SPEED local DEFAULT_WALK_SPEED = humanoid.WalkSpeed -- TOOL CREATION local tool = Instance.new("Tool") tool.Name = "noclip" tool.RequiresHandle = false tool.Parent = player:WaitForChild("Backpack") -- R6 Motor6D Mapping local R6_MAPPING = { ["Torso"] = "RootJoint", ["Head"] = "Neck", ["Right Arm"] = "Right Shoulder", ["Left Arm"] = "Left Shoulder", ["Right Leg"] = "Right Hip", ["Left Leg"] = "Left Hip", } local motors = {} for _, m in ipairs(character:GetDescendants()) do if m:IsA("Motor6D") then motors[m.Name] = m end end local function resetMotors() for _, m in pairs(motors) do m.Transform = CFrame.identity end end --======================================== -- PART 1: TOOL "Reversal red" LOOP --======================================== local toolConnection local keyframeSequence local asset = game:GetObjects("rbxassetid://15194217961")[1] if asset then for _, obj in ipairs(asset:GetDescendants()) do if obj:IsA("KeyframeSequence") and obj.Name == "Reversal red" then keyframeSequence = obj break end end end local function playKeyframe(seq) if not seq then return end local keyframes = seq:GetKeyframes() table.sort(keyframes, function(a,b) return a.Time < b.Time end) local startTime = os.clock() local duration = keyframes[#keyframes].Time toolConnection = RunService.RenderStepped:Connect(function() local t = os.clock() - startTime for i = #keyframes,1,-1 do if t >= keyframes[i].Time then for _, pose in ipairs(keyframes[i]:GetDescendants()) do if pose:IsA("Pose") then local motor = motors[R6_MAPPING[pose.Name]] if motor then motor.Transform = pose.CFrame end end end break end end if t >= duration then startTime = os.clock() -- loop end end) end --======================================== -- PART 2: WALK / RUN / IDLE OVERRIDE --======================================== local modelAsset = game:GetObjects("rbxassetid://128769945038492")[1] local idleSeq, walkSeq, runSeq if modelAsset then for _, obj in ipairs(modelAsset:GetDescendants()) do if obj:IsA("KeyframeSequence") then local name = obj.Name:lower() if name:find("idle") and not idleSeq then idleSeq = obj elseif name:find("walk") and not walkSeq then walkSeq = obj elseif name:find("run") and not runSeq then runSeq = obj end end end end local movementConn local currentMovementSeq local runEnabled = false local movementPaused = false local function playMovement(seq) if not seq then return end currentMovementSeq = seq if movementConn then movementConn:Disconnect() movementConn = nil end local keyframes = seq:GetKeyframes() table.sort(keyframes, function(a,b) return a.Time < b.Time end) local startTime = os.clock() local duration = keyframes[#keyframes].Time movementConn = RunService.RenderStepped:Connect(function() if movementPaused then return end -- stop updating if paused local t = os.clock() - startTime for i = #keyframes,1,-1 do if t >= keyframes[i].Time then for _, pose in ipairs(keyframes[i]:GetDescendants()) do if pose:IsA("Pose") then local motor = motors[R6_MAPPING[pose.Name]] if motor then motor.Transform = pose.CFrame end end end break end end if t >= duration then startTime = os.clock() -- loop end end) end -- Update movement every frame RunService.RenderStepped:Connect(function() if movementPaused then return end local moveMag = humanoid.MoveDirection.Magnitude if moveMag > 0 then if runEnabled and runSeq then if currentMovementSeq ~= runSeq then playMovement(runSeq) end elseif walkSeq then if currentMovementSeq ~= walkSeq then playMovement(walkSeq) end end else if idleSeq then if currentMovementSeq ~= idleSeq then playMovement(idleSeq) end else if movementConn then movementConn:Disconnect() movementConn = nil end end end end) --======================================== -- PART 3: RUN TOGGLE BUTTON --======================================== if runSeq then local gui = Instance.new("ScreenGui", player.PlayerGui) gui.ResetOnSpawn = false local frame = Instance.new("Frame", gui) frame.Size = UDim2.new(0,150,0,50) frame.Position = UDim2.new(0,20,0,20) frame.BackgroundColor3 = Color3.fromRGB(30,30,30) Instance.new("UICorner", frame) local runBtn = Instance.new("TextButton", frame) runBtn.Size = UDim2.new(1, -10, 1, -10) runBtn.Position = UDim2.new(0,5,0,5) runBtn.Text = "Run: OFF" runBtn.TextScaled = true runBtn.MouseButton1Click:Connect(function() runEnabled = not runEnabled if runEnabled then humanoid.WalkSpeed = 30 runBtn.Text = "Run: ON" else humanoid.WalkSpeed = DEFAULT_WALK_SPEED runBtn.Text = "Run: OFF" end end) end --======================================== -- TOOL EVENTS: PAUSE MOVEMENT WHEN EQUIPPED --======================================== tool.Equipped:Connect(function() movementPaused = true -- pause walk/idle/run if toolConnection then toolConnection:Disconnect() toolConnection = nil end resetMotors() if keyframeSequence then playKeyframe(keyframeSequence) end end) tool.Unequipped:Connect(function() movementPaused = false -- resume walk/idle/run if toolConnection then toolConnection:Disconnect() toolConnection = nil end resetMotors() end)