-- DoomSaken V2.0 - Dark + Pure Neon White Edition (December 2025)

local Rayfield = loadstring(game:HttpGet('https://[Log in to view URL]'))()

local Window = Rayfield:CreateWindow({

    Name = "DoomSaken V2.0",

    LoadingTitle = "DoomSaken V2.0",

    LoadingSubtitle = "by vlana0108 and contributors",

    Icon = 138299115231261, 

    ConfigurationSaving = { Enabled = true, FileName = "DoomSakenConfig" },

    Discord = { Enabled = true, Invite = "66DM9SsSk", RememberJoins = true },

    KeySystem = true,

    KeySettings = {

        Title = "DoomSaken Key System",

        Subtitle = "Enter your key",

        Note = "Join Discord в†’ https://[Log in to view URL]",

        FileName = "DoomSakenKey",

        SaveKey = true,

        GrabKeyFromSite = false,

        Key = {"Vs3D00ms4k3n"}

    }

})

-- Tabs

local MainTab     = Window:CreateTab("Veeronica", 83277671478725)

local MainTab1    = Window:CreateTab("Guest 1337", 76739403931023)

local MainTab2    = Window:CreateTab("Elliot", 82364637483513)

local MainTab3    = Window:CreateTab("Chance", 96522474394555)

local MainTab4    = Window:CreateTab("Two Time", 72597517095241)

local MainTab9    = Window:CreateTab("Stamina", 75247650538709)

local MainTab10   = Window:CreateTab("Auto Gen", 124294693628938)

local MainTab11   = Window:CreateTab("Misc", 7023271627)

local MainTab13   = Window:CreateTab("ESP", 4483362458)

local MainTab12   = Window:CreateTab("Credits", 118205481453014)

-- Services

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local Players = game:GetService("Players")

local LocalPlayer = Players.LocalPlayer

local RunService = game:GetService("RunService")

local Workspace = game:GetService("Workspace")

local Camera = Workspace.CurrentCamera

local Lighting = game:GetService("Lighting")

-- ========================

-- Veeronica Auto Trick

-- ========================

local function getBehaviorFolder()

    return ReplicatedStorage:WaitForChild("Assets"):WaitForChild("Survivors"):WaitForChild("Veeronica"):WaitForChild("Behavior")

end

local behaviorFolder = getBehaviorFolder()

local veeronicaEnabled = true

local activeMonitors = {}

local descendantAddedConn = nil

local function safeConnectPropertyChanged(instance, prop, fn)

    local ok, signal = pcall(function() return instance:GetPropertyChangedSignal(prop) end)

    if ok and signal then return signal:Connect(fn) end

    return nil

end

local function monitorHighlight(h)

    if not h or activeMonitors[h] then return end

    local connections = {}

    local prevState = false

    local function cleanup()

        for _, conn in ipairs(connections) do

            if conn and conn.Connected then conn:Disconnect() end

        end

        activeMonitors[h] = nil

    end

    local function adorneeIsPlayerCharacter()

        if not h.Adornee then return false end

        local char = LocalPlayer.Character

        if not char then return false end

        return h.Adornee == char or h.Adornee:IsDescendantOf(char)

    end

    local function onChanged()

        if not veeronicaEnabled or not h.Parent then cleanup(); return end

        local currState = adorneeIsPlayerCharacter()

        if prevState ~= currState and currState then

            local success, btn = pcall(function()

                return LocalPlayer.PlayerGui:WaitForChild("MainUI"):WaitForChild("SprintingButton")

            end)

            if success and btn then

                for _, v in pairs(getconnections(btn.MouseButton1Down)) do

                    pcall(v.Fire, v)

                end

            end

        end

        prevState = currState

    end

    local c = safeConnectPropertyChanged(h, "Adornee", onChanged)

    if c then table.insert(connections, c) end

    table.insert(connections, h.AncestryChanged:Connect(function(_, parent)

        if not parent then cleanup() else onChanged() end

    end))

    table.insert(connections, LocalPlayer.CharacterAdded:Connect(onChanged))

    table.insert(connections, LocalPlayer.CharacterRemoving:Connect(onChanged))

    activeMonitors[h] = cleanup

    task.spawn(onChanged)

end

local function startVeeronicaManager()

    if descendantAddedConn then return end

    for _, desc in ipairs(behaviorFolder:GetDescendants()) do

        if desc:IsA("Highlight") then monitorHighlight(desc) end

    end

    descendantAddedConn = behaviorFolder.DescendantAdded:Connect(function(child)

        if child:IsA("Highlight") then monitorHighlight(child) end

    end)

end

local function stopVeeronicaManager()

    if descendantAddedConn and descendantAddedConn.Connected then

        descendantAddedConn:Disconnect()

    end

    descendantAddedConn = nil

    for _, cleanup in pairs(activeMonitors) do pcall(cleanup) end

    activeMonitors = {}

end

local function setVeeronicaEnabled(v)

    if veeronicaEnabled == v then return end

    veeronicaEnabled = v

    if v then startVeeronicaManager() else stopVeeronicaManager() end

end

setVeeronicaEnabled(true)

MainTab:CreateSection("Veeronica Scripts")

MainTab:CreateToggle({

    Name = "Auto Trick",

    CurrentValue = true,

    Callback = function(v) setVeeronicaEnabled(v) end

})

MainTab:CreateButton({

    Name = "Skate Without Graffiti",

    Callback = function() loadstring(game:HttpGet("https://[Log in to view URL]"))() end

})

MainTab:CreateButton({

    Name = "Skate Controller",

    Callback = function() loadstring(game:HttpGet("https://[Log in to view URL]"))() end

})

-- ========================

-- Guest 1337 Features

-- ========================

local killersFolder = Workspace.Players.Killers

local killersList = {"Sixer", "Slasher", "Noli", "JohnDoe", "c00lkidd", "1x1x1x1", "Nosferatu"}

local attackSoundIds = {

    ["70845653728841"]=true, ["104910828105172"]=true, ["106300477136129"]=true,

    ["127793641088496"]=true, ["112809109188560"]=true, ["109348678063422"]=true,

    ["105200830849301"]=true, ["79391273191671"]=true,  ["82221759983649"]=true,

    ["121954639447247"]=true, ["85853080745515"]=true,  ["84307400688050"]=true,

    ["71834552297085"]=true, ["79980897195554"]=true,  ["131406927389838"]=true,

    ["76959687420003"]=true, ["95079963655241"]=true,  ["102228729296384"]=true,

    ["119942598489800"]=true, ["119583605486352"]=true, ["108907358619313"]=true,

    ["117173212095661"]=true, ["12222216"]=true,        ["114742322778642"]=true,

    ["105840448036441"]=true, ["71805956520207"]=true,  ["84116622032112"]=true,

    ["119089145505438"]=true, ["75330693422988"]=true,  ["86174610237192"]=true,

    ["89004992452376"]=true,  ["81702359653578"]=true,  ["86833981571073"]=true,

    ["101698569375359"]=true, ["110372418055226"]=true, ["115026634746636"]=true,

    ["86494585504534"]=true,  ["101553872555606"]=true, ["136323728355613"]=true,

    ["101199185291628"]=true, ["125213046326879"]=true, ["116581754553533"]=true,

    ["113037804008732"]=true, ["140242176732868"]=true, ["117231507259853"]=true,

    ["107444859834748"]=true, ["80516583309685"]=true,  ["112395455254818"]=true,

    ["109431876587852"]=true, ["108610718831698"]=true, ["121369993837377"]=true,

}

local special1x1Sound = "70845653728841"

local PUNCH_ANIM_IDS = {

    ["87259391926321"] = true, ["140703210927645"] = true, ["136007065400978"] = true,

    ["129843313690921"] = true, ["86709774283672"] = true, ["108807732150251"] = true,

    ["138040001965654"] = true, ["86096387000557"] = true

}

local settings = {

    autoblock = false, hd = false, onlyLooking = true, wallCheck = true,

    sphereRange = 11, sphereEsp = false, customEsp = false,

    boxLength = 15, boxWidth = 6, hdSpeed = 12

}

getgenv().PunchAimbot = getgenv().PunchAimbot or { Enabled = true, Mode = "Camera", Smoothness = 0.14, Prediction = 0.133 }

getgenv().AutoPunch = getgenv().AutoPunch or { Enabled = false, Range = 50, ShowRange = false, TrueDash = false }

local spheres, boxes = {}, {}

local inSphere, inBox, hasLos = {}, {}, {}

local lastSoundTime, advicePart, pulling = {}, nil, false

local CurrentConn, CurrentTarget = nil, nil

local PunchSphere = nil

local dashing = false

local remote = ReplicatedStorage.Modules.Network.RemoteEvent

MainTab1:CreateSection("Autoblock")

MainTab1:CreateToggle({Name = "Autoblock", CurrentValue = false, Callback = function(v) settings.autoblock = v end})

MainTab1:CreateToggle({Name = "Only When Looking", CurrentValue = true, Callback = function(v) settings.onlyLooking = v end})

MainTab1:CreateToggle({Name = "Wall Check", CurrentValue = true, Callback = function(v) settings.wallCheck = v end})

MainTab1:CreateSection("Auto Punch Settings")

MainTab1:CreateToggle({Name = "Punch Aimbot (Locks on Killer)", CurrentValue = getgenv().PunchAimbot.Enabled, Callback = function(v) getgenv().PunchAimbot.Enabled = v end})

MainTab1:CreateDropdown({Name = "Aim Mode", Options = {"Camera (Smooth)", "RootPart (Instant)"}, CurrentOption = getgenv().PunchAimbot.Mode == "Camera" and "Camera (Smooth)" or "RootPart (Instant)",

    Callback = function(o) getgenv().PunchAimbot.Mode = o:find("Camera") and "Camera" or "RootPart" end})

MainTab1:CreateSlider({Name = "Smoothness", Range = {0.01,1}, Increment = 0.01, CurrentValue = getgenv().PunchAimbot.Smoothness, Callback = function(v) getgenv().PunchAimbot.Smoothness = v end})

MainTab1:CreateSlider({Name = "Prediction", Range = {0,0.5}, Increment = 0.005, CurrentValue = getgenv().PunchAimbot.Prediction, Callback = function(v) getgenv().PunchAimbot.Prediction = v end})

MainTab1:CreateToggle({Name = "Auto Punch (Spams on Killers)", CurrentValue = getgenv().AutoPunch.Enabled, Callback = function(v) getgenv().AutoPunch.Enabled = v end})

MainTab1:CreateToggle({Name = "True Dash Punch", CurrentValue = getgenv().AutoPunch.TrueDash, Callback = function(v) getgenv().AutoPunch.TrueDash = v end})

MainTab1:CreateToggle({Name = "Show Punch Range ESP", CurrentValue = getgenv().AutoPunch.ShowRange, Callback = function(v) getgenv().AutoPunch.ShowRange = v end})

MainTab1:CreateSlider({Name = "Auto Punch Range", Range = {10,120}, Increment = 1, Suffix = " studs", CurrentValue = getgenv().AutoPunch.Range, Callback = function(v) getgenv().AutoPunch.Range = v end})

MainTab1:CreateSection("HD Tech")

MainTab1:CreateToggle({Name = "Enable HD Pull", CurrentValue = false, Callback = function(v) settings.hd = v end})

MainTab1:CreateSlider({Name = "HD Speed", Range = {1,20}, Increment = 1, CurrentValue = 12, Callback = function(v) settings.hdSpeed = v end})

MainTab1:CreateSection("Sphere ESP")

MainTab1:CreateSlider({Name = "Range", Range = {5,50}, Increment = 1, Suffix = " studs", CurrentValue = 11, Callback = function(v) settings.sphereRange = v end})

MainTab1:CreateToggle({Name = "Sphere ESP", CurrentValue = false, Callback = function(v)

    settings.sphereEsp = v

    if not v then for _,s in pairs(spheres) do pcall(function() s:Destroy() end) end spheres = {} end

end})

MainTab1:CreateSection("Custom Box ESP")

MainTab1:CreateToggle({Name = "Custom ESP", CurrentValue = false, Callback = function(v)

    settings.customEsp = v

    if not v then for _,b in pairs(boxes) do pcall(function() b:Destroy() end) end boxes = {} end

end})

MainTab1:CreateSlider({Name = "Length", Range = {1,50}, Increment = 1, Suffix = " studs", CurrentValue = 15, Callback = function(v) settings.boxLength = v end})

MainTab1:CreateSlider({Name = "Width", Range = {1,50}, Increment = 1, Suffix = " studs", CurrentValue = 6, Callback = function(v) settings.boxWidth = v end})

local function isHelpless()

    local success, obj = pcall(function()

        return LocalPlayer.PlayerGui.MainUI.AbilityContainer.Block:FindFirstChild("Helpless")

    end)

    return success and obj ~= nil

end

local function canUseBlock()

    if isHelpless() then return false end

    local success, clip = pcall(function()

        return LocalPlayer.PlayerGui.MainUI.AbilityContainer.Block.Clipping

    end)

    if not success or not clip then return false end

    return clip.Size == UDim2.new(1,0,1,0)

end

local rayParams = RaycastParams.new()

rayParams.FilterType = Enum.RaycastFilterType.Exclude

rayParams.IgnoreWater = true

local function hasLineOfSight(targetRoot)

    if not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then return false end

    local origin = LocalPlayer.Character.HumanoidRootPart.Position

    local direction = targetRoot.Position - origin

    rayParams.FilterDescendantsInstances = {LocalPlayer.Character}

    local result = Workspace:Raycast(origin, direction, rayParams)

    return not result or result.Instance:IsDescendantOf(targetRoot.Parent)

end

local function show1x1Advice(root)

    if advicePart then advicePart:Destroy() end

    advicePart = Instance.new("Part")

    advicePart.Size = Vector3.new(14,5,14)

    advicePart.Material = Enum.Material.Neon

    advicePart.Color = Color3.fromRGB(255,0,255)

    advicePart.Transparency = 0.3

    advicePart.Anchored = true

    advicePart.CanCollide = false

    advicePart.CFrame = CFrame.lookAt(root.Position - root.CFrame.LookVector * 10, root.Position)

    advicePart.Parent = Workspace

    task.delay(0.5, function() if advicePart then advicePart:Destroy() advicePart = nil end end)

end

local function doHDPull(targetPos)

    if pulling or not canUseBlock() then return end

    pulling = true

    local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

    if not hrp then pulling = false return end

    local bv = Instance.new("BodyVelocity")

    bv.MaxForce = Vector3.new(40000, 0, 40000)

    bv.Velocity = Vector3.zero

    bv.Parent = hrp

    local conn = RunService.Heartbeat:Connect(function()

        if not bv.Parent then conn:Disconnect() pulling = false return end

        local vec = targetPos - hrp.Position

        if vec.Magnitude < 5 then bv:Destroy() conn:Disconnect() pulling = false return end

        bv.Velocity = vec.Unit * (settings.hdSpeed * 20)

    end)

    task.delay(0.5, function()

        if bv and bv.Parent then bv:Destroy() end

        if conn then conn:Disconnect() end

        pulling = false

    end)

end

local function updateESP()

    if not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then return end

    local myPos = LocalPlayer.Character.HumanoidRootPart.Position

    for _, killerName in ipairs(killersList) do

        local killer = killersFolder:FindFirstChild(killerName)

        local root = killer and killer:FindFirstChild("HumanoidRootPart")

        if not root then

            inSphere[killerName], inBox[killerName], hasLos[killerName] = false, false, false

            continue

        end

        local distance = (myPos - root.Position).Magnitude

        local los = hasLineOfSight(root)

        hasLos[killerName] = los

        inSphere[killerName] = distance <= settings.sphereRange

        if settings.sphereEsp then

            local sphere = spheres[killerName] or Instance.new("Part")

            if not spheres[killerName] then

                sphere.Name = "Sphere_"..killerName

                sphere.Shape = Enum.PartType.Ball

                sphere.Material = Enum.Material.Neon

                sphere.Anchored = true

                sphere.CanCollide = false

                sphere.Transparency = 0.85

                sphere.Size = Vector3.new(settings.sphereRange*2, settings.sphereRange*2, settings.sphereRange*2)

                sphere.Parent = Workspace

                spheres[killerName] = sphere

            end

            sphere.CFrame = root.CFrame

            sphere.Color = (distance <= settings.sphereRange and (not settings.wallCheck or los)) and Color3.new(0,1,0) or Color3.new(1,0,0)

        end

        if settings.customEsp then

            local box = boxes[killerName] or Instance.new("Part")

            if not boxes[killerName] then

                box.Name = "Box_"..killerName

                box.Material = Enum.Material.Neon

                box.Anchored = true

                box.CanCollide = false

                box.Transparency = 0.85

                box.Parent = Workspace

                boxes[killerName] = box

            end

            local yOffset = (killerName == "Sixer") and -2 or 0

            local forward = root.CFrame.LookVector * (settings.boxLength/2 + 3 - 4)

            local boxPos = root.Position + forward + Vector3.new(0, yOffset, 0)

            box.Size = Vector3.new(settings.boxWidth, 3, settings.boxLength)

            box.CFrame = CFrame.lookAt(boxPos, boxPos + root.CFrame.LookVector * 100)

            local relative = myPos - box.Position

            local localSpace = box.CFrame:VectorToObjectSpace(relative)

            local half = box.Size / 2

            local inside = math.abs(localSpace.X) <= half.X and math.abs(localSpace.Y) <= half.Y and math.abs(localSpace.Z) <= half.Z

            inBox[killerName] = inside

            box.Color = (inside and (not settings.wallCheck or los)) and Color3.new(0,1,0) or Color3.new(1,0,0)

        end

    end

end

local function UpdatePunchESP()

    if not getgenv().AutoPunch.ShowRange then

        if PunchSphere then PunchSphere:Destroy() PunchSphere = nil end

        return

    end

    local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

    if not hrp then return end

    if not PunchSphere then

        PunchSphere = Instance.new("CylinderHandleAdornment")

        PunchSphere.Name = "AutoPunch_RangeESP"

        PunchSphere.Adornee = hrp

        PunchSphere.Color3 = Color3.fromRGB(255, 0, 100)

        PunchSphere.Transparency = 0.6

        PunchSphere.AlwaysOnTop = true

        PunchSphere.ZIndex = 10

        PunchSphere.Height = 0.1

        PunchSphere.CFrame = CFrame.Angles(math.rad(90), 0, 0)

        PunchSphere.Parent = hrp

    end

    PunchSphere.Radius = getgenv().AutoPunch.Range / 1.5

end

local function TrueDash()

    if not getgenv().AutoPunch.TrueDash or dashing then return end

    local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

    if not hrp then return end

    dashing = true

    local bv = Instance.new("BodyVelocity")

    bv.MaxForce = Vector3.new(1e5, 0, 1e5)

    bv.Velocity = hrp.CFrame.LookVector * 200

    bv.Parent = hrp

    task.delay(0.25, function()

        if bv and bv.Parent then bv:Destroy() end

        dashing = false

    end)

end

local function getNearestKiller()

    local closest, shortest = nil, math.huge

    local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

    if not myRoot then return nil end

    for _, name in ipairs(killersList) do

        local killer = killersFolder:FindFirstChild(name)

        if killer and killer:FindFirstChild("HumanoidRootPart") and killer:FindFirstChild("Humanoid") and killer.Humanoid.Health > 0 then

            local dist = (killer.HumanoidRootPart.Position - myRoot.Position).Magnitude

            if dist < shortest then shortest = dist closest = killer end

        end

    end

    return closest

end

local function startAiming(target)

    if CurrentConn then CurrentConn:Disconnect() end

    CurrentTarget = target

    CurrentConn = RunService.RenderStepped:Connect(function()

        if not getgenv().PunchAimbot.Enabled or not CurrentTarget or not CurrentTarget:FindFirstChild("HumanoidRootPart") then

            if CurrentConn then CurrentConn:Disconnect() CurrentConn = nil end

            CurrentTarget = nil return

        end

        local tRoot = CurrentTarget.HumanoidRootPart

        local pred = tRoot.Position + tRoot.Velocity * getgenv().PunchAimbot.Prediction

        if getgenv().PunchAimbot.Mode == "Camera" then

            Camera.CFrame = Camera.CFrame:Lerp(CFrame.new(Camera.CFrame.Position, pred), getgenv().PunchAimbot.Smoothness)

        else

            local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

            if myRoot then myRoot.CFrame = CFrame.lookAt(myRoot.Position, pred) end

        end

    end)

end

local function stopAiming()

    if CurrentConn then CurrentConn:Disconnect() CurrentConn = nil end

    CurrentTarget = nil

end

local function setupPunchAimbot(char)

    local hum = char:FindFirstChildOfClass("Humanoid")

    if not hum then return end

    hum.AnimationPlayed:Connect(function(track)

        local id = track.Animation.AnimationId:match("%d+$")

        if PUNCH_ANIM_IDS[id] and getgenv().PunchAimbot.Enabled then

            local target = getNearestKiller()

            if target then startAiming(target) track.Stopped:Connect(stopAiming) end

        end

    end)

end

if LocalPlayer.Character then setupPunchAimbot(LocalPlayer.Character) end

LocalPlayer.CharacterAdded:Connect(setupPunchAimbot)

RunService.Heartbeat:Connect(function()

    updateESP()

    UpdatePunchESP()

    if getgenv().AutoPunch.Enabled then

        local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

        if hrp then

            local charges = LocalPlayer.PlayerGui:FindFirstChild("MainUI") 

                and LocalPlayer.PlayerGui.MainUI:FindFirstChild("AbilityContainer")

                and LocalPlayer.PlayerGui.MainUI.AbilityContainer:FindFirstChild("Punch")

                and LocalPlayer.PlayerGui.MainUI.AbilityContainer.Punch:FindFirstChild("Charges")

            if charges and charges.Text ~= "0" then

                for _, name in ipairs(killersList) do

                    local killer = killersFolder:FindFirstChild(name)

                    local khrp = killer and killer:FindFirstChild("HumanoidRootPart")

                    if khrp and (khrp.Position - hrp.Position).Magnitude <= getgenv().AutoPunch.Range then

                        remote:FireServer("UseActorAbility", {"Punch"})

                        if getgenv().AutoPunch.TrueDash then TrueDash() end

                        break

                    end

                end

            end

        end

    end

    if not (settings.autoblock or settings.hd) or not canUseBlock() then return end

    if not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then return end

    local myPos = LocalPlayer.Character.HumanoidRootPart.Position

    for _, killerName in ipairs(killersList) do

        local killer = killersFolder:FindFirstChild(killerName)

        if not killer then continue end

        local root = killer:FindFirstChild("HumanoidRootPart")

        local head = killer:FindFirstChild("Head")

        if not root or not head then continue end

        local dist = (myPos - root.Position).Magnitude

        if dist > settings.sphereRange + 20 then continue end

        if settings.onlyLooking and head.CFrame.LookVector:Dot((myPos - head.Position).Unit) < 0.5 then continue end

        local los = hasLos[killerName] or hasLineOfSight(root)

        local inRange = inSphere[killerName] or dist <= settings.sphereRange

        local inCustomBox = inBox[killerName] or false

        local inDangerZone = (settings.sphereEsp and inRange and (not settings.wallCheck or los)) or

                             (settings.customEsp and inCustomBox and (not settings.wallCheck or los)) or

                             (not settings.sphereEsp and not settings.customEsp and inRange and (not settings.wallCheck or los))

        if not inDangerZone then continue end

        local now = os.clock()

        for _, sound in pairs(killer:GetDescendants()) do

            if sound:IsA("Sound") and sound.Playing then

                local id = sound.SoundId:match("%d+") or ""

                if killerName == "1x1x1x1" and id == special1x1Sound then

                    if not lastSoundTime[id] or now - lastSoundTime[id] > 1 then

                        lastSoundTime[id] = now

                        show1x1Advice(root)

                        task.spawn(function()

                            task.wait(0.65 + math.random()/10)

                            if settings.autoblock and canUseBlock() then remote:FireServer("UseActorAbility", {"Block"}) end

                            if settings.hd and canUseBlock() then doHDPull(root.Position) end

                        end)

                    end

                    break

                end

                if attackSoundIds[id] and (not lastSoundTime[id] or now - lastSoundTime[id] > 0.2) then

                    lastSoundTime[id] = now

                    task.spawn(function()

                        task.wait(0.008 + math.random()/100)

                        if settings.autoblock and canUseBlock() then remote:FireServer("UseActorAbility", {"Block"}) end

                        if settings.hd and canUseBlock() then doHDPull(root.Position) end

                    end)

                    break

                end

            end

        end

    end

end)

-- ========================

-- Elliot Inf Rush Hour

-- ========================

--// Services

local Players = game:GetService("Players")

local RunService = game:GetService("RunService")

local UserInputService = game:GetService("UserInputService")

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local Workspace = game:GetService("Workspace")

local SoundService = game:GetService("SoundService")

local LocalPlayer = Players.LocalPlayer

--// References

local rushFrame = nil

local rushEnabled = false

local isOnCooldown = false

local cooldownTime = 6 -- default

local sprintModule = require(ReplicatedStorage.Systems.Character.Game.Sprinting)

local defaultSprintSpeed = sprintModule.SprintSpeed

--// Create Custom Rush Hour UI

local function createRushUI()

    if rushFrame then return end

    -- ScreenGui

    local ScreenGui = Instance.new("ScreenGui")

    ScreenGui.Name = "CustomRushHourUI"

    ScreenGui.ResetOnSpawn = false

    ScreenGui.Parent = LocalPlayer.PlayerGui

    -- Main draggable frame

    local DragFrame = Instance.new("Frame")

    DragFrame.Size = UDim2.fromOffset(68, 68)

    DragFrame.Position = UDim2.new(0.5, 0, 0, -4)  -- Top center

    DragFrame.AnchorPoint = Vector2.new(0.5, 0)

    DragFrame.BackgroundTransparency = 1

    DragFrame.Visible = false

    DragFrame.Parent = ScreenGui

    rushFrame = DragFrame

    -- Draggable functionality

    local dragging = false

    local dragInput = nil

    local dragStart = nil

    local startPos = nil

    local function updateInput(input)

        local delta = input.Position - dragStart

        DragFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)

    end

    DragFrame.InputBegan:Connect(function(input)

        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then

            dragging = true

            dragStart = input.Position

            startPos = DragFrame.Position

            input.Changed:Connect(function()

                if input.UserInputState == Enum.UserInputState.End then

                    dragging = false

                end

            end)

        end

    end)

    DragFrame.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 dragging and (input == dragInput) then

            updateInput(input)

        end

    end)

    -- Image button

    local Button = Instance.new("ImageButton")

    Button.Size = UDim2.fromScale(1, 1)

    Button.BackgroundTransparency = 1

    Button.Image = "rbxassetid://128250550180598"

    Button.Parent = DragFrame

    Button.ZIndex = 2

    -- Cooldown number

    local CoolLabel = Instance.new("TextLabel")

    CoolLabel.Size = UDim2.fromScale(1, 1)

    CoolLabel.BackgroundTransparency = 1

    CoolLabel.TextColor3 = Color3.fromRGB(255, 255, 255)

    CoolLabel.TextScaled = false

    CoolLabel.TextSize = 68 * 0.175  -- Small and clean

    CoolLabel.Text = ""

    CoolLabel.ZIndex = 3

    CoolLabel.Parent = Button

    -- Lithium Web font

    pcall(function()

        CoolLabel.FontFace = Font.fromEnum(Enum.Font.LithiumWeb)

    end)

    -- Black stroke

    local Stroke = Instance.new("UIStroke")

    Stroke.Color = Color3.fromRGB(0, 0, 0)

    Stroke.Thickness = 2.8

    Stroke.Parent = CoolLabel

    -- No charge overlay

    local NoChargeOverlay = Instance.new("ImageLabel")

    NoChargeOverlay.Size = UDim2.fromScale(1,1)

    NoChargeOverlay.BackgroundTransparency = 1

    NoChargeOverlay.Image = "rbxassetid://INSERT_NOCHARGES_IMAGE_ID_HERE"

    NoChargeOverlay.Visible = false

    NoChargeOverlay.Parent = Button

    NoChargeOverlay.ZIndex = 1

    -- Click logic

    Button.MouseButton1Click:Connect(function()

        if isOnCooldown then return end

        local char = LocalPlayer.Character

        if not char then return end

        local hum = char:FindFirstChild("Humanoid")

        if not hum then return end

        -- Play client-only activation sound

        local activationSound = Instance.new("Sound")

        activationSound.Name = "RushHourActivation"

        activationSound.SoundId = "rbxassetid://84766394210518"

        activationSound.Volume = 0.7

        activationSound.Parent = SoundService

        activationSound:Play()

        activationSound.Ended:Connect(function()

            activationSound:Destroy()

        end)

        isOnCooldown = true

        local startTime = tick()

        NoChargeOverlay.Visible = true

        CoolLabel.Text = tostring(cooldownTime)

        Button.ImageTransparency = 0.5

        -- Apply boosts

        sprintModule.SprintSpeed = 33.4

        pcall(function()

            Workspace.Players.Survivors.Elliot.FOVMultipliers.Sprinting.Value = 1.35

        end)

        -- Countdown

        local conn

        conn = RunService.RenderStepped:Connect(function()

            local elapsed = tick() - startTime

            local remaining = cooldownTime - elapsed

            if elapsed >= cooldownTime then

                sprintModule.SprintSpeed = defaultSprintSpeed

                pcall(function()

                    Workspace.Players.Survivors.Elliot.FOVMultipliers.Sprinting.Value = 1

                end)

                CoolLabel.Text = ""

                NoChargeOverlay.Visible = false

                Button.ImageTransparency = 0

                -- Force sprint reset

                task.spawn(function()

                    if hum then

                        hum:ChangeState(Enum.HumanoidStateType.RunningNoPhysics)

                        task.wait()

                        hum:ChangeState(Enum.HumanoidStateType.Running)

                    end

                end)

                conn:Disconnect()

                isOnCooldown = false

            else

                CoolLabel.Text = tostring(math.ceil(remaining))

            end

        end)

    end)

end

--// UI Controls (place in your desired tab - here using MainTab2)

MainTab2:CreateSlider({

    Name = "Rush Hour Cooldown",

    Range = {1, 30},

    Increment = 1,

    Suffix = "s",

    CurrentValue = cooldownTime,

    Flag = "RushHourCooldown",

    Callback = function(value)

        cooldownTime = value

    end

})

MainTab2:CreateToggle({

    Name = "Enable Infinite Rush Hour",

    CurrentValue = false,

    Flag = "EnableRushButton",

    Callback = function(value)

        rushEnabled = value

        if value then

            createRushUI()

            if rushFrame then rushFrame.Visible = true end

        else

            if rushFrame then rushFrame.Visible = false end

        end

    end

})

-- ========================

-- Elliot Aimbot

-- ========================

local trackedAnimationId = "114155003741146"

local DetectionEnabled = false

local Connection, CurrentTarget, originalAutoRotate

local predictionStuds = 5

local frontOffset = 2

local movementThreshold = 16

local aimType = "HRP Aimbot"

local Humanoid, HRP

local function setupCharacter(char)

    Humanoid = char:WaitForChild("Humanoid")

    HRP = char:WaitForChild("HumanoidRootPart")

end

if LocalPlayer.Character then setupCharacter(LocalPlayer.Character) end

LocalPlayer.CharacterAdded:Connect(setupCharacter)

local function getPlayingAnimationIds()

    local ids = {}

    if Humanoid then

        for _, track in ipairs(Humanoid:GetPlayingAnimationTracks()) do

            if track.Animation and track.Animation.AnimationId then

                local id = track.Animation.AnimationId:match("%d+")

                if id then ids[id] = true end

            end

        end

    end

    return ids

end

local function getValidTarget()

    local survivorsFolder = Workspace:FindFirstChild("Players") and Workspace.Players:FindFirstChild("Survivors")

    if not survivorsFolder or not HRP then return nil end

    local bestTarget, bestValue = nil, math.huge

    for _, target in ipairs(survivorsFolder:GetChildren()) do

        if target ~= LocalPlayer.Character then

            local hum = target:FindFirstChildOfClass("Humanoid")

            local hrp = target:FindFirstChild("HumanoidRootPart")

            if hum and hrp and hum.Health > 0 and hum.Health < hum.MaxHealth then

                if hum.Health < bestValue then

                    bestTarget, bestValue = hrp, hum.Health

                end

            end

        end

    end

    return bestTarget

end

local function AimAt(targetHRP)

    if not targetHRP or not targetHRP.Parent then return end

    local targetVel = targetHRP.AssemblyLinearVelocity

    local targetPos = targetHRP.Position

    local baseTargetPos = targetPos + targetHRP.CFrame.LookVector * frontOffset

    local predictedPos = baseTargetPos

    if targetVel.Magnitude > movementThreshold then

        predictedPos = baseTargetPos + targetVel.Unit * predictionStuds

    end

    if HRP then

        if not originalAutoRotate then originalAutoRotate = Humanoid.AutoRotate end

        Humanoid.AutoRotate = false

        HRP.AssemblyAngularVelocity = Vector3.new(0,0,0)

        local direction = (predictedPos - HRP.Position).Unit

        local yRot = math.atan2(-direction.X, -direction.Z)

        local currentCFrame = HRP.CFrame

        local currentYRot = select(2, currentCFrame:ToEulerAnglesYXZ())

        local lerpedYRot = currentYRot + (yRot - currentYRot) * 0.3

        HRP.CFrame = CFrame.new(currentCFrame.Position) * CFrame.Angles(0, lerpedYRot, 0)

    end

    if aimType == "Camera Aimbot" then

        Camera.CFrame = CFrame.lookAt(Camera.CFrame.Position, predictedPos)

    end

end

MainTab2:CreateSection("Elliot Aimbot") 

MainTab2:CreateInput({Name="Prediction Studs",PlaceholderText="e.g. 5",RemoveTextAfterFocusLost=false,Callback=function(t) local n=tonumber(t); if n and n>=0 then predictionStuds=n end end})

MainTab2:CreateDropdown({Name="Aimbot Type",Options={"HRP Aimbot","Camera Aimbot"},CurrentOption="HRP Aimbot",Callback=function(o) aimType=o end})

MainTab2:CreateToggle({Name="Elliot Aimbot V1.1",CurrentValue=false,Callback=function(v)

    DetectionEnabled = v

    if v then

        Connection = RunService.RenderStepped:Connect(function()

            if not DetectionEnabled or not Humanoid or not HRP then return end

            if not getPlayingAnimationIds()[trackedAnimationId] then

                if originalAutoRotate ~= nil then Humanoid.AutoRotate = originalAutoRotate; originalAutoRotate = nil end

                return

            end

            local target = getValidTarget()

            if target then AimAt(target) end

        end)

    else

        if Connection then Connection:Disconnect() end

        if originalAutoRotate ~= nil then Humanoid.AutoRotate = originalAutoRotate; originalAutoRotate = nil end

    end

end})

-- ========================

-- Chance Stare Aimbot

-- ========================

local Targets = {"Noli","JohnDoe","1x1x1x1","Sixer","Slasher","c00lkidd", "Nosferatu"}

local TriggerAnim = 133491532453922

local Enabled = false

local PredictionStrength = 0.14

MainTab3:CreateToggle({Name="HRP Prediction Stare Aimbot",Info="Locks rotation + predicts killer movement",CurrentValue=false,Callback=function(v)

    Enabled = v

    Rayfield:Notify({Title="Prediction Aimbot",Content=v and "ON – Play animation!" or "OFF",Duration=4})

end})

MainTab3:CreateSlider({Name="Prediction Strength",Range={0,0.4},Increment=0.01,CurrentValue=0.14,Callback=function(v) PredictionStrength=v end})

local function IsTriggerAnimPlaying()

    local char = LocalPlayer.Character

    if not char or not char:FindFirstChild("Humanoid") then return false end

    for _, track in pairs(char.Humanoid:GetPlayingAnimationTracks()) do

        if track.Animation.AnimationId == "rbxassetid://"..TriggerAnim then return true end

    end

    return false

end

local function GetPredictedTarget()

    local Closest, BestDist = nil, math.huge

    local MyHRP = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

    if not MyHRP then return nil end

    for _, name in Targets do

        local Killer = Workspace.Players.Killers:FindFirstChild(name)

        if Killer and Killer:FindFirstChild("HumanoidRootPart") and Killer.Humanoid.Health > 0 then

            local HRP = Killer.HumanoidRootPart

            local Predicted = HRP.Position + (HRP.Velocity * PredictionStrength)

            local Dist = (MyHRP.Position - Predicted).Magnitude

            if Dist < BestDist then BestDist = Dist; Closest = {HRP=HRP, PredictedPosition=Predicted} end

        end

    end

    return Closest

end

RunService.RenderStepped:Connect(function()

    if not Enabled or not IsTriggerAnimPlaying() then return end

    local MyHRP = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

    if not MyHRP then return end

    local Target = GetPredictedTarget()

    if Target then MyHRP.CFrame = CFrame.new(MyHRP.Position, Target.PredictedPosition) end

end)

-- ========================

-- Two Time Stab Extender

-- ========================

local boostEnabled = false

local hitboxPower = 0.2

local reverseDirection = false

local characterAimbotEnabled = false

local cameraAimbotEnabled = false

local aimbotOnlyOnAnim = false

getgenv().emergency_stop = getgenv().emergency_stop or false

MainTab4:CreateSection("Two Time Modifications")

MainTab4:CreateToggle({

    Name = "Enable Stab Extender",

    CurrentValue = false,

    Flag = "EnableBoost",

    Callback = function(v)

        boostEnabled = v

        if not v then

            getgenv().emergency_stop = true

        end

    end

})

MainTab4:CreateToggle({

    Name = "Reverse Stab Direction",

    CurrentValue = false,

    Flag = "ReverseDirection",

    Callback = function(v)

        reverseDirection = v

    end

})

MainTab4:CreateInput({

    Name = "Studs Extender",

    PlaceholderText = "0.2",

    RemoveTextAfterFocusLost = false,

    CurrentValue = "0.2",

    Flag = "HitboxPower",

    Callback = function(txt)

        hitboxPower = tonumber(txt) or 0.2

    end

})

MainTab4:CreateSection("Two Time Aimbots both can be turned on, USE SHIFTLOCK")

MainTab4:CreateToggle({

    Name = "Aimbot Only During Stab",

    CurrentValue = false,

    Flag = "AimbotOnlyOnAnim",

    Callback = function(v)

        aimbotOnlyOnAnim = v

    end

})

MainTab4:CreateToggle({

    Name = "Character Aimbot",

    CurrentValue = false,

    Flag = "CharacterAimbot",

    Callback = function(v)

        characterAimbotEnabled = v

    end

})

MainTab4:CreateToggle({

    Name = "Camera Aimbot",

    CurrentValue = false,

    Flag = "CameraAimbot",

    Callback = function(v)

        cameraAimbotEnabled = v

    end

})

local killers_folder = workspace:FindFirstChild("Players") and workspace.Players:FindFirstChild("Killers")

local survivors_folder = workspace:FindFirstChild("Players") and workspace.Players:FindFirstChild("Survivors")

local killer_names_priority = {"Sixer", "Slasher", "Noli", "JohnDoe", "c00lkidd", "1x1x1x1"}

local TARGET_ANIM_IDS = {

    "rbxassetid://106086955212611",

    "rbxassetid://86545133269813"

}

local function getKillerHRP()

    if not killers_folder then return nil end

    for _, name in ipairs(killer_names_priority) do

        local killer = killers_folder:FindFirstChild(name)

        if killer and killer:FindFirstChild("HumanoidRootPart") then

            return killer.HumanoidRootPart

        end

    end

    return nil

end

local function isLocalPlayerTwoTime()

    if not survivors_folder then return false end

    local twoTimeModel = survivors_folder:FindFirstChild("TwoTime")

    if not twoTimeModel then return false end

    local twoTimeHRP = twoTimeModel:FindFirstChild("HumanoidRootPart")

    if not twoTimeHRP then return false end

    local localHRP = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")

    if not localHRP then return false end

    return twoTimeHRP == localHRP

end

local function StudsIntoPower(studs)

    return studs * 6

end

local function ExtendHitbox(studs, duration)

    local power = StudsIntoPower(studs)

    local start = tick()

    getgenv().emergency_stop = false

    

    repeat

        RunService.Heartbeat:Wait()

        

        local char = LocalPlayer.Character

        local hrp = char and char:FindFirstChild("HumanoidRootPart")

        if not hrp then continue end

        

        local originalVelocity = hrp.Velocity

        local look = hrp.CFrame.LookVector

        local forward = Vector3.new(look.X, 0, look.Z)

        if forward.Magnitude > 0 then forward = forward.Unit end

        

        local direction = reverseDirection and -forward or forward

        

        hrp.Velocity = originalVelocity + (direction * power * 50)

        

        RunService.RenderStepped:Wait()

        hrp.Velocity = originalVelocity

        

    until tick() - start > duration or getgenv().emergency_stop

    

    getgenv().emergency_stop = false

end

local targetAnimPlaying = false

RunService.RenderStepped:Connect(function()

    local char = LocalPlayer.Character

    if not char or not isLocalPlayerTwoTime() then

        targetAnimPlaying = false

        return

    end

    local humanoid = char:FindFirstChildOfClass("Humanoid")

    if not humanoid then

        targetAnimPlaying = false

        return

    end

    local found = false

    for _, track in pairs(humanoid:GetPlayingAnimationTracks()) do

        for _, animId in ipairs(TARGET_ANIM_IDS) do

            if track.Animation.AnimationId == animId and track.IsPlaying then

                found = true

                break

            end

        end

        if found then break end

    end

    targetAnimPlaying = found

end)

RunService.RenderStepped:Connect(function()

    if not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then 

        return 

    end

    if not isLocalPlayerTwoTime() then

        return

    end

    if aimbotOnlyOnAnim and not targetAnimPlaying then

        return

    end

    if not (characterAimbotEnabled or cameraAimbotEnabled) then

        return

    end

    local killerHRP = getKillerHRP()

    if not killerHRP then return end

    local targetPos = killerHRP.Position

    if cameraAimbotEnabled then

        Camera.CFrame = CFrame.new(Camera.CFrame.Position, targetPos)

    end

    if characterAimbotEnabled then

        local hrp = LocalPlayer.Character.HumanoidRootPart

        hrp.CFrame = CFrame.new(hrp.Position, targetPos)

    end

end)

local boosting = false

RunService.RenderStepped:Connect(function()

    if not boostEnabled then

        if boosting then

            getgenv().emergency_stop = true

            boosting = false

        end

        return

    end

    if targetAnimPlaying and not boosting then

        boosting = true

        task.spawn(function()

            ExtendHitbox(hitboxPower, 9e9)

        end)

    elseif not targetAnimPlaying and boosting then

        getgenv().emergency_stop = true

        boosting = false

    end

end)

-- ========================

-- Stamina Features

-- ========================

local sprintModule = require(ReplicatedStorage.Systems.Character.Game.Sprinting)

local defaultSprintSpeed = sprintModule.SprintSpeed

local unlimitedEnabled = false

local function applyStaminaSettings()

    if unlimitedEnabled then

        sprintModule.StaminaLoss = 0

        sprintModule.StaminaGain = 9999

    else

        sprintModule.StaminaLoss = 10

        sprintModule.StaminaGain = 20

        sprintModule.SprintSpeed = defaultSprintSpeed

    end

end

LocalPlayer.CharacterAdded:Connect(function() task.wait(1); applyStaminaSettings() end)

if LocalPlayer.Character then task.spawn(function() task.wait(1); applyStaminaSettings() end) end

MainTab9:CreateSection("Sprint Speed")

MainTab9:CreateSlider({

    Name = "Sprint Speed",

    Range = {1, 1000},

    Increment = 1,

    Suffix = " studs/s",

    CurrentValue = defaultSprintSpeed,

    Callback = function(val)

        sprintModule.SprintSpeed = val

    end

})

MainTab9:CreateSection("Infinite Stamina")

MainTab9:CreateToggle({Name="Infinite Stamina",CurrentValue=false,Callback=function(v) unlimitedEnabled=v; applyStaminaSettings() end})

-- ========================

-- Auto Gen Settings

-- ========================

MainTab10:CreateSection("Auto Gen")

local autoGenEnabled = false

local autoGenInterval = 4

MainTab10:CreateToggle({

    Name = "Auto Gen",

    CurrentValue = false,

    Callback = function(v)

        autoGenEnabled = v

    end

})

MainTab10:CreateSlider({

    Name = "Fire Interval",

    Range = {1, 50},

    Increment = 1,

    Suffix = " sec",

    CurrentValue = 4,

    Callback = function(v)

        autoGenInterval = v

    end

})

task.spawn(function()

    local lastFire = 0

    while task.wait(0.1) do

        if autoGenEnabled and tick() - lastFire >= autoGenInterval then

            pcall(function()

                for _, v in pairs(Workspace.Map.Ingame.Map:GetChildren()) do

                    if v.Name == "Generator" and v:FindFirstChild("Remotes") and v.Remotes:FindFirstChild("RE") then

                        v.Remotes.RE:FireServer()

                    end

                end

            end)

            lastFire = tick()

        end

    end

end)

MainTab10:CreateSection("Auto Gen Legit")

local legitEnabled = true

local legitSpeedMultiplier = 10

MainTab10:CreateToggle({

    Name = "Auto Gen Legit",

    CurrentValue = true,

    Callback = function(v)

        legitEnabled = v

    end

})

MainTab10:CreateSlider({

    Name = "Solve Speed",

    Range = {1, 50},

    Increment = 1,

    Suffix = "x fast",

    CurrentValue = 10,

    Callback = function(v)

        legitSpeedMultiplier = v

    end

})

local function getDirection(currentRow, currentCol, otherRow, otherCol)

    if otherRow < currentRow then return "up" end

    if otherRow > currentRow then return "down" end

    if otherCol < currentCol then return "left" end

    if otherCol > currentCol then return "right" end

end

local function getConnections(prev, curr, nextnode)

    local connections = {}

    if prev and curr then

        local dir = getDirection(curr.row, curr.col, prev.row, prev.col)

        if dir == "up" then dir = "down"

        elseif dir == "down" then dir = "up"

        elseif dir == "left" then dir = "right"

        elseif dir == "right" then dir = "left" end

        if dir then connections[dir] = true end

    end

    if nextnode and curr then

        local dir = getDirection(curr.row, curr.col, nextnode.row, nextnode.col)

        if dir then connections[dir] = true end

    end

    return connections

end

local function isNeighbourLocal(r1, c1, r2, c2)

    if r2 == r1 - 1 and c2 == c1 then return "up" end

    if r2 == r1 + 1 and c2 == c1 then return "down" end

    if r2 == r1 and c2 == c1 - 1 then return "left" end

    if r2 == r1 and c2 == c1 + 1 then return "right" end

    return false

end

local function coordKey(node)

    return node.row .. "-" .. node.col

end

local function orderPathFromEndpoints(path, endpoints)

    if not path or #path == 0 then return path end

    local startEndpoint

    for _, ep in endpoints or {} do

        for _, n in path do

            if n.row == ep.row and n.col == ep.col then

                startEndpoint = { row = ep.row, col = ep.col }

                break

            end

        end

        if startEndpoint then break end

    end

    if not startEndpoint then

        local inPath = {}

        for _, n in path do inPath[coordKey(n)] = n end

        for _, n in path do

            local neighbours = 0

            local dirs = { { n.row - 1, n.col }, { n.row + 1, n.col }, { n.row, n.col - 1 }, { n.row, n.col + 1 } }

            for _, dir in dirs do

                local r, c = dir[1], dir[2]

                if inPath[r .. "-" .. c] ~= nil then neighbours += 1 end

            end

            if neighbours == 1 then

                startEndpoint = { row = n.row, col = n.col }

                break

            end

        end

    end

    if not startEndpoint then

        startEndpoint = { row = path[1].row, col = path[1].col }

    end

    local remaining = {}

    for _, n in path do remaining[coordKey(n)] = { row = n.row, col = n.col } end

    local ordered = {}

    local current = { row = startEndpoint.row, col = startEndpoint.col }

    table.insert(ordered, { row = current.row, col = current.col })

    remaining[coordKey(current)] = nil

    while next(remaining) do

        local foundNext = false

        for key, node in pairs(remaining) do

            if isNeighbourLocal(current.row, current.col, node.row, node.col) then

                table.insert(ordered, { row = node.row, col = node.col })

                remaining[key] = nil

                current = node

                foundNext = true

                break

            end

        end

        if not foundNext then return path end

    end

    return ordered

end

local HintSystem = {}

function HintSystem:DrawSolutionOneByOne(puzzle)

    if not puzzle or not puzzle.Solution then return end

    local totalPaths = #puzzle.Solution

    local indices = {}

    for i = 1, totalPaths do table.insert(indices, i) end

    for i = #indices - 1, 2, -1 do

        local j = math.random(1, i)

        indices[i], indices[j] = indices[j], indices[i]

    end

    for _, colorIndex in indices do

        local path = puzzle.Solution[colorIndex]

        local endpoints = puzzle.targetPairs[colorIndex]

        local orderedPath = orderPathFromEndpoints(path, endpoints)

        puzzle.paths[colorIndex] = {}

        for i = 1, #orderedPath do

            local node = orderedPath[i]

            table.insert(puzzle.paths[colorIndex], { row = node.row, col = node.col })

            local prev = orderedPath[i - 1]

            local nextNode = orderedPath[i + 1]

            local conn = getConnections(prev, node, nextNode)

            puzzle.gridConnections = puzzle.gridConnections or {}

            puzzle.gridConnections[coordKey(node)] = conn

            puzzle:updateGui()

            task.wait(2.6 / (#orderedPath * legitSpeedMultiplier))

        end

        puzzle:checkForWin()

    end

    puzzle:checkForWin()

end

local result = ReplicatedStorage:WaitForChild("Modules"):FindFirstChild("Misc")

if result then

    result = result:FindFirstChild("FlowGameManager")

    if result then

        result = result:FindFirstChild("FlowGame")

    end

end

if result then

    local FlowGameModule = require(result)

    local old = FlowGameModule.new

    FlowGameModule.new = function(...)

        local puzzle = old(...)

        task.spawn(function()

            if legitEnabled and puzzle and puzzle.Solution then

                HintSystem:DrawSolutionOneByOne(puzzle)

            end

        end)

        return puzzle

    end

end

MainTab10:CreateSection("Auto Gen Button") 

MainTab10:CreateToggle({

    Name = "Enable Gen Button",

    CurrentValue = false,

    Flag = "GenFixToggle",

    Callback = function(state)

        if state then

            if not LocalPlayer.PlayerGui:FindFirstChild("GenFixUI") then

                local screenGui = Instance.new("ScreenGui")

                screenGui.Name = "GenFixUI"

                screenGui.ResetOnSpawn = false

                screenGui.DisplayOrder = 999999

                screenGui.Parent = LocalPlayer.PlayerGui

                local frame = Instance.new("Frame")

                frame.Name = "MainFrame"

                frame.Size = UDim2.new(0, 140, 0, 70)

                frame.Position = UDim2.new(0.5, -70, 0.5, -35)

                frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)

                frame.BorderSizePixel = 0

                frame.Active = true

                frame.Draggable = true

                frame.Parent = screenGui

                local frameCorner = Instance.new("UICorner")

                frameCorner.CornerRadius = UDim.new(0, 12)

                frameCorner.Parent = frame

                local frameStroke = Instance.new("UIStroke")

                frameStroke.Thickness = 1.5

                frameStroke.Color = Color3.fromRGB(70, 70, 70)

                frameStroke.Transparency = 0.1

                frameStroke.Parent = frame

                local titleLabel = Instance.new("TextLabel")

                titleLabel.Name = "TitleLabel"

                titleLabel.Size = UDim2.new(1, 0, 0.3, 0)

                titleLabel.Position = UDim2.new(0, 0, 0, 0)

                titleLabel.BackgroundTransparency = 1

                titleLabel.Text = "Gen Fix"

                titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)

                titleLabel.TextSize = 16

                titleLabel.Font = Enum.Font.GothamBold

                titleLabel.TextXAlignment = Enum.TextXAlignment.Center

                titleLabel.Parent = frame

                local textBox = Instance.new("TextBox")

                textBox.Name = "CDTextBox"

                textBox.Size = UDim2.new(0.7, 0, 0.25, 0)

                textBox.Position = UDim2.new(0, 7, 0.3, 4)

                textBox.BackgroundColor3 = Color3.fromRGB(50, 50, 50)

                textBox.BorderSizePixel = 0

                textBox.Text = "2.5s"

                textBox.TextColor3 = Color3.fromRGB(255, 255, 255)

                textBox.TextSize = 12

                textBox.Font = Enum.Font.Gotham

                textBox.TextXAlignment = Enum.TextXAlignment.Center

                textBox.ClearTextOnFocus = false

                textBox.Parent = frame

                local tbCorner = Instance.new("UICorner")

                tbCorner.CornerRadius = UDim.new(0, 6)

                tbCorner.Parent = textBox

                local tbStroke = Instance.new("UIStroke")

                tbStroke.Thickness = 1

                tbStroke.Color = Color3.fromRGB(80, 80, 80)

                tbStroke.Parent = textBox

                local minimizeBtn = Instance.new("TextButton")

                minimizeBtn.Name = "MinimizeBtn"

                minimizeBtn.Size = UDim2.new(0.15, 0, 0.3, 0)

                minimizeBtn.Position = UDim2.new(0.85, 0, 0, 0)

                minimizeBtn.BackgroundColor3 = Color3.fromRGB(220, 50, 50)

                minimizeBtn.Text = "в€’"

                minimizeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)

                minimizeBtn.TextSize = 14

                minimizeBtn.Font = Enum.Font.GothamBold

                minimizeBtn.Parent = frame

                local minCorner = Instance.new("UICorner")

                minCorner.CornerRadius = UDim.new(0, 6)

                minCorner.Parent = minimizeBtn

                local button = Instance.new("TextButton")

                button.Name = "ClickButton"

                button.Size = UDim2.new(1, -14, 0.35, 0)

                button.Position = UDim2.new(0, 7, 0.6, 4)

                button.BackgroundColor3 = Color3.fromRGB(255, 149, 6)

                button.BorderSizePixel = 0

                button.Text = "Fix Gen"

                button.TextColor3 = Color3.fromRGB(255, 255, 255)

                button.TextSize = 14

                button.Font = Enum.Font.GothamSemibold

                button.TextXAlignment = Enum.TextXAlignment.Center

                button.Parent = frame

                local btnCorner = Instance.new("UICorner")

                btnCorner.CornerRadius = UDim.new(0, 8)

                btnCorner.Parent = button

                local btnStroke = Instance.new("UIStroke")

                btnStroke.Thickness = 1.5

                btnStroke.Color = Color3.fromRGB(60, 60, 60)

                btnStroke.Transparency = 0.2

                btnStroke.Parent = button

                local isCooldown = false

                local currentCD = 2.5

                local isMinimized = false

                minimizeBtn.MouseButton1Click:Connect(function()

                    isMinimized = not isMinimized

                    textBox.Visible = not isMinimized

                    frame.Size = isMinimized and UDim2.new(0, 140, 0, 45) or UDim2.new(0, 140, 0, 70)

                    button.Position = UDim2.new(0, 7, 0.6, isMinimized and 2 or 4)

                    minimizeBtn.Text = isMinimized and "+" or "в€’"

                end)

                local function hasAnimation(animationId)

                    local character = LocalPlayer.Character

                    if not character then return false end

                    local humanoid = character:FindFirstChildOfClass("Humanoid")

                    if not humanoid then return false end

                    local animator = humanoid:FindFirstChildWhichIsA("Animator")

                    if not animator then return false end

                    for _, track in ipairs(animator:GetPlayingAnimationTracks()) do

                        if track.Animation.AnimationId:match(animationId) then

                            return true

                        end

                    end

                    return false

                end

                local function fixGens()

                    if isCooldown then return end

                    if not hasAnimation("82691533602949") then return end

                    local success = pcall(function()

                        local m = Workspace:FindFirstChild("Map")

                        if m and m:FindFirstChild("Ingame") and m.Ingame:FindFirstChild("Map") then

                            for _, v in pairs(m.Ingame.Map:GetChildren()) do

                                if v:IsA("Model") and v.Name == "Generator" then

                                    local r = v:FindFirstChild("Remotes") and v.Remotes:FindFirstChild("RE")

                                    if r then r:FireServer() end

                                end

                            end

                        end

                    end)

                    if not success then return end

                    local cdInput = tonumber(textBox.Text:match("%d+%.?%d*")) or 2.5

                    isCooldown = true

                    currentCD = cdInput

                    button.Active = false

                    button.Text = "Fixed! (" .. cdInput .. "s)"

                    task.spawn(function()

                        task.wait(0.5)

                        while currentCD > 0 do

                            currentCD = currentCD - 0.1

                            button.Text = string.format("CD: %.1fs", math.max(0, currentCD))

                            task.wait(0.1)

                        end

                        isCooldown = false

                        button.Text = "Fix Gen"

                        button.Active = true

                    end)

                end

                button.MouseButton1Click:Connect(fixGens)

            end

        else

            local existingGUI = LocalPlayer.PlayerGui:FindFirstChild("GenFixUI")

            if existingGUI then

                existingGUI:Destroy()

            end

        end

    end

})

local buttonLists = {

    "1-1","1-2","1-3","1-4","1-5","1-6",

    "2-1","2-2","2-3","2-4","2-5","2-6",

    "3-1","3-2","3-3","3-4","3-5","3-6",

    "4-1","4-2","4-3","4-4","4-5","4-6",

    "5-1","5-2","5-3","5-4","5-5","5-6",

    "6-1","6-2","6-3","6-4","6-5","6-6"

} 

MainTab10:CreateSection("Custom Gen Background REAL")

local Toggle = MainTab10:CreateToggle({

    Name = "Enable Custom Background",

    CurrentValue = false,

    Flag = "EnableCustomBG",

    Callback = function(Value)

        Rayfield:Notify({

            Title = Value and "Enabled" or "Disabled",

            Content = "Custom puzzle background " .. (Value and "enabled" or "disabled"),

            Duration = 0.5

        })

    end

})

local Input = MainTab10:CreateInput({

    Name = "Texture ID",

    PlaceholderText = "Enter decal/texture ID (numbers only)",

    CurrentValue = "",

    RemoveTextAfterFocusLost = false,

    Flag = "PuzzleTextureID",

    Callback = function(Text)

        local num = Text:match("^(%d+)$")

        if num then

            Rayfield.Flags["PuzzleTextureFull"].CurrentValue = "rbxassetid://" .. num

            Rayfield:Notify({

                Title = "ID Updated",

                Content = "Texture ID set to: " .. num,

                Duration = 1

            })

        else

            Rayfield:Notify({

                Title = "Invalid ID",

                Content = "Please enter numbers only!",

                Duration = 1

            })

        end

    end

})

local TutorialSection = MainTab10:CreateSection("how to get decal ids bro")

local TutorialParagraph = MainTab10:CreateParagraph({

    Title = "yo listen up Closely Ofc",

    Content = "wanna know how to get those decal texture ids? super easy fr\n\ngo google and search \"roblox marketplace decals\" or just hit up create.roblox.com/marketplace/decals\nscroll around and find a fire decal u wanna use for ur background\nclick on it\nnow heres the trick: hold down on the big image for like 2-3 seconds\npopup shows up, look for \"copy texture id\" (NOT the asset id!!)\ntap that and boom u got the numbers\ncome back here, paste just the numbers in the box, turn the toggle on and watch ur puzzle go crazy clean \n\nif it dont work make sure its texture id not asset id, ppl mess that up all the time"

})

Rayfield.Flags["PuzzleTextureFull"] = { CurrentValue = "rbxassetid://0" }

spawn(function()

    local playerGui = LocalPlayer:WaitForChild("PlayerGui")

    while true do

        local puzzleUI = playerGui:FindFirstChild("PuzzleUI")

        if puzzleUI then

            local container = puzzleUI:FindFirstChild("Container")

            if container then

                local gridHolder = container:FindFirstChild("GridHolder")

                if gridHolder then

                    local background = gridHolder:FindFirstChild("Background")

                    local grid = gridHolder:FindFirstChild("Grid")

                    if background and grid then

                        local enabled = Rayfield.Flags["EnableCustomBG"].CurrentValue

                        local textureID = Rayfield.Flags["PuzzleTextureFull"].CurrentValue

                        if enabled and textureID and textureID ~= "rbxassetid://0" and textureID ~= "" then

                            background.Image = textureID

                            background.BackgroundTransparency = 1

                            for _, buttonName in ipairs(buttonLists) do

                                local tile = grid:FindFirstChild(buttonName)

                                if tile then

                                    local effects = tile:FindFirstChild("Effects")

                                    if effects then

                                        effects:Destroy()

                                    end

                                    local button = tile:FindFirstChild("Button")

                                    if button and button:IsA("GuiObject") then

                                        button.BackgroundTransparency = 1

                                        if button:IsA("ImageLabel") or button:IsA("ImageButton") then

                                            button.ImageTransparency = 1

                                        end

                                        if button:IsA("TextLabel") or button:IsA("TextButton") then

                                            button.TextTransparency = 1

                                        end

                                    end

                                    local stroke = tile:FindFirstChild("CustomStroke")

                                    if not stroke then

                                        stroke = Instance.new("UIStroke")

                                        stroke.Name = "CustomStroke"

                                        stroke.Color = Color3.fromRGB(255, 255, 255)

                                        stroke.Thickness = 3

                                        stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border

                                        stroke.Parent = button or tile

                                    end

                                    stroke.Transparency = 1

                                    stroke.Enabled = true

                                end

                            end

                        else

                            background.Image = ""

                            background.BackgroundTransparency = 0

                            for _, buttonName in ipairs(buttonLists) do

                                local tile = grid:FindFirstChild(buttonName)

                                if tile then

                                    local button = tile:FindFirstChild("Button")

                                    if button and button:IsA("GuiObject") then

                                        button.BackgroundTransparency = 0

                                        if button:IsA("ImageLabel") or button:IsA("ImageButton") then

                                            button.ImageTransparency = 0

                                        end

                                        if button:IsA("TextLabel") or button:IsA("TextButton") then

                                            button.TextTransparency = 0

                                        end

                                    end

                                    local stroke = tile:FindFirstChild("CustomStroke")

                                    if stroke then

                                        stroke.Transparency = 1

                                        stroke.Enabled = false

                                    end

                                end

                            end

                        end

                    end

                end

            end

        end

        task.wait(0.01)

    end

end)

-- ========================

-- Misc Features

-- ========================

MainTab11:CreateSection("Font Changer")

local fonts = {"Legacy","Arial","ArialBold","SourceSans","SourceSansBold","Gotham","GothamBold","AmaticSC","Bangers","Creepster","FredokaOne","LuckiestGuy","Oswald","Roboto","Ubuntu"}

local selectedFont = Enum.Font.SourceSans

local originals = {}

local fontEnabled = false

local function applyFonts(font)

    originals = {}

    for _, obj in ipairs(game:GetDescendants()) do

        if not obj:IsDescendantOf(game:GetService("CoreGui")) and (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox")) then

            originals[obj] = obj.Font

            obj.Font = font

        end

    end

end

MainTab11:CreateToggle({Name="Enable Font Changer",CurrentValue=false,Callback=function(v)

    fontEnabled = v

    if v then applyFonts(selectedFont) else

        for obj,f in pairs(originals) do if obj and obj.Parent then obj.Font = f end end

        originals = {}

    end

end})

MainTab11:CreateDropdown({Name="Select Font",Options=fonts,CurrentOption="SourceSans",Callback=function(o) selectedFont=Enum.Font[o] if fontEnabled then applyFonts(selectedFont) end end})

MainTab11:CreateSection("Remove Debuffs")

local ActiveRemoveEffects = false

local function removeEffects()

    for _, obj in pairs(Lighting:GetDescendants()) do if obj:IsA("PostEffect") then obj:Destroy() end end

    for _, gui in pairs(LocalPlayer.PlayerGui:GetDescendants()) do

        if string.find(gui.Name:lower(), "overlay") or string.find(gui.Name:lower(), "effect") then gui:Destroy() end

    end

end

MainTab11:CreateToggle({Name="Remove Effects",CurrentValue=false,Callback=function(v)

    ActiveRemoveEffects = v

    if v then task.spawn(function() while ActiveRemoveEffects do removeEffects() task.wait(0.5) end end) end

end})

MainTab11:CreateSection("Chat Window")

MainTab11:CreateToggle({Name="Enable Chat",CurrentValue=false,Callback=function(v) game:GetService("TextChatService").ChatWindowConfiguration.Enabled = v end})

MainTab11:CreateSection("Anti 1x1x1x1")

MainTab11:CreateToggle({Name="Anti 1x1x1x1 Popup",CurrentValue=false,Callback=function(v)

    if _G.Anti1x1Loop then task.cancel(_G.Anti1x1Loop); _G.Anti1x1Loop = nil end

    if v then

        _G.Anti1x1Loop = task.spawn(function()

            while task.wait(0.1) do

                local tempUI = LocalPlayer.PlayerGui:FindFirstChild("TemporaryUI")

                if tempUI and tempUI:FindFirstChild("1x1x1x1Popup") then

                    tempUI["1x1x1x1Popup"]:Destroy()

                end

            end

        end)

    end

end})

MainTab11:CreateSection("Invisibility Enhancements")

getgenv().invis = getgenv().invis or {}

local genv = getgenv().invis

genv.running = false

genv.animTrack = nil

genv.toggleValue = false

genv.safeToggleValue = false

genv.originalRootSize = nil

genv.originalHipHeight = nil

genv.safeDetected = false

function genv.getCharacterHumanoid()

    local character = LocalPlayer.Character

    local humanoid = character and character:FindFirstChildOfClass("Humanoid")

    return character, humanoid

end

function genv.getAnimator(humanoid)

    if not humanoid then return nil end

    local animator = humanoid:FindFirstChildOfClass("Animator")

    if not animator then

        animator = Instance.new("Animator")

        animator.Parent = humanoid

    end

    return animator

end

local survivorValue

task.spawn(function()

    local playerData = LocalPlayer:WaitForChild("PlayerData", 10)

    if not playerData then return end

    local equipped = playerData:WaitForChild("Equipped", 10)

    if not equipped then return end

    survivorValue = equipped:WaitForChild("Survivor", 10)

end)

function genv.updateToggle()

    if not survivorValue then return end

    local _, humanoid = genv.getCharacterHumanoid()

    if not humanoid then return end

    local isEligible = (survivorValue.Value == "007n7" or survivorValue.Value == "TwoTime" or survivorValue.Value == "Noob") and humanoid.MaxHealth < 300

    genv.running = isEligible and genv.toggleValue

end

local safeHighlights = {

    sounds = {

        Sixer = "rbxassetid://118238967628320",

        JohnDoe = "rbxassetid://125897321587591",

        ["1x1x1x1"] = "rbxassetid://91495033241141",

        Nosferatu = "rbxassetid://88000454882343",

        Slasher = "rbxassetid://112390922764994"

    },

    animation = {

        Noli = "rbxassetid://140042539182927"

    }

}

local killersFolder = Workspace:FindFirstChild("Players") and Workspace.Players:FindFirstChild("Killers")

MainTab11:CreateToggle({

    Name = "Fully Invisible",

    CurrentValue = false,

    Callback = function(Value)

        genv.toggleValue = Value

        genv.safeDetected = false

        genv.updateToggle()

    end

})

MainTab11:CreateToggle({

    Name = "Safe Invisible",

    CurrentValue = false,

    Callback = function(enabled)

        genv.safeToggleValue = enabled

        genv.safeDetected = false

    end

})

task.spawn(function()

    repeat task.wait() until survivorValue

    survivorValue:GetPropertyChangedSignal("Value"):Connect(genv.updateToggle)

end)

LocalPlayer.CharacterAdded:Connect(function()

    task.wait(0.5)

    genv.originalRootSize = nil

    genv.originalHipHeight = nil

    genv.safeDetected = false

    genv.updateToggle()

end)

RunService.Heartbeat:Connect(function()

    local character, humanoid = genv.getCharacterHumanoid()

    if not character or not humanoid then return end

    local animator = genv.getAnimator(humanoid)

    if not animator then return end

    local torso = character:FindFirstChild("Torso") or character:FindFirstChild("UpperTorso")

    local rootPart = character:FindFirstChild("HumanoidRootPart")

    local gui = LocalPlayer:FindFirstChild("PlayerGui")

    local status = gui and gui:FindFirstChild("MainUI") and gui.MainUI:FindFirstChild("StatusContainer") and gui.MainUI.StatusContainer:FindFirstChild("Invisibility")

    local invisActive = humanoid.MaxHealth < 300 and torso and torso.Transparency ~= 0 and status

    if genv.running and not genv.safeDetected then

        if invisActive then

            if not genv.animTrack or not genv.animTrack.IsPlaying then

                local animation = Instance.new("Animation")

                animation.AnimationId = "rbxassetid://75804462760596"

                genv.animTrack = animator:LoadAnimation(animation)

                genv.animTrack.Looped = true

                genv.animTrack:Play(0)

                genv.animTrack:AdjustSpeed(0)

                genv.animTrack.TimePosition = 0

                if rootPart then rootPart.Transparency = 0.4 end

            end

            if rootPart then

                if not genv.originalRootSize then genv.originalRootSize = rootPart.Size end

                rootPart.Size = genv.originalRootSize * 1.6

                if not genv.originalHipHeight then genv.originalHipHeight = humanoid.HipHeight end

                humanoid.HipHeight = genv.originalHipHeight - 1.7

                local currentSurvivor = survivorValue and survivorValue.Value or ""

                local decalId = "rbxassetid://76446552915008"

                if currentSurvivor == "TwoTime" then decalId = "rbxassetid://114795057624512"

                elseif currentSurvivor == "Noob" then decalId = "rbxassetid://122213036434095" end

                local faces = {Enum.NormalId.Front, Enum.NormalId.Back, Enum.NormalId.Top, Enum.NormalId.Bottom, Enum.NormalId.Left, Enum.NormalId.Right}

                for _, face in ipairs(faces) do

                    local name = "CustomSurvivorDecal_" .. tostring(face)

                    local decal = rootPart:FindFirstChild(name)

                    if not decal then

                        decal = Instance.new("Decal")

                        decal.Name = name

                        decal.Texture = decalId

                        decal.Face = face

                        decal.Transparency = 0

                        decal.Parent = rootPart

                    else

                        decal.Texture = decalId

                    end

                end

            end

        else

            if genv.animTrack then genv.animTrack:Stop(0); genv.animTrack = nil end

            if rootPart then

                rootPart.Transparency = 1

                if genv.originalRootSize then rootPart.Size = genv.originalRootSize end

                if genv.originalHipHeight then humanoid.HipHeight = genv.originalHipHeight end

                for _, child in ipairs(rootPart:GetChildren()) do

                    if child:IsA("Decal") and string.find(child.Name, "CustomSurvivorDecal_") then child:Destroy() end

                end

            end

        end

    end

    if genv.safeToggleValue and genv.toggleValue and survivorValue and (survivorValue.Value == "007n7" or survivorValue.Value == "TwoTime" or survivorValue.Value == "Noob") and not genv.safeDetected and killersFolder then

        local detected = false

        for _, killerChar in ipairs(killersFolder:GetChildren()) do

            if killerChar:IsA("Model") and killerChar:FindFirstChild("Humanoid") then

                local killerName = killerChar.Name

                local soundId = safeHighlights.sounds[killerName]

                if soundId then

                    for _, obj in ipairs(killerChar:GetDescendants()) do

                        if obj:IsA("Sound") and obj.SoundId == soundId and obj.TimePosition < 0.5 and obj.IsPlaying then

                            detected = true

                            break

                        end

                    end

                end

                if killerName == "Noli" then

                    local animId = safeHighlights.animation["Noli"]

                    local killerAnimator = killerChar.Humanoid:FindFirstChildOfClass("Animator")

                    if killerAnimator then

                        for _, track in ipairs(killerAnimator:GetPlayingAnimationTracks()) do

                            if track.Animation and track.Animation.AnimationId == animId and track.TimePosition < 0.5 then

                                detected = true

                                break

                            end

                        end

                    end

                end

                if detected then break end

            end

        end

        if detected then

            task.delay(0.3, function()

                if genv.animTrack and genv.animTrack.IsPlaying then

                    genv.animTrack:Stop(0)

                    genv.animTrack = nil

                end

                genv.safeDetected = true

            end)

        end

    end

end)

-- ========================

-- ESP (Updated with all your requests)

-- ========================

local Settings = {

    Killers    = { Enabled = false, OutlineOnly = true,  ShowNametag = false, Color = Color3.fromRGB(255, 0, 0) },

    Survivors  = { Enabled = false, OutlineOnly = true,  ShowNametag = false, Color = Color3.fromRGB(255, 255, 0) },

    Advanced   = { Enabled = false, OutlineOnly = true,  ShowNametag = false, Color = Color3.fromRGB(0, 255, 255) },

    Items      = { Enabled = false, ShowNametag = false, BloxyColor = Color3.fromRGB(255,165,0), MedkitColor = Color3.fromRGB(255,100,255) }

}

getgenv().GeneratorsESPEnabled = false

getgenv().GeneratorESPFill = true

getgenv().GeneratorESPOutline = true

getgenv().GeneratorsESPGreen = true

getgenv().GeneratorsNametagsEnabled = true

getgenv().GeneratorsESPColor = Color3.fromRGB(0, 255, 255)

MainTab13:CreateSection("Generators ESP")

MainTab13:CreateToggle({

    Name = "Generators ESP",

    CurrentValue = getgenv().GeneratorsESPEnabled,

    Callback = function(value)

        getgenv().GeneratorsESPEnabled = value

        if not value then

            pcall(function()

                local mapFolder = Workspace:FindFirstChild("Map") and Workspace.Map:FindFirstChild("Ingame") and Workspace.Map.Ingame:FindFirstChild("Map")

                if mapFolder then

                    for _, gen in pairs(mapFolder:GetChildren()) do

                        if gen.Name == "Generator" then

                            if gen:FindFirstChild("iskiddedfromneptz") then

                                gen.iskiddedfromneptz:Destroy()

                            end

                            if gen:FindFirstChild("nametag") then

                                gen.nametag:Destroy()

                            end

                        end

                    end

                end

            end)

        end

    end

})

MainTab13:CreateToggle({

    Name = "Generators Show Fill",

    CurrentValue = getgenv().GeneratorESPFill,

    Callback = function(value)

        getgenv().GeneratorESPFill = value

    end

})

MainTab13:CreateToggle({

    Name = "Generators Show Outline",

    CurrentValue = getgenv().GeneratorESPOutline,

    Callback = function(value)

        getgenv().GeneratorESPOutline = value

    end

})

MainTab13:CreateToggle({

    Name = "Generators Nametag",

    CurrentValue = getgenv().GeneratorsNametagsEnabled,

    Callback = function(value)

        getgenv().GeneratorsNametagsEnabled = value

    end

})

MainTab13:CreateColorPicker({

    Name = "Generators Color",

    Color = getgenv().GeneratorsESPColor,

    Callback = function(c)

        getgenv().GeneratorsESPColor = c

    end

})

local function ensureHighlight(gen)

    local hl = gen:FindFirstChild("iskiddedfromneptz")

    if not hl then

        hl = Instance.new("Highlight")

        hl.Name = "iskiddedfromneptz"

        hl.Parent = gen

        hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop

    end

    return hl

end

local function updateHighlight(gen)

    local hl = gen:FindFirstChild("iskiddedfromneptz")

    if not hl then return end

    local color = getgenv().GeneratorsESPColor

    if getgenv().GeneratorsESPGreen and gen:FindFirstChild("Progress") and gen.Progress.Value >= 100 then

        color = Color3.fromRGB(0,255,0)

    end

    hl.FillColor = color

    hl.OutlineColor = color

    hl.FillTransparency = getgenv().GeneratorESPFill and 0.65 or 1

    hl.OutlineTransparency = getgenv().GeneratorESPOutline and 0 or 1

    hl.Enabled = getgenv().GeneratorESPFill or getgenv().GeneratorESPOutline

end

local function MapProgress(val)

    if val == 0 then return 0

    elseif val == 26 then return 25

    elseif val == 52 then return 50

    elseif val == 78 then return 75

    elseif val == 100 then return 100

    else return val

    end

end

local function updateNametag(gen)

    if not getgenv().GeneratorsNametagsEnabled then

        if gen:FindFirstChild("nametag") then

            gen.nametag:Destroy()

        end

        return

    end

    local progress = gen:FindFirstChild("Progress") and gen.Progress.Value or 0

    local displayValue = MapProgress(progress)

    local bb = gen:FindFirstChild("nametag")

    if not bb then

        bb = Instance.new("BillboardGui")

        bb.Name = "nametag"

        bb.Adornee = gen

        bb.Parent = gen

        bb.Size = UDim2.new(0, 200, 0, 50)

        bb.StudsOffset = Vector3.new(0, 3, 0)

        bb.AlwaysOnTop = true

        local text = Instance.new("TextLabel")

        text.Name = "TextLabel"

        text.Parent = bb

        text.Size = UDim2.fromScale(1,1)

        text.BackgroundTransparency = 1

        text.TextColor3 = getgenv().GeneratorsESPColor

        text.TextStrokeTransparency = 0

        text.TextStrokeColor3 = Color3.new(0,0,0)

        text.TextSize = 5

        text.Font = Enum.Font.GothamBold

        text.Text = "Generator ("..displayValue.."%)"

    else

        bb.TextLabel.Text = "Generator ("..displayValue.."%)"

        bb.TextLabel.TextColor3 = getgenv().GeneratorsESPColor

        bb.TextLabel.TextSize = 5

        bb.TextLabel.Font = Enum.Font.GothamBold

    end

end

RunService.Heartbeat:Connect(function()

    if not getgenv().GeneratorsESPEnabled then return end

    local mapFolder = Workspace:FindFirstChild("Map") and Workspace.Map:FindFirstChild("Ingame") and Workspace.Map.Ingame:FindFirstChild("Map")

    if not mapFolder then return end

    for _, gen in pairs(mapFolder:GetChildren()) do

        if gen.Name == "Generator" then

            if getgenv().GeneratorESPFill or getgenv().GeneratorESPOutline then

                ensureHighlight(gen)

                updateHighlight(gen)

            else

                if gen:FindFirstChild("iskiddedfromneptz") then

                    gen.iskiddedfromneptz:Destroy()

                end

            end

            updateNametag(gen)

        end

    end

end)

MainTab13:CreateSection("Killers")

MainTab13:CreateToggle({Name = "Killers ESP", CurrentValue = false, Callback = function(v) Settings.Killers.Enabled = v end})

MainTab13:CreateToggle({Name = "Killers Outline Only", CurrentValue = true, Callback = function(v) Settings.Killers.OutlineOnly = v end})

MainTab13:CreateToggle({Name = "Killers Nametag", CurrentValue = false, Callback = function(v) Settings.Killers.ShowNametag = v end})

MainTab13:CreateColorPicker({Name = "Killers Color (Real Noli)", Color = Settings.Killers.Color, Callback = function(c) Settings.Killers.Color = c end})

MainTab13:CreateSection("Survivors")

MainTab13:CreateToggle({Name = "Survivors ESP", CurrentValue = false, Callback = function(v) Settings.Survivors.Enabled = v end})

MainTab13:CreateToggle({Name = "Survivors Outline Only", CurrentValue = true, Callback = function(v) Settings.Survivors.OutlineOnly = v end})

MainTab13:CreateToggle({Name = "Survivors Nametag", CurrentValue = false, Callback = function(v) Settings.Survivors.ShowNametag = v end})

MainTab13:CreateColorPicker({Name = "Survivors Color", Color = Settings.Survivors.Color, Callback = function(c) Settings.Survivors.Color = c end})

MainTab13:CreateSection("Advanced ESP")

MainTab13:CreateToggle({Name = "Advanced ESP", CurrentValue = false, Callback = function(v) Settings.Advanced.Enabled = v end})

MainTab13:CreateToggle({Name = "Advanced Outline Only", CurrentValue = true, Callback = function(v) Settings.Advanced.OutlineOnly = v end})

MainTab13:CreateToggle({Name = "Advanced Nametag", CurrentValue = false, Callback = function(v) Settings.Advanced.ShowNametag = v end})

MainTab13:CreateColorPicker({Name = "Advanced Color", Color = Settings.Advanced.Color, Callback = function(c) Settings.Advanced.Color = c end})

MainTab13:CreateSection("Items ESP")

MainTab13:CreateToggle({Name = "Enable Items ESP", CurrentValue = false, Callback = function(v) Settings.Items.Enabled = v end})

MainTab13:CreateToggle({Name = "Items Nametag", CurrentValue = false, Callback = function(v) Settings.Items.ShowNametag = v end})

MainTab13:CreateColorPicker({Name = "Bloxy Cola Color", Color = Settings.Items.BloxyColor, Callback = function(c) Settings.Items.BloxyColor = c end})

MainTab13:CreateColorPicker({Name = "Medkit Color", Color = Settings.Items.MedkitColor, Callback = function(c) Settings.Items.MedkitColor = c end})

local PlayersFolder   = Workspace:WaitForChild("Players")

local KillersFolder   = PlayersFolder:WaitForChild("Killers")

local SurvivorsFolder = PlayersFolder:WaitForChild("Survivors")

local MapFolder       = Workspace:WaitForChild("Map"):WaitForChild("Ingame")

local Highlights = {}

local Nametags = {}

local function CreateNametag(adornee, text, color)

    if Nametags[adornee] then Nametags[adornee]:Destroy() end

    local billboard = Instance.new("BillboardGui")

    billboard.Adornee = adornee

    billboard.Size = UDim2.new(0, 200, 0, 50)

    billboard.StudsOffset = Vector3.new(0, 3, 0)

    billboard.AlwaysOnTop = true

    billboard.Enabled = true

    local textLabel = Instance.new("TextLabel")

    textLabel.Size = UDim2.new(1, 0, 1, 0)

    textLabel.BackgroundTransparency = 1

    textLabel.Text = text

    textLabel.TextColor3 = color

    textLabel.TextStrokeTransparency = 0

    textLabel.TextStrokeColor3 = Color3.new(0,0,0)

    textLabel.Font = Enum.Font.GothamBold

    textLabel.TextSize = 6

    textLabel.Parent = billboard

    billboard.Parent = adornee

    Nametags[adornee] = textLabel

end

local function AddHighlight(Obj, Config)

    if Highlights[Obj] then Highlights[Obj]:Destroy() end

    local hl = Instance.new("Highlight")

    hl.Adornee = Obj

    hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop

    hl.Enabled = Config.Enabled

    hl.OutlineColor = Config.Color

    hl.FillColor = Config.Color

    hl.OutlineTransparency = 0

    local alwaysFill = Obj.Name == "BloxyCola" or Obj.Name == "Medkit" or table.find({"BuildermanDispenser","BuildermanSentry","PizzaDeliveryRig","HumanoidRootProjectile","Swords","shockwave","Voidstar","Shadow"}, Obj.Name)

    hl.FillTransparency = Config.OutlineOnly and 1 or (alwaysFill and 0.65 or 1)

    hl.Parent = Obj

    Highlights[Obj] = hl

    Obj.AncestryChanged:Connect(function(_, parent)

        if not parent then

            if Highlights[Obj] then Highlights[Obj]:Destroy() Highlights[Obj] = nil end

            if Nametags[Obj] then Nametags[Obj].Parent:Destroy() Nametags[Obj] = nil end

        end

    end)

end

local function ApplyToTarget(target, Config)

    if not target or not target.Parent then return end

    AddHighlight(target, Config)

end

local function SetupPlayers(Folder, Config)

    local function Apply(m)

        task.delay(0.3, function()

            if m and m.Parent then ApplyToTarget(m, Config) end

        end)

    end

    for _, v in ipairs(Folder:GetChildren()) do Apply(v) end

    Folder.ChildAdded:Connect(Apply)

end

SetupPlayers(KillersFolder, Settings.Killers)

SetupPlayers(SurvivorsFolder, Settings.Survivors)

local function HandleItem(obj)

    if obj:IsA("Model") and (obj.Name == "BloxyCola" or obj.Name == "Medkit") then

        ApplyToTarget(obj, {

            Enabled = Settings.Items.Enabled,

            OutlineOnly = false,

            ShowNametag = Settings.Items.ShowNametag,

            Color = obj.Name == "BloxyCola" and Settings.Items.BloxyColor or Settings.Items.MedkitColor

        })

    end

end

for _, v in ipairs(Workspace:GetDescendants()) do HandleItem(v) end

Workspace.DescendantAdded:Connect(HandleItem)

local AdvancedNames = {"BuildermanDispenser","BuildermanSentry","PizzaDeliveryRig","HumanoidRootProjectile","Swords","shockwave","Voidstar"}

local function HandleAdvanced(obj)

    if table.find(AdvancedNames, obj.Name) or (obj.Name == "Shadow" and obj.Parent and obj.Parent.Name == "Shadows") then

        ApplyToTarget(obj, Settings.Advanced)

    end

end

for _, v in ipairs(MapFolder:GetDescendants()) do HandleAdvanced(v) end

MapFolder.DescendantAdded:Connect(HandleAdvanced)

task.spawn(function()

    while task.wait(0.3) do

        for obj, hl in pairs(Highlights) do

            if not hl or not hl.Parent then continue end

            local config = Settings.Advanced

            local isItem = obj.Name == "BloxyCola" or obj.Name == "Medkit"

            if obj:IsDescendantOf(KillersFolder) then

                config = Settings.Killers

            elseif obj:IsDescendantOf(SurvivorsFolder) then

                config = Settings.Survivors

            elseif isItem then

                config = { Enabled = Settings.Items.Enabled, OutlineOnly = false, ShowNametag = Settings.Items.ShowNametag,

                           Color = obj.Name == "BloxyCola" and Settings.Items.BloxyColor or Settings.Items.MedkitColor }

            end

            hl.Enabled = config.Enabled

            hl.OutlineColor = config.Color

            hl.FillColor = config.Color

            hl.OutlineTransparency = 0

            hl.FillTransparency = config.OutlineOnly and 1 or (isItem and 0.65 or 1)

            if config.ShowNametag then

                local hum = obj:FindFirstChildOfClass("Humanoid")

                local hpText = hum and (" | Hp: "..math.floor(hum.Health)) or ""

                local baseName = obj.Name

                local nameText = baseName .. hpText

                if Nametags[obj] then

                    Nametags[obj].Text = nameText

                    Nametags[obj].TextColor3 = config.Color

                else

                    CreateNametag(obj, nameText, config.Color)

                end

            else

                if Nametags[obj] then

                    Nametags[obj].Parent:Destroy()

                    Nametags[obj] = nil

                end

            end

        end

        local nolis = {}

        for _, k in ipairs(KillersFolder:GetChildren()) do

            if k:GetAttribute("ActorDisplayName") == "Noli" then

                table.insert(nolis, k)

            end

        end

        if #nolis > 0 then

            local inverted = Color3.new(1 - Settings.Killers.Color.R, 1 - Settings.Killers.Color.G, 1 - Settings.Killers.Color.B)

            for i, noli in ipairs(nolis) do

                local col = (i == 1) and Settings.Killers.Color or inverted

                local baseName = (noli.Name == "Noli") and "Noli" or "Noli - Fake"

                local hum = noli:FindFirstChildOfClass("Humanoid")

                local hpText = hum and (" | Hp: "..math.floor(hum.Health)) or ""

                local nameText = baseName .. hpText

                if Highlights[noli] then

                    Highlights[noli].OutlineColor = col

                    Highlights[noli].FillColor = col

                end

                if Nametags[noli] then

                    Nametags[noli].Text = nameText

                    Nametags[noli].TextColor3 = col

                end

            end

        end

    end

end)

-- ========================

-- Credits

-- ========================

MainTab12:CreateParagraph({

    Title = "DoomSaken V2.0 - Dark + Pure Neon White Edition",

    Content = [[December 2025

Main Developer & Owner

@vlana0108 — Owner & Everything

Special Thanks

MagicScripts — Guest 1337 IDs + Gen Button

orange leaves — Veeronica skate scripts

Rest & Nyan-Rescript Owner — ESP "30% Based" & Autopunch 

Veux69 — i pass his version guesting hub 2.0 muauhahaha 

Update Logs V2.0

Two Time Tab, has Two time stab extender, Aimbots and reverse stab direction, ELLIOT INF RUSH HOUR yes

Thank you for using and supporting Doomsaken

Enjoy the script]]

})

Rayfield:LoadConfiguration()

Rayfield:Notify({

    Title = "DoomSaken V2.0",

    Content = "The Spectre Is Watching",

    Duration = 8,

    Image = 128189300059026

})

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: