Runaway script Op
Key RequiredUniversal

Runaway script Op

Universal Scriptsigmabrodudesigmabrodude 625 views 17.3K executesUpdated Aug 23, 2026
Unrated
00
Lua Scriptโ€ข618 lines (20432 chars)
--[[
	NOCLIP + SPEED CONTROL
	- Toggle switch: NOCLIP (walk through walls) vs CLIP (normal collision)
	- Textbox + button to set and enforce a custom WalkSpeed
	Mobile + desktop compatible.

	Place this as a LocalScript in StarterPlayerScripts.
]]

local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer

----------------------------------------------------------------
-- CONFIG
----------------------------------------------------------------
local THEME = {
	Background = Color3.fromRGB(18, 18, 24),
	Panel = Color3.fromRGB(26, 26, 34),
	Card = Color3.fromRGB(32, 32, 42),
	Accent1 = Color3.fromRGB(0, 200, 255),
	Accent2 = Color3.fromRGB(170, 0, 255),
	Text = Color3.fromRGB(240, 240, 245),
	SubText = Color3.fromRGB(160, 160, 175),
	Danger = Color3.fromRGB(255, 70, 90),
	On = Color3.fromRGB(0, 220, 130),
}

local IS_MOBILE = UserInputService.TouchEnabled and not UserInputService.MouseEnabled

local noclipEnabled = false
local enforcedSpeed = nil
local noclipConnection = nil

----------------------------------------------------------------
-- CHARACTER HELPERS
----------------------------------------------------------------
local function getCharacter()
	return player.Character or player.CharacterAdded:Wait()
end

local function getHumanoid()
	local char = getCharacter()
	return char:FindFirstChildOfClass("Humanoid") or char:WaitForChild("Humanoid", 5)
end

----------------------------------------------------------------
-- GUI SETUP
----------------------------------------------------------------
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "NoclipSpeedUI"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent = player:WaitForChild("PlayerGui")

-- Toggle button (opens panel)
local toggleSize = IS_MOBILE and 60 or 50
local openBtn = Instance.new("TextButton")
openBtn.Name = "OpenButton"
openBtn.Size = UDim2.new(0, toggleSize, 0, toggleSize)
openBtn.Position = UDim2.new(0, 16, 0.6, -toggleSize / 2)
openBtn.BackgroundColor3 = THEME.Panel
openBtn.Text = "๐Ÿ‘ป"
openBtn.TextScaled = true
openBtn.AutoButtonColor = false
openBtn.Parent = screenGui
Instance.new("UICorner", openBtn).CornerRadius = UDim.new(1, 0)
local openStroke = Instance.new("UIStroke", openBtn)
openStroke.Thickness = 2
openStroke.Color = THEME.Accent1

-- Main panel
local mainWidth = IS_MOBILE and 250 or 270
local mainHeight = 380
local main = Instance.new("Frame")
main.Name = "Main"
main.Size = UDim2.new(0, mainWidth, 0, mainHeight)
main.Position = UDim2.new(0, 16 + toggleSize + 10, 0.6, -mainHeight / 2)
main.BackgroundColor3 = THEME.Background
main.BorderSizePixel = 0
main.ClipsDescendants = true
main.Visible = false
main.Parent = screenGui
Instance.new("UICorner", main).CornerRadius = UDim.new(0, 14)

local mainStroke = Instance.new("UIStroke", main)
mainStroke.Thickness = 1.5
mainStroke.Color = THEME.Accent1
mainStroke.Transparency = 0.3

local gradient = Instance.new("UIGradient", mainStroke)
gradient.Color = ColorSequence.new(THEME.Accent1, THEME.Accent2)

-- Title bar (draggable)
local titleBar = Instance.new("Frame")
titleBar.Name = "TitleBar"
titleBar.Size = UDim2.new(1, 0, 0, 42)
titleBar.BackgroundColor3 = THEME.Panel
titleBar.BorderSizePixel = 0
titleBar.Parent = main
Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 14)

local titleFix = Instance.new("Frame")
titleFix.Size = UDim2.new(1, 0, 0, 14)
titleFix.Position = UDim2.new(0, 0, 1, -14)
titleFix.BackgroundColor3 = THEME.Panel
titleFix.BorderSizePixel = 0
titleFix.ZIndex = 0
titleFix.Parent = titleBar

local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(1, -40, 1, 0)
titleLabel.Position = UDim2.new(0, 14, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "NOCLIP ยท SPEED ยท TP"
titleLabel.TextColor3 = THEME.Text
titleLabel.Font = Enum.Font.GothamBold
titleLabel.TextSize = 12
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
titleLabel.Parent = titleBar

local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 32, 0, 32)
closeBtn.Position = UDim2.new(1, -38, 0.5, -16)
closeBtn.BackgroundColor3 = THEME.Panel
closeBtn.Text = "ร—"
closeBtn.TextColor3 = THEME.SubText
closeBtn.Font = Enum.Font.GothamBold
closeBtn.TextSize = 20
closeBtn.AutoButtonColor = false
closeBtn.Parent = titleBar
Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(1, 0)

----------------------------------------------------------------
-- NOCLIP SECTION
----------------------------------------------------------------
local noclipLabel = Instance.new("TextLabel")
noclipLabel.Size = UDim2.new(1, -24, 0, 16)
noclipLabel.Position = UDim2.new(0, 12, 0, 52)
noclipLabel.BackgroundTransparency = 1
noclipLabel.Font = Enum.Font.GothamBold
noclipLabel.TextSize = 11
noclipLabel.TextColor3 = THEME.SubText
noclipLabel.TextXAlignment = Enum.TextXAlignment.Left
noclipLabel.Text = "COLLISION"
noclipLabel.Parent = main

-- Switch track
local switchTrack = Instance.new("TextButton")
switchTrack.Size = UDim2.new(1, -24, 0, 50)
switchTrack.Position = UDim2.new(0, 12, 0, 72)
switchTrack.BackgroundColor3 = THEME.Card
switchTrack.Text = ""
switchTrack.AutoButtonColor = false
switchTrack.Parent = main
Instance.new("UICorner", switchTrack).CornerRadius = UDim.new(0, 12)

local switchStroke = Instance.new("UIStroke", switchTrack)
switchStroke.Thickness = 1.5
switchStroke.Color = THEME.Accent1
switchStroke.Transparency = 0.5

-- the sliding knob (half width, slides left = CLIP, right = NOCLIP)
local knob = Instance.new("Frame")
knob.Size = UDim2.new(0.5, -4, 1, -8)
knob.Position = UDim2.new(0, 4, 0, 4)
knob.BackgroundColor3 = THEME.Danger
knob.Parent = switchTrack
Instance.new("UICorner", knob).CornerRadius = UDim.new(0, 9)

local clipLabel = Instance.new("TextLabel")
clipLabel.Size = UDim2.new(0.5, 0, 1, 0)
clipLabel.Position = UDim2.new(0, 0, 0, 0)
clipLabel.BackgroundTransparency = 1
clipLabel.Text = "CLIP"
clipLabel.Font = Enum.Font.GothamBlack
clipLabel.TextSize = 13
clipLabel.TextColor3 = THEME.Text
clipLabel.ZIndex = 2
clipLabel.Parent = switchTrack

local noclipTextLabel = Instance.new("TextLabel")
noclipTextLabel.Size = UDim2.new(0.5, 0, 1, 0)
noclipTextLabel.Position = UDim2.new(0.5, 0, 0, 0)
noclipTextLabel.BackgroundTransparency = 1
noclipTextLabel.Text = "NOCLIP"
noclipTextLabel.Font = Enum.Font.GothamBlack
noclipTextLabel.TextSize = 13
noclipTextLabel.TextColor3 = THEME.SubText
noclipTextLabel.ZIndex = 2
noclipTextLabel.Parent = switchTrack

----------------------------------------------------------------
-- SPEED SECTION
----------------------------------------------------------------
local speedLabel = Instance.new("TextLabel")
speedLabel.Size = UDim2.new(1, -24, 0, 16)
speedLabel.Position = UDim2.new(0, 12, 0, 136)
speedLabel.BackgroundTransparency = 1
speedLabel.Font = Enum.Font.GothamBold
speedLabel.TextSize = 11
speedLabel.TextColor3 = THEME.SubText
speedLabel.TextXAlignment = Enum.TextXAlignment.Left
speedLabel.Text = "WALK SPEED"
speedLabel.Parent = main

local inputBox = Instance.new("TextBox")
inputBox.Size = UDim2.new(1, -24, 0, 42)
inputBox.Position = UDim2.new(0, 12, 0, 156)
inputBox.BackgroundColor3 = THEME.Card
inputBox.Text = ""
inputBox.PlaceholderText = "Enter speed (e.g. 50)"
inputBox.PlaceholderColor3 = THEME.SubText
inputBox.TextColor3 = THEME.Text
inputBox.Font = Enum.Font.GothamBold
inputBox.TextSize = 14
inputBox.ClearTextOnFocus = false
inputBox.Parent = main
Instance.new("UICorner", inputBox).CornerRadius = UDim.new(0, 10)

local inputStroke = Instance.new("UIStroke", inputBox)
inputStroke.Thickness = 1.2
inputStroke.Color = THEME.Accent1
inputStroke.Transparency = 0.5

local inputPadding = Instance.new("UIPadding", inputBox)
inputPadding.PaddingLeft = UDim.new(0, 12)
inputPadding.PaddingRight = UDim.new(0, 12)

local enableSpeedBtn = Instance.new("TextButton")
enableSpeedBtn.Size = UDim2.new(1, -24, 0, 42)
enableSpeedBtn.Position = UDim2.new(0, 12, 0, 206)
enableSpeedBtn.BackgroundColor3 = THEME.Accent1
enableSpeedBtn.Text = "ENABLE SPEED"
enableSpeedBtn.TextColor3 = Color3.new(1, 1, 1)
enableSpeedBtn.Font = Enum.Font.GothamBold
enableSpeedBtn.TextSize = 14
enableSpeedBtn.AutoButtonColor = false
enableSpeedBtn.Parent = main
Instance.new("UICorner", enableSpeedBtn).CornerRadius = UDim.new(0, 10)

local enableGradient = Instance.new("UIGradient", enableSpeedBtn)
enableGradient.Color = ColorSequence.new(THEME.Accent1, THEME.Accent2)
enableGradient.Rotation = 20

local statusLabel = Instance.new("TextLabel")
statusLabel.Size = UDim2.new(1, -24, 0, 16)
statusLabel.Position = UDim2.new(0, 12, 0, 258)
statusLabel.BackgroundTransparency = 1
statusLabel.Font = Enum.Font.Gotham
statusLabel.TextSize = 11
statusLabel.TextColor3 = THEME.SubText
statusLabel.TextXAlignment = Enum.TextXAlignment.Left
statusLabel.Text = "Speed: default | Noclip: off"
statusLabel.Parent = main

----------------------------------------------------------------
-- TELEPORT SECTION
----------------------------------------------------------------
local TARGET_POSITION = Vector3.new(565, 1136, 83432) -- Y is only used as a last-resort fallback

local tpLabel = Instance.new("TextLabel")
tpLabel.Size = UDim2.new(1, -24, 0, 16)
tpLabel.Position = UDim2.new(0, 12, 0, 282)
tpLabel.BackgroundTransparency = 1
tpLabel.Font = Enum.Font.GothamBold
tpLabel.TextSize = 11
tpLabel.TextColor3 = THEME.SubText
tpLabel.TextXAlignment = Enum.TextXAlignment.Left
tpLabel.Text = "TELEPORT"
tpLabel.Parent = main

local tpBtn = Instance.new("TextButton")
tpBtn.Size = UDim2.new(1, -24, 0, 44)
tpBtn.Position = UDim2.new(0, 12, 0, 302)
tpBtn.BackgroundColor3 = THEME.Card
tpBtn.Text = "๐Ÿ“ TELEPORT TO SAVED SPOT"
tpBtn.TextColor3 = THEME.Text
tpBtn.Font = Enum.Font.GothamBold
tpBtn.TextSize = 13
tpBtn.AutoButtonColor = false
tpBtn.Parent = main
Instance.new("UICorner", tpBtn).CornerRadius = UDim.new(0, 10)

local tpStroke = Instance.new("UIStroke", tpBtn)
tpStroke.Thickness = 1.5
tpStroke.Color = THEME.Accent1
tpStroke.Transparency = 0.3

local tpGrad = Instance.new("UIGradient", tpStroke)
tpGrad.Color = ColorSequence.new(THEME.Accent1, THEME.Accent2)
task.spawn(function()
	while tpBtn.Parent do
		tpGrad.Rotation = (tpGrad.Rotation + 2) % 360
		task.wait(0.02)
	end
end)

----------------------------------------------------------------
-- NOTIFICATION
----------------------------------------------------------------
local function notify(text, color)
	local note = Instance.new("TextLabel")
	note.Size = UDim2.new(0, 220, 0, 34)
	note.Position = UDim2.new(0.5, -110, 0, -50)
	note.BackgroundColor3 = THEME.Panel
	note.TextColor3 = color or THEME.Accent1
	note.Font = Enum.Font.GothamBold
	note.TextSize = 13
	note.Text = text
	note.ZIndex = 10
	note.Parent = screenGui
	Instance.new("UICorner", note).CornerRadius = UDim.new(0, 8)
	local stroke = Instance.new("UIStroke", note)
	stroke.Color = color or THEME.Accent1
	stroke.Thickness = 1.2

	TweenService:Create(note, TweenInfo.new(0.35, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
		{Position = UDim2.new(0.5, -110, 0, 20)}):Play()

	task.delay(1.4, function()
		local t = TweenService:Create(note, TweenInfo.new(0.3), {Position = UDim2.new(0.5, -110, 0, -50), TextTransparency = 1})
		t:Play()
		t.Completed:Wait()
		note:Destroy()
	end)
end

local function updateStatus()
	local speedText = enforcedSpeed and tostring(enforcedSpeed) or "default"
	statusLabel.Text = string.format("Speed: %s | Noclip: %s", speedText, noclipEnabled and "on" or "off")
end

----------------------------------------------------------------
-- TELEPORT LOGIC (progressive stream-ahead + ground detection)
----------------------------------------------------------------
local function streamAndTweenTo(hrp, targetXZ)
	local startPosition = hrp.Position
	local targetGuess = Vector3.new(targetXZ.X, startPosition.Y, targetXZ.Z)
	local totalDistance = (targetGuess - startPosition).Magnitude

	local waypointCount = math.clamp(math.floor(totalDistance / 2500), 2, 6)

	local params = RaycastParams.new()
	params.FilterType = Enum.RaycastFilterType.Exclude
	if hrp.Parent then
		params.FilterDescendantsInstances = {hrp.Parent}
	end

	local function findGround(x, z, fallbackY)
		local origin = Vector3.new(x, 10000, z)
		local result = workspace:Raycast(origin, Vector3.new(0, -100000, 0), params)
		if result then
			return result.Position + Vector3.new(0, 3, 0)
		end
		return Vector3.new(x, fallbackY, z)
	end

	for i = 1, waypointCount do
		local alpha = i / waypointCount
		local waypointXZ = Vector3.new(
			startPosition.X + (targetXZ.X - startPosition.X) * alpha,
			0,
			startPosition.Z + (targetXZ.Z - startPosition.Z) * alpha
		)

		if workspace.StreamingEnabled then
			pcall(function()
				player:RequestStreamAroundAsync(waypointXZ)
			end)
		end
		task.wait(0.15)

		local waypoint = findGround(waypointXZ.X, waypointXZ.Z, hrp.Position.Y)

		local segmentTween = TweenService:Create(
			hrp,
			TweenInfo.new(0.4, Enum.EasingStyle.Linear),
			{CFrame = CFrame.new(waypoint)}
		)
		segmentTween:Play()
		segmentTween.Completed:Wait()
	end

	if workspace.StreamingEnabled then
		pcall(function()
			player:RequestStreamAroundAsync(targetXZ)
		end)
		task.wait(0.2)
	end

	local finalPos = findGround(targetXZ.X, targetXZ.Z, targetXZ.Y)
	hrp.CFrame = CFrame.new(finalPos)
end

local function teleportToSavedSpot()
	local char = player.Character
	local hrp = char and char:FindFirstChild("HumanoidRootPart")
	if not hrp then
		notify("No character found", THEME.Danger)
		return
	end

	hrp.Anchored = false -- safety: undo any leftover freeze from a previous attempt
	hrp.AssemblyLinearVelocity = Vector3.zero
	hrp.AssemblyAngularVelocity = Vector3.zero

	local humanoid = char:FindFirstChildOfClass("Humanoid")
	if humanoid then
		humanoid:ChangeState(Enum.HumanoidStateType.Landed)
		humanoid.PlatformStand = true
	end

	hrp.Anchored = true
	notify("Traveling...", THEME.Accent2)

	streamAndTweenTo(hrp, TARGET_POSITION)

	if hrp and hrp.Parent then
		hrp.Anchored = false
		hrp.AssemblyLinearVelocity = Vector3.zero
		if humanoid then
			humanoid.PlatformStand = false
		end
		notify("Teleported!", THEME.Accent1)
	end
end

tpBtn.MouseButton1Click:Connect(teleportToSavedSpot)

----------------------------------------------------------------
-- NOCLIP LOGIC
----------------------------------------------------------------
local function setNoclip(state)
	noclipEnabled = state

	if noclipConnection then
		noclipConnection:Disconnect()
		noclipConnection = nil
	end

	if noclipEnabled then
		noclipConnection = RunService.Stepped:Connect(function()
			local char = player.Character
			if not char then return end
			for _, part in ipairs(char:GetDescendants()) do
				if part:IsA("BasePart") and part.CanCollide then
					part.CanCollide = false
				end
			end
		end)
		notify("Noclip ON", THEME.Danger)
	else
		local char = player.Character
		if char then
			for _, part in ipairs(char:GetDescendants()) do
				if part:IsA("BasePart") then
					part.CanCollide = true
				end
			end
			-- keep HumanoidRootPart non-colliding (Roblox default) to avoid getting stuck
			local hrp = char:FindFirstChild("HumanoidRootPart")
			if hrp then
				hrp.CanCollide = false
			end
		end
		notify("Clip ON (normal collision)", THEME.On)
	end

	-- animate the switch knob
	local knobTarget = noclipEnabled and UDim2.new(0.5, 0, 0, 4) or UDim2.new(0, 4, 0, 4)
	TweenService:Create(knob, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
		{Position = knobTarget, BackgroundColor3 = noclipEnabled and THEME.Danger or THEME.On}):Play()

	clipLabel.TextColor3 = noclipEnabled and THEME.SubText or THEME.Text
	noclipTextLabel.TextColor3 = noclipEnabled and THEME.Text or THEME.SubText

	updateStatus()
end

switchTrack.MouseButton1Click:Connect(function()
	setNoclip(not noclipEnabled)
end)

-- re-apply noclip collision state whenever the character respawns
player.CharacterAdded:Connect(function()
	task.wait(0.5)
	if noclipEnabled then
		setNoclip(true)
	end
end)

----------------------------------------------------------------
-- SPEED LOGIC
----------------------------------------------------------------
local function setSpeed()
	local humanoid = getHumanoid()
	if not humanoid then
		notify("No character found", THEME.Danger)
		return
	end

	local value = tonumber(inputBox.Text)
	if not value then
		notify("Enter a valid number", THEME.Danger)
		return
	end

	value = math.clamp(value, 0, 500)
	humanoid.WalkSpeed = value
	enforcedSpeed = value
	updateStatus()
	notify("Speed set to " .. value .. "!", THEME.Accent2)

	enableSpeedBtn.Size = UDim2.new(1, -20, 0, 40)
	TweenService:Create(enableSpeedBtn, TweenInfo.new(0.15, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
		{Size = UDim2.new(1, -24, 0, 42)}):Play()
end

enableSpeedBtn.MouseButton1Click:Connect(setSpeed)
inputBox.FocusLost:Connect(function(enterPressed)
	if enterPressed then setSpeed() end
end)

-- enforcement loop: keeps re-applying set speed every frame
RunService.Heartbeat:Connect(function()
	if enforcedSpeed == nil then return end
	local char = player.Character
	local humanoid = char and char:FindFirstChildOfClass("Humanoid")
	if humanoid and humanoid.WalkSpeed ~= enforcedSpeed then
		humanoid.WalkSpeed = enforcedSpeed
	end
end)

----------------------------------------------------------------
-- HOVER FEEDBACK
----------------------------------------------------------------
local function feedback(button, baseColor, hoverColor)
	button.MouseEnter:Connect(function()
		TweenService:Create(button, TweenInfo.new(0.15), {BackgroundColor3 = hoverColor}):Play()
	end)
	button.MouseLeave:Connect(function()
		TweenService:Create(button, TweenInfo.new(0.15), {BackgroundColor3 = baseColor}):Play()
	end)
end
feedback(closeBtn, THEME.Panel, Color3.fromRGB(45, 45, 55))
feedback(openBtn, THEME.Panel, Color3.fromRGB(40, 40, 50))
feedback(tpBtn, THEME.Card, Color3.fromRGB(40, 40, 55))

----------------------------------------------------------------
-- OPEN / CLOSE ANIMATION
----------------------------------------------------------------
local open = false
local function setOpen(state)
	open = state
	if open then
		main.Visible = true
		main.Size = UDim2.new(0, mainWidth, 0, 0)
		main.BackgroundTransparency = 1
		TweenService:Create(main, TweenInfo.new(0.35, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
			{Size = UDim2.new(0, mainWidth, 0, mainHeight), BackgroundTransparency = 0}):Play()
	else
		local t = TweenService:Create(main, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.In),
			{Size = UDim2.new(0, mainWidth, 0, 0), BackgroundTransparency = 1})
		t:Play()
		t.Completed:Wait()
		if not open then main.Visible = false end
	end
end

openBtn.MouseButton1Click:Connect(function() setOpen(not open) end)
closeBtn.MouseButton1Click:Connect(function() setOpen(false) end)

----------------------------------------------------------------
-- DRAGGING (title bar) โ€” mouse + touch
----------------------------------------------------------------
local dragging, dragStart, startPos
titleBar.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = true
		dragStart = input.Position
		startPos = main.Position
		local conn
		conn = input.Changed:Connect(function()
			if input.UserInputState == Enum.UserInputState.End then
				dragging = false
				conn:Disconnect()
			end
		end)
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
		local delta = input.Position - dragStart
		main.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
	end
end)

UserInputService.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.Touch then
		dragging = false
	end
end)

----------------------------------------------------------------
-- BORDER GRADIENT ROTATION
----------------------------------------------------------------
task.spawn(function()
	while main.Parent do
		gradient.Rotation = (gradient.Rotation + 1) % 360
		task.wait(0.03)
	end
end)

Features & Information

Speed text box with noclip clip and tp to end Op

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts