
KeylessUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local CoreGui = game:GetService("CoreGui")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
-- Cleanup old versions on restart
if CoreGui:FindFirstChild("HaloMenuGui") then CoreGui.HaloMenuGui:Destroy() end
if workspace.CurrentCamera:FindFirstChild("ClientHalo3D") then workspace.CurrentCamera.ClientHalo3D:Destroy() end
-- =======================================================
-- DEFAULT SETTINGS
-- =======================================================
local config = {
mode = "Rainbow", -- "Rainbow", "Angel", "Fire"
rotationSpeed = 1.2,
radius = 1.3,
height = 2.0,
thickness = 0.22,
segments = 72, -- "Parts" slider (72 - 200)
fireWaves = 4 -- "Points" slider (2 - 12)
}
local currentRotation = 0
local haloParts = {}
local jointParts = {}
-- =======================================================
-- HALO CONTAINER
-- =======================================================
local haloModel = Instance.new("Model")
haloModel.Name = "ClientHalo3D"
haloModel.Parent = workspace.CurrentCamera
local centerPart = Instance.new("Part")
centerPart.Size = Vector3.new(0.1, 0.1, 0.1)
centerPart.Transparency = 1
centerPart.CanCollide = false
centerPart.Anchored = true
centerPart.Parent = haloModel
haloModel.PrimaryPart = centerPart
local function adjustSegmentCount(targetCount)
while #haloParts < targetCount do
local p = Instance.new("Part")
p.Material = Enum.Material.Neon
p.CanCollide = false
p.Anchored = true
p.Shape = Enum.PartType.Cylinder
p.Parent = haloModel
table.insert(haloParts, p)
local s = Instance.new("Part")
s.Material = Enum.Material.Neon
s.CanCollide = false
s.Anchored = true
s.Shape = Enum.PartType.Ball
s.Parent = haloModel
table.insert(jointParts, s)
end
while #haloParts > targetCount do
local p = table.remove(haloParts)
if p then p:Destroy() end
local s = table.remove(jointParts)
if s then s:Destroy() end
end
end
adjustSegmentCount(config.segments)
-- =======================================================
-- INTERFACE (GUI) WITH SEPARATE SECTIONS
-- =======================================================
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "HaloMenuGui"
ScreenGui.Parent = CoreGui
ScreenGui.ResetOnSpawn = false
ScreenGui.IgnoreGuiInset = true
-- Toggle Button
local ToggleBtn = Instance.new("TextButton")
ToggleBtn.Size = UDim2.new(0, 90, 0, 30)
ToggleBtn.Position = UDim2.new(1, -105, 0.4, -150)
ToggleBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 35)
ToggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleBtn.Text = "Halo GUI"
ToggleBtn.Font = Enum.Font.SourceSansBold
ToggleBtn.TextSize = 14
ToggleBtn.Parent = ScreenGui
Instance.new("UICorner", ToggleBtn).CornerRadius = UDim.new(0, 6)
-- Main Frame
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 220, 0, 410) -- Initial size
MainFrame.Position = UDim2.new(1, -235, 0.4, -110)
MainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
MainFrame.BorderSizePixel = 0
MainFrame.Visible = true
MainFrame.Parent = ScreenGui
Instance.new("UICorner", MainFrame).CornerRadius = UDim.new(0, 10)
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, 0, 0, 35)
Title.BackgroundTransparency = 1
Title.Text = "Premium Halo GUI"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.Font = Enum.Font.SourceSansBold
Title.TextSize = 18
Title.Parent = MainFrame
local layout = Instance.new("UIListLayout")
layout.Parent = MainFrame
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Padding = UDim.new(0, 6)
layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
-- Section: MODES
local ModeSectionLabel = Instance.new("TextLabel")
ModeSectionLabel.Size = UDim2.new(0, 190, 0, 20)
ModeSectionLabel.BackgroundTransparency = 1
ModeSectionLabel.Text = "— MODES —"
ModeSectionLabel.TextColor3 = Color3.fromRGB(120, 120, 130)
ModeSectionLabel.Font = Enum.Font.SourceSansBold
ModeSectionLabel.TextSize = 12
ModeSectionLabel.Parent = MainFrame
-- Horizontal Container for Mode Buttons
local ModesContainer = Instance.new("Frame")
ModesContainer.Size = UDim2.new(0, 190, 0, 32)
ModesContainer.BackgroundTransparency = 1
ModesContainer.Parent = MainFrame
local hLayout = Instance.new("UIListLayout")
hLayout.Parent = ModesContainer
hLayout.FillDirection = Enum.FillDirection.Horizontal
hLayout.SortOrder = Enum.SortOrder.LayoutOrder
hLayout.Padding = UDim.new(0, 5)
-- Button Tracking Table for Color Changes
local modeButtons = {}
local fireSliderFrame -- Reference to "Points" slider to toggle visibility
local function updateMenuVisuals()
for mName, btn in pairs(modeButtons) do
if config.mode == mName then
-- Highlight active mode
if mName == "Rainbow" then btn.BackgroundColor3 = Color3.fromRGB(0, 160, 255)
elseif mName == "Angel" then btn.BackgroundColor3 = Color3.fromRGB(200, 160, 40)
elseif mName == "Fire" then btn.BackgroundColor3 = Color3.fromRGB(220, 60, 20) end
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
else
-- Inactive mode
btn.BackgroundColor3 = Color3.fromRGB(35, 35, 40)
btn.TextColor3 = Color3.fromRGB(160, 160, 160)
end
end
-- Toggle visibility of the "Points" slider for Fire mode
if fireSliderFrame then
if config.mode == "Fire" then
fireSliderFrame.Visible = true
MainFrame.Size = UDim2.new(0, 220, 0, 415) -- Expand frame
else
fireSliderFrame.Visible = false
MainFrame.Size = UDim2.new(0, 220, 0, 365) -- Shrink frame
end
end
end
local function createModeBtn(mName, text, order)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, 60, 1, 0)
btn.Font = Enum.Font.SourceSansBold
btn.TextSize = 11
btn.Text = text
btn.LayoutOrder = order
btn.Parent = ModesContainer
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 5)
modeButtons[mName] = btn
btn.MouseButton1Click:Connect(function()
config.mode = mName
updateMenuVisuals()
end)
end
createModeBtn("Rainbow", "Rainbow 🌈", 1)
createModeBtn("Angel", "Angel 👼", 2)
createModeBtn("Fire", "Fire 🔥", 3)
-- Section: SETTINGS
local SettingsSectionLabel = Instance.new("TextLabel")
SettingsSectionLabel.Size = UDim2.new(0, 190, 0, 20)
SettingsSectionLabel.BackgroundTransparency = 1
SettingsSectionLabel.Text = "— SETTINGS —"
SettingsSectionLabel.TextColor3 = Color3.fromRGB(120, 120, 130)
SettingsSectionLabel.Font = Enum.Font.SourceSansBold
SettingsSectionLabel.TextSize = 12
SettingsSectionLabel.Parent = MainFrame
-- Slider Creator Function
local function createSliderRow(labelText, minVal, maxVal, startVal, isInteger, callback)
local row = Instance.new("Frame")
row.Size = UDim2.new(0, 190, 0, 45)
row.BackgroundTransparency = 1
row.Parent = MainFrame
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, 0, 0, 20)
label.BackgroundTransparency = 1
label.Text = labelText .. ": " .. (isInteger and tostring(math.round(startVal)) or string.format("%.1f", startVal))
label.TextColor3 = Color3.fromRGB(200, 200, 200)
label.Font = Enum.Font.SourceSans
label.TextSize = 14
label.TextXAlignment = Enum.TextXAlignment.Left
label.Parent = row
local sliderBar = Instance.new("Frame")
sliderBar.Size = UDim2.new(1, 0, 0, 6)
sliderBar.Position = UDim2.new(0, 0, 0, 25)
sliderBar.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
sliderBar.BorderSizePixel = 0
sliderBar.Parent = row
Instance.new("UICorner", sliderBar).CornerRadius = UDim.new(0, 3)
local knob = Instance.new("TextButton")
knob.Size = UDim2.new(0, 14, 0, 14)
knob.BackgroundColor3 = Color3.fromRGB(0, 255, 240)
knob.Text = ""
knob.Parent = sliderBar
Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)
local startPct = (startVal - minVal) / (maxVal - minVal)
knob.Position = UDim2.new(startPct, -7, 0.5, -7)
local dragging = false
local function updateSlider()
local mousePos = UserInputService:GetMouseLocation()
local barAbsPos = sliderBar.AbsolutePosition
local barAbsSize = sliderBar.AbsoluteSize
local pct = math.clamp((mousePos.X - barAbsPos.X) / barAbsSize.X, 0, 1)
knob.Position = UDim2.new(pct, -7, 0.5, -7)
local exactVal = minVal + (maxVal - minVal) * pct
if isInteger then
exactVal = math.round(exactVal)
label.Text = labelText .. ": " .. tostring(exactVal)
else
exactVal = math.round(exactVal * 10) / 10
label.Text = labelText .. ": " .. string.format("%.1f", exactVal)
end
callback(exactVal)
end
knob.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
end
end)
RunService.RenderStepped:Connect(function()
if dragging then updateSlider() end
end)
return row
end
-- Create Standard Sliders
createSliderRow("Speed", 0, 5, config.rotationSpeed, false, function(val) config.rotationSpeed = val end)
createSliderRow("Size", 0.3, 4, config.radius, false, function(val) config.radius = val end)
createSliderRow("Height", 0.5, 5, config.height, false, function(val) config.height = val end)
createSliderRow("Parts", 3, 400, config.segments, true, function(val) config.segments = val end)
-- Create "Points" slider and save reference to dynamically hide it
fireSliderFrame = createSliderRow("Points", 2, 12, config.fireWaves, true, function(val) config.fireWaves = val end)
-- Initial UI Setup
updateMenuVisuals()
ToggleBtn.MouseButton1Click:Connect(function() MainFrame.Visible = not MainFrame.Visible end)
-- =======================================================
-- MAIN MATH AND RENDERING LOOP
-- =======================================================
local connection
connection = RunService.RenderStepped:Connect(function(dt)
local character = player.Character
if not character then return end
local head = character:FindFirstChild("Head")
if not head then return end
if not haloModel or not haloModel.Parent then
connection:Disconnect()
return
end
-- Update physics segment counts from the Parts slider
adjustSegmentCount(config.segments)
local currentSegments = #haloParts
currentRotation = (currentRotation + dt * config.rotationSpeed) % (math.pi * 2)
local baseWave = math.sin(tick() * 2.5) * 0.08
local yOffset = config.height + baseWave
centerPart.CFrame = head.CFrame * CFrame.new(0, yOffset, 0) * CFrame.Angles(0, currentRotation, 0)
local positions = {}
local colors = {}
-- Pre-calculate Geometry
for i = 1, currentSegments + 1 do
local angle = (i / currentSegments) * math.pi * 2
local x = math.cos(angle) * config.radius
local z = math.sin(angle) * config.radius
local localWave = 0
local partColor = Color3.fromRGB(255, 255, 255)
if config.mode == "Rainbow" then
partColor = Color3.fromHSV((tick() * 0.15 + i / currentSegments) % 1, 1, 1)
localWave = math.sin(tick() * 3 + angle * 2) * 0.05
elseif config.mode == "Angel" then
partColor = Color3.fromRGB(255, 235, 140)
localWave = math.sin(tick() * 1.2 + angle * 1) * 0.02
elseif config.mode == "Fire" then
-- The "Points" slider (config.fireWaves) handles how many peaks the flame has
local fireHue = 0.02 + (math.sin(tick() * 4 + angle * config.fireWaves) * 0.04)
partColor = Color3.fromHSV(fireHue, 0.95, 1)
localWave = math.sin(tick() * 6 + angle * config.fireWaves) * 0.14
end
local worldPos = Vector3.new(x, localWave, z)
table.insert(positions, centerPart.CFrame * worldPos)
table.insert(colors, partColor)
end
-- Render cylinders and joints
for i = 1, currentSegments do
local p = haloParts[i]
local s = jointParts[i]
local pos1 = positions[i]
local pos2 = positions[i + 1]
local currentColor = colors[i]
-- Joint Spheres
local ballSize = config.thickness + 0.04
s.Size = Vector3.new(ballSize, ballSize, ballSize)
s.CFrame = CFrame.new(pos1)
s.Color = currentColor
-- Neon Cylinders
local distance = (pos2 - pos1).Magnitude
p.Size = Vector3.new(distance + 0.01, config.thickness, config.thickness)
p.CFrame = CFrame.lookAt(pos1:Lerp(pos2, 0.5), pos2) * CFrame.Angles(0, math.rad(90), 0)
p.Color = currentColor
end
end)



Yo is this FE?
@MustardKetchup idk, I wanna test it
@MustardKetchup prolly not tho
@MustardKetchup ofc not
@worldigo k