Noclip tool
Key RequiredUniversal

Noclip tool

Universal ScriptFEscript_showcaserFEscript_showcaser 1.2K views 816 executesUpdated Jan 13, 2026
0.0/ 5(1 votes)
010% Positive
Lua Script•215 lines (6349 chars)
-- 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)

Features & Information

Sorry guys I gotta change the description because oxide isn't working and probably never will ever again because of Roblox's fuckass permadeath patch and if y'all don't know the owner of Oxide reanimation just quit life and their discord server belongs to someone else and to them oxide is dead so oxide will never be fixed. Unless someone is willing to edit oxide so it will be usable again you'll have to use Currentangle.

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts