--// Reality Bender GUI --// Put this LocalScript in StarterPlayerScripts or StarterGui --// Local visual effect GUI local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local rng = Random.new() --======================== -- EDIT HERE --======================== local guiTitle = "Reality Bender" local mainButtonText = "BEND!" local smallButtonText = "Open" local bendSpeed = 4 local bendStrength = 0.25 local bendRange = 80 local defaultAxis = "Y" -- Y, X, Z --======================== local axisList = {"Y", "X", "Z"} local axisIndex = 1 for i, v in ipairs(axisList) do if v == defaultAxis then axisIndex = i break end end local bendOn = false local chaosOn = false local maxChaosOn = false local bendToken = 0 local chaosToken = 0 local originalState = {} -- [part] = {CFrame=, Size=, Color=, Material=, Transparency=} local affectedParts = {} local materialList = { Enum.Material.Plastic, Enum.Material.SmoothPlastic, Enum.Material.Neon, Enum.Material.Wood, Enum.Material.WoodPlanks, Enum.Material.Glass, Enum.Material.Concrete, Enum.Material.Granite, Enum.Material.Slate, Enum.Material.Metal, Enum.Material.CorrodedMetal, Enum.Material.DiamondPlate, Enum.Material.Foil, Enum.Material.Ice, Enum.Material.Fabric, Enum.Material.Grass, Enum.Material.Pebble, Enum.Material.ForceField, } local character = player.Character or player.CharacterAdded:Wait() local humanoidRootPart = character:WaitForChild("HumanoidRootPart") local function updateCharacter() character = player.Character or player.CharacterAdded:Wait() humanoidRootPart = character:WaitForChild("HumanoidRootPart") end player.CharacterAdded:Connect(function() task.wait(1) updateCharacter() end) local function trimText(s) return (tostring(s or ""):gsub("^%s+", ""):gsub("%s+$", "")) end local function parseNumber(text, fallback, minValue, maxValue) local n = tonumber(trimText(text)) if not n then return fallback end if minValue then n = math.max(minValue, n) end if maxValue then n = math.min(maxValue, n) end return n end local function getAxisCFrame(axis, amount) if axis == "X" then return CFrame.Angles(amount, 0, 0) elseif axis == "Z" then return CFrame.Angles(0, 0, amount) else return CFrame.Angles(0, amount, 0) end end local function getAllParts() local parts = {} for _, obj in ipairs(workspace:GetDescendants()) do if obj:IsA("BasePart") then parts[#parts + 1] = obj end end return parts end local function saveOriginal(part) if originalState[part] or not part or not part.Parent then return end originalState[part] = { CFrame = part.CFrame, Size = part.Size, Color = part.Color, Material = part.Material, Transparency = part.Transparency, } end local function restorePart(part) local old = originalState[part] if not old or not part or not part.Parent then return end part.CFrame = old.CFrame part.Size = old.Size part.Color = old.Color part.Material = old.Material part.Transparency = old.Transparency originalState[part] = nil end local function restoreAll() bendOn = false chaosOn = false maxChaosOn = false bendToken += 1 chaosToken += 1 for part, _ in pairs(originalState) do restorePart(part) end table.clear(affectedParts) end local function getPartsInRange(centerPos, range) local list = {} for _, part in ipairs(getAllParts()) do if part.Parent and (part.Position - centerPos).Magnitude <= range then list[#list + 1] = part end end return list end local function applyBendStep() if chaosOn or maxChaosOn then return end if not humanoidRootPart or not humanoidRootPart.Parent then return end local parts = getPartsInRange(humanoidRootPart.Position, bendRange) local t = os.clock() local speed = math.max(bendSpeed, 0.1) local strength = math.max(bendStrength, 0) for _, part in ipairs(parts) do if part:IsDescendantOf(player.Character) then continue end saveOriginal(part) local old = originalState[part] if old then local wave = math.sin((t * speed) + (part.Position.X * 0.07) + (part.Position.Z * 0.07)) local spin = wave * strength * 2 local bendOffset = Vector3.new( math.sin(t * speed + part.Position.Y) * strength, math.cos(t * speed + part.Position.X) * strength, math.sin(t * speed + part.Position.Z) * strength ) local axis = axisList[axisIndex] local newCFrame = old.CFrame * CFrame.new(bendOffset) * getAxisCFrame(axis, spin) part.CFrame = newCFrame part.Size = old.Size * (1 + (wave * strength * 0.35)) part.Color = old.Color part.Material = old.Material end end end local function applyChaosStep(multiplier) if not humanoidRootPart or not humanoidRootPart.Parent then return end local parts = getPartsInRange(humanoidRootPart.Position, bendRange * multiplier) local t = os.clock() local speed = math.max(bendSpeed * multiplier, 0.1) local strength = math.max(bendStrength * multiplier, 0) for _, part in ipairs(parts) do if part:IsDescendantOf(player.Character) then continue end saveOriginal(part) local old = originalState[part] if old then local wave = math.sin((t * speed) + (part.Position.X * 0.11) + (part.Position.Z * 0.11)) local spin = rng:NextNumber(-1, 1) * strength * 6 * multiplier local chaosOffset = Vector3.new( rng:NextNumber(-strength, strength), rng:NextNumber(-strength, strength), rng:NextNumber(-strength, strength) ) part.CFrame = old.CFrame * CFrame.new(chaosOffset) * getAxisCFrame(axisList[axisIndex], spin) part.Size = old.Size * (1 + (wave * strength * 0.45)) part.Color = Color3.fromRGB( rng:NextInteger(0, 255), rng:NextInteger(0, 255), rng:NextInteger(0, 255) ) part.Material = materialList[rng:NextInteger(1, #materialList)] end end end -- GUI local screenGui = Instance.new("ScreenGui") screenGui.Name = "RealityBenderGui" screenGui.ResetOnSpawn = false screenGui.IgnoreGuiInset = true screenGui.Parent = player:WaitForChild("PlayerGui") local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 300, 0, 330) mainFrame.Position = UDim2.new(0.5, -150, 0.5, -165) mainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) mainFrame.BorderSizePixel = 0 mainFrame.Active = true mainFrame.ClipsDescendants = true mainFrame.Parent = screenGui local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0, 12) mainCorner.Parent = mainFrame local titleBar = Instance.new("TextLabel") titleBar.Size = UDim2.new(1, 0, 0, 34) titleBar.BackgroundColor3 = Color3.fromRGB(35, 35, 35) titleBar.BorderSizePixel = 0 titleBar.Text = guiTitle titleBar.TextColor3 = Color3.fromRGB(255, 255, 255) titleBar.TextScaled = true titleBar.Font = Enum.Font.GothamBold titleBar.Active = true titleBar.Parent = mainFrame local titleCorner = Instance.new("UICorner") titleCorner.CornerRadius = UDim.new(0, 12) titleCorner.Parent = titleBar local hideButton = Instance.new("TextButton") hideButton.Size = UDim2.new(0, 60, 0, 24) hideButton.Position = UDim2.new(1, -65, 0, 5) hideButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70) hideButton.Text = "Hide" hideButton.TextColor3 = Color3.fromRGB(255, 255, 255) hideButton.TextScaled = true hideButton.Font = Enum.Font.Gotham hideButton.BorderSizePixel = 0 hideButton.Parent = mainFrame local hideCorner = Instance.new("UICorner") hideCorner.CornerRadius = UDim.new(0, 8) hideCorner.Parent = hideButton local closeButton = Instance.new("TextButton") closeButton.Size = UDim2.new(0, 24, 0, 24) closeButton.Position = UDim2.new(1, -30, 0, 5) closeButton.BackgroundColor3 = Color3.fromRGB(170, 50, 50) closeButton.Text = "X" closeButton.TextColor3 = Color3.fromRGB(255, 255, 255) closeButton.TextScaled = true closeButton.Font = Enum.Font.GothamBold closeButton.BorderSizePixel = 0 closeButton.Parent = mainFrame local closeCorner = Instance.new("UICorner") closeCorner.CornerRadius = UDim.new(0, 8) closeCorner.Parent = closeButton local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Size = UDim2.new(1, 0, 1, -34) scrollFrame.Position = UDim2.new(0, 0, 0, 34) scrollFrame.BackgroundTransparency = 1 scrollFrame.BorderSizePixel = 0 scrollFrame.ScrollBarThickness = 5 scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0) scrollFrame.Parent = mainFrame local content = Instance.new("Frame") content.Size = UDim2.new(1, -10, 0, 0) content.Position = UDim2.new(0, 5, 0, 5) content.BackgroundTransparency = 1 content.BorderSizePixel = 0 content.Parent = scrollFrame local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 6) layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Parent = content layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() content.Size = UDim2.new(1, -10, 0, layout.AbsoluteContentSize.Y) scrollFrame.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y + 10) end) local function roundify(obj, radius) local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, radius) c.Parent = obj return c end local function makeLabel(text, height) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 0, height or 22) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = Color3.fromRGB(255, 255, 255) lbl.TextScaled = true lbl.Font = Enum.Font.Gotham lbl.Parent = content return lbl end local function makeBox(labelText, defaultText) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 50) row.BackgroundColor3 = Color3.fromRGB(32, 32, 32) row.BorderSizePixel = 0 row.Parent = content roundify(row, 10) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -12, 0, 17) lbl.Position = UDim2.new(0, 6, 0, 3) lbl.BackgroundTransparency = 1 lbl.Text = labelText lbl.TextColor3 = Color3.fromRGB(255, 255, 255) lbl.TextScaled = true lbl.Font = Enum.Font.Gotham lbl.Parent = row local box = Instance.new("TextBox") box.Size = UDim2.new(1, -12, 0, 22) box.Position = UDim2.new(0, 6, 0, 24) box.BackgroundColor3 = Color3.fromRGB(45, 45, 45) box.Text = defaultText box.TextColor3 = Color3.fromRGB(255, 255, 255) box.TextScaled = true box.Font = Enum.Font.Gotham box.BorderSizePixel = 0 box.ClearTextOnFocus = false box.Parent = row roundify(box, 8) return box end local function makeButton(text, color, height) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, height or 30) btn.BackgroundColor3 = color btn.Text = text btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.TextScaled = true btn.Font = Enum.Font.GothamBold btn.BorderSizePixel = 0 btn.Parent = content roundify(btn, 10) return btn end makeLabel("Reality bending controls", 22) local speedBox = makeBox("Speed", tostring(bendSpeed)) local strengthBox = makeBox("Strength", tostring(bendStrength)) local rangeBox = makeBox("Range", tostring(bendRange)) local nameBox = makeBox("Button Name", mainButtonText) local axisButton = makeButton("Axis: " .. axisList[axisIndex], Color3.fromRGB(80, 80, 140), 30) local bendButton = makeButton(mainButtonText, Color3.fromRGB(50, 120, 50), 34) local chaosButton = makeButton("CHAOS! : OFF", Color3.fromRGB(150, 90, 40), 34) local maxChaosButton = makeButton("MAX CHAOS! : OFF", Color3.fromRGB(170, 40, 40), 34) local resetButton = makeButton("Reset", Color3.fromRGB(120, 60, 60), 34) local applyNameButton = makeButton("Apply Name", Color3.fromRGB(90, 90, 150), 30) local statusLabel = makeLabel("Status: Ready", 22) local smallButton = Instance.new("TextButton") smallButton.Size = UDim2.new(0, 70, 0, 30) smallButton.Position = UDim2.new(0, 10, 0.5, -15) smallButton.BackgroundColor3 = Color3.fromRGB(35, 35, 35) smallButton.Text = smallButtonText smallButton.TextColor3 = Color3.fromRGB(255, 255, 255) smallButton.TextScaled = true smallButton.Font = Enum.Font.GothamBold smallButton.BorderSizePixel = 0 smallButton.Visible = false smallButton.Active = true smallButton.Parent = screenGui local smallCorner = Instance.new("UICorner") smallCorner.CornerRadius = UDim.new(0, 10) smallCorner.Parent = smallButton local function updateStatus(text) statusLabel.Text = "Status: " .. text end local function refreshTexts() bendButton.Text = mainButtonText axisButton.Text = "Axis: " .. axisList[axisIndex] smallButton.Text = smallButtonText end axisButton.MouseButton1Click:Connect(function() axisIndex += 1 if axisIndex > #axisList then axisIndex = 1 end axisButton.Text = "Axis: " .. axisList[axisIndex] updateStatus("Axis changed to " .. axisList[axisIndex]) end) applyNameButton.MouseButton1Click:Connect(function() if nameBox.Text ~= "" then mainButtonText = nameBox.Text bendButton.Text = mainButtonText updateStatus("Button name updated") end end) bendButton.MouseButton1Click:Connect(function() bendOn = not bendOn bendToken += 1 local myToken = bendToken if bendOn then bendButton.Text = "STOP" bendButton.BackgroundColor3 = Color3.fromRGB(170, 60, 60) updateStatus("Reality bending") task.spawn(function() while bendOn and bendToken == myToken and screenGui.Parent do updateCharacter() bendSpeed = parseNumber(speedBox.Text, bendSpeed, 0.1, 100) bendStrength = parseNumber(strengthBox.Text, bendStrength, 0, 10) bendRange = parseNumber(rangeBox.Text, bendRange, 1, 500) applyBendStep() RunService.RenderStepped:Wait() end end) else restoreAll() bendButton.Text = mainButtonText bendButton.BackgroundColor3 = Color3.fromRGB(50, 120, 50) updateStatus("Stopped and restored") end end) chaosButton.MouseButton1Click:Connect(function() chaosOn = not chaosOn maxChaosOn = false chaosToken += 1 local myToken = chaosToken if chaosOn then chaosButton.Text = "CHAOS! : ON" chaosButton.BackgroundColor3 = Color3.fromRGB(170, 60, 60) maxChaosButton.Text = "MAX CHAOS! : OFF" maxChaosButton.BackgroundColor3 = Color3.fromRGB(170, 40, 40) updateStatus("Chaos active") task.spawn(function() while chaosOn and chaosToken == myToken and screenGui.Parent do updateCharacter() bendSpeed = parseNumber(speedBox.Text, bendSpeed, 0.1, 100) bendStrength = parseNumber(strengthBox.Text, bendStrength, 0, 10) bendRange = parseNumber(rangeBox.Text, bendRange, 1, 500) applyChaosStep(1) RunService.RenderStepped:Wait() end end) else chaosButton.Text = "CHAOS! : OFF" chaosButton.BackgroundColor3 = Color3.fromRGB(150, 90, 40) if not bendOn and not maxChaosOn then restoreAll() updateStatus("Chaos off") else updateStatus("Chaos off") end end end) maxChaosButton.MouseButton1Click:Connect(function() maxChaosOn = not maxChaosOn chaosOn = false chaosToken += 1 local myToken = chaosToken if maxChaosOn then maxChaosButton.Text = "MAX CHAOS! : ON" maxChaosButton.BackgroundColor3 = Color3.fromRGB(255, 70, 70) chaosButton.Text = "CHAOS! : OFF" chaosButton.BackgroundColor3 = Color3.fromRGB(150, 90, 40) updateStatus("MAX CHAOS active") task.spawn(function() while maxChaosOn and chaosToken == myToken and screenGui.Parent do updateCharacter() bendSpeed = parseNumber(speedBox.Text, bendSpeed, 0.1, 100) bendStrength = parseNumber(strengthBox.Text, bendStrength, 0, 10) bendRange = parseNumber(rangeBox.Text, bendRange, 1, 500) applyChaosStep(2) RunService.RenderStepped:Wait() end end) else maxChaosButton.Text = "MAX CHAOS! : OFF" maxChaosButton.BackgroundColor3 = Color3.fromRGB(170, 40, 40) if not bendOn and not chaosOn then restoreAll() updateStatus("MAX CHAOS off") else updateStatus("MAX CHAOS off") end end end) resetButton.MouseButton1Click:Connect(function() restoreAll() bendButton.Text = mainButtonText bendButton.BackgroundColor3 = Color3.fromRGB(50, 120, 50) chaosButton.Text = "CHAOS! : OFF" chaosButton.BackgroundColor3 = Color3.fromRGB(150, 90, 40) maxChaosButton.Text = "MAX CHAOS! : OFF" maxChaosButton.BackgroundColor3 = Color3.fromRGB(170, 40, 40) updateStatus("Reset") end) hideButton.MouseButton1Click:Connect(function() mainFrame.Visible = false smallButton.Visible = true end) smallButton.MouseButton1Click:Connect(function() mainFrame.Visible = true smallButton.Visible = false end) closeButton.MouseButton1Click:Connect(function() restoreAll() screenGui:Destroy() end) local function makeDraggable(handle, target) local dragging = false local dragInput local dragStart local startPos handle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = target.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) handle.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 local delta = input.Position - dragStart target.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) end makeDraggable(titleBar, mainFrame) makeDraggable(smallButton, smallButton) refreshTexts() updateStatus("Ready")