-- Rpid Visuals ESP GUI with Mobile Drag Support -- Works on both PC and Mobile local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera local ESP = {} local enabled = false -- Create GUI local ScreenGui = Instance.new("ScreenGui") ScreenGui.ResetOnSpawn = false ScreenGui.Parent = game:GetService("CoreGui") local Frame = Instance.new("Frame") Frame.Size = UDim2.new(0, 160, 0, 110) Frame.Position = UDim2.new(0.02, 0, 0.1, 0) Frame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) Frame.BorderSizePixel = 0 Frame.Active = true Frame.Draggable = true -- PC drag support Frame.Parent = ScreenGui -- Title Bar (for mobile dragging) local TitleBar = Instance.new("Frame") TitleBar.Size = UDim2.new(1, 0, 0, 30) TitleBar.BackgroundColor3 = Color3.fromRGB(40, 40, 40) TitleBar.BorderSizePixel = 0 TitleBar.Parent = Frame local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, -40, 1, 0) Title.Position = UDim2.new(0, 10, 0, 0) Title.BackgroundTransparency = 1 Title.Text = "Rpid Visuals" Title.TextColor3 = Color3.fromRGB(220, 220, 255) Title.TextSize = 17 Title.Font = Enum.Font.SourceSansBold Title.Parent = TitleBar -- Mobile drag support local dragging = false local dragInput = nil local dragStart = nil local startPos = nil local function updateInput(input) local delta = input.Position - dragStart local newPosition = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) Frame.Position = newPosition end TitleBar.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) TitleBar.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 updateInput(input) end end) -- Toggle Button local ToggleButton = Instance.new("TextButton") ToggleButton.Size = UDim2.new(1, -20, 0, 40) ToggleButton.Position = UDim2.new(0, 10, 0, 40) ToggleButton.BackgroundColor3 = Color3.fromRGB(45, 45, 60) ToggleButton.Text = "ESP: OFF" ToggleButton.TextColor3 = Color3.fromRGB(200, 200, 255) ToggleButton.TextSize = 16 ToggleButton.Font = Enum.Font.SourceSans ToggleButton.Parent = Frame ToggleButton.MouseButton1Click:Connect(function() enabled = not enabled ToggleButton.Text = "ESP: " .. (enabled and "ON" or "OFF") ToggleButton.BackgroundColor3 = enabled and Color3.fromRGB(60, 100, 60) or Color3.fromRGB(45, 45, 60) end) -- ESP Functions local function addESP(player) if player == LocalPlayer then return end local box = Drawing.new("Square") box.Thickness = 1.5 box.Color = Color3.fromRGB(255, 60, 60) box.Filled = false box.Transparency = 1 local tracer = Drawing.new("Line") tracer.Thickness = 1.5 tracer.Color = Color3.fromRGB(255, 60, 60) tracer.Transparency = 1 ESP[player] = {box = box, tracer = tracer} end for _, player in ipairs(Players:GetPlayers()) do addESP(player) end Players.PlayerAdded:Connect(addESP) Players.PlayerRemoving:Connect(function(player) if ESP[player] then ESP[player].box:Remove() ESP[player].tracer:Remove() ESP[player] = nil end end) -- Main ESP Loop RunService.RenderStepped:Connect(function() if not enabled then for _, esp in pairs(ESP) do esp.box.Visible = false esp.tracer.Visible = false end return end for player, esp in pairs(ESP) do local char = player.Character if char and char:FindFirstChild("HumanoidRootPart") and char:FindFirstChild("Humanoid") and char.Humanoid.Health > 0 then local rootPart = char.HumanoidRootPart local head = char:FindFirstChild("Head") if rootPart and head then local rootPos, onScreen = Camera:WorldToViewportPoint(rootPart.Position) if onScreen then -- Box local headPos = Camera:WorldToViewportPoint(head.Position + Vector3.new(0, 0.6, 0)) local legPos = Camera:WorldToViewportPoint(rootPart.Position - Vector3.new(0, 3.5, 0)) local height = math.abs(headPos.Y - legPos.Y) local width = height * 0.45 esp.box.Size = Vector2.new(width, height) esp.box.Position = Vector2.new(rootPos.X - width/2, headPos.Y) esp.box.Visible = true -- Tracer (from bottom center of screen) esp.tracer.From = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y) esp.tracer.To = Vector2.new(rootPos.X, legPos.Y + 5) esp.tracer.Visible = true else esp.box.Visible = false esp.tracer.Visible = false end end else esp.box.Visible = false esp.tracer.Visible = false end end end) print("Rpid Visuals loaded - now with mobile drag support!")