if getgenv().AnimeRacingClicker then pcall(function() getgenv().AnimeRacingClicker:Unload() end) getgenv().AnimeRacingClicker = nil end local baseUrl = "https://raw.githubusercontent.com/croksyscript/CrypticLoader/refs/heads/main/Obsidian/Obsidian_UI/" local ok, Library = pcall(function() return loadstring(game:HttpGet(baseUrl .. "Obsidian_UI.lua"))() end) if not ok or not Library then return end local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local VirtualUser = game:GetService("VirtualUser") local player = Players.LocalPlayer local Knit = getrenv()._G.Knit for _ = 1, 40 do if Knit and Knit.Controllers and Knit.Controllers.RaceController then break end task.wait(0.5) Knit = getrenv()._G.Knit end if not (Knit and Knit.Controllers and Knit.Controllers.RaceController) then Library:Unload() return end getgenv().AnimeRacingClicker = Library local raceController = Knit.Controllers.RaceController local regionController = Knit.Controllers.RegionController local autoRunController = Knit.Controllers.AutoRunController local movementController = Knit.Controllers.RaceMovementController local clickerService = Knit.GetService("ClickerService") local movementService = Knit.GetService("RaceMovementService") local raceGenerator = Knit.GetService("RaceGeneratorService") local settingsService = Knit.GetService("GameSettingsService") local raceService = Knit.GetService("RaceService") local regionTable = require(ReplicatedStorage.DataBank.RegionTable) local active = true local connections = {} local overlay local lastJoin = 0 local speed = 0 local wallsReached = 0 local wallsTotal = 16 local worldKeys = {} local autoWorld = "Best Money (auto)" local function notify(text, time) task.spawn(function() pcall(function() Library:Notify(text, time or 3) end) end) end local function formatNumber(value) if value >= 1e9 then return string.format("%.2e", value) end if value >= 1e6 then return string.format("%.1fM", value / 1e6) end if value >= 1e3 then return string.format("%.1fk", value / 1e3) end return string.format("%.0f", value) end local function secondsLeft() return math.max(0, raceController.Timer - os.time()) end local function rootPart() local character = player.Character return character and character:FindFirstChild("HumanoidRootPart") end local function currentWorld() return regionController.playersRegion[player] end local function loadWorlds() local worlds = {} for key, data in pairs(regionTable) do if type(data) == "table" and key ~= "World0" and regionController.AllowedRegions[key] then table.insert(worlds, { key = key, money = data.ShurikensMultiplier or 0, click = data.ClickMultiplier or 0, name = string.format("%s %s | %s | x%s", tostring(data.WorldName), tostring(data.Island), key, formatNumber(data.ShurikensMultiplier or 0)), }) end end table.sort(worlds, function(a, b) if a.money ~= b.money then return a.money > b.money end return a.click > b.click end) worldKeys = { [autoWorld] = worlds[1] and worlds[1].key } local names = { autoWorld } for _, world in ipairs(worlds) do worldKeys[world.name] = world.key table.insert(names, world.name) end return names end local function targetWorld() local picked = Library.Options.RaceWorld and Library.Options.RaceWorld.Value return worldKeys[picked] or currentWorld() end local function joinRace() local world = targetWorld() if not world or world == "World0" then return end pcall(function() movementService.TeleportToRace:Fire(world) end) end local function click() local success, gain = pcall(function() return clickerService:PlayerClick() end) if success and gain and Library.Toggles.ClickEffect.Value then pcall(function() Knit.Controllers.ClickerController:TriggerClickBounce(gain) end) end end local function setAutoRun(state) pcall(function() if state then autoRunController:StartAutoRun() else autoRunController:StopAutoRun() end settingsService:SaveSetting("AutoRun", state) end) end local Window = Library:CreateWindow({ Title = "Cryptic Hub | Anime Racing Clicker", Footer = ".gg/XDpsSW7Ybs", Icon = 120217226033572, NotifySide = "Right", Center = true, AutoShow = true, ToggleKeybind = Enum.KeyCode.RightControl, Folder = "CrypticHub/AnimeRacingClicker", }) local Tabs = { Main = Window:AddTab("Main", "zap"), Clicker = Window:AddTab("Clicker", "mouse-pointer-click"), Race = Window:AddTab("Race", "flag"), } local Toggles = Library.Toggles local Options = Library.Options local stateLabel, worldLabel, speedLabel, wallLabel local function buildMain(tab) local auto = tab:AddGroupbox({ Side = "Left", Name = "Automation", IconName = "bot" }) auto:AddToggle("AutoClick", { Text = "Auto Click", Tooltip = "Clicks during the click phase to gain speed", }):AddKeyPicker("AutoClickKey", { Text = "Auto Click", Default = "C", Mode = "Toggle", SyncToggleState = true, }) auto:AddToggle("AutoJoin", { Text = "Auto Join Race", Tooltip = "Joins the selected world when the race starts", }):AddKeyPicker("AutoJoinKey", { Text = "Auto Join Race", Default = "J", Mode = "Toggle", SyncToggleState = true, }) auto:AddToggle("AutoRun", { Text = "Auto Run", Callback = setAutoRun, }) auto:AddToggle("ForceForward", { Text = "Force Forward Input", }) auto:AddToggle("AntiAfk", { Text = "Anti AFK", Default = true, }) auto:AddButton({ Text = "Join Race Now", Func = joinRace, }) local info = tab:AddGroupbox({ Side = "Right", Name = "Live Info", IconName = "activity" }) stateLabel = info:AddLabel("State: -") worldLabel = info:AddLabel("World: -") speedLabel = info:AddLabel("Speed: -") wallLabel = info:AddLabel("Walls: -") end local function buildClicker(tab) local box = tab:AddGroupbox({ Side = "Left", Name = "Click Settings", IconName = "mouse-pointer-click" }) box:AddSlider("ClicksPerSecond", { Text = "Clicks per second", Default = 15, Min = 1, Max = 40, Rounding = 0, Tooltip = "The server accepts about 15 clicks per second", }) box:AddSlider("ClickWindow", { Text = "Only click in last (s)", Default = 60, Min = 1, Max = 60, Rounding = 0, Suffix = "s", }) box:AddToggle("ClickEffect", { Text = "Show Click Effect", }) end local function buildRace(tab) local world = tab:AddGroupbox({ Side = "Left", Name = "World", IconName = "globe" }) world:AddDropdown("RaceWorld", { Text = "Race World", Values = loadWorlds(), Default = 1, Searchable = true, MaxVisibleDropdownItems = 10, Tooltip = "Unlocked worlds, sorted by money multiplier", }) world:AddButton({ Text = "Refresh Worlds", Func = function() Options.RaceWorld:SetValues(loadWorlds()) Options.RaceWorld:SetValue(autoWorld) end, }) world:AddSlider("JoinRetry", { Text = "Retry every", Default = 2, Min = 1, Max = 10, Rounding = 0, Suffix = "s", }) local extras = tab:AddGroupbox({ Side = "Right", Name = "Notifications", IconName = "bell" }) extras:AddToggle("WallNotify", { Text = "Notify on wall", Default = true, }) extras:AddToggle("PhaseNotify", { Text = "Notify on phase change", }) extras:AddToggle("Overlay", { Text = "Status Overlay", Callback = function(value) if value and not overlay then overlay = Library:AddDraggableLabel("Starting...") elseif not value and overlay then overlay:Destroy() overlay = nil end end, }) end buildMain(Tabs.Main) buildClicker(Tabs.Clicker) buildRace(Tabs.Race) local function loop(interval, body) task.spawn(function() while active and not Library.Unloaded do body() task.wait(interval) end end) end loop(0.05, function() if not Toggles.AutoClick.Value or raceController.State ~= "Click" then return end if secondsLeft() > Options.ClickWindow.Value then return end task.spawn(click) task.wait(1 / Options.ClicksPerSecond.Value - 0.05) end) loop(0.25, function() if not Toggles.AutoJoin.Value or raceController.State ~= "Running" then return end local root = rootPart() local atStart = not root or root.Position.Z < 65 local wrongWorld = currentWorld() ~= targetWorld() local needsJoin = wrongWorld or (atStart and not movementController.IsActive) if needsJoin and os.clock() - lastJoin >= Options.JoinRetry.Value then lastJoin = os.clock() joinRace() end end) loop(0.5, function() if Toggles.AutoRun.Value and not autoRunController.Activated then setAutoRun(true) end end) loop(0.05, function() if Toggles.ForceForward.Value and movementController.IsActive then movementService.SendMoveDirection:Fire(Vector3.new(0, 0, 1)) end end) loop(0.25, function() local state = raceController.State local left = secondsLeft() stateLabel:SetText(string.format("State: %s (%ds)", state ~= "" and state or "-", left)) worldLabel:SetText("World: " .. tostring(currentWorld())) speedLabel:SetText("Speed: " .. formatNumber(speed) .. " studs/s") wallLabel:SetText(string.format("Walls: %d/%d", wallsReached, wallsTotal)) if overlay then overlay:SetText(string.format("%s %ds | Walls %d/%d", state, left, wallsReached, wallsTotal)) end end) local function listen(signal, callback) table.insert(connections, signal:Connect(callback)) end listen(raceGenerator.CheckpointReached, function(number, total) wallsReached = number or wallsReached wallsTotal = total or wallsTotal if Toggles.WallNotify.Value then notify(string.format("Wall %s/%s reached", tostring(number), tostring(total)), 2) end end) listen(movementService.SyncSpeed, function(value) if type(value) == "number" then speed = value end end) listen(raceService.TriggerState, function(state) if state == "Running" then wallsReached = 0 end if Toggles.PhaseNotify.Value then notify("Phase: " .. tostring(state), 2) end end) listen(player.Idled, function() if Toggles.AntiAfk.Value then VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end end) Library:OnUnload(function() active = false for _, connection in ipairs(connections) do connection:Disconnect() end if overlay then overlay:Destroy() end if getgenv().AnimeRacingClicker == Library then getgenv().AnimeRacingClicker = nil end end)