Blade Ball script (IDENTICAL)
Blade Ball Keyless
Blade Ball script (IDENTICAL)
👤 alexriderr 👁 3 views ❤️ 0 likes ⏱ Sep 6, 2026
This script is designed for **Blade Ball** and comes with useful tools like **ESP** and **Auto Parry** to make your gameplay more fun and enjoyable. It is a **fully working script** and supports the **Xeno executor**.
✨ Features
Auto Parry Parry Accuracy Auto Abilities Instant Trigger Bot ESP Keyless
📋 Script Code
local cloneref = cloneref or function(o) return o end
local Players = cloneref(game:GetService("Players"))
local RunService = cloneref(game:GetService("RunService"))
local Workspace = cloneref(game:GetService("Workspace"))
local UserInputService = cloneref(game:GetService("UserInputService"))
local TweenService = cloneref(game:GetService("TweenService"))
local CoreGui = cloneref(game:GetService("CoreGui"))
local Stats = cloneref(game:GetService("Stats"))
local TextService = cloneref(game:GetService("TextService"))
local HttpService = cloneref(game:GetService("HttpService"))
local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera or Workspace:FindFirstChildOfClass("Camera")
local ZWS = utf8.char(0x200B)
local function S(str)
    if typeof(str) ~= "string" or str == "" then return str end
    local chars = {}
    local success = pcall(function()
        for _, code in utf8.codes(str) do
            table.insert(chars, utf8.char(code))
        end
    end)
    if not success or #chars == 0 then
        for i = 1, #str do
            table.insert(chars, str:sub(i, i))
        end
    end
    return table.concat(chars, ZWS)
end
local function RandName()
    return "R_" .. tostring(math.random(100000, 999999))
end
local Config = {
    ScriptVersion = "1.9.0",
    UIKeybind = Enum.KeyCode.LeftControl,
    ParryKeybind = Enum.KeyCode.K,
    KeepCrestMinimised = true,
    Notifications = true,
    DeathNotifications = true,
    AutoParry = true,
    Accuracy = 100,
    ParryMode = "Humanized Input",
    CurveMode = "Camera",
    RandomizeAccuracy = false,
    AutoAbilities = false,
    InstantTriggerbot = false,
    VisualParryRing = true,
    BallStatsHUD = true,
    ClientStatsHUD = true,
    ParryRingRadius = 16,
    AutoSpam = true,
    SpamActionsPerSecond = 50,
    AutoSpamDistance = 35,
    SpamBatchMode = "Extremely Fast",
    ManualSpam = false,
    SafeClashRate = true,
    PlayerESP = false,
    PhantomDetection = true,
    TimeHoleDetection = true,
    SlashesOfFuryDetection = true,
    InfinityBallDetection = true,
    DeathSlashDetection = true,
    MovementModifiers = false,
    WalkSpeed = 36,
    JumpPower = 50,
    ImmortalityDesync = true,
    SpeedBypass = true,
    OrbitalAngle = 57,
    PeakHeight = 10,
    DesyncDepth = 8,
    OrbitRadius = 13,
    ClashDistance = 35,
    ClashSpeed = 0.130,
    NormalSpeed = 0.175,
    PingBasedOffset = 1.05,
    BallPrediction = 0.08,
    PredictionHorizon = 0.45,
    BaseWindow = 0.32,
    SpeedWindowFactor = 0.00050,
    MaxWindow = 0.45,
    MinWindow = 0.16,
    MaxRange = 55,
    SameBallLockout = 0.08
}
local autoParryEnabled = false
local LastClick = 0
local LastBallHit = nil
local lastBallVelocity = Vector3.zero
local lastBallAcceleration = Vector3.zero
local lastVelocityTime = 0
local furyCounterActive = false
local timeHoleLock = false
local defaultGameWalkSpeed = 36
local defaultGameJumpPower = 50
local lastTelemetry = {
    time = 0,
    speed = 0,
    distance = 0,
    approachSpeed = 0,
    dot = 0,
    timeToReach = 0,
    curveDelta = 0,
    ping = 60,
    isTarget = false,
    parryTime = 0,
    isClashing = false,
    nearestEnemyDist = 999,
    abilityActive = nil
}
local activeConnections = {}
local rowSearchIndex = {}
local ctrls = {}
local Colors = {
    Background     = Color3.fromRGB(15, 12, 22),
    SidebarBg      = Color3.fromRGB(11, 9, 17),
    BorderPurple   = Color3.fromRGB(168, 85, 247),
    BorderSubtle   = Color3.fromRGB(45, 33, 66),
    Divider        = Color3.fromRGB(36, 26, 54),
    PurplePrimary  = Color3.fromRGB(216, 160, 255),
    PurpleAccent   = Color3.fromRGB(168, 85, 247),
    PurpleMuted    = Color3.fromRGB(147, 112, 196),
    PurpleDark     = Color3.fromRGB(72, 45, 107),
    PurpleGlow     = Color3.fromRGB(192, 132, 252),
    TextMain       = Color3.fromRGB(243, 235, 255),
    TextSecondary  = Color3.fromRGB(186, 172, 212),
    TextMuted      = Color3.fromRGB(130, 115, 160),
    TextDark       = Color3.fromRGB(80, 68, 100),
    ToggleTrackOff = Color3.fromRGB(30, 24, 42),
    ToggleKnobOff  = Color3.fromRGB(90, 75, 115),
    ToggleTrackOn  = Color3.fromRGB(168, 85, 247),
    ToggleKnobOn   = Color3.fromRGB(255, 255, 255),
    SliderTrack    = Color3.fromRGB(28, 22, 40),
    SliderFill     = Color3.fromRGB(168, 85, 247),
    SliderKnob     = Color3.fromRGB(243, 230, 255),
    DropdownBg     = Color3.fromRGB(13, 10, 20),
    DropdownBorder = Color3.fromRGB(54, 38, 82),
    StatusActive   = Color3.fromRGB(52, 211, 153),
    StatusWarn     = Color3.fromRGB(251, 191, 36),
    StatusOff      = Color3.fromRGB(120, 105, 145),
    RowBg          = Color3.fromRGB(20, 16, 28),
    CardBg         = Color3.fromRGB(20, 16, 28),
    CardBgHover    = Color3.fromRGB(26, 20, 36),
    HeaderLine     = Color3.fromRGB(40, 30, 58),
    RingRange      = Color3.fromRGB(168, 85, 247)
}
local function GetSafeParent()
    if gethui then
        local h = gethui()
        if h then return h end
    end
    if syn and syn.protect_gui then
        return CoreGui
    end
    local s, res = pcall(function() return CoreGui end)
    if s and res then return res end
    return LocalPlayer:WaitForChild("PlayerGui")
end
local safeParent = GetSafeParent()
if getgenv then
    if getgenv()._identical_ui then
        pcall(function()
            getgenv()._identical_ui:Destroy()
        end)
    end
end
local screenGui = Instance.new("ScreenGui")
screenGui.Name = RandName()
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
if getgenv then
    getgenv()._identical_ui = screenGui
end
if syn and syn.protect_gui then
    pcall(syn.protect_gui, screenGui)
elseif protectgui then
    pcall(protectgui, screenGui)
end
screenGui.Parent = safeParent
local function GetLiveBall()
    local ballsFolder = Workspace:FindFirstChild("Balls")
    if ballsFolder then
        local found = ballsFolder:FindFirstChildOfClass("BasePart") or ballsFolder:FindFirstChildOfClass("MeshPart")
        if found then return found end
        for _, child in ipairs(ballsFolder:GetChildren()) do
            if child:IsA("BasePart") then
                return child
            elseif child:IsA("Model") and child.PrimaryPart then
                return child.PrimaryPart
            end
        end
    end
    return Workspace:FindFirstChild("Ball") or Workspace:FindFirstChild("RealBall")
end
local peakBallSpeed = 0
local frameCount = 0
local lastFpsUpdate = tick()
local currentFps = 165
local scriptCpuLoad = 5
local function MakeDraggable(guiObject, dragHandle)
    local dragging = false
    local dragInput, dragStart, startPos
    dragHandle = dragHandle or guiObject
    dragHandle.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            dragStart = input.Position
            startPos = guiObject.Position
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)
    guiObject.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
            guiObject.Position = UDim2.new(
                startPos.X.Scale,
                startPos.X.Offset + delta.X,
                startPos.Y.Scale,
                startPos.Y.Offset + delta.Y
            )
        end
    end)
end
local ballStatsFrame = Instance.new("Frame")
ballStatsFrame.Name = RandName()
ballStatsFrame.Size = UDim2.new(0, 215, 0, 88)
ballStatsFrame.Position = UDim2.new(1, -235, 0, 22)
ballStatsFrame.BackgroundColor3 = Color3.fromRGB(15, 12, 24)
ballStatsFrame.BackgroundTransparency = 0.08
ballStatsFrame.BorderSizePixel = 0
ballStatsFrame.ZIndex = 120
ballStatsFrame.Visible = Config.BallStatsHUD
ballStatsFrame.Parent = screenGui
local ballStatsCorner = Instance.new("UICorner")
ballStatsCorner.CornerRadius = UDim.new(0, 7)
ballStatsCorner.Parent = ballStatsFrame
local ballStatsStroke = Instance.new("UIStroke")
ballStatsStroke.Color = Color3.fromRGB(168, 85, 247)
ballStatsStroke.Thickness = 1.0
ballStatsStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
ballStatsStroke.Parent = ballStatsFrame
local ballStatsHeader = Instance.new("Frame")
ballStatsHeader.Name = RandName()
ballStatsHeader.Size = UDim2.new(1, 0, 0, 26)
ballStatsHeader.BackgroundColor3 = Color3.fromRGB(22, 16, 36)
ballStatsHeader.BorderSizePixel = 0
ballStatsHeader.ZIndex = 121
ballStatsHeader.Parent = ballStatsFrame
local headerCorner = Instance.new("UICorner")
headerCorner.CornerRadius = UDim.new(0, 7)
headerCorner.Parent = ballStatsHeader
local headerSquareFix = Instance.new("Frame")
headerSquareFix.Name = RandName()
headerSquareFix.Size = UDim2.new(1, 0, 0, 8)
headerSquareFix.Position = UDim2.new(0, 0, 1, -8)
headerSquareFix.BackgroundColor3 = Color3.fromRGB(22, 16, 36)
headerSquareFix.BorderSizePixel = 0
headerSquareFix.ZIndex = 121
headerSquareFix.Parent = ballStatsHeader
local ballCrest = Instance.new("TextLabel")
ballCrest.Name = RandName()
ballCrest.Size = UDim2.new(0, 18, 1, 0)
ballCrest.Position = UDim2.new(0, 10, 0, 0)
ballCrest.BackgroundTransparency = 1
ballCrest.Text = "◈"
ballCrest.TextColor3 = Color3.fromRGB(192, 132, 252)
ballCrest.TextSize = 11
ballCrest.Font = Enum.Font.GothamBold
ballCrest.ZIndex = 122
ballCrest.Parent = ballStatsHeader
local ballStatsTitle = Instance.new("TextLabel")
ballStatsTitle.Name = RandName()
ballStatsTitle.Size = UDim2.new(1, -35, 1, 0)
ballStatsTitle.Position = UDim2.new(0, 26, 0, 0)
ballStatsTitle.BackgroundTransparency = 1
ballStatsTitle.Text = S("BALL TELEMETRY")
ballStatsTitle.TextColor3 = Color3.fromRGB(235, 215, 255)
ballStatsTitle.TextSize = 10
ballStatsTitle.Font = Enum.Font.GothamBold
ballStatsTitle.TextXAlignment = Enum.TextXAlignment.Left
ballStatsTitle.ZIndex = 122
ballStatsTitle.Parent = ballStatsHeader
MakeDraggable(ballStatsFrame, ballStatsHeader)
local currentSpeedLabel = Instance.new("TextLabel")
currentSpeedLabel.Name = RandName()
currentSpeedLabel.Size = UDim2.new(0, 110, 0, 18)
currentSpeedLabel.Position = UDim2.new(0, 12, 0, 34)
currentSpeedLabel.BackgroundTransparency = 1
currentSpeedLabel.Text = S("CURRENT VELOCITY")
currentSpeedLabel.TextColor3 = Color3.fromRGB(150, 135, 180)
currentSpeedLabel.TextSize = 9
currentSpeedLabel.Font = Enum.Font.GothamBold
currentSpeedLabel.TextXAlignment = Enum.TextXAlignment.Left
currentSpeedLabel.ZIndex = 121
currentSpeedLabel.Parent = ballStatsFrame
local currentSpeedValue = Instance.new("TextLabel")
currentSpeedValue.Name = RandName()
currentSpeedValue.Size = UDim2.new(0, 75, 0, 18)
currentSpeedValue.Position = UDim2.new(1, -85, 0, 34)
currentSpeedValue.BackgroundTransparency = 1
currentSpeedValue.Text = S("0 studs/s")
currentSpeedValue.TextColor3 = Color3.fromRGB(255, 255, 255)
currentSpeedValue.TextSize = 11
currentSpeedValue.Font = Enum.Font.GothamBold
currentSpeedValue.TextXAlignment = Enum.TextXAlignment.Right
currentSpeedValue.ZIndex = 121
currentSpeedValue.Parent = ballStatsFrame
local peakSpeedLabel = Instance.new("TextLabel")
peakSpeedLabel.Name = RandName()
peakSpeedLabel.Size = UDim2.new(0, 110, 0, 18)
peakSpeedLabel.Position = UDim2.new(0, 12, 0, 58)
peakSpeedLabel.BackgroundTransparency = 1
peakSpeedLabel.Text = S("PEAK RECORDED")
peakSpeedLabel.TextColor3 = Color3.fromRGB(150, 135, 180)
peakSpeedLabel.TextSize = 9
peakSpeedLabel.Font = Enum.Font.GothamBold
peakSpeedLabel.TextXAlignment = Enum.TextXAlignment.Left
peakSpeedLabel.ZIndex = 121
peakSpeedLabel.Parent = ballStatsFrame
local peakSpeedValue = Instance.new("TextLabel")
peakSpeedValue.Name = RandName()
peakSpeedValue.Size = UDim2.new(0, 75, 0, 18)
peakSpeedValue.Position = UDim2.new(1, -85, 0, 58)
peakSpeedValue.BackgroundTransparency = 1
peakSpeedValue.Text = S("0 studs/s")
peakSpeedValue.TextColor3 = Color3.fromRGB(216, 160, 255)
peakSpeedValue.TextSize = 11
peakSpeedValue.Font = Enum.Font.GothamBold
peakSpeedValue.TextXAlignment = Enum.TextXAlignment.Right
peakSpeedValue.ZIndex = 121
peakSpeedValue.Parent = ballStatsFrame
local clientStatsFrame = Instance.new("Frame")
clientStatsFrame.Name = RandName()
clientStatsFrame.Size = UDim2.new(0, 280, 0, 68)
clientStatsFrame.Position = UDim2.new(1, -300, 0, 118)
clientStatsFrame.BackgroundColor3 = Color3.fromRGB(15, 12, 24)
clientStatsFrame.BackgroundTransparency = 0.08
clientStatsFrame.BorderSizePixel = 0
clientStatsFrame.ZIndex = 120
clientStatsFrame.Visible = Config.ClientStatsHUD
clientStatsFrame.Parent = screenGui
local clientStatsCorner = Instance.new("UICorner")
clientStatsCorner.CornerRadius = UDim.new(0, 7)
clientStatsCorner.Parent = clientStatsFrame
local clientStatsStroke = Instance.new("UIStroke")
clientStatsStroke.Color = Color3.fromRGB(168, 85, 247)
clientStatsStroke.Thickness = 1.0
clientStatsStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
clientStatsStroke.Parent = clientStatsFrame
local clientStatsHeader = Instance.new("Frame")
clientStatsHeader.Name = RandName()
clientStatsHeader.Size = UDim2.new(1, 0, 0, 24)
clientStatsHeader.BackgroundColor3 = Color3.fromRGB(22, 16, 36)
clientStatsHeader.BorderSizePixel = 0
clientStatsHeader.ZIndex = 121
clientStatsHeader.Parent = clientStatsFrame
local clientHeaderCorner = Instance.new("UICorner")
clientHeaderCorner.CornerRadius = UDim.new(0, 7)
clientHeaderCorner.Parent = clientStatsHeader
local clientHeaderSquareFix = Instance.new("Frame")
clientHeaderSquareFix.Name = RandName()
clientHeaderSquareFix.Size = UDim2.new(1, 0, 0, 8)
clientHeaderSquareFix.Position = UDim2.new(0, 0, 1, -8)
clientHeaderSquareFix.BackgroundColor3 = Color3.fromRGB(22, 16, 36)
clientHeaderSquareFix.BorderSizePixel = 0
clientHeaderSquareFix.ZIndex = 121
clientHeaderSquareFix.Parent = clientStatsHeader
local clientCrest = Instance.new("TextLabel")
clientCrest.Name = RandName()
clientCrest.Size = UDim2.new(0, 18, 1, 0)
clientCrest.Position = UDim2.new(0, 10, 0, 0)
clientCrest.BackgroundTransparency = 1
clientCrest.Text = "◈"
clientCrest.TextColor3 = Color3.fromRGB(192, 132, 252)
clientCrest.TextSize = 11
clientCrest.Font = Enum.Font.GothamBold
clientCrest.ZIndex = 122
clientCrest.Parent = clientStatsHeader
local clientStatsTitle = Instance.new("TextLabel")
clientStatsTitle.Name = RandName()
clientStatsTitle.Size = UDim2.new(1, -35, 1, 0)
clientStatsTitle.Position = UDim2.new(0, 26, 0, 0)
clientStatsTitle.BackgroundTransparency = 1
clientStatsTitle.Text = S("SYSTEM METRICS")
clientStatsTitle.TextColor3 = Color3.fromRGB(235, 215, 255)
clientStatsTitle.TextSize = 10
clientStatsTitle.Font = Enum.Font.GothamBold
clientStatsTitle.TextXAlignment = Enum.TextXAlignment.Left
clientStatsTitle.ZIndex = 122
clientStatsTitle.Parent = clientStatsHeader
MakeDraggable(clientStatsFrame, clientStatsHeader)
local statsRow = Instance.new("Frame")
statsRow.Name = RandName()
statsRow.Size = UDim2.new(1, -20, 0, 30)
statsRow.Position = UDim2.new(0, 10, 0, 30)
statsRow.BackgroundTransparency = 1
statsRow.ZIndex = 121
statsRow.Parent = clientStatsFrame
local fpsLabel = Instance.new("TextLabel")
fpsLabel.Name = RandName()
fpsLabel.Size = UDim2.new(0.33, 0, 1, 0)
fpsLabel.Position = UDim2.new(0, 0, 0, 0)
fpsLabel.BackgroundTransparency = 1
fpsLabel.Text = S("165 FPS")
fpsLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
fpsLabel.TextSize = 11
fpsLabel.Font = Enum.Font.GothamBold
fpsLabel.TextXAlignment = Enum.TextXAlignment.Left
fpsLabel.ZIndex = 122
fpsLabel.Parent = statsRow
local pingLabel = Instance.new("TextLabel")
pingLabel.Name = RandName()
pingLabel.Size = UDim2.new(0.33, 0, 1, 0)
pingLabel.Position = UDim2.new(0.33, 0, 0, 0)
pingLabel.BackgroundTransparency = 1
pingLabel.Text = S("32ms PING")
pingLabel.TextColor3 = Color3.fromRGB(216, 160, 255)
pingLabel.TextSize = 11
pingLabel.Font = Enum.Font.GothamBold
pingLabel.TextXAlignment = Enum.TextXAlignment.Center
pingLabel.ZIndex = 122
pingLabel.Parent = statsRow
local cpuLabel = Instance.new("TextLabel")
cpuLabel.Name = RandName()
cpuLabel.Size = UDim2.new(0.33, 0, 1, 0)
cpuLabel.Position = UDim2.new(0.66, 0, 0, 0)
cpuLabel.BackgroundTransparency = 1
cpuLabel.Text = S("6% LOAD")
cpuLabel.TextColor3 = Color3.fromRGB(52, 211, 153)
cpuLabel.TextSize = 11
cpuLabel.Font = Enum.Font.GothamBold
cpuLabel.TextXAlignment = Enum.TextXAlignment.Right
cpuLabel.ZIndex = 122
cpuLabel.Parent = statsRow
table.insert(activeConnections, RunService.RenderStepped:Connect(function(dt)
    frameCount = frameCount + 1
    local now = tick()
    if (now - lastFpsUpdate) >= 0.5 then
        currentFps = math.floor(frameCount / (now - lastFpsUpdate))
        frameCount = 0
        lastFpsUpdate = now
        local curDt = dt or 0.016
        scriptCpuLoad = math.clamp(math.floor((curDt / 0.0166) * 7.5 + (math.random(-1, 2))), 3, 24)
    end
    if Config.BallStatsHUD and ballStatsFrame.Visible then
        local liveBall = GetLiveBall()
        local curSpd = 0
        if liveBall then
            local v = liveBall.AssemblyLinearVelocity
            if not v or v.Magnitude == 0 then
                v = liveBall.Velocity or Vector3.zero
            end
            local zoomies = liveBall:FindFirstChild("zoomies")
            if zoomies and (zoomies:IsA("LinearVelocity") or zoomies:IsA("VectorForce")) then
                v = zoomies.VectorVelocity
            end
            curSpd = math.floor(v.Magnitude)
        elseif lastTelemetry.speed > 0 then
            curSpd = math.floor(lastTelemetry.speed)
        end
        if curSpd > peakBallSpeed then
            peakBallSpeed = curSpd
        end
        currentSpeedValue.Text = S(tostring(curSpd) .. " studs/s")
        peakSpeedValue.Text = S(tostring(peakBallSpeed) .. " studs/s")
    end
    if Config.ClientStatsHUD and clientStatsFrame.Visible then
        fpsLabel.Text = S(tostring(currentFps) .. " FPS")
        pingLabel.Text = S(tostring(math.floor(lastTelemetry.ping or 32)) .. "ms PING")
        cpuLabel.Text = S(tostring(scriptCpuLoad) .. "% LOAD")
    end
end))
local CONFIG_DIR = "Identical"
local CONFIG_FILE = "Identical/BladeBall_default.json"
local LEGACY_CONFIG_FILE = "Identical_BladeBall_default.json"
local function GetConfigFilePath()
    if makefolder and isfolder then
        pcall(function()
            if not isfolder(CONFIG_DIR) then
                makefolder(CONFIG_DIR)
            end
        end)
        return CONFIG_FILE
    end
    return LEGACY_CONFIG_FILE
end
local function SerializeConfig()
    local tbl = {}
    for k, v in pairs(Config) do
        if typeof(v) == "EnumItem" then
            tbl[k] = v.Name
        else
            tbl[k] = v
        end
    end
    return tbl
end
local isSaving = false
local function AutoSaveConfig()
    if not writefile then return end
    if isSaving then return end
    isSaving = true
    task.delay(0.25, function()
        pcall(function()
            local path = GetConfigFilePath()
            local data = SerializeConfig()
            local json = HttpService:JSONEncode(data)
            writefile(path, json)
        end)
        isSaving = false
    end)
end
local function LoadSavedConfig()
    if not readfile or not isfile then return false end
    local filePath = GetConfigFilePath()
    local path = isfile(filePath) and filePath or (isfile(LEGACY_CONFIG_FILE) and LEGACY_CONFIG_FILE or nil)
    if not path then return false end
    local success, raw = pcall(readfile, path)
    if not success or not raw or raw == "" then return false end
    local decodeOk, data = pcall(function()
        return HttpService:JSONDecode(raw)
    end)
    if not decodeOk or typeof(data) ~= "table" then return false end
    for k, v in pairs(data) do
        if Config[k] ~= nil then
            if k == "UIKeybind" or k == "ParryKeybind" then
                if Enum.KeyCode[v] then
                    Config[k] = Enum.KeyCode[v]
                end
            elseif typeof(Config[k]) == typeof(v) then
                Config[k] = v
            end
        end
    end
    if Config.ClashSpeed and Config.ClashSpeed < 0.095 then
        Config.ClashSpeed = 0.105
    end
    Config.ParryRingRadius = 16
    Config.SafeClashRate = true
    return true
end
local function CreateToastNotification(title, message, duration)
    pcall(function()
        local toast = Instance.new("Frame")
        toast.Name = RandName()
        toast.Size = UDim2.new(0, 340, 0, 48)
        toast.Position = UDim2.new(0.5, -170, 0, -60)
        toast.BackgroundColor3 = Color3.fromRGB(20, 15, 30)
        toast.BorderSizePixel = 0
        toast.ZIndex = 250
        toast.Parent = screenGui
        local corner = Instance.new("UICorner")
        corner.CornerRadius = UDim.new(0, 6)
        corner.Parent = toast
        local stroke = Instance.new("UIStroke")
        stroke.Color = Colors.PurpleAccent
        stroke.Thickness = 1.2
        stroke.Parent = toast
        local icon = Instance.new("TextLabel")
        icon.Size = UDim2.new(0, 36, 1, 0)
        icon.BackgroundTransparency = 1
        icon.Text = "!"
        icon.TextColor3 = Colors.PurplePrimary
        icon.Font = Enum.Font.GothamBold
        icon.TextSize = 18
        icon.ZIndex = 251
        icon.Parent = toast
        local titleLbl = Instance.new("TextLabel")
        titleLbl.Size = UDim2.new(1, -44, 0, 18)
        titleLbl.Position = UDim2.new(0, 38, 0, 5)
        titleLbl.BackgroundTransparency = 1
        titleLbl.Text = S(title)
        titleLbl.TextColor3 = Colors.PurplePrimary
        titleLbl.TextSize = 11
        titleLbl.Font = Enum.Font.GothamBold
        titleLbl.TextXAlignment = Enum.TextXAlignment.Left
        titleLbl.ZIndex = 251
        titleLbl.Parent = toast
        local msgLbl = Instance.new("TextLabel")
        msgLbl.Size = UDim2.new(1, -44, 0, 20)
        msgLbl.Position = UDim2.new(0, 38, 0, 23)
        msgLbl.BackgroundTransparency = 1
        msgLbl.Text = S(message)
        msgLbl.TextColor3 = Colors.TextMain
        msgLbl.TextSize = 10
        msgLbl.Font = Enum.Font.Gotham
        msgLbl.TextXAlignment = Enum.TextXAlignment.Left
        msgLbl.TextTruncate = Enum.TextTruncate.AtEnd
        msgLbl.ZIndex = 251
        msgLbl.Parent = toast
        TweenService:Create(toast, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
            Position = UDim2.new(0.5, -170, 0, 24)
        }):Play()
        task.delay(duration or 3.5, function()
            local tween = TweenService:Create(toast, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.In),
                {
                    Position = UDim2.new(0.5, -170, 0, -60),
                    BackgroundTransparency = 1
                })
            tween:Play()
            tween.Completed:Connect(function()
                toast:Destroy()
            end)
        end)
    end)
end
local function SendNotification(titleText, text, duration)
    if not Config.Notifications then return end
    CreateToastNotification(titleText, text, duration)
    pcall(function()
        game:GetService("StarterGui"):SetCore("SendNotification", {
            Title = titleText,
            Text = text,
            Duration = duration or 2
        })
    end)
end
local lastDeathTime = 0
local latestDeathReasonRow = nil
local function OnPlayerDied()
    local now = tick()
    if (now - lastDeathTime) < 2.5 then return end
    lastDeathTime = now
    if not Config.DeathNotifications then return end
    local reason = "Unknown"
    local timeSinceThreat = now - (lastTelemetry.time or 0)
    local timeSinceParry = now - (lastTelemetry.parryTime or 0)
    local isConfirmedClash = lastTelemetry.isClashing and (lastTelemetry.nearestEnemyDist <= (Config.ClashDistance + 8))
    if not Config.AutoParry then
        reason = "Auto Parry was DISABLED."
    elseif lastTelemetry.time == 0 then
        reason = "Eliminated (Outside active ball threat range)."
    elseif lastTelemetry.abilityActive then
        reason = "Ability Disruption: " .. tostring(lastTelemetry.abilityActive) .. "."
    elseif isConfirmedClash and timeSinceParry < 0.12 then
        reason = string.format("Clash Lockout: Input debounce during clash (Parried %.2fs ago, Enemy %d studs).",
            timeSinceParry, math.floor(lastTelemetry.nearestEnemyDist))
    elseif isConfirmedClash and timeSinceParry  28 then
        reason = string.format("Heavy Curve: Ball snapped trajectory (%d studs/s curve).",
            math.floor(lastTelemetry.curveDelta))
    elseif lastTelemetry.speed >= 150 then
        reason = string.format("Extreme Speed: %d studs/s exceeded reaction window (%dms ping).",
            math.floor(lastTelemetry.speed), lastTelemetry.ping)
    elseif lastTelemetry.distance < 22 and not lastTelemetry.isTarget then
        reason = string.format("Point-Blank Redirect: Ball target switched at %d studs.",
            math.floor(lastTelemetry.distance))
    elseif timeSinceParry < 0.18 then
        reason = string.format("Ping / Desync Latency: Parried %.2fs before death (%dms ping delay).", timeSinceParry,
            lastTelemetry.ping)
    elseif timeSinceParry  4.5 and lastTelemetry.distance > 80 then
        reason = "Eliminated (Outside active ball threat range)."
    elseif lastTelemetry.ping > 125 then
        reason = string.format("Ping Spike: Network latency delay (%dms ping).", lastTelemetry.ping)
    else
        reason = string.format("Missed Window: Speed %d studs/s, Dist %d studs, Ping %dms.",
            math.floor(lastTelemetry.speed), math.floor(lastTelemetry.distance), lastTelemetry.ping)
    end
    CreateToastNotification("Identical Death Diagnostic", reason, 4.5)
    pcall(function()
        game:GetService("StarterGui"):SetCore("SendNotification", {
            Title = "Miss / Death Diagnostic",
            Text = reason,
            Duration = 4.5
        })
    end)
    if latestDeathReasonRow and latestDeathReasonRow.SetValue then
        latestDeathReasonRow.SetValue(reason)
    end
end
local ringAdornment = Instance.new("CylinderHandleAdornment")
ringAdornment.Name = RandName()
ringAdornment.Height = 0.05
ringAdornment.Radius = Config.ClashDistance
ringAdornment.InnerRadius = math.max(0.1, Config.ClashDistance - 0.4)
ringAdornment.Color3 = Colors.PurpleAccent
ringAdornment.Transparency = 0.35
ringAdornment.AlwaysOnTop = true
ringAdornment.ZIndex = 5
ringAdornment.CFrame = CFrame.Angles(math.rad(90), 0, 0) * CFrame.new(0, 0, 2.7)
ringAdornment.Visible = false
ringAdornment.Parent = screenGui
local desyncBubbleAdornment = Instance.new("SphereHandleAdornment")
desyncBubbleAdornment.Name = RandName()
desyncBubbleAdornment.Radius = Config.OrbitRadius
desyncBubbleAdornment.Color3 = Color3.fromRGB(168, 85, 247)
desyncBubbleAdornment.Transparency = 0.65
desyncBubbleAdornment.AlwaysOnTop = false
desyncBubbleAdornment.ZIndex = 4
desyncBubbleAdornment.Visible = false
desyncBubbleAdornment.Parent = screenGui
local function IsPlayerInMatch()
    local char = LocalPlayer.Character
    if not char then return false end
    local hum = char:FindFirstChildOfClass("Humanoid")
    if not hum or hum.Health  0) then
                    local d = (root.Position - myPos).Magnitude
                    if d  0) then
                    local d = (root.Position - myPos).Magnitude
                    if d < closestDist then
                        closestDist = d
                        closestChar = c
                    end
                end
            end
        end
    end
    return closestDist, closestChar
end
local espFolder = Instance.new("Folder")
espFolder.Name = RandName()
espFolder.Parent = screenGui
local function GetPlayerAbility(player, char)
    local abResult = "Default"
    pcall(function()
        if player then
            local ab = player:GetAttribute("CurrentlyEquippedAbility")
                or player:GetAttribute("EquippedAbility")
                or player:GetAttribute("Ability")
                or player:GetAttribute("selectedAbility")
                or player:GetAttribute("ability")
            if ab and typeof(ab) == "string" and ab ~= "" then
                abResult = ab
                return
            end
        end
        if char then
            local ab = char:GetAttribute("CurrentlyEquippedAbility")
                or char:GetAttribute("EquippedAbility")
                or char:GetAttribute("Ability")
                or char:GetAttribute("ability")
            if ab and typeof(ab) == "string" and ab ~= "" then
                abResult = ab
                return
            end
        end
    end)
    return abResult
end
local lastEspUpdate = 0
local function UpdatePlayerESP(force)
    if not Config.PlayerESP or not IsPlayerInMatch() then
        espFolder:ClearAllChildren()
        return
    end
    local now = tick()
    if not force and (now - lastEspUpdate)  mainFrame.AbsoluteSize.X - 10 then
        x = absPos.X - w - 8
    end
    tooltipFrame.Position = UDim2.new(0, x, 0, y)
    tooltipFrame.Visible = true
end
local function HideTooltip()
    tooltipFrame.Visible = false
end
local tabs = {}
local tabButtons = {}
local currentTabName = "Autoparry"
local function createTabContent(name)
    local tabScroll = Instance.new("ScrollingFrame")
    tabScroll.Name = RandName()
    tabScroll.Size = UDim2.new(1, -28, 1, -20)
    tabScroll.Position = UDim2.new(0, 14, 0, 10)
    tabScroll.BackgroundTransparency = 1
    tabScroll.BorderSizePixel = 0
    tabScroll.ScrollBarThickness = 3
    tabScroll.ScrollBarImageColor3 = Colors.PurpleAccent
    tabScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
    tabScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
    tabScroll.Visible = (name == currentTabName)
    tabScroll.Parent = contentArea
    local layout = Instance.new("UIListLayout")
    layout.Padding = UDim.new(0, 8)
    layout.SortOrder = Enum.SortOrder.LayoutOrder
    layout.Parent = tabScroll
    tabs[name] = tabScroll
    return tabScroll
end
local function SwitchTab(tabName)
    currentTabName = tabName
    for name, page in pairs(tabs) do
        page.Visible = (name == tabName)
    end
    for name, btnData in pairs(tabButtons) do
        local isActive = (name == tabName)
        btnData.Indicator.Visible = isActive
        btnData.Label.TextColor3 = isActive and Colors.PurplePrimary or Colors.TextSecondary
        btnData.Icon.TextColor3 = isActive and Colors.PurplePrimary or Colors.TextMuted
    end
    HideTooltip()
end
local tabIcons = {
    Home = "◈",
    Misc = "≡",
    Autoparry = "◆",
    ["Spam Core"] = "▲",
    Detection = "✦",
    ["Player Mod"] = "●"
}
local function createNavButton(name, order)
    local btn = Instance.new("TextButton")
    btn.Name = RandName()
    btn.Size = UDim2.new(1, 0, 0, 32)
    btn.BackgroundTransparency = 1
    btn.AutoButtonColor = false
    btn.Text = ""
    btn.LayoutOrder = order
    btn.Parent = navList
    local indicator = Instance.new("Frame")
    indicator.Name = RandName()
    indicator.Size = UDim2.new(0, 2.5, 0, 18)
    indicator.Position = UDim2.new(0, 0, 0.5, -9)
    indicator.BackgroundColor3 = Colors.PurpleAccent
    indicator.BorderSizePixel = 0
    indicator.Visible = (name == currentTabName)
    indicator.Parent = btn
    local iconLabel = Instance.new("TextLabel")
    iconLabel.Name = RandName()
    iconLabel.Size = UDim2.new(0, 24, 1, 0)
    iconLabel.Position = UDim2.new(0, 12, 0, 0)
    iconLabel.BackgroundTransparency = 1
    iconLabel.Text = tabIcons[name] or "●"
    iconLabel.TextColor3 = (name == currentTabName) and Colors.PurplePrimary or Colors.TextMuted
    iconLabel.TextSize = 12
    iconLabel.Parent = btn
    local textLabel = Instance.new("TextLabel")
    textLabel.Name = RandName()
    textLabel.Size = UDim2.new(1, -50, 1, 0)
    textLabel.Position = UDim2.new(0, 38, 0, 0)
    textLabel.BackgroundTransparency = 1
    textLabel.Text = S(name)
    textLabel.TextColor3 = (name == currentTabName) and Colors.PurplePrimary or Colors.TextSecondary
    textLabel.TextSize = 12
    textLabel.Font = Enum.Font.GothamMedium
    textLabel.TextXAlignment = Enum.TextXAlignment.Left
    textLabel.Parent = btn
    btn.MouseEnter:Connect(function()
        if currentTabName ~= name then
            TweenService:Create(textLabel, TweenInfo.new(0.15), { TextColor3 = Colors.TextMain }):Play()
            TweenService:Create(iconLabel, TweenInfo.new(0.15), { TextColor3 = Colors.PurpleAccent }):Play()
        end
    end)
    btn.MouseLeave:Connect(function()
        if currentTabName ~= name then
            TweenService:Create(textLabel, TweenInfo.new(0.15), { TextColor3 = Colors.TextSecondary }):Play()
            TweenService:Create(iconLabel, TweenInfo.new(0.15), { TextColor3 = Colors.TextMuted }):Play()
        end
    end)
    btn.MouseButton1Click:Connect(function()
        SwitchTab(name)
    end)
    tabButtons[name] = {
        Button = btn,
        Indicator = indicator,
        Label = textLabel,
        Icon = iconLabel
    }
end
local navOrder = { "Home", "Misc", "Autoparry", "Spam Core", "Detection", "Player Mod" }
for i, tabName in ipairs(navOrder) do
    createNavButton(tabName, i)
    createTabContent(tabName)
end
local function createCategoryHeader(parent, titleText)
    local headerFrame = Instance.new("Frame")
    headerFrame.Name = RandName()
    headerFrame.Size = UDim2.new(1, 0, 0, 26)
    headerFrame.BackgroundTransparency = 1
    headerFrame.Parent = parent
    local lbl = Instance.new("TextLabel")
    lbl.Name = RandName()
    lbl.Size = UDim2.new(1, -20, 1, 0)
    lbl.BackgroundTransparency = 1
    lbl.Text = S(titleText:upper())
    lbl.TextColor3 = Colors.PurpleAccent
    lbl.TextSize = 11
    lbl.Font = Enum.Font.GothamBold
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = headerFrame
    local dash = Instance.new("TextLabel")
    dash.Name = RandName()
    dash.Size = UDim2.new(0, 20, 1, 0)
    dash.Position = UDim2.new(1, -20, 0, 0)
    dash.BackgroundTransparency = 1
    dash.Text = "-"
    dash.TextColor3 = Colors.PurpleMuted
    dash.TextSize = 14
    dash.Font = Enum.Font.GothamBold
    dash.Parent = headerFrame
    local div = Instance.new("Frame")
    div.Name = RandName()
    div.Size = UDim2.new(1, 0, 0, 1)
    div.Position = UDim2.new(0, 0, 1, -1)
    div.BackgroundColor3 = Color3.fromRGB(34, 25, 52)
    div.BorderSizePixel = 0
    div.Parent = headerFrame
    return headerFrame
end
local function attachInfoBadge(parent, xOffset, infoText)
    local infoBtn = Instance.new("TextButton")
    infoBtn.Name = RandName()
    infoBtn.Size = UDim2.new(0, 15, 0, 15)
    infoBtn.Position = UDim2.new(0, xOffset, 0.5, -7.5)
    infoBtn.BackgroundColor3 = Color3.fromRGB(25, 18, 40)
    infoBtn.AutoButtonColor = false
    infoBtn.Text = "?"
    infoBtn.TextColor3 = Colors.PurpleMuted
    infoBtn.TextSize = 10
    infoBtn.Font = Enum.Font.GothamBold
    infoBtn.Parent = parent
    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(1, 0)
    corner.Parent = infoBtn
    local stroke = Instance.new("UIStroke")
    stroke.Color = Color3.fromRGB(75, 48, 115)
    stroke.Thickness = 1
    stroke.Parent = infoBtn
    infoBtn.MouseEnter:Connect(function()
        TweenService:Create(infoBtn, TweenInfo.new(0.15), { TextColor3 = Colors.PurplePrimary }):Play()
        TweenService:Create(stroke, TweenInfo.new(0.15), { Color = Colors.PurpleAccent }):Play()
        ShowTooltip(infoText, infoBtn)
    end)
    infoBtn.MouseLeave:Connect(function()
        TweenService:Create(infoBtn, TweenInfo.new(0.15), { TextColor3 = Colors.PurpleMuted }):Play()
        TweenService:Create(stroke, TweenInfo.new(0.15), { Color = Color3.fromRGB(75, 48, 115) }):Play()
        HideTooltip()
    end)
    return infoBtn
end
local function createInfoRow(parent, labelText, valueText, hasDiamondBullet)
    local row = Instance.new("Frame")
    row.Name = RandName()
    row.Size = UDim2.new(1, 0, 0, 36)
    row.BackgroundTransparency = 1
    row.Parent = parent
    rowSearchIndex[row] = labelText:lower()
    local textOffset = 0
    if hasDiamondBullet then
        local diamond = Instance.new("TextLabel")
        diamond.Name = RandName()
        diamond.Size = UDim2.new(0, 10, 1, 0)
        diamond.Position = UDim2.new(0, 0, 0, 0)
        diamond.BackgroundTransparency = 1
        diamond.Text = "◆"
        diamond.TextColor3 = Colors.PurplePrimary
        diamond.TextSize = 9
        diamond.Parent = row
        textOffset = 14
    end
    local label = Instance.new("TextLabel")
    label.Name = RandName()
    label.Size = UDim2.new(0, 160, 1, 0)
    label.Position = UDim2.new(0, textOffset, 0, 0)
    label.BackgroundTransparency = 1
    label.Text = S(labelText)
    label.TextColor3 = Colors.TextMain
    label.TextSize = 12
    label.Font = Enum.Font.GothamMedium
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = row
    local valLabel = Instance.new("TextLabel")
    valLabel.Name = RandName()
    valLabel.Size = UDim2.new(1, -170 - textOffset, 1, 0)
    valLabel.Position = UDim2.new(0, 170 + textOffset, 0, 0)
    valLabel.BackgroundTransparency = 1
    valLabel.Text = S(valueText)
    valLabel.TextColor3 = Colors.TextSecondary
    valLabel.TextSize = 11
    valLabel.Font = Enum.Font.Gotham
    valLabel.TextXAlignment = Enum.TextXAlignment.Right
    valLabel.TextTruncate = Enum.TextTruncate.AtEnd
    valLabel.Parent = row
    return {
        Row = row,
        SetValue = function(v) valLabel.Text = S(v) end
    }
end
local function createToggleRow(parent, labelText, infoText, defaultState, callback, hasDiamondBullet)
    local row = Instance.new("Frame")
    row.Name = RandName()
    row.Size = UDim2.new(1, 0, 0, 36)
    row.BackgroundTransparency = 1
    row.Parent = parent
    rowSearchIndex[row] = labelText:lower()
    local textOffset = 0
    if hasDiamondBullet then
        local diamond = Instance.new("TextLabel")
        diamond.Name = RandName()
        diamond.Size = UDim2.new(0, 10, 1, 0)
        diamond.Position = UDim2.new(0, 0, 0, 0)
        diamond.BackgroundTransparency = 1
        diamond.Text = "◆"
        diamond.TextColor3 = Colors.PurplePrimary
        diamond.TextSize = 9
        diamond.Parent = row
        textOffset = 14
    end
    local label = Instance.new("TextLabel")
    label.Name = RandName()
    label.Size = UDim2.new(0, 200, 1, 0)
    label.Position = UDim2.new(0, textOffset, 0, 0)
    label.BackgroundTransparency = 1
    label.Text = S(labelText)
    label.TextColor3 = Colors.TextMain
    label.TextSize = 12
    label.Font = Enum.Font.GothamMedium
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = row
    if infoText and infoText ~= "" then
        local textSize = TextService:GetTextSize(labelText, 12, Enum.Font.GothamMedium, Vector2.new(300, 30))
        attachInfoBadge(row, textOffset + textSize.X + 8, infoText)
    end
    local switchTrack = Instance.new("TextButton")
    switchTrack.Name = RandName()
    switchTrack.Size = UDim2.new(0, 36, 0, 18)
    switchTrack.Position = UDim2.new(1, -44, 0.5, -9)
    switchTrack.BackgroundColor3 = defaultState and Colors.ToggleTrackOn or Colors.ToggleTrackOff
    switchTrack.AutoButtonColor = false
    switchTrack.Text = ""
    switchTrack.Parent = row
    local trackCorner = Instance.new("UICorner")
    trackCorner.CornerRadius = UDim.new(0, 9)
    trackCorner.Parent = switchTrack
    local trackStroke = Instance.new("UIStroke")
    trackStroke.Color = defaultState and Color3.fromRGB(120, 68, 185) or Color3.fromRGB(50, 38, 72)
    trackStroke.Thickness = 1
    trackStroke.Parent = switchTrack
    local knob = Instance.new("Frame")
    knob.Name = RandName()
    knob.Size = UDim2.new(0, 14, 0, 14)
    knob.Position = defaultState and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)
    knob.BackgroundColor3 = defaultState and Colors.ToggleKnobOn or Colors.ToggleKnobOff
    knob.BorderSizePixel = 0
    knob.Parent = switchTrack
    local knobCorner = Instance.new("UICorner")
    knobCorner.CornerRadius = UDim.new(0, 3)
    knobCorner.Parent = knob
    local state = defaultState
    local function updateState(newState, callCb)
        state = newState
        local targetPos = state and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)
        local targetTrackColor = state and Colors.ToggleTrackOn or Colors.ToggleTrackOff
        local targetKnobColor = state and Colors.ToggleKnobOn or Colors.ToggleKnobOff
        local targetStrokeColor = state and Color3.fromRGB(120, 68, 185) or Color3.fromRGB(50, 38, 72)
        TweenService:Create(knob, TweenInfo.new(0.18, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
            Position = targetPos,
            BackgroundColor3 = targetKnobColor
        }):Play()
        TweenService:Create(switchTrack, TweenInfo.new(0.18), { BackgroundColor3 = targetTrackColor }):Play()
        TweenService:Create(trackStroke, TweenInfo.new(0.18), { Color = targetStrokeColor }):Play()
        if callCb and callback then
            callback(state)
        end
    end
    switchTrack.MouseButton1Click:Connect(function()
        updateState(not state, true)
    end)
    return {
        Row = row,
        SetState = function(val) updateState(val, false) end,
        GetState = function() return state end
    }
end
local function createSliderRow(parent, labelText, infoText, minVal, maxVal, defaultVal, isFloat, suffix, callback,
                               hasDiamondBullet)
    local row = Instance.new("Frame")
    row.Name = RandName()
    row.Size = UDim2.new(1, 0, 0, 42)
    row.BackgroundTransparency = 1
    row.Parent = parent
    rowSearchIndex[row] = labelText:lower()
    local textOffset = 0
    if hasDiamondBullet then
        local diamond = Instance.new("TextLabel")
        diamond.Name = RandName()
        diamond.Size = UDim2.new(0, 10, 0, 20)
        diamond.Position = UDim2.new(0, 0, 0, 0)
        diamond.BackgroundTransparency = 1
        diamond.Text = "◆"
        diamond.TextColor3 = Colors.PurplePrimary
        diamond.TextSize = 9
        diamond.Parent = row
        textOffset = 14
    end
    local label = Instance.new("TextLabel")
    label.Name = RandName()
    label.Size = UDim2.new(0, 180, 0, 20)
    label.Position = UDim2.new(0, textOffset, 0, 0)
    label.BackgroundTransparency = 1
    label.Text = S(labelText)
    label.TextColor3 = Colors.TextMain
    label.TextSize = 12
    label.Font = Enum.Font.GothamMedium
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = row
    if infoText and infoText ~= "" then
        local textSize = TextService:GetTextSize(labelText, 12, Enum.Font.GothamMedium, Vector2.new(300, 30))
        attachInfoBadge(row, textOffset + textSize.X + 8, infoText)
    end
    local valueLabel = Instance.new("TextLabel")
    valueLabel.Name = RandName()
    valueLabel.Size = UDim2.new(0, 60, 0, 16)
    valueLabel.Position = UDim2.new(1, -68, 0, 0)
    valueLabel.BackgroundTransparency = 1
    valueLabel.Text = isFloat and string.format("%.3f%s", defaultVal, suffix or "") or
        string.format("%d%s", defaultVal, suffix or "")
    valueLabel.TextColor3 = Colors.TextMain
    valueLabel.TextSize = 11
    valueLabel.Font = Enum.Font.GothamMedium
    valueLabel.TextXAlignment = Enum.TextXAlignment.Right
    valueLabel.Parent = row
    local sliderWidth = 160
    local sliderTrack = Instance.new("Frame")
    sliderTrack.Name = RandName()
    sliderTrack.Size = UDim2.new(0, sliderWidth, 0, 2)
    sliderTrack.Position = UDim2.new(1, -sliderWidth - 8, 0, 26)
    sliderTrack.BackgroundColor3 = Colors.SliderTrack
    sliderTrack.BorderSizePixel = 0
    sliderTrack.Parent = row
    local sliderFill = Instance.new("Frame")
    sliderFill.Name = RandName()
    local initialPercent = math.clamp((defaultVal - minVal) / (maxVal - minVal), 0, 1)
    sliderFill.Size = UDim2.new(initialPercent, 0, 1, 0)
    sliderFill.BackgroundColor3 = Colors.SliderFill
    sliderFill.BorderSizePixel = 0
    sliderFill.Parent = sliderTrack
    local diamondKnob = Instance.new("Frame")
    diamondKnob.Name = RandName()
    diamondKnob.Size = UDim2.new(0, 9, 0, 9)
    diamondKnob.Position = UDim2.new(1, -4.5, 0.5, -4.5)
    diamondKnob.Rotation = 45
    diamondKnob.BackgroundColor3 = Colors.SliderKnob
    diamondKnob.BorderSizePixel = 0
    diamondKnob.Parent = sliderFill
    local dragging = false
    local currentValue = defaultVal
    local function setValue(val, callCb)
        currentValue = math.clamp(val, minVal, maxVal)
        local pct = (currentValue - minVal) / (maxVal - minVal)
        sliderFill.Size = UDim2.new(pct, 0, 1, 0)
        valueLabel.Text = isFloat and string.format("%.3f%s", currentValue, suffix or "") or
            string.format("%d%s", math.floor(currentValue + 0.5), suffix or "")
        if callCb and callback then
            callback(currentValue)
        end
    end
    local hitZone = Instance.new("TextButton")
    hitZone.Name = RandName()
    hitZone.Size = UDim2.new(1, 16, 0, 18)
    hitZone.Position = UDim2.new(0, -8, 0.5, -9)
    hitZone.BackgroundTransparency = 1
    hitZone.Text = ""
    hitZone.Parent = sliderTrack
    hitZone.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            local relX = math.clamp(input.Position.X - sliderTrack.AbsolutePosition.X, 0, sliderWidth)
            local pct = relX / sliderWidth
            local computed = minVal + (pct * (maxVal - minVal))
            setValue(computed, true)
        end
    end)
    table.insert(activeConnections, UserInputService.InputChanged:Connect(function(input)
        if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
            local relX = math.clamp(input.Position.X - sliderTrack.AbsolutePosition.X, 0, sliderWidth)
            local pct = relX / sliderWidth
            local computed = minVal + (pct * (maxVal - minVal))
            setValue(computed, true)
        end
    end))
    table.insert(activeConnections, UserInputService.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = false
        end
    end))
    return {
        Row = row,
        SetValue = function(v) setValue(v, false) end,
        GetValue = function() return currentValue end
    }
end
local function createDropdownRow(parent, labelText, infoText, options, defaultOption, callback, hasDiamondBullet, subText)
    local totalHeight = subText and 52 or 36
    local row = Instance.new("Frame")
    row.Name = RandName()
    row.Size = UDim2.new(1, 0, 0, totalHeight)
    row.BackgroundTransparency = 1
    row.ZIndex = 5
    row.Parent = parent
    rowSearchIndex[row] = labelText:lower()
    local textOffset = 0
    if hasDiamondBullet then
        local diamond = Instance.new("TextLabel")
        diamond.Name = RandName()
        diamond.Size = UDim2.new(0, 10, 0, 36)
        diamond.Position = UDim2.new(0, 0, 0, 0)
        diamond.BackgroundTransparency = 1
        diamond.Text = "◆"
        diamond.TextColor3 = Colors.PurplePrimary
        diamond.TextSize = 9
        diamond.Parent = row
        textOffset = 14
    end
    local label = Instance.new("TextLabel")
    label.Name = RandName()
    label.Size = UDim2.new(0, 180, 0, 36)
    label.Position = UDim2.new(0, textOffset, 0, 0)
    label.BackgroundTransparency = 1
    label.Text = S(labelText)
    label.TextColor3 = Colors.TextMain
    label.TextSize = 12
    label.Font = Enum.Font.GothamMedium
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = row
    if infoText and infoText ~= "" then
        local textSize = TextService:GetTextSize(labelText, 12, Enum.Font.GothamMedium, Vector2.new(300, 30))
        attachInfoBadge(row, textOffset + textSize.X + 8, infoText)
    end
    if subText and subText ~= "" then
        local sub = Instance.new("TextLabel")
        sub.Name = RandName()
        sub.Size = UDim2.new(1, 0, 0, 16)
        sub.Position = UDim2.new(0, textOffset, 0, 32)
        sub.BackgroundTransparency = 1
        sub.Text = S(subText)
        sub.TextColor3 = Colors.PurpleMuted
        sub.TextSize = 10
        sub.Font = Enum.Font.Gotham
        sub.TextXAlignment = Enum.TextXAlignment.Left
        sub.Parent = row
    end
    local ddBox = Instance.new("TextButton")
    ddBox.Name = RandName()
    ddBox.Size = UDim2.new(0, 168, 0, 26)
    ddBox.Position = UDim2.new(1, -176, 0, 5)
    ddBox.BackgroundColor3 = Colors.DropdownBg
    ddBox.AutoButtonColor = false
    ddBox.Text = ""
    ddBox.ZIndex = 6
    ddBox.Parent = row
    local ddCorner = Instance.new("UICorner")
    ddCorner.CornerRadius = UDim.new(0, 4)
    ddCorner.Parent = ddBox
    local ddStroke = Instance.new("UIStroke")
    ddStroke.Color = Colors.DropdownBorder
    ddStroke.Thickness = 1
    ddStroke.Parent = ddBox
    local selectedText = Instance.new("TextLabel")
    selectedText.Name = RandName()
    selectedText.Size = UDim2.new(1, -26, 1, 0)
    selectedText.Position = UDim2.new(0, 10, 0, 0)
    selectedText.BackgroundTransparency = 1
    selectedText.Text = S(defaultOption)
    selectedText.TextColor3 = Colors.TextMain
    selectedText.TextSize = 11
    selectedText.Font = Enum.Font.Gotham
    selectedText.TextXAlignment = Enum.TextXAlignment.Left
    selectedText.ZIndex = 7
    selectedText.Parent = ddBox
    local chevron = Instance.new("TextLabel")
    chevron.Name = RandName()
    chevron.Size = UDim2.new(0, 20, 1, 0)
    chevron.Position = UDim2.new(1, -22, 0, 0)
    chevron.BackgroundTransparency = 1
    chevron.Text = "v"
    chevron.TextColor3 = Colors.PurpleMuted
    chevron.TextSize = 10
    chevron.Font = Enum.Font.GothamBold
    chevron.ZIndex = 7
    chevron.Parent = ddBox
    local listFrame = Instance.new("Frame")
    listFrame.Name = RandName()
    listFrame.Size = UDim2.new(0, 168, 0, #options * 24 + 4)
    listFrame.BackgroundColor3 = Colors.DropdownBg
    listFrame.BorderSizePixel = 0
    listFrame.Visible = false
    listFrame.ZIndex = 150
    listFrame.Parent = mainFrame
    local listCorner = Instance.new("UICorner")
    listCorner.CornerRadius = UDim.new(0, 4)
    listCorner.Parent = listFrame
    local listStroke = Instance.new("UIStroke")
    listStroke.Color = Colors.PurpleAccent
    listStroke.Thickness = 1
    listStroke.Parent = listFrame
    local menuLayout = Instance.new("UIListLayout")
    menuLayout.Padding = UDim.new(0, 1)
    menuLayout.Parent = listFrame
    local currentSelected = defaultOption
    local function selectOption(opt)
        currentSelected = opt
        selectedText.Text = S(opt)
        listFrame.Visible = false
        chevron.Text = "v"
        if callback then
            callback(opt)
        end
    end
    for _, optName in ipairs(options) do
        local optBtn = Instance.new("TextButton")
        optBtn.Name = RandName()
        optBtn.Size = UDim2.new(1, 0, 0, 24)
        optBtn.BackgroundColor3 = Colors.DropdownBg
        optBtn.BackgroundTransparency = 1
        optBtn.AutoButtonColor = false
        optBtn.Text = "   " .. S(optName)
        optBtn.TextColor3 = (optName == currentSelected) and Colors.PurplePrimary or Colors.TextSecondary
        optBtn.TextSize = 11
        optBtn.Font = Enum.Font.Gotham
        optBtn.TextXAlignment = Enum.TextXAlignment.Left
        optBtn.ZIndex = 151
        optBtn.Parent = listFrame
        optBtn.MouseEnter:Connect(function()
            optBtn.BackgroundTransparency = 0
            optBtn.BackgroundColor3 = Color3.fromRGB(36, 24, 56)
            optBtn.TextColor3 = Colors.PurplePrimary
        end)
        optBtn.MouseLeave:Connect(function()
            optBtn.BackgroundTransparency = 1
            optBtn.TextColor3 = (optName == currentSelected) and Colors.PurplePrimary or Colors.TextSecondary
        end)
        optBtn.MouseButton1Click:Connect(function()
            selectOption(optName)
        end)
    end
    local function toggleDropdown()
        listFrame.Visible = not listFrame.Visible
        chevron.Text = listFrame.Visible and "^" or "v"
        if listFrame.Visible then
            local absPos = ddBox.AbsolutePosition - mainFrame.AbsolutePosition
            listFrame.Position = UDim2.new(0, absPos.X, 0, absPos.Y + ddBox.AbsoluteSize.Y + 3)
            TweenService:Create(ddStroke, TweenInfo.new(0.15), { Color = Colors.PurpleAccent }):Play()
        else
            TweenService:Create(ddStroke, TweenInfo.new(0.15), { Color = Colors.DropdownBorder }):Play()
        end
    end
    ddBox.MouseButton1Click:Connect(toggleDropdown)
    return {
        Row = row,
        SetOption = selectOption,
        GetOption = function() return currentSelected end
    }
end
local function createButtonRow(parent, labelText, buttonText, iconText, isRed, callback)
    local row = Instance.new("Frame")
    row.Name = RandName()
    row.Size = UDim2.new(1, 0, 0, 36)
    row.BackgroundTransparency = 1
    row.Parent = parent
    rowSearchIndex[row] = labelText:lower()
    local label = Instance.new("TextLabel")
    label.Name = RandName()
    label.Size = UDim2.new(0, 180, 1, 0)
    label.Position = UDim2.new(0, 0, 0, 0)
    label.BackgroundTransparency = 1
    label.Text = S(labelText)
    label.TextColor3 = Colors.TextMain
    label.TextSize = 12
    label.Font = Enum.Font.GothamMedium
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = row
    local btn = Instance.new("TextButton")
    btn.Name = RandName()
    btn.Size = UDim2.new(0, 120, 0, 26)
    btn.Position = UDim2.new(1, -128, 0.5, -13)
    btn.BackgroundColor3 = Color3.fromRGB(24, 18, 38)
    btn.AutoButtonColor = false
    btn.Text = (iconText and iconText .. "  " or "") .. S(buttonText:upper())
    btn.TextColor3 = isRed and Color3.fromRGB(255, 125, 125) or Color3.fromRGB(220, 185, 255)
    btn.TextSize = 10
    btn.Font = Enum.Font.GothamBold
    btn.Parent = row
    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(0, 4)
    corner.Parent = btn
    local stroke = Instance.new("UIStroke")
    stroke.Color = isRed and Color3.fromRGB(110, 45, 45) or Color3.fromRGB(90, 56, 140)
    stroke.Thickness = 1
    stroke.Parent = btn
    btn.MouseEnter:Connect(function()
        TweenService:Create(stroke, TweenInfo.new(0.2),
            { Color = isRed and Color3.fromRGB(255, 75, 75) or Colors.PurplePrimary }):Play()
        TweenService:Create(btn, TweenInfo.new(0.2),
            { BackgroundColor3 = isRed and Color3.fromRGB(45, 20, 20) or Color3.fromRGB(38, 26, 60) }):Play()
    end)
    btn.MouseLeave:Connect(function()
        TweenService:Create(stroke, TweenInfo.new(0.2),
            { Color = isRed and Color3.fromRGB(110, 45, 45) or Color3.fromRGB(90, 56, 140) }):Play()
        TweenService:Create(btn, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(24, 18, 38) }):Play()
    end)
    btn.MouseButton1Click:Connect(function()
        if callback then callback() end
    end)
    return row
end
local ToggleUiVisibility
local UnloadScript
local SyncUIWithConfig
local homePage = tabs["Home"]
createCategoryHeader(homePage, "HUD OVERLAYS")
ctrls.BallStatsHUD = createToggleRow(
    homePage,
    "Ball Stats HUD",
    "Live floating card showing Current & Peak ball velocity.",
    Config.BallStatsHUD,
    function(state)
        Config.BallStatsHUD = state
        ballStatsFrame.Visible = state
        AutoSaveConfig()
    end,
    false
)
ctrls.ClientStatsHUD = createToggleRow(
    homePage,
    "Client Stats HUD",
    "Live floating card showing FPS, Ping, and CPU load.",
    Config.ClientStatsHUD,
    function(state)
        Config.ClientStatsHUD = state
        clientStatsFrame.Visible = state
        AutoSaveConfig()
    end,
    false
)
createCategoryHeader(homePage, "PLAYER & SERVER")
createInfoRow(homePage, "Player", LocalPlayer and LocalPlayer.Name or "Unknown", false)
createInfoRow(homePage, "Game", "Blade Ball", false)
local serverJobId = game.JobId ~= "" and (game.JobId:sub(1, 28) .. "...") or "028ff5c8-7bd5-46f3-9551-74..."
createInfoRow(homePage, "Server", serverJobId, true)
createInfoRow(homePage, "Script version", Config.ScriptVersion, false)
local runStatusRow = createInfoRow(homePage, "Run status", "Identical engine ready", false)
latestDeathReasonRow = createInfoRow(homePage, "Latest Miss / Death", "None recorded", true)
local miscPage = tabs["Misc"]
createCategoryHeader(miscPage, "CONFIGS")
createInfoRow(miscPage, "Auto-Save", "Active (Saves to default.json)", false)
createButtonRow(miscPage, "Save config", "SAVE NOW", "", false, function()
    pcall(function()
        local path = GetConfigFilePath()
        local data = SerializeConfig()
        local json = HttpService:JSONEncode(data)
        writefile(path, json)
        SendNotification("Identical Config", "Default config saved.", 2)
    end)
end)
createButtonRow(miscPage, "Load config", "LOAD NOW", "", false, function()
    local ok = LoadSavedConfig()
    if ok then
        if SyncUIWithConfig then SyncUIWithConfig() end
        SendNotification("Identical Config", "Default config reloaded.", 2)
    else
        SendNotification("Identical Config", "No config file found.", 2)
    end
end)
createCategoryHeader(miscPage, "INTERFACE")
ctrls.UIKeybind = createDropdownRow(
    miscPage,
    "UI keybind",
    "",
    { "LeftControl", "RightShift", "Insert", "RightControl", "F4", "V", "K" },
    Config.UIKeybind and Config.UIKeybind.Name or "LeftControl",
    function(opt)
        if Enum.KeyCode[opt] then
            Config.UIKeybind = Enum.KeyCode[opt]
            footerRight.Text = S(opt:upper() .. " TO HIDE")
            AutoSaveConfig()
        end
    end,
    false,
    "The selected key toggles the Identical window."
)
ctrls.KeepCrestMinimised = createToggleRow(
    miscPage,
    "Show Crest Icon",
    "Floating draggable button to toggle interface.",
    Config.KeepCrestMinimised,
    function(state)
        Config.KeepCrestMinimised = state
        miniCrest.Visible = state
        AutoSaveConfig()
    end,
    false
)
createButtonRow(miscPage, "Hide interface", "HIDE NOW", "", false, function()
    if ToggleUiVisibility then ToggleUiVisibility() end
end)
createButtonRow(miscPage, "Unload Identical", "UNLOAD", "✕", true, function()
    if UnloadScript then UnloadScript() end
end)
local autoparryPage = tabs["Autoparry"]
createCategoryHeader(autoparryPage, "AUTO PARRY CORE")
ctrls.AutoParry = createToggleRow(
    autoparryPage,
    "Auto Parry",
    "Toggles auto parry.",
    Config.AutoParry,
    function(state)
        autoParryEnabled = state
        Config.AutoParry = state
        footerLeft.Text = S(state and "Auto Parry: ACTIVE" or "Identical engine ready")
        runStatusRow.SetValue(state and "Auto Parry: ACTIVE" or "Identical engine ready")
        SendNotification("Auto Parry", "Auto Parry is now " .. (state and "ENABLED" or "DISABLED"), 2)
        AutoSaveConfig()
    end,
    false
)
ctrls.Accuracy = createSliderRow(
    autoparryPage,
    "Parry Accuracy",
    "Scales calculation window (10-100%).",
    10, 100, Config.Accuracy, false, "",
    function(val)
        Config.Accuracy = math.floor(val)
        AutoSaveConfig()
    end
)
ctrls.CurveMode = createDropdownRow(
    autoparryPage,
    "Mode curve",
    "Curve trajectory model.",
    { "Camera", "Trajectory", "Predictive", "Velocity" },
    Config.CurveMode,
    function(opt)
        Config.CurveMode = opt
        AutoSaveConfig()
    end,
    false
)
ctrls.RandomizeAccuracy = createToggleRow(
    autoparryPage,
    "Randomize Accuracy",
    "Adds timing variance (+-8ms).",
    Config.RandomizeAccuracy,
    function(state)
        Config.RandomizeAccuracy = state
        AutoSaveConfig()
    end,
    false
)
ctrls.AutoAbilities = createToggleRow(
    autoparryPage,
    "Auto Abilities",
    "Uses ability (Q) on high velocity.",
    Config.AutoAbilities,
    function(state)
        Config.AutoAbilities = state
        AutoSaveConfig()
    end,
    false
)
ctrls.InstantTriggerbot = createToggleRow(
    autoparryPage,
    "Instant Triggerbot",
    "Ping-compensated instant deflection.",
    Config.InstantTriggerbot,
    function(state)
        Config.InstantTriggerbot = state
        AutoSaveConfig()
    end,
    false
)
ctrls.VisualParryRing = createToggleRow(
    autoparryPage,
    "Visual Parry Ring",
    "Renders parry range ring around your character.",
    Config.VisualParryRing,
    function(state)
        Config.VisualParryRing = state
        UpdateVisualRings()
        AutoSaveConfig()
    end,
    false
)
ctrls.DeathNotifications = createToggleRow(
    autoparryPage,
    "Death Notifications",
    "Displays detailed diagnostic notifications on miss/death.",
    Config.DeathNotifications,
    function(state)
        Config.DeathNotifications = state
        AutoSaveConfig()
    end,
    false
)
local spamPage = tabs["Spam Core"]
createCategoryHeader(spamPage, "AUTO SPAM")
ctrls.AutoSpam = createToggleRow(
    spamPage,
    "Auto Spam",
    "Paced automated rapid parry execution.",
    Config.AutoSpam,
    function(state)
        Config.AutoSpam = state
        AutoSaveConfig()
    end,
    false
)
ctrls.SpamActionsPerSecond = createSliderRow(
    spamPage,
    "Spam Actions Per Second",
    "Number of parry actions sent per second.",
    10, 100, Config.SpamActionsPerSecond, false, "",
    function(val)
        Config.SpamActionsPerSecond = math.floor(val)
        AutoSaveConfig()
    end
)
ctrls.AutoSpamDistance = createSliderRow(
    spamPage,
    "Auto Spam Distance",
    "Maximum distance to activate auto spam.",
    5, 60, Config.AutoSpamDistance, false, " studs",
    function(val)
        Config.AutoSpamDistance = math.floor(val)
        Config.ClashDistance = Config.AutoSpamDistance
        UpdateVisualRings()
        AutoSaveConfig()
    end,
    true
)
ctrls.SpamBatchMode = createDropdownRow(
    spamPage,
    "Spam Batch Mode",
    "Input batching rate mode.",
    { "Extremely Fast", "Fast", "Normal", "Safe" },
    Config.SpamBatchMode,
    function(opt)
        Config.SpamBatchMode = opt
        AutoSaveConfig()
    end,
    false
)
createCategoryHeader(spamPage, "MANUAL SPAM")
ctrls.ManualSpam = createToggleRow(
    spamPage,
    "Manual Spam",
    "Hold parry keybind or mouse to continuously spam parries.",
    Config.ManualSpam,
    function(state)
        Config.ManualSpam = state
        AutoSaveConfig()
    end,
    false
)
local detectPage = tabs["Detection"]
createCategoryHeader(detectPage, "ABILITY DETECTIONS")
ctrls.PhantomDetection = createToggleRow(detectPage, "Phantom", "Tracks Phantom ball transparency and curves.",
    Config.PhantomDetection, function(state)
        Config.PhantomDetection = state
        AutoSaveConfig()
    end, false)
ctrls.TimeHoleDetection = createToggleRow(detectPage, "Time Hole Auto Parry", "Deflects on Time Hole release.",
    Config.TimeHoleDetection, function(state)
        Config.TimeHoleDetection = state
        AutoSaveConfig()
    end, false)
ctrls.SlashesOfFuryDetection = createToggleRow(detectPage, "Slashes of Fury Auto Counter",
    "Auto counters Slashes of Fury.", Config.SlashesOfFuryDetection, function(state)
        Config.SlashesOfFuryDetection = state
        AutoSaveConfig()
    end, true)
ctrls.InfinityBallDetection = createToggleRow(detectPage, "Infinity Ball Detection", "Tracks Infinity ball drop.",
    Config.InfinityBallDetection, function(state)
        Config.InfinityBallDetection = state
        AutoSaveConfig()
    end, false)
ctrls.DeathSlashDetection = createToggleRow(detectPage, "Death Slash Detection", "Counters Death Slash dashes.",
    Config.DeathSlashDetection, function(state)
        Config.DeathSlashDetection = state
        AutoSaveConfig()
    end, false)
local playerPage = tabs["Player Mod"]
createCategoryHeader(playerPage, "MOVEMENT MODIFIERS")
ctrls.MovementModifiers = createToggleRow(playerPage, "Movement modifiers",
    "Enable speed and jump modifications (Warning: high speeds flag BAC Hfd).", Config.MovementModifiers, function(state)
        Config.MovementModifiers = state
        local char = LocalPlayer.Character
        local hum = char and char:FindFirstChildOfClass("Humanoid")
        if hum and not state then
            hum.WalkSpeed = defaultGameWalkSpeed
            hum.JumpPower = defaultGameJumpPower
        end
        AutoSaveConfig()
    end, false)
ctrls.WalkSpeed = createSliderRow(playerPage, "WalkSpeed", "Player movement speed.", 16, 120, Config.WalkSpeed, false, "",
    function(val)
        Config.WalkSpeed = math.floor(val)
        if Config.MovementModifiers then
            local char = LocalPlayer.Character
            local hum = char and char:FindFirstChildOfClass("Humanoid")
            if hum then hum.WalkSpeed = Config.WalkSpeed end
        end
        AutoSaveConfig()
    end)
ctrls.JumpPower = createSliderRow(playerPage, "JumpPower", "Player jump power.", 50, 200, Config.JumpPower, false, "",
    function(val)
        Config.JumpPower = math.floor(val)
        if Config.MovementModifiers then
            local char = LocalPlayer.Character
            local hum = char and char:FindFirstChildOfClass("Humanoid")
            if hum then hum.JumpPower = Config.JumpPower end
        end
        AutoSaveConfig()
    end, true)
createCategoryHeader(playerPage, "IMMORTALITY DESYNC")
ctrls.ImmortalityDesync = createToggleRow(
    playerPage,
    "Immortality Desync",
    "3D orbital network velocity desynchronization.",
    Config.ImmortalityDesync,
    function(state)
        Config.ImmortalityDesync = state
        AutoSaveConfig()
    end,
    false
)
local function SetPhysicsSendRate(enabled)
    pcall(function()
        if settings and settings().Physics then
            settings().Physics.PhysicsSendRate = enabled and 60 or 20
        end
    end)
end
ctrls.SpeedBypass = createToggleRow(
    playerPage,
    "Speed Bypass",
    "Change the physics sender rate while enabled.",
    Config.SpeedBypass,
    function(state)
        Config.SpeedBypass = state
        SetPhysicsSendRate(state)
        AutoSaveConfig()
    end,
    false
)
ctrls.OrbitalAngle = createSliderRow(
    playerPage,
    "Orbital Angle",
    "Angular speed and rotation frequency of desync orbit.",
    1, 360, Config.OrbitalAngle, false, "°",
    function(val)
        Config.OrbitalAngle = math.floor(val)
        AutoSaveConfig()
    end
)
ctrls.PeakHeight = createSliderRow(
    playerPage,
    "Peak Height",
    "Vertical altitude wave height above ground.",
    1, 50, Config.PeakHeight, false, " studs",
    function(val)
        Config.PeakHeight = math.floor(val)
        AutoSaveConfig()
    end
)
ctrls.DesyncDepth = createSliderRow(
    playerPage,
    "Desync Depth",
    "Negative orbit depth.",
    1, 25, Config.DesyncDepth, false, "",
    function(val)
        Config.DesyncDepth = math.floor(val)
        AutoSaveConfig()
    end
)
ctrls.OrbitRadius = createSliderRow(
    playerPage,
    "Orbit Radius",
    "Orbital radius in studs around character position.",
    1, 50, Config.OrbitRadius, false, " studs",
    function(val)
        Config.OrbitRadius = math.floor(val)
        AutoSaveConfig()
    end
)
createCategoryHeader(playerPage, "PLAYER ESP & VISUALS")
ctrls.PlayerESP = createToggleRow(
    playerPage,
    "Player Ability ESP",
    "Displays player names, equipped abilities, and distances.",
    Config.PlayerESP,
    function(state)
        Config.PlayerESP = state
        UpdatePlayerESP()
        AutoSaveConfig()
    end,
    false
)
SyncUIWithConfig = function()
    for k, ctrl in pairs(ctrls) do
        local val = Config[k]
        if val ~= nil and ctrl then
            if ctrl.SetState and typeof(val) == "boolean" then
                ctrl.SetState(val)
            elseif ctrl.SetValue and typeof(val) == "number" then
                ctrl.SetValue(val)
            elseif ctrl.SetOption and typeof(val) == "string" then
                ctrl.SetOption(val)
            elseif ctrl.SetOption and typeof(val) == "EnumItem" then
                ctrl.SetOption(val.Name)
            end
        end
    end
    if Config.UIKeybind then
        footerRight.Text = S(Config.UIKeybind.Name:upper() .. " TO HIDE")
    end
    autoParryEnabled = Config.AutoParry
    footerLeft.Text = S(autoParryEnabled and "Auto Parry: ACTIVE" or "Identical engine ready")
    runStatusRow.SetValue(autoParryEnabled and "Auto Parry: ACTIVE" or "Identical engine ready")
    UpdateVisualRings()
    UpdatePlayerESP()
end
searchBox:GetPropertyChangedSignal("Text"):Connect(function()
    local q = searchBox.Text:lower():gsub("%s+", "")
    for _, tabScroll in pairs(tabs) do
        for _, child in ipairs(tabScroll:GetChildren()) do
            if child:IsA("Frame") and rowSearchIndex[child] then
                if q == "" then
                    child.Visible = true
                else
                    local match = rowSearchIndex[child]:gsub("%s+", ""):find(q)
                    child.Visible = (match ~= nil)
                end
            end
        end
    end
end)
local isDraggingWindow = false
local dragStartPos
local frameStartPos
topBar.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        isDraggingWindow = true
        dragStartPos = input.Position
        frameStartPos = mainFrame.Position
    end
end)
table.insert(activeConnections, UserInputService.InputChanged:Connect(function(input)
    if isDraggingWindow and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
        local delta = input.Position - dragStartPos
        mainFrame.Position = UDim2.new(
            frameStartPos.X.Scale,
            frameStartPos.X.Offset + delta.X,
            frameStartPos.Y.Scale,
            frameStartPos.Y.Offset + delta.Y
        )
    end
end))
table.insert(activeConnections, UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        isDraggingWindow = false
    end
end))
local isWindowMinimized = false
minBtn.MouseButton1Click:Connect(function()
    isWindowMinimized = not isWindowMinimized
    if isWindowMinimized then
        bodyFrame.Visible = false
        footerBar.Visible = false
        TweenService:Create(mainFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
            { Size = UDim2.new(0, 680, 0, 39) }):Play()
    else
        local tween = TweenService:Create(mainFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
            { Size = UDim2.new(0, 680, 0, 460) })
        tween:Play()
        tween.Completed:Connect(function()
            if not isWindowMinimized then
                bodyFrame.Visible = true
                footerBar.Visible = true
            end
        end)
    end
end)
local isDraggingCrest = false
local crestDragStart = nil
local crestStartPos = nil
local crestMoved = false
miniCrest.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        isDraggingCrest = true
        crestDragStart = input.Position
        crestStartPos = miniCrest.Position
        crestMoved = false
    end
end)
table.insert(activeConnections, UserInputService.InputChanged:Connect(function(input)
    if isDraggingCrest and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
        local delta = input.Position - crestDragStart
        if math.abs(delta.X) > 4 or math.abs(delta.Y) > 4 then
            crestMoved = true
        end
        local newX = crestStartPos.X.Offset + delta.X
        local newY = crestStartPos.Y.Offset + delta.Y
        miniCrest.Position = UDim2.new(crestStartPos.X.Scale, newX, crestStartPos.Y.Scale, newY)
    end
end))
table.insert(activeConnections, UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        if isDraggingCrest then
            isDraggingCrest = false
            if not crestMoved then
                ToggleUiVisibility()
            end
        end
    end
end))
miniCrest.MouseEnter:Connect(function()
    TweenService:Create(miniCrestStroke, TweenInfo.new(0.15), { Color = Colors.PurpleGlow, Thickness = 2 }):Play()
    TweenService:Create(miniCrest, TweenInfo.new(0.15), { BackgroundColor3 = Color3.fromRGB(28, 20, 46) }):Play()
    TweenService:Create(miniCrestLabel, TweenInfo.new(0.15),
        { TextColor3 = Color3.fromRGB(255, 255, 255), TextSize = 20 })
        :Play()
end)
miniCrest.MouseLeave:Connect(function()
    TweenService:Create(miniCrestStroke, TweenInfo.new(0.15), { Color = Colors.PurplePrimary, Thickness = 1.5 }):Play()
    TweenService:Create(miniCrest, TweenInfo.new(0.15), { BackgroundColor3 = Color3.fromRGB(16, 12, 26) }):Play()
    TweenService:Create(miniCrestLabel, TweenInfo.new(0.15), { TextColor3 = Colors.PurplePrimary, TextSize = 18 }):Play()
end)
local isUiVisible = true
ToggleUiVisibility = function()
    isUiVisible = not isUiVisible
    if isUiVisible then
        mainFrame.Visible = true
        if isWindowMinimized then
            bodyFrame.Visible = false
            footerBar.Visible = false
            mainFrame.Size = UDim2.new(0, 680, 0, 39)
        else
            bodyFrame.Visible = true
            footerBar.Visible = true
            mainFrame.Size = UDim2.new(0, 680, 0, 460)
        end
    else
        mainFrame.Visible = false
    end
    if Config.KeepCrestMinimised then
        miniCrest.Visible = true
    end
    HideTooltip()
end
local lastAbilityTime = 0
local function TriggerAbilityDefend()
    local now = tick()
    if now - lastAbilityTime < 2.5 then return end
    lastAbilityTime = now
    pcall(function()
        if keypress then
            keypress(0x51)
            task.delay(0.015, function()
                pcall(function() keyrelease(0x51) end)
            end)
        end
    end)
end
local function PerformParry()
    pcall(function()
        if keypress then
            keypress(0x46)
            task.delay(0.01, function()
                pcall(function() keyrelease(0x46) end)
            end)
        elseif mouse1click then
            mouse1click()
        end
    end)
end
local function SendAction(isClashing, isSuperFast, ball)
    if not IsPlayerInMatch() then return false end
    local now = tick()
    local isClashMode = (Config.AutoSpam and (isClashing or (ball and LocalPlayer.Character and (ball.Position - LocalPlayer.Character:GetPivot().Position).Magnitude <= Config.AutoSpamDistance))) or
        isSuperFast or furyCounterActive
    local spamRate = math.clamp(Config.SpamActionsPerSecond or 50, 10, 100)
    local rawCd = isClashMode and (1 / spamRate) or 0.022
    if Config.SpamBatchMode == "Safe" then
        rawCd = math.max(0.080, rawCd)
    elseif Config.SpamBatchMode == "Normal" then
        rawCd = math.max(0.040, rawCd)
    elseif Config.SpamBatchMode == "Fast" then
        rawCd = math.max(0.025, rawCd)
    elseif Config.SpamBatchMode == "Extremely Fast" then
        rawCd = math.max(0.015, rawCd)
    end
    local jitter = (math.random(-2, 4) / 1000)
    local cd = math.max(0.012, rawCd + jitter)
    if (now - LastClick)  0 or v:FindFirstChild("Phantom") or v:GetAttribute("Phantom"))) then
                local d = (v.Position - rootPos).Magnitude
                if d <= 450 or (target and (target == LocalPlayer.Name or target == LocalPlayer.DisplayName or (char and target == char.Name))) then
                    if target and (target == LocalPlayer.Name or target == LocalPlayer.DisplayName or (char and target == char.Name)) then
                        return v
                    end
                    if d  0.65 and threat.approachSpeed > 10 and threat.distance  0.60 and hl.FillColor.G < 0.45 and hl.FillColor.B  0.60 and hl.OutlineColor.G < 0.45 and hl.OutlineColor.B  0.60 and threat.approachSpeed > 10 and threat.distance < 70 then
        return true
    end
    return false
end
local function ComputeThreat(ball, root)
    if not ball or not root then return nil end
    local ballPos = ball.Position
    local playerPos = root.Position
    local distance = (playerPos - ballPos).Magnitude
    local velocity = ball.AssemblyLinearVelocity
    local zoomies = ball:FindFirstChild("zoomies")
    if zoomies then
        if zoomies:IsA("LinearVelocity") or zoomies:IsA("VectorForce") then
            velocity = zoomies.VectorVelocity
        elseif zoomies:IsA("BodyVelocity") then
            velocity = zoomies.Velocity
        end
    end
    local speed = velocity.Magnitude
    if speed <= 0 then
        speed = ball.Velocity.Magnitude
        velocity = ball.Velocity
    end
    if Config.TimeHoleDetection then
        if speed  10 then
            timeHoleLock = false
            speed = speed * 1.35
        end
    end
    if Config.InfinityBallDetection and (ball:GetAttribute("Infinity") == true or ball:FindFirstChild("InfinityBallEffect")) then
        if velocity.Y < -5 and distance  45 and distance < Config.ClashDistance + 10 then
            furyCounterActive = true
        else
            furyCounterActive = false
        end
    end
    local nowTime = tick()
    local dtVel = math.clamp(nowTime - lastVelocityTime, 0.001, 0.050)
    lastVelocityTime = nowTime
    local rawAccel = (velocity - lastBallVelocity) / dtVel
    local deltaV = (velocity - lastBallVelocity).Magnitude
    lastBallVelocity = velocity
    lastBallAcceleration = rawAccel
    if speed  15 then
            dot = math.max(dot, 0.50)
        end
    elseif Config.CurveMode == "Predictive" then
        local predictedPos = playerPos + (rootVel * 0.15)
        local predictedDir = (predictedPos - ballPos).Unit
        dot = predictedDir:Dot(velocityDirection)
    end
    local effectiveSpeed = math.max(approachSpeed, speed * 0.72)
    local timeToReach = distance / math.max(effectiveSpeed, 1)
    local activeAbilityName = nil
    if timeHoleLock or Workspace:FindFirstChild("TimeHole") or ball:FindFirstChild("TimeHole") then
        activeAbilityName = "Time Hole"
    elseif furyCounterActive or ball:FindFirstChild("ComboCounter") then
        activeAbilityName = "Slashes of Fury"
    elseif ball:GetAttribute("Infinity") == true or ball:FindFirstChild("InfinityBallEffect") then
        activeAbilityName = "Infinity Ball"
    elseif ball:GetAttribute("DeathSlash") == true or ball:FindFirstChild("DeathSlashEffect") then
        activeAbilityName = "Death Slash"
    elseif ball:GetAttribute("Phantom") == true or ball:FindFirstChild("Phantom") or ball:FindFirstChild("PhantomEffect") then
        activeAbilityName = "Phantom"
    elseif ball:GetAttribute("Telekinesis") == true or ball:FindFirstChild("TelekinesisEffect") or Workspace:FindFirstChild("Telekinesis") then
        activeAbilityName = "Telekinesis"
    elseif ball:GetAttribute("Raptured") == true or ball:FindFirstChild("RaptureEffect") then
        activeAbilityName = "Rapture"
    elseif ball:GetAttribute("Pulled") == true or ball:FindFirstChild("PullEffect") then
        activeAbilityName = "Pull"
    end
    return {
        ball = ball,
        distance = distance,
        speed = speed,
        approachSpeed = approachSpeed,
        dot = dot,
        timeToReach = timeToReach,
        velocity = velocity,
        curveDelta = deltaV,
        acceleration = lastBallAcceleration,
        abilityActive = activeAbilityName,
        isPhantom = (activeAbilityName == "Phantom")
    }
end
local currentGlitchedBall = nil
local glitchCaughtTime = 0
local glitchReleaseDelay = 0
local function AutoParryLogic(dt)
    if not autoParryEnabled then return end
    if not IsPlayerInMatch() then return end
    local char = LocalPlayer.Character
    if not char then return end
    local ball = GetBall()
    if not ball then return end
    local root = char:FindFirstChild("HumanoidRootPart")
    if not root then return end
    local threat = ComputeThreat(ball, root)
    if not threat then return end
    local pingMs = 60
    pcall(function()
        if LocalPlayer and LocalPlayer.GetNetworkPing then
            local np = LocalPlayer:GetNetworkPing()
            if np and np > 0 then
                pingMs = math.floor(np * 1000)
                return
            end
        end
        if Stats and Stats.Network and Stats.Network.ServerStatsItem then
            pingMs = math.floor(Stats.Network.ServerStatsItem["Data Ping"]:GetValue())
        end
    end)
    pingMs = math.clamp(pingMs, 10, 400)
    local ballTargetAttr = ball:GetAttribute("target") or ball:GetAttribute("Target") or
        ball:GetAttribute("currentTarget") or ball:GetAttribute("to")
    local isDirectTarget = (ballTargetAttr ~= nil and (ballTargetAttr == LocalPlayer.Name or ballTargetAttr == LocalPlayer.DisplayName or ballTargetAttr == char.Name))
    local isTarget = isDirectTarget or IsTargeted(ball, threat)
    local nearestEnemyDist = GetNearestAliveEnemy(root.Position)
    local isNearOpponent = (nearestEnemyDist <= (Config.ClashDistance + 8))
    local isRealClash = (threat.distance = 120
    if LastBallHit == ball and not isRealClash then
        if threat.approachSpeed <= 0 and (tick() - LastClick) < 0.08 then
            return
        end
    end
    if Config.ImmortalityDesync and (tick() - LastClick)  15 then
        curveCompensation = curveCompensation.Unit * 15
    end
    local futureBallPos = ball.Position + (ballVelocity * totalTransitDelay) + curveCompensation
    local futureDistance = (futurePlayerPos - futureBallPos).Magnitude
    local baseRadius = 16.0
    local transitDistance = threat.speed * (pingSec * 0.5 + 1 / 60)
    local serverInterceptionRadius = baseRadius + math.clamp(transitDistance, 0, 22)
    if Config.ImmortalityDesync then
        if threat.distance = glitchReleaseDelay or threat.distance <= 5.0 then
                SendAction(isRealClash, isSuperFast, ball)
                currentGlitchedBall = nil
                return
            end
            return
        else
            currentGlitchedBall = nil
        end
    else
        currentGlitchedBall = nil
        if threat.distance  0.05 or threat.approachSpeed > -5) then
            SendAction(isRealClash, isSuperFast, ball)
            return
        end
    end
    if futureDistance  -10 or threat.dot > 0.05) then
        SendAction(isRealClash, isSuperFast, ball)
    end
end
local function BindCharacterDeath(char)
    if not char then return end
    local hum = char:WaitForChild("Humanoid", 4)
    if hum then
        table.insert(activeConnections, hum.Died:Connect(OnPlayerDied))
        task.delay(0.6, function()
            if hum and not Config.MovementModifiers and hum.WalkSpeed > 20 then
                defaultGameWalkSpeed = hum.WalkSpeed
                defaultGameJumpPower = hum.JumpPower
            end
        end)
    end
end
if LocalPlayer.Character then
    BindCharacterDeath(LocalPlayer.Character)
end
table.insert(activeConnections, LocalPlayer.CharacterAdded:Connect(function(char)
    BindCharacterDeath(char)
end))
local deadFolder = Workspace:FindFirstChild("Dead")
if deadFolder then
    table.insert(activeConnections, deadFolder.ChildAdded:Connect(function(deadChar)
        if LocalPlayer.Character and deadChar == LocalPlayer.Character then
            OnPlayerDied()
        end
    end))
end
table.insert(activeConnections, Workspace.ChildAdded:Connect(function(child)
    if child.Name == "Dead" then
        table.insert(activeConnections, child.ChildAdded:Connect(function(deadChar)
            if LocalPlayer.Character and deadChar == LocalPlayer.Character then
                OnPlayerDied()
            end
        end))
    end
end))
table.insert(activeConnections, RunService.Heartbeat:Connect(function()
    local inMatch = IsPlayerInMatch()
    local char = LocalPlayer.Character
    local hum = char and char:FindFirstChildOfClass("Humanoid")
    local root = char and char:FindFirstChild("HumanoidRootPart")
    if Config.ImmortalityDesync and inMatch and root then
        local liveBall = GetLiveBall()
        if liveBall then
            if IsTargeted(liveBall) then
                local dist = (liveBall.Position - root.Position).Magnitude
                if dist < 65 then
                    if not liveBall:GetAttribute("DesyncStartTime") then
                        liveBall:SetAttribute("DesyncStartTime", tick())
                    end
                    local holdTime = tick() - liveBall:GetAttribute("DesyncStartTime")
                    local captureProgress = math.clamp(holdTime / 0.40, 0, 1)
                    local safeRadius = math.clamp((Config.OrbitRadius or 15) * 0.75, 4, 10)
                    local height = ((Config.PeakHeight or 20) / 10) - 1
                    local t = tick() * math.max(1, (Config.DesyncDepth or 8)) * 1.5
                    local orbitOffset = Vector3.new(
                        math.cos(t) * safeRadius,
                        height,
                        math.sin(t) * safeRadius
                    )
                    local basePos = root.Position + orbitOffset
                    local maxIntensity = math.clamp(Config.DesyncDepth or 8, 1, 15)
                    local intensity = maxIntensity * math.pow(captureProgress, 2)
                    local glitchOffset = Vector3.new(
                        (math.random() - 0.5) * intensity,
                        (math.random() - 0.5) * intensity,
                        (math.random() - 0.5) * intensity
                    )
                    local targetPos = basePos + glitchOffset
                    pcall(function()
                        local lerpAlpha = (captureProgress < 1) and 0.15 or 1
                        liveBall.CFrame = liveBall.CFrame:Lerp(CFrame.new(targetPos), lerpAlpha)
                        local safeDir = (root.Position - liveBall.Position).Unit
                        liveBall.AssemblyLinearVelocity = safeDir * 15
                        liveBall.AssemblyAngularVelocity = Vector3.new(0, 5, 0)
                    end)
                else
                    if liveBall:GetAttribute("DesyncStartTime") then
                        liveBall:SetAttribute("DesyncStartTime", nil)
                    end
                end
            else
                if liveBall:GetAttribute("DesyncStartTime") then
                    liveBall:SetAttribute("DesyncStartTime", nil)
                end
            end
        end
    end
    if Config.MovementModifiers and inMatch and hum then
        local targetSpeed = math.clamp(Config.WalkSpeed, 16, 50)
        if hum.WalkSpeed ~= targetSpeed then
            pcall(function() hum.WalkSpeed = targetSpeed end)
        end
        if hum.JumpPower ~= Config.JumpPower then
            pcall(function() hum.JumpPower = Config.JumpPower end)
        end
    end
    UpdateVisualRings()
    if Config.PlayerESP then
        UpdatePlayerESP()
    end
end))
UnloadScript = function()
    autoParryEnabled = false
    for _, conn in pairs(activeConnections) do
        if conn and typeof(conn) == "RBXScriptConnection" and conn.Connected then
            conn:Disconnect()
        end
    end
    table.clear(activeConnections)
    pcall(function()
        ringAdornment:Destroy()
        desyncBubbleAdornment:Destroy()
        espFolder:Destroy()
    end)
    pcall(function()
        if Camera then Camera.FieldOfView = 70 end
        local char = LocalPlayer.Character
        local hum = char and char:FindFirstChildOfClass("Humanoid")
        if hum then
            hum.WalkSpeed = defaultGameWalkSpeed
            hum.JumpPower = defaultGameJumpPower
        end
    end)
    pcall(function()
        local fadeTween = TweenService:Create(mainFrame,
            TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
                Size = UDim2.new(0, 680, 0, 0),
                BackgroundTransparency = 1
            })
        fadeTween:Play()
        fadeTween.Completed:Connect(function()
            screenGui:Destroy()
        end)
    end)
    if not screenGui.Parent then
        screenGui:Destroy()
    end
    SendNotification("Identical", "Script unloaded successfully.", 2)
end
closeBtn.MouseButton1Click:Connect(UnloadScript)
table.insert(activeConnections, UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.KeyCode == Config.UIKeybind then
        ToggleUiVisibility()
    end
    if input.KeyCode == Config.ParryKeybind then
        autoParryEnabled = not autoParryEnabled
        Config.AutoParry = autoParryEnabled
        if ctrls.AutoParry then ctrls.AutoParry.SetState(autoParryEnabled) end
        footerLeft.Text = S(autoParryEnabled and "Auto Parry: ACTIVE" or "Identical engine ready")
        runStatusRow.SetValue(autoParryEnabled and "Auto Parry: ACTIVE" or "Identical engine ready")
        SendNotification("Auto Parry", "Auto Parry is now " .. (autoParryEnabled and "ENABLED" or "DISABLED"), 2)
        AutoSaveConfig()
    end
end))
table.insert(activeConnections, RunService.RenderStepped:Connect(function()
end))
local function RunParryCycle(dt)
    local stepDt = (typeof(dt) == "number" and dt) or 0.016
    pcall(AutoParryLogic, stepDt)
end
if RunService.PreSimulation then
    table.insert(activeConnections, RunService.PreSimulation:Connect(RunParryCycle))
end
table.insert(activeConnections, RunService.RenderStepped:Connect(RunParryCycle))
table.insert(activeConnections, RunService.Heartbeat:Connect(RunParryCycle))
local loaded = LoadSavedConfig()
if loaded then
    SyncUIWithConfig()
    SendNotification("Identical", "Default configuration loaded.", 2)
else
    SendNotification("Identical", "Loaded successfully. [LeftControl to Toggle]", 2)
end
🎮 Similar Scripts
💬 Comments (0)
Login to post a comment
No comments yet. Be the first!
Script Info
Game Blade Ball
TypeKeyless
Authoralexriderr
Views3
Likes0
PublishedSep 6, 2026
🎮 Play Game on Roblox
🕐 Recent Scripts
Vibecode V1 (Universal)
Vibecode V1 (Universal)
Catalog Avatar Creator • 👁 4
Keyless
Blade Ball script (WINDS HUB)
Blade Ball script (WINDS HUB)
Blade Ball • 👁 5
Keyless
Steal An Egg script (PROJECT MADARA)
Steal An Egg script (PROJECT MADARA)
Steal An Egg • 👁 6
Keyless
Collect Cars and Race script keyless | auto roll, auto gear,
Collect Cars and Race script keyless | auto roll, auto gear,
Collect Cars and Race 🏎️ • 👁 8
Keyless
Collect Cars and Race script keyless | auto roll, auto gear
Collect Cars and Race script keyless | auto roll, auto gear
Collect Cars and Race • 👁 10
Keyless