local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local Lighting = game:GetService("Lighting") local StarterGui = game:GetService("StarterGui") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local function tween(object, info, properties) return TweenService:Create(object, info, properties) end local function corner(parent, radius) local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, radius) c.Parent = parent return c end local function stroke(parent, color, transparency, thickness) local s = Instance.new("UIStroke") s.Color = color s.Transparency = transparency s.Thickness = thickness s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border s.Parent = parent return s end local gui = Instance.new("ScreenGui") gui.Name = "DOOM_HUB" gui.ResetOnSpawn = false gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling gui.Parent = playerGui local main = Instance.new("Frame") main.Name = "Main" main.AnchorPoint = Vector2.new(0.5, 0.5) main.Position = UDim2.fromScale(0.5, 0.5) main.Size = UDim2.fromOffset(0, 0) main.BackgroundColor3 = Color3.fromRGB(26, 27, 30) main.BorderSizePixel = 0 main.ClipsDescendants = true main.Parent = gui corner(main, 14) stroke(main, Color3.fromRGB(235, 235, 235), 0.58, 1) local hubScale = Instance.new("UIScale") hubScale.Scale = 1 hubScale.Parent = main local shadow = Instance.new("ImageLabel") shadow.AnchorPoint = Vector2.new(0.5, 0.5) shadow.Position = UDim2.fromScale(0.5, 0.5) shadow.Size = UDim2.new(1, 46, 1, 46) shadow.BackgroundTransparency = 1 shadow.Image = "rbxassetid://1316045217" shadow.ImageColor3 = Color3.new(0, 0, 0) shadow.ImageTransparency = 0.35 shadow.ScaleType = Enum.ScaleType.Slice shadow.SliceCenter = Rect.new(10, 10, 118, 118) shadow.ZIndex = 0 shadow.Parent = main local header = Instance.new("Frame") header.Size = UDim2.new(1, 0, 0, 62) header.BackgroundColor3 = Color3.fromRGB(32, 33, 37) header.BorderSizePixel = 0 header.Parent = main corner(header, 14) local headerFix = Instance.new("Frame") headerFix.Position = UDim2.fromOffset(0, 42) headerFix.Size = UDim2.new(1, 0, 0, 20) headerFix.BackgroundColor3 = header.BackgroundColor3 headerFix.BorderSizePixel = 0 headerFix.Parent = header local minimize = Instance.new("TextButton") minimize.Position = UDim2.fromOffset(16, 15) minimize.Size = UDim2.fromOffset(32, 32) minimize.BackgroundColor3 = Color3.fromRGB(54, 55, 60) minimize.BorderSizePixel = 0 minimize.Text = "−" minimize.TextColor3 = Color3.fromRGB(237, 237, 237) minimize.Font = Enum.Font.GothamMedium minimize.TextSize = 23 minimize.Parent = header corner(minimize, 8) stroke(minimize, Color3.fromRGB(255, 255, 255), 0.78, 1) local title = Instance.new("TextLabel") title.BackgroundTransparency = 1 title.Position = UDim2.fromOffset(62, 0) title.Size = UDim2.new(1, -130, 1, 0) title.Text = "DOOM HUB" title.TextColor3 = Color3.fromRGB(244, 244, 244) title.Font = Enum.Font.GothamBold title.TextSize = 17 title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = header local subtitle = Instance.new("TextLabel") subtitle.BackgroundTransparency = 1 subtitle.AnchorPoint = Vector2.new(1, 0.5) subtitle.Position = UDim2.new(1, -55, 0.5, 0) subtitle.Size = UDim2.fromOffset(100, 20) subtitle.Text = "v1.0" subtitle.TextColor3 = Color3.fromRGB(145, 146, 151) subtitle.Font = Enum.Font.Gotham subtitle.TextSize = 12 subtitle.TextXAlignment = Enum.TextXAlignment.Right subtitle.Parent = header local close = Instance.new("TextButton") close.Position = UDim2.new(1, -47, 0, 15) close.Size = UDim2.fromOffset(32, 32) close.BackgroundColor3 = Color3.fromRGB(54, 55, 60) close.BorderSizePixel = 0 close.Text = "×" close.TextColor3 = Color3.fromRGB(237, 237, 237) close.Font = Enum.Font.GothamMedium close.TextSize = 23 close.Parent = header corner(close, 8) stroke(close, Color3.fromRGB(255, 255, 255), 0.78, 1) local launcher = Instance.new("TextButton") launcher.Name = "DoomHubLauncher" launcher.AnchorPoint = Vector2.new(0.5, 0.5) launcher.Position = UDim2.fromScale(0.5, 0.5) launcher.Size = UDim2.fromOffset(0, 0) launcher.BackgroundColor3 = Color3.fromRGB(8, 8, 9) launcher.BorderSizePixel = 0 launcher.Text = "D" launcher.TextColor3 = Color3.fromRGB(238, 238, 240) launcher.Font = Enum.Font.GothamBold launcher.TextSize = 17 launcher.Visible = false launcher.Parent = gui corner(launcher, 999) stroke(launcher, Color3.fromRGB(255, 255, 255), 0.7, 1) local closeHub local tabs = Instance.new("ScrollingFrame") tabs.Position = UDim2.fromOffset(16, 78) tabs.Size = UDim2.new(1, -32, 0, 32) tabs.BackgroundTransparency = 1 tabs.BorderSizePixel = 0 tabs.ScrollBarThickness = 0 tabs.ScrollingDirection = Enum.ScrollingDirection.X tabs.AutomaticCanvasSize = Enum.AutomaticSize.X tabs.CanvasSize = UDim2.new() tabs.Parent = main local tabLayout = Instance.new("UIListLayout") tabLayout.FillDirection = Enum.FillDirection.Horizontal tabLayout.Padding = UDim.new(0, 8) tabLayout.Parent = tabs local pages = Instance.new("Frame") pages.Position = UDim2.fromOffset(16, 122) pages.Size = UDim2.new(1, -32, 1, -138) pages.BackgroundTransparency = 1 pages.ClipsDescendants = true pages.Parent = main local tabButtons, pageFrames, pageContents = {}, {}, {} local activeTab local tabRail = Instance.new("Frame") tabRail.Name = "TabSliderRail" tabRail.Position = UDim2.fromOffset(16, 112) tabRail.Size = UDim2.new(1, -32, 0, 7) tabRail.BackgroundColor3 = Color3.fromRGB(56, 57, 62) tabRail.BorderSizePixel = 0 tabRail.ZIndex = 2 tabRail.Parent = main corner(tabRail, 4) local tabSlider = Instance.new("Frame") tabSlider.Name = "SelectedTabSlider" tabSlider.Position = UDim2.fromOffset(16, 112) tabSlider.Size = UDim2.fromOffset(0, 7) tabSlider.BackgroundColor3 = Color3.fromRGB(245, 245, 245) tabSlider.BackgroundTransparency = 1 tabSlider.BorderSizePixel = 0 tabSlider.ZIndex = 3 tabSlider.Parent = main corner(tabSlider, 4) local tabSliderDragging = false local function updateTabSlider(instant) local windowWidth = tabs.AbsoluteSize.X local canvasWidth = tabs.AbsoluteCanvasSize.X if windowWidth == 0 or canvasWidth == 0 then return end local trackWidth = tabRail.AbsoluteSize.X local scrollableWidth = math.max(canvasWidth - windowWidth, 0) local thumbWidth = scrollableWidth == 0 and trackWidth or math.max(54, trackWidth * (windowWidth / canvasWidth)) local travel = trackWidth - thumbWidth local progress = scrollableWidth == 0 and 0 or tabs.CanvasPosition.X / scrollableWidth local x = 16 + travel * math.clamp(progress, 0, 1) local properties = { Position = UDim2.fromOffset(x, 112), Size = UDim2.fromOffset(thumbWidth, 7), BackgroundTransparency = 0, } if instant then for property, value in pairs(properties) do tabSlider[property] = value end else tween(tabSlider, TweenInfo.new(0.24, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), properties):Play() end end local function selectTab(name) if activeTab == name then return end activeTab = name for tabName, button in pairs(tabButtons) do tween(button, TweenInfo.new(0.18), { BackgroundColor3 = tabName == name and Color3.fromRGB(235, 235, 235) or Color3.fromRGB(42, 43, 47), TextColor3 = tabName == name and Color3.fromRGB(27, 28, 31) or Color3.fromRGB(172, 173, 179), }):Play() end local selectedButton = tabButtons[name] if selectedButton then updateTabSlider(false) end for pageName, page in pairs(pageFrames) do page.Visible = pageName == name if page.Visible then page.CanvasPosition = Vector2.zero local content = pageContents[pageName] content.Position = UDim2.fromOffset(12, 0) content.GroupTransparency = 1 tween(content, TweenInfo.new(0.22, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), { Position = UDim2.fromOffset(0, 0), GroupTransparency = 0, }):Play() end end end tabs:GetPropertyChangedSignal("CanvasPosition"):Connect(function() updateTabSlider(true) end) local function setTabScrollFromMouse(mouseX) local trackWidth = tabRail.AbsoluteSize.X local windowWidth = tabs.AbsoluteSize.X local canvasWidth = tabs.AbsoluteCanvasSize.X if trackWidth == 0 or canvasWidth <= windowWidth then return end local thumbWidth = math.max(54, trackWidth * (windowWidth / canvasWidth)) local travel = trackWidth - thumbWidth local localX = math.clamp(mouseX - tabRail.AbsolutePosition.X - thumbWidth / 2, 0, travel) local maxScroll = canvasWidth - windowWidth tabs.CanvasPosition = Vector2.new((localX / travel) * maxScroll, 0) end tabSlider.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then tabSliderDragging = true setTabScrollFromMouse(input.Position.X) end end) tabRail.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then tabSliderDragging = true setTabScrollFromMouse(input.Position.X) end end) local function makePage(name) local button = Instance.new("TextButton") button.Name = name .. "Tab" button.Size = UDim2.fromOffset(91, 32) button.BackgroundColor3 = Color3.fromRGB(42, 43, 47) button.BorderSizePixel = 0 button.Text = name:upper() button.TextColor3 = Color3.fromRGB(172, 173, 179) button.Font = Enum.Font.GothamMedium button.TextSize = 11 button.Parent = tabs corner(button, 8) stroke(button, Color3.fromRGB(255, 255, 255), 0.9, 1) local page = Instance.new("ScrollingFrame") page.Name = name page.Size = UDim2.fromScale(1, 1) page.BackgroundTransparency = 1 page.BorderSizePixel = 0 page.ScrollBarThickness = 4 page.ScrollBarImageColor3 = Color3.fromRGB(190, 190, 193) page.ScrollBarImageTransparency = 0.25 page.ScrollingDirection = Enum.ScrollingDirection.Y page.AutomaticCanvasSize = Enum.AutomaticSize.Y page.CanvasSize = UDim2.new() page.Visible = false page.Parent = pages local content = Instance.new("CanvasGroup") content.Size = UDim2.new(1, -10, 0, 0) content.AutomaticSize = Enum.AutomaticSize.Y content.BackgroundTransparency = 1 content.Parent = page local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 10) layout.Parent = content tabButtons[name], pageFrames[name], pageContents[name] = button, page, content button.MouseButton1Click:Connect(function() selectTab(name) end) return content end local function card(parent, label, description) local item = Instance.new("Frame") item.Size = UDim2.new(1, 0, 0, 72) item.BackgroundColor3 = Color3.fromRGB(34, 35, 39) item.BorderSizePixel = 0 item.Parent = parent corner(item, 10) stroke(item, Color3.fromRGB(255, 255, 255), 0.9, 1) local name = Instance.new("TextLabel") name.BackgroundTransparency = 1 name.Position = UDim2.fromOffset(14, 12) name.Size = UDim2.new(1, -28, 0, 18) name.Text = label name.TextColor3 = Color3.fromRGB(238, 238, 240) name.Font = Enum.Font.GothamMedium name.TextSize = 13 name.TextXAlignment = Enum.TextXAlignment.Left name.Parent = item local desc = Instance.new("TextLabel") desc.BackgroundTransparency = 1 desc.Position = UDim2.fromOffset(14, 32) desc.Size = UDim2.new(1, -28, 0, 16) desc.Text = description desc.TextColor3 = Color3.fromRGB(139, 140, 146) desc.Font = Enum.Font.Gotham desc.TextSize = 11 desc.TextXAlignment = Enum.TextXAlignment.Left desc.Parent = item return item end local function getHumanoid() local character = player.Character or player.CharacterAdded:Wait() return character:FindFirstChildOfClass("Humanoid") end local function slider(parent, label, description, minimum, maximum, initial, changed) local item = card(parent, label, description) local valueText = Instance.new("TextLabel") valueText.BackgroundTransparency = 1 valueText.Position = UDim2.new(1, -63, 10, 0) valueText.Size = UDim2.fromOffset(48, 18) valueText.TextColor3 = Color3.fromRGB(245, 245, 245) valueText.Font = Enum.Font.GothamBold valueText.TextSize = 12 valueText.TextXAlignment = Enum.TextXAlignment.Right valueText.Parent = item local rail = Instance.new("Frame") rail.Position = UDim2.fromOffset(14, 54) rail.Size = UDim2.new(1, -28, 0, 4) rail.BackgroundColor3 = Color3.fromRGB(66, 67, 73) rail.BorderSizePixel = 0 rail.Parent = item corner(rail, 4) local fill = Instance.new("Frame") fill.BackgroundColor3 = Color3.fromRGB(235, 235, 235) fill.BorderSizePixel = 0 fill.Parent = rail corner(fill, 4) local knob = Instance.new("TextButton") knob.AnchorPoint = Vector2.new(0.5, 0.5) knob.Size = UDim2.fromOffset(12, 12) knob.BackgroundColor3 = Color3.fromRGB(245, 245, 245) knob.BorderSizePixel = 0 knob.Text = "" knob.Parent = rail corner(knob, 12) local dragging, value = false, initial local function setValue(nextValue) value = math.clamp(math.floor(nextValue + 0.5), minimum, maximum) local percent = (value - minimum) / (maximum - minimum) fill.Size = UDim2.new(percent, 0, 1, 0) knob.Position = UDim2.new(percent, 0, 0.5, 0) valueText.Text = tostring(value) changed(value) end local function fromMouse(x) setValue(minimum + ((x - rail.AbsolutePosition.X) / rail.AbsoluteSize.X) * (maximum - minimum)) end knob.MouseButton1Down:Connect(function() dragging = true end) rail.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true; fromMouse(input.Position.X) end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then fromMouse(input.Position.X) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) setValue(initial) end local function toggle(parent, label, description, changed) local item = card(parent, label, description) local button = Instance.new("TextButton") button.AnchorPoint = Vector2.new(1, 0.5) button.Position = UDim2.new(1, -14, 0.5, 0) button.Size = UDim2.fromOffset(42, 22) button.BackgroundColor3 = Color3.fromRGB(66, 67, 73) button.BorderSizePixel = 0 button.Text = "" button.Parent = item corner(button, 14) local dot = Instance.new("Frame") dot.AnchorPoint = Vector2.new(0, 0.5) dot.Position = UDim2.new(0, 3, 0.5, 0) dot.Size = UDim2.fromOffset(16, 16) dot.BackgroundColor3 = Color3.fromRGB(215, 215, 217) dot.BorderSizePixel = 0 dot.Parent = button corner(dot, 12) local enabled = false button.MouseButton1Click:Connect(function() enabled = not enabled tween(button, TweenInfo.new(0.18), {BackgroundColor3 = enabled and Color3.fromRGB(235, 235, 235) or Color3.fromRGB(66, 67, 73)}):Play() tween(dot, TweenInfo.new(0.18, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), { Position = enabled and UDim2.new(1, -19, 0.5, 0) or UDim2.new(0, 3, 0.5, 0), BackgroundColor3 = enabled and Color3.fromRGB(30, 31, 34) or Color3.fromRGB(215, 215, 217), }):Play() changed(enabled) end) end local function action(parent, label, description, buttonText, callback) local item = card(parent, label, description) local button = Instance.new("TextButton") button.AnchorPoint = Vector2.new(1, 0.5) button.Position = UDim2.new(1, -14, 0.5, 0) button.Size = UDim2.fromOffset(74, 26) button.BackgroundColor3 = Color3.fromRGB(235, 235, 235) button.BorderSizePixel = 0 button.Text = buttonText:upper() button.TextColor3 = Color3.fromRGB(27, 28, 31) button.Font = Enum.Font.GothamBold button.TextSize = 10 button.Parent = item corner(button, 8) button.MouseButton1Click:Connect(function() tween(button, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(160, 160, 165)}):Play() task.delay(0.12, function() if button.Parent then tween(button, TweenInfo.new(0.16), {BackgroundColor3 = Color3.fromRGB(235, 235, 235)}):Play() end end) callback() end) end local movement = makePage("Movement") local playerPage = makePage("Player") local visual = makePage("Visuals") local world = makePage("World") local cameraPage = makePage("Camera") local interface = makePage("Interface") local utility = makePage("Utility") local walkSpeedValue, jumpPowerValue = 16, 50 slider(movement, "Walk speed", "Set your character's walking speed", 8, 100, 16, function(value) walkSpeedValue = value local humanoid = getHumanoid() if humanoid then humanoid.WalkSpeed = value end end) slider(movement, "Jump power", "Control the height of your jumps", 20, 150, 50, function(value) jumpPowerValue = value local humanoid = getHumanoid() if humanoid then humanoid.UseJumpPower = true; humanoid.JumpPower = value end end) local flying, flyConnection, bodyVelocity, bodyGyro = false, nil, nil, nil local flySpeed = 45 slider(movement, "Fly speed", "Choose how fast you move while flying", 15, 150, 45, function(value) flySpeed = value end) toggle(movement, "Auto jump", "Jump automatically whenever you touch the ground", function(enabled) local humanoid = getHumanoid() if humanoid then humanoid.AutoJumpEnabled = enabled end end) local function stopFly() if flyConnection then flyConnection:Disconnect(); flyConnection = nil end if bodyVelocity then bodyVelocity:Destroy(); bodyVelocity = nil end if bodyGyro then bodyGyro:Destroy(); bodyGyro = nil end local humanoid = getHumanoid() if humanoid then humanoid.PlatformStand = false end end toggle(movement, "Fly", "Move freely with WASD, Space, and Ctrl", function(enabled) flying = enabled if not enabled then stopFly(); return end stopFly() flying = true local character = player.Character or player.CharacterAdded:Wait() local root = character:FindFirstChild("HumanoidRootPart") local humanoid = character:FindFirstChildOfClass("Humanoid") if not root or not humanoid then return end humanoid.PlatformStand = true bodyVelocity = Instance.new("BodyVelocity") bodyVelocity.MaxForce = Vector3.new(1e5, 1e5, 1e5) bodyVelocity.Velocity = Vector3.zero bodyVelocity.Parent = root bodyGyro = Instance.new("BodyGyro") bodyGyro.MaxTorque = Vector3.new(1e5, 1e5, 1e5) bodyGyro.P = 1e4 bodyGyro.Parent = root flyConnection = RunService.RenderStepped:Connect(function() if not flying or not root.Parent then stopFly(); return end local camera = workspace.CurrentCamera local direction = humanoid.MoveDirection if UserInputService:IsKeyDown(Enum.KeyCode.Space) then direction += Vector3.yAxis end if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then direction -= Vector3.yAxis end bodyVelocity.Velocity = direction * flySpeed bodyGyro.CFrame = camera.CFrame end) end) local sprintSpeed, sprinting = 32, false local sprintBeginConnection, sprintEndConnection slider(movement, "Sprint speed", "Set the speed used while holding Left Shift", 20, 120, 32, function(value) sprintSpeed = value end) toggle(movement, "Hold shift sprint", "Hold Left Shift to temporarily sprint", function(enabled) if sprintBeginConnection then sprintBeginConnection:Disconnect(); sprintBeginConnection = nil end if sprintEndConnection then sprintEndConnection:Disconnect(); sprintEndConnection = nil end if enabled then sprintBeginConnection = UserInputService.InputBegan:Connect(function(input, gameProcessed) if not gameProcessed and input.KeyCode == Enum.KeyCode.LeftShift then sprinting = true local humanoid = getHumanoid() if humanoid then humanoid.WalkSpeed = sprintSpeed end end end) sprintEndConnection = UserInputService.InputEnded:Connect(function(input) if input.KeyCode == Enum.KeyCode.LeftShift then sprinting = false local humanoid = getHumanoid() if humanoid then humanoid.WalkSpeed = walkSpeedValue end end end) elseif sprinting then sprinting = false local humanoid = getHumanoid() if humanoid then humanoid.WalkSpeed = walkSpeedValue end end end) local infiniteJump = false UserInputService.JumpRequest:Connect(function() if infiniteJump then local humanoid = getHumanoid() if humanoid then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end end end) toggle(movement, "Infinite jump", "Allow another jump while in the air", function(enabled) infiniteJump = enabled end) toggle(movement, "Disable animations", "Pause the standard Roblox character animations", function(enabled) local character = player.Character local animate = character and character:FindFirstChild("Animate") if animate then animate.Disabled = enabled end end) local noclipConnection slider(playerPage, "Max health", "Set your local character health capacity", 100, 1000, 100, function(value) local humanoid = getHumanoid() if humanoid then humanoid.MaxHealth = value humanoid.Health = math.min(humanoid.Health, value) end end) slider(playerPage, "Hip height", "Raise or lower your character slightly", 0, 10, 2, function(value) local humanoid = getHumanoid() if humanoid then humanoid.HipHeight = value end end) toggle(playerPage, "No collision", "Lets your character pass through parts", function(enabled) if noclipConnection then noclipConnection:Disconnect(); noclipConnection = nil end if enabled then noclipConnection = RunService.Stepped:Connect(function() local character = player.Character if character then for _, part in ipairs(character:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end end end) end end) toggle(playerPage, "Sit", "Toggle a relaxed sitting pose", function(enabled) local humanoid = getHumanoid() if humanoid then humanoid.Sit = enabled end end) toggle(playerPage, "Auto rotate", "Turn your character toward its movement direction", function(enabled) local humanoid = getHumanoid() if humanoid then humanoid.AutoRotate = enabled end end) toggle(playerPage, "Force field", "Show a local protective force-field effect", function(enabled) local character = player.Character if not character then return end local existing = character:FindFirstChild("DoomHubForceField") if enabled and not existing then local field = Instance.new("ForceField") field.Name = "DoomHubForceField" field.Visible = true field.Parent = character elseif not enabled and existing then existing:Destroy() end end) toggle(playerPage, "Hide name tag", "Hide name and health labels above your character", function(enabled) local character = player.Character local head = character and character:FindFirstChild("Head") if head then for _, child in ipairs(head:GetChildren()) do if child:IsA("BillboardGui") then child.Enabled = not enabled end end end end) action(playerPage, "Reset character", "Respawn at your experience's normal spawn point", "Reset", function() player:LoadCharacter() end) slider(visual, "Field of view", "Change your camera's viewing angle", 50, 120, 70, function(value) local camera = workspace.CurrentCamera if camera then camera.FieldOfView = value end end) slider(visual, "Hub scale", "Make the interface smaller or larger", 75, 125, 100, function(value) hubScale.Scale = value / 100 end) toggle(visual, "Ambient shadow", "Show a soft shadow around the interface", function(enabled) shadow.ImageTransparency = enabled and 0.35 or 1 end) toggle(visual, "Hide player list", "Toggle the Roblox player list interface", function(enabled) StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, not enabled) end) toggle(visual, "Hide chat", "Toggle the Roblox chat interface", function(enabled) StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, not enabled) end) toggle(visual, "Dim background", "Fade the world behind the hub while it is open", function(enabled) local overlay = gui:FindFirstChild("DimOverlay") if enabled and not overlay then overlay = Instance.new("Frame") overlay.Name = "DimOverlay" overlay.Size = UDim2.fromScale(1, 1) overlay.BackgroundColor3 = Color3.new(0, 0, 0) overlay.BackgroundTransparency = 0.62 overlay.BorderSizePixel = 0 overlay.ZIndex = 0 overlay.Parent = gui elseif not enabled and overlay then overlay:Destroy() end end) toggle(visual, "Large text", "Increase the readability of hub text", function(enabled) for _, object in ipairs(main:GetDescendants()) do if object:IsA("TextLabel") or object:IsA("TextButton") then object.TextSize = enabled and math.ceil(object.TextSize * 1.12) or math.floor(object.TextSize / 1.12) end end end) toggle(visual, "Soft outline", "Show the subtle white edge around the hub", function(enabled) local outline = main:FindFirstChildOfClass("UIStroke") if outline then outline.Transparency = enabled and 0.58 or 1 end end) local defaultLighting = { Brightness = Lighting.Brightness, ClockTime = Lighting.ClockTime, FogEnd = Lighting.FogEnd, FogStart = Lighting.FogStart, ExposureCompensation = Lighting.ExposureCompensation, } slider(world, "World gravity", "Adjust the local workspace gravity", 25, 300, math.floor(workspace.Gravity), function(value) workspace.Gravity = value end) slider(world, "Clock time", "Set the world's time of day", 0, 24, math.floor(Lighting.ClockTime), function(value) Lighting.ClockTime = value end) slider(world, "Brightness", "Adjust scene brightness", 0, 10, math.floor(Lighting.Brightness), function(value) Lighting.Brightness = value end) slider(world, "Fog distance", "Set how far you can see through fog", 50, 10000, math.min(math.floor(Lighting.FogEnd), 10000), function(value) Lighting.FogEnd = value end) slider(world, "Fog start", "Set where atmospheric fog begins", 0, 5000, math.min(math.floor(Lighting.FogStart), 5000), function(value) Lighting.FogStart = value end) slider(world, "Exposure", "Tune the scene's exposure compensation", -5, 5, math.floor(Lighting.ExposureCompensation), function(value) Lighting.ExposureCompensation = value end) toggle(world, "Full bright", "Use a clear bright lighting profile", function(enabled) if enabled then Lighting.Brightness = 3 Lighting.ClockTime = 14 Lighting.FogEnd = 100000 Lighting.GlobalShadows = false else Lighting.Brightness = defaultLighting.Brightness Lighting.ClockTime = defaultLighting.ClockTime Lighting.FogEnd = defaultLighting.FogEnd Lighting.GlobalShadows = true end end) action(world, "Restore lighting", "Return lighting controls to their original values", "Restore", function() for property, value in pairs(defaultLighting) do Lighting[property] = value end end) slider(cameraPage, "Camera FOV", "Adjust the current camera lens", 50, 120, 70, function(value) local camera = workspace.CurrentCamera if camera then camera.FieldOfView = value end end) slider(cameraPage, "Minimum zoom", "Set how close the camera can move", 0, 20, 0, function(value) player.CameraMinZoomDistance = value end) slider(cameraPage, "Maximum zoom", "Set how far the camera can move", 10, 250, 128, function(value) player.CameraMaxZoomDistance = value end) toggle(cameraPage, "First person", "Lock your camera into first-person view", function(enabled) player.CameraMode = enabled and Enum.CameraMode.LockFirstPerson or Enum.CameraMode.Classic end) toggle(cameraPage, "Click-to-move", "Use click-to-move as the camera movement mode", function(enabled) player.DevComputerCameraMovementMode = enabled and Enum.DevComputerCameraMovementMode.ClickToMove or Enum.DevComputerCameraMovementMode.UserChoice end) action(cameraPage, "Reset camera", "Restore standard camera position and zoom", "Reset", function() player.CameraMode = Enum.CameraMode.Classic player.CameraMinZoomDistance = 0.5 player.CameraMaxZoomDistance = 128 local camera = workspace.CurrentCamera if camera then camera.FieldOfView = 70 end end) toggle(interface, "Hub draggable", "Drag the header to place the hub anywhere", function(enabled) main.Active = enabled -- Header drag behavior is enabled below; this toggle controls whether it reacts. main:SetAttribute("Draggable", enabled) end) slider(interface, "Corner radius", "Adjust the softness of the hub corners", 0, 24, 14, function(value) for _, object in ipairs(main:GetDescendants()) do if object:IsA("UICorner") then object.CornerRadius = UDim.new(0, value) end end end) slider(interface, "Outline strength", "Control the white outline visibility", 0, 100, 42, function(value) local outline = main:FindFirstChildOfClass("UIStroke") if outline then outline.Transparency = 1 - (value / 100) end end) toggle(interface, "Launcher label", "Show the D letter inside the launcher orb", function(enabled) launcher.TextTransparency = enabled and 0 or 1 end) toggle(interface, "Hub notifications", "Show small confirmation messages for actions", function(enabled) gui:SetAttribute("Notifications", enabled) end) action(interface, "Center hub", "Move the hub back to the center of the screen", "Center", function() main.Position = UDim2.fromScale(0.5, 0.5) end) action(utility, "Reset character", "Respawn your character at the normal spawn point", "Reset", function() player:LoadCharacter() end) action(utility, "Close hub", "Close the hub and show the launcher orb", "Close", function() if closeHub then closeHub() end end) toggle(utility, "Show FPS", "Display Roblox performance statistics", function(enabled) StarterGui:SetCore("PerformanceStatsVisible", enabled) end) toggle(utility, "Hide backpack", "Toggle the Roblox backpack interface", function(enabled) StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, not enabled) end) toggle(utility, "Hide health bar", "Toggle the Roblox health interface", function(enabled) StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health, not enabled) end) toggle(utility, "Hide emotes", "Toggle the Roblox emotes menu", function(enabled) StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.EmotesMenu, not enabled) end) action(utility, "Restore core UI", "Show standard Roblox interface elements again", "Restore", function() for _, coreType in ipairs({Enum.CoreGuiType.PlayerList, Enum.CoreGuiType.Chat, Enum.CoreGuiType.Backpack, Enum.CoreGuiType.Health, Enum.CoreGuiType.EmotesMenu}) do StarterGui:SetCoreGuiEnabled(coreType, true) end end) card(utility, "Saved session", "Your hub settings remain active while the launcher is closed") player.CharacterAdded:Connect(function(character) local humanoid = character:WaitForChild("Humanoid") humanoid.WalkSpeed = walkSpeedValue humanoid.UseJumpPower = true humanoid.JumpPower = jumpPowerValue if flying then flying = false; stopFly() end end) local collapsed = false minimize.MouseButton1Click:Connect(function() collapsed = not collapsed minimize.Text = collapsed and "+" or "−" if collapsed then tween(main, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(390, 62)}):Play() else tween(main, TweenInfo.new(0.35, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(390, 400)}):Play() end end) local draggingHub, dragStart, hubStart = false, nil, nil local draggingLauncher, launcherStart, launcherOrigin, launcherMoved = false, nil, nil, false header.InputBegan:Connect(function(input) if main:GetAttribute("Draggable") and input.UserInputType == Enum.UserInputType.MouseButton1 then draggingHub = true dragStart = input.Position hubStart = main.Position end end) UserInputService.InputChanged:Connect(function(input) if tabSliderDragging and input.UserInputType == Enum.UserInputType.MouseMovement then setTabScrollFromMouse(input.Position.X) end if draggingHub and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart main.Position = UDim2.new(hubStart.X.Scale, hubStart.X.Offset + delta.X, hubStart.Y.Scale, hubStart.Y.Offset + delta.Y) end if draggingLauncher and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - launcherStart if delta.Magnitude > 3 then launcherMoved = true end launcher.Position = UDim2.new(launcherOrigin.X.Scale, launcherOrigin.X.Offset + delta.X, launcherOrigin.Y.Scale, launcherOrigin.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then tabSliderDragging = false draggingHub = false draggingLauncher = false end end) launcher.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then draggingLauncher = true launcherMoved = false launcherStart = input.Position launcherOrigin = launcher.Position end end) closeHub = function() if not main.Visible then return end tween(main, TweenInfo.new(0.22, Enum.EasingStyle.Quint, Enum.EasingDirection.In), {Size = UDim2.fromOffset(0, 0)}):Play() task.delay(0.22, function() main.Visible = false launcher.Visible = true launcher.Size = UDim2.fromOffset(0, 0) tween(launcher, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(46, 46)}):Play() end) end close.MouseButton1Click:Connect(closeHub) launcher.MouseButton1Click:Connect(function() if launcherMoved then return end launcher.Visible = false main.Visible = true collapsed = false minimize.Text = "−" main.Size = UDim2.fromOffset(0, 0) tween(main, TweenInfo.new(0.35, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(390, 400)}):Play() end) selectTab("Movement") tween(main, TweenInfo.new(0.45, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(390, 400)}):Play() task.delay(0.5, function() updateTabSlider(true) end)