--// Crimson Speed Hub --// Roblox Studio LocalScript --// Speed slider, draggable UI, minimize/reopen, destroy --// For your own Roblox game local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local MIN_SPEED = 16 local MAX_SPEED = 5000 local currentSpeed = 200 local enabled = false local destroyed = false local oldGui = playerGui:FindFirstChild("CrimsonSpeedHub") if oldGui then oldGui:Destroy() end local gui = Instance.new("ScreenGui") gui.Name = "CrimsonSpeedHub" gui.ResetOnSpawn = false gui.DisplayOrder = 100 gui.Parent = playerGui local panel = Instance.new("Frame") panel.Size = UDim2.fromOffset(330, 180) panel.Position = UDim2.new(0.5, -165, 0.5, -90) panel.BackgroundColor3 = Color3.fromRGB(15, 15, 18) panel.BorderSizePixel = 0 panel.Parent = gui Instance.new("UICorner", panel).CornerRadius = UDim.new(0, 10) local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(210, 35, 55) stroke.Thickness = 1.5 stroke.Parent = panel local function makeButton(name, text, size, position, parent) local b = Instance.new("TextButton") b.Name = name b.Text = text b.Size = size b.Position = position b.BackgroundColor3 = Color3.fromRGB(32, 32, 38) b.TextColor3 = Color3.fromRGB(245, 245, 245) b.Font = Enum.Font.GothamBold b.TextSize = 14 b.BorderSizePixel = 0 b.AutoButtonColor = true b.Parent = parent Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6) return b end local header = Instance.new("TextLabel") header.Name = "Header" header.Size = UDim2.new(1, -110, 0, 42) header.Position = UDim2.fromOffset(14, 0) header.BackgroundTransparency = 1 header.Text = "CRIMSON SPEED HUB" header.TextColor3 = Color3.fromRGB(255, 70, 85) header.Font = Enum.Font.GothamBold header.TextSize = 14 header.TextXAlignment = Enum.TextXAlignment.Left header.Parent = panel local minimize = makeButton( "Minimize", "−", UDim2.fromOffset(32, 30), UDim2.new(1, -76, 0, 6), panel ) local close = makeButton( "Destroy", "×", UDim2.fromOffset(32, 30), UDim2.new(1, -38, 0, 6), panel ) local speedLabel = Instance.new("TextLabel") speedLabel.Size = UDim2.new(1, -28, 0, 25) speedLabel.Position = UDim2.fromOffset(14, 48) speedLabel.BackgroundTransparency = 1 speedLabel.TextColor3 = Color3.new(1, 1, 1) speedLabel.Font = Enum.Font.Gotham speedLabel.TextSize = 13 speedLabel.TextXAlignment = Enum.TextXAlignment.Left speedLabel.Parent = panel local speedInput = Instance.new("TextBox") speedInput.Name = "SpeedInput" speedInput.Size = UDim2.new(1, -28, 0, 34) speedInput.Position = UDim2.fromOffset(14, 76) speedInput.BackgroundColor3 = Color3.fromRGB(32, 32, 38) speedInput.TextColor3 = Color3.new(1, 1, 1) speedInput.PlaceholderText = "Enter speed (16–5000)" speedInput.Text = tostring(currentSpeed) speedInput.Font = Enum.Font.Gotham speedInput.TextSize = 14 speedInput.ClearTextOnFocus = false speedInput.Parent = panel Instance.new("UICorner", speedInput).CornerRadius = UDim.new(0, 6) local toggle = makeButton( "ToggleSpeed", "SPEED: OFF", UDim2.new(1, -28, 0, 34), UDim2.fromOffset(14, 122), panel ) local reopen = makeButton( "Reopen", "OPEN", UDim2.fromOffset(78, 38), UDim2.fromOffset(12, 180), gui ) reopen.Visible = false reopen.BackgroundColor3 = Color3.fromRGB(130, 20, 35) local function applySpeed() local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.WalkSpeed = enabled and currentSpeed or 16 end end local function updateLabel() speedLabel.Text = "WalkSpeed: " .. currentSpeed end speedInput.FocusLost:Connect(function() local number = tonumber(speedInput.Text) if number then currentSpeed = math.clamp(math.floor(number), MIN_SPEED, MAX_SPEED) end speedInput.Text = tostring(currentSpeed) updateLabel() applySpeed() end) toggle.Activated:Connect(function() enabled = not enabled toggle.Text = enabled and "SPEED: ON" or "SPEED: OFF" toggle.BackgroundColor3 = enabled and Color3.fromRGB(130, 20, 35) or Color3.fromRGB(32, 32, 38) applySpeed() end) minimize.Activated:Connect(function() panel.Visible = false reopen.Visible = true end) reopen.Activated:Connect(function() panel.Visible = true reopen.Visible = false end) close.Activated:Connect(function() if destroyed then return end destroyed = true enabled = false applySpeed() gui:Destroy() end) player.CharacterAdded:Connect(function(character) local humanoid = character:WaitForChild("Humanoid") if enabled then humanoid.WalkSpeed = currentSpeed end end) -- Drag the panel by its header. local dragging = false local dragStart local startPosition header.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPosition = panel.Position 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 panel.Position = UDim2.new( startPosition.X.Scale, startPosition.X.Offset + delta.X, startPosition.Y.Scale, startPosition.Y.Offset + delta.Y ) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) updateLabel()