Loop Speed Hub
Key RequiredUniversal

Loop Speed Hub

Universal ScriptGdvinnyYtGdvinnyYt 27.5K views 12.9K executesUpdated Sep 3, 2025
Unrated
00
Lua Script•175 lines (4615 chars)
-- Speed Loop GUI Script (Touchscreen + Persistent + FOV + AutoRespawn)
-- Put this in StarterGui > LocalScript

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local defaultFOV = 70 -- Roblox default FOV

-- Create ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "SpeedLoopGui"
screenGui.ResetOnSpawn = false -- GUI stays after respawn
screenGui.Parent = player:WaitForChild("PlayerGui")

-- Main Frame
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 200, 0, 120)
frame.Position = UDim2.new(0.3, 0, 0.3, 0)
frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
frame.BorderSizePixel = 2
frame.Active = true
frame.Parent = screenGui

-- Rounded corners
local uiCorner = Instance.new("UICorner")
uiCorner.CornerRadius = UDim.new(0, 12)
uiCorner.Parent = frame

-- Title
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 30)
title.BackgroundTransparency = 1
title.Text = "Speed Loop GUI"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Font = Enum.Font.SourceSansBold
title.TextSize = 18
title.Parent = frame

-- Start Button
local startBtn = Instance.new("TextButton")
startBtn.Size = UDim2.new(1, -20, 0, 30)
startBtn.Position = UDim2.new(0, 10, 0, 40)
startBtn.Text = "Start"
startBtn.BackgroundColor3 = Color3.fromRGB(50, 170, 50)
startBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
startBtn.Font = Enum.Font.SourceSansBold
startBtn.TextSize = 16
startBtn.Parent = frame

-- Pause Button
local pauseBtn = Instance.new("TextButton")
pauseBtn.Size = UDim2.new(1, -20, 0, 30)
pauseBtn.Position = UDim2.new(0, 10, 0, 75)
pauseBtn.Text = "Pause"
pauseBtn.BackgroundColor3 = Color3.fromRGB(200, 120, 50)
pauseBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
pauseBtn.Font = Enum.Font.SourceSansBold
pauseBtn.TextSize = 16
pauseBtn.Parent = frame

-- Close Button
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 25, 0, 25)
closeBtn.Position = UDim2.new(1, -30, 0, 5)
closeBtn.Text = "X"
closeBtn.BackgroundColor3 = Color3.fromRGB(170, 50, 50)
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.Font = Enum.Font.SourceSansBold
closeBtn.TextSize = 14
closeBtn.Parent = frame

-- Dragging (works for mouse + touch)
local dragging, dragInput, dragStart, startPos

local function update(input)
	local delta = input.Position - dragStart
	frame.Position = UDim2.new(
		startPos.X.Scale,
		startPos.X.Offset + delta.X,
		startPos.Y.Scale,
		startPos.Y.Offset + delta.Y
	)
end

frame.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = true
		dragStart = input.Position
		startPos = frame.Position

		input.Changed:Connect(function()
			if input.UserInputState == Enum.UserInputState.End then
				dragging = false
			end
		end)
	end
end)

frame.InputChanged:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
		dragInput = input
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if input == dragInput and dragging then
		update(input)
	end
end)

-- Speed loop logic
local running = false
local paused = false

local function getHumanoid()
	local character = player.Character or player.CharacterAdded:Wait()
	return character:FindFirstChildOfClass("Humanoid")
end

local function speedLoop()
	running = true
	while running do
		if not paused then
			local humanoid = getHumanoid()
			if humanoid then
				humanoid.WalkSpeed = 64
			end
		end
		task.wait(0.2)
	end
end

-- Auto-restore after respawn
player.CharacterAdded:Connect(function()
	if running and not paused then
		task.wait(1) -- small delay so character loads
		local humanoid = getHumanoid()
		if humanoid then
			humanoid.WalkSpeed = 64
		end
		camera.FieldOfView = 120
	end
end)

-- Buttons
startBtn.MouseButton1Click:Connect(function()
	if not running then
		paused = false
		camera.FieldOfView = 120
		coroutine.wrap(speedLoop)()
	else
		-- if already running but paused, pressing start will force resume
		paused = false
		pauseBtn.Text = "Pause"
		camera.FieldOfView = 120
	end
end)

pauseBtn.MouseButton1Click:Connect(function()
	paused = not paused
	if paused then
		pauseBtn.Text = "Resume"
		camera.FieldOfView = defaultFOV
	else
		pauseBtn.Text = "Pause"
		camera.FieldOfView = 120
	end
end)

closeBtn.MouseButton1Click:Connect(function()
	running = false
	camera.FieldOfView = defaultFOV
	screenGui:Destroy()
end)

Features & Information

Loop speed Loop fov Etc.

Community Comments (3)

GdvinnyYtGdvinnyYtSep 3, 2025

It is made by chatGPT, don't rage on me

foidgeefoidgeeSep 3, 2025

u didnt even delete the comments of chatgpt crazy

foidgeefoidgeeSep 3, 2025

how am i supossed to put a exploit on StarterGui > LocalScript from roblox studio :sobv:

More Scripts for Universal Scripts