Halo source code
Key RequiredUniversal

Halo source code

Universal Scriptsmertni*qqsmertni*qq 1.3K views 137 executesUpdated Jun 17, 2026
Unrated
00
Lua Script•367 lines (13322 chars)
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)

Features & Information

just halo made by ai and i like it
#halo#source

Community Comments (5)

MustardKetchupMustardKetchupJun 19, 2026

Yo is this FE?

Replying to @MustardKetchup
ALTERRATICALTERRATICJun 26, 2026

@MustardKetchup idk, I wanna test it

Replying to @MustardKetchup
ALTERRATICALTERRATICJun 26, 2026

@MustardKetchup prolly not tho

Replying to @MustardKetchup
worldigoworldigoAug 27, 2026

@MustardKetchup ofc not

Replying to @worldigo
MustardKetchupMustardKetchupAug 28, 2026

@worldigo k

More Scripts for Universal Scripts