-- made by gaming (recommend some games may not support but its a version of no perma-death, good luck!) local ORBIT_RADIUS = 6 local ORBIT_HEIGHT = 3 local ORBIT_SPEED = 14 local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Workspace = game:GetService("Workspace") local LocalPlayer = Players.LocalPlayer local ORBIT_START_POS = nil repeat task.wait() until LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") ORBIT_START_POS = LocalPlayer.Character.HumanoidRootPart.CFrame local gui = Instance.new("ScreenGui", game.CoreGui) gui.Name = "OrbitGui" gui.ResetOnSpawn = false local frame = Instance.new("Frame", gui) frame.Size = UDim2.new(0, 200, 0, 160) frame.Position = UDim2.new(0, 20, 0.5, -80) frame.BackgroundColor3 = Color3.new(0, 0, 0) frame.BackgroundTransparency = 0.3 frame.Draggable = true frame.Active = true local radiusLabel = Instance.new("TextLabel", frame) radiusLabel.Size = UDim2.new(1, 0, 0, 20) radiusLabel.Text = "Radius" radiusLabel.TextColor3 = Color3.new(1, 1, 1) radiusLabel.BackgroundTransparency = 1 local radiusBox = Instance.new("TextBox", frame) radiusBox.Position = UDim2.new(0, 0, 0, 20) radiusBox.Size = UDim2.new(1, 0, 0, 20) radiusBox.Text = tostring(ORBIT_RADIUS) local speedLabel = Instance.new("TextLabel", frame) speedLabel.Position = UDim2.new(0, 0, 0, 40) speedLabel.Size = UDim2.new(1, 0, 0, 20) speedLabel.Text = "Speed" speedLabel.TextColor3 = Color3.new(1, 1, 1) speedLabel.BackgroundTransparency = 1 local speedBox = Instance.new("TextBox", frame) speedBox.Position = UDim2.new(0, 0, 0, 60) speedBox.Size = UDim2.new(1, 0, 0, 20) speedBox.Text = tostring(ORBIT_SPEED) radiusBox.FocusLost:Connect(function() local val = tonumber(radiusBox.Text) if val then ORBIT_RADIUS = val end end) speedBox.FocusLost:Connect(function() local val = tonumber(speedBox.Text) if val then ORBIT_SPEED = val end end) local blocks = {} local orbitTick = 0 local torso = nil local character = nil local function getTorso() character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() torso = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso") or character:FindFirstChild("HumanoidRootPart") end local function createBlock(pos) local part = Instance.new("Part") part.Size = Vector3.new(2, 2, 2) part.Anchored = false part.CanCollide = false part.Transparency = 1 part.BrickColor = BrickColor.new("Really red") part.Position = pos part.Material = Enum.Material.Neon part:SetAttribute("AllowSleep", false) part.CustomPhysicalProperties = PhysicalProperties.new(0.3, 0.3, 0.3) part.Parent = Workspace return part end local function attachBlockToHat(block, hatHandle) for _, v in ipairs(hatHandle:GetChildren()) do if v:IsA("Attachment") or v:IsA("AlignPosition") or v:IsA("AlignOrientation") then v:Destroy() end end for _, v in ipairs(block:GetChildren()) do if v:IsA("Attachment") then v:Destroy() end end local att1 = Instance.new("Attachment", block) local att2 = Instance.new("Attachment", hatHandle) local alignPos = Instance.new("AlignPosition", hatHandle) alignPos.Attachment0 = att2 alignPos.Attachment1 = att1 alignPos.MaxForce = 1e12 alignPos.Responsiveness = math.huge alignPos.RigidityEnabled = true local alignOri = Instance.new("AlignOrientation", hatHandle) alignOri.Attachment0 = att2 alignOri.Attachment1 = att1 alignOri.MaxTorque = 1e12 alignOri.Responsiveness = math.huge alignOri.RigidityEnabled = true local bv = Instance.new("BodyVelocity", block) bv.MaxForce = Vector3.new(1e12, 1e12, 1e12) bv.Velocity = Vector3.zero end local function refreshOrbit() for _, b in ipairs(blocks) do if b.block then b.block:Destroy() end end blocks = {} getTorso() local accessories = {} for _, v in ipairs(character:GetChildren()) do if v:IsA("Accessory") and v:FindFirstChild("Handle") then table.insert(accessories, v) end end for i, acc in ipairs(accessories) do local handle = acc:FindFirstChild("Handle") local block = createBlock(handle.Position) attachBlockToHat(block, handle) blocks[i] = {block = block, handle = handle, index = i, total = #accessories} end end getTorso() refreshOrbit() local hum = character:FindFirstChildOfClass("Humanoid") if hum then hum.Health = 0 end playerDropdown.Text = LocalPlayer.Name local dropdownFrame = Instance.new("ScrollingFrame", frame) dropdownFrame.Position = UDim2.new(0, 0, 0, 120) dropdownFrame.Size = UDim2.new(1, 0, 0, 60) dropdownFrame.CanvasSize = UDim2.new(0, 0, 0, 0) dropdownFrame.ScrollBarThickness = 4 dropdownFrame.BackgroundTransparency = 0.2 dropdownFrame.BackgroundColor3 = Color3.new(0.1, 0.1, 0.1) dropdownFrame.Visible = false local function updateDropdown() dropdownFrame:ClearAllChildren() local count = 0 for _, plr in ipairs(Players:GetPlayers()) do count += 1 local btn = Instance.new("TextButton", dropdownFrame) btn.Size = UDim2.new(1, 0, 0, 20) btn.Position = UDim2.new(0, 0, 0, (count - 1) * 20) btn.Text = plr.Name btn.BackgroundTransparency = 0.4 btn.BackgroundColor3 = Color3.new(0.2, 0.2, 0.2) btn.MouseButton1Click:Connect(function() selectedPlayer = plr playerDropdown.Text = plr.Name dropdownFrame.Visible = false end) end dropdownFrame.CanvasSize = UDim2.new(0, 0, 0, count * 20) end playerDropdown.MouseButton1Click:Connect(function() dropdownFrame.Visible = not dropdownFrame.Visible updateDropdown() end) RunService.Heartbeat:Connect(function(dt) if not selectedPlayer.Character then return end local root = selectedPlayer.Character:FindFirstChild("HumanoidRootPart") if not root then return end orbitTick += dt for _, b in ipairs(blocks) do local i, total = b.index, b.total local angle = (2 * math.pi / total) * i + orbitTick * ORBIT_SPEED local offset = Vector3.new(math.cos(angle) * ORBIT_RADIUS, ORBIT_HEIGHT, math.sin(angle) * ORBIT_RADIUS) local goalPos = root.Position + offset local block = b.block local bv = block:FindFirstChildOfClass("BodyVelocity") if bv then local dir = (goalPos - block.Position) if dir.Magnitude > 0.1 then bv.Velocity = dir.Unit * 1000 else bv.Velocity = Vector3.zero end end end end) task.spawn(function() while true do for _, b in pairs(blocks) do local block = b.block local handle = b.handle if block and handle then for _, v in ipairs(handle:GetChildren()) do if v:IsA("AlignPosition") or v:IsA("AlignOrientation") then v:Destroy() end end for _, v in ipairs(block:GetChildren()) do if v:IsA("Attachment") then v:Destroy() end end local att1 = Instance.new("Attachment", block) local att2 = Instance.new("Attachment", handle) local alignPos = Instance.new("AlignPosition", handle) alignPos.Attachment0 = att2 alignPos.Attachment1 = att1 alignPos.MaxForce = 1e12 alignPos.Responsiveness = math.huge alignPos.RigidityEnabled = true local alignOri = Instance.new("AlignOrientation", handle) alignOri.Attachment0 = att2 alignOri.Attachment1 = att1 alignOri.MaxTorque = 1e12 alignOri.Responsiveness = math.huge alignOri.RigidityEnabled = true end end task.wait(0.3) end end) LocalPlayer.CharacterAdded:Connect(function(char) character = char local hum = char:WaitForChild("Humanoid", 5) local hrp = nil repeat task.wait() hrp = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso") until hum and hrp and hum.Health > 0 task.wait(0.3) if ORBIT_START_POS then hrp.CFrame = ORBIT_START_POS end task.wait(0.5) hum.Health = 0 task.wait(0.5) refreshOrbit() end) local camPart = Instance.new("Part", Workspace) camPart.Anchored = true camPart.CanCollide = false camPart.Size = Vector3.new(1, 1, 1) camPart.CFrame = ORBIT_START_POS camPart.Transparency = 1 camPart.BrickColor = BrickColor.new("Lime green") Workspace.CurrentCamera.CameraSubject = camPart Workspace.CurrentCamera.CameraType = Enum.CameraType.Attach