local MacLib = loadstring(game:HttpGet("https://github.com/biggaboy212/Maclib/releases/latest/download/maclib.txt"))() local Window = MacLib:Window({ Title = "Strange Hub - Guess the character color", Subtitle = "made by flames", Size = UDim2.fromOffset(880, 620), DragStyle = 1, AcrylicBlur = true, ShowUserInfo = false, }) local TabGroup = Window:TabGroup() local MainTab = TabGroup:Tab({ Name = "Main", Image = "rbxassetid://10734950309" }) local Section = MainTab:Section({ Side = "Left" }) local FOLDER = "StrangeHub" local FILE = FOLDER .. "/colors.txt" if not isfolder(FOLDER) then makefolder(FOLDER) end local function saveColors(tbl) local lines = {"return {"} for name, col in pairs(tbl) do table.insert(lines, string.format('\t[%q] = Color3.fromRGB(%d, %d, %d),', name, math.round(col.R*255), math.round(col.G*255), math.round(col.B*255))) end table.insert(lines, "}") writefile(FILE, table.concat(lines, "\n")) end local function loadColors() if isfile(FILE) then local success, result = pcall(function() return loadstring(readfile(FILE))() end) if success and typeof(result) == "table" then return result end end return {} end local Colors = { ["Anais Watterson"] = Color3.fromRGB(216, 150, 152), ["Beast Boy"] = Color3.fromRGB(140, 201, 66), ["Bluey"] = Color3.fromRGB(132, 199, 249), ["Bugs Bunny"] = Color3.fromRGB(162, 173, 179), ["Chilli"] = Color3.fromRGB(254, 175, 111), ["Daddy Pig"] = Color3.fromRGB(112, 179, 184), ["Darwin Watterson"] = Color3.fromRGB(190, 86, 25), ["Dipper"] = Color3.fromRGB(67, 125, 160), ["Duolingo"] = Color3.fromRGB(89, 197, 1), ["Eric Cartman"] = Color3.fromRGB(203, 26, 58), ["Fern"] = Color3.fromRGB(135, 147, 35), ["Finn"] = Color3.fromRGB(45, 156, 207), ["Gumball"] = Color3.fromRGB(75, 190, 220), ["Grandpa Pig"] = Color3.fromRGB(112, 92, 160), ["Homer Simpson"] = Color3.fromRGB(255, 217, 15), ["Ice King"] = Color3.fromRGB(0, 0, 248), ["Invincible"] = Color3.fromRGB(255, 230, 85), ["Lola Bunny"] = Color3.fromRGB(255, 175, 91), ["Luigi"] = Color3.fromRGB(32, 200, 20), ["Margaret"] = Color3.fromRGB(239, 30, 62), ["Mario"] = Color3.fromRGB(218, 2, 9), ["Milhouse"] = Color3.fromRGB(69, 75, 169), ["Minecraft Creeper"] = Color3.fromRGB(62, 137, 47), ["Mordecai"] = Color3.fromRGB(124, 151, 218), ["Morty"] = Color3.fromRGB(252, 248, 115), ["Perry"] = Color3.fromRGB(36, 167, 161), ["Peter Griffin"] = Color3.fromRGB(10, 116, 12), ["Phineas"] = Color3.fromRGB(255, 125, 41), ["Plankton"] = Color3.fromRGB(102, 142, 115), ["Principal Brown"] = Color3.fromRGB(121, 103, 93), ["Raven"] = Color3.fromRGB(99, 84, 199), ["Richard"] = Color3.fromRGB(232, 168, 167), ["Scooby Doo"] = Color3.fromRGB(163, 95, 66), ["Spongebob"] = Color3.fromRGB(253, 245, 1), ["Squidward"] = Color3.fromRGB(139, 188, 178), ["Steven Universe"] = Color3.fromRGB(252, 96, 110), ["Stewie Griffin"] = Color3.fromRGB(181, 11, 62), ["Twilight"] = Color3.fromRGB(203, 147, 223), } for name, col in pairs(loadColors()) do Colors[name] = col end local autoColor = true local autoSubmit = false local rainbowMode = false local currentChar = nil local currentRoundId = nil local statusLabel local counterLabel local hue = 0 local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local RunService = game:GetService("RunService") local VirtualUser = game:GetService("VirtualUser") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local ResultEvent = ReplicatedStorage.Events:WaitForChild("ResultEvent") local StartNewRound = ReplicatedStorage.Events:WaitForChild("StartNewRound") local ScoreEvent = ReplicatedStorage.Events:WaitForChild("ScoreEvent") local function getColorCount() local c = 0 for _ in pairs(Colors) do c += 1 end return c end statusLabel = Section:Label({ Text = "Status: Ready" }) counterLabel = Section:Label({ Text = "Saved Colors: " .. getColorCount() }) Section:Toggle({ Name = "Auto Color (100%)", Default = true, Callback = function(v) autoColor = v statusLabel:UpdateName(v and "Status: Auto Color ON" or "Status: Auto Color OFF") end }, "AutoColor") Section:Toggle({ Name = "Auto Submit", Default = false, Callback = function(v) autoSubmit = v end }, "AutoSubmit") Section:Toggle({ Name = "Rainbow Mode", Default = false, Callback = function(v) rainbowMode = v if v then Window:Notify({ Title = "Rainbow Mode", Description = "Smooth hue rotation enabled", Lifetime = 3 }) end end }, "Rainbow") RunService.RenderStepped:Connect(function(dt) if not rainbowMode then return end hue = (hue + dt * 0.35) % 1 local rainbow = Color3.fromHSV(hue, 0.9, 1) for _, gui in ipairs(PlayerGui:GetDescendants()) do if gui.Name == "Characters" then for _, child in ipairs(gui:GetChildren()) do if child.Visible then local part = child:FindFirstChild("PartToColor", true) if part then part.BackgroundColor3 = rainbow end end end end if gui.Name == "Background" and gui:IsA("Frame") then gui.BackgroundColor3 = rainbow end end end) LocalPlayer.Idled:Connect(function() VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end) local function forceColor(charName, col) for _, gui in ipairs(PlayerGui:GetDescendants()) do if gui.Name == "Characters" then local img = gui:FindFirstChild(charName) if img then local part = img:FindFirstChild("PartToColor", true) if part then part.BackgroundColor3 = col end end end if gui.Name == "Background" and gui:IsA("Frame") then gui.BackgroundColor3 = col end end end ScoreEvent.OnClientEvent:Connect(function(action, name, colorData) if action == "ShowCorrectAnswer" then local col if typeof(colorData) == "Color3" then col = colorData elseif typeof(colorData) == "table" then col = Color3.fromRGB( math.clamp(math.round(tonumber(colorData[1]) or 255), 0, 255), math.clamp(math.round(tonumber(colorData[2]) or 255), 0, 255), math.clamp(math.round(tonumber(colorData[3]) or 255), 0, 255) ) end if col then local isNew = Colors[name] == nil Colors[name] = col saveColors(Colors) counterLabel:UpdateName("Saved Colors: " .. getColorCount()) if isNew then Window:Notify({ Title = "New Color Saved", Description = name, Lifetime = 3 }) end end end end) StartNewRound.OnClientEvent:Connect(function(charName, _, roundId) currentChar = charName currentRoundId = roundId local col = Colors[charName] if autoColor and col and not rainbowMode then task.wait(0.18) forceColor(charName, col) statusLabel:UpdateName("Status: " .. charName .. " → 100%") if autoSubmit then task.wait(0.3) ResultEvent:FireServer( math.round(col.R * 255), math.round(col.G * 255), math.round(col.B * 255), currentRoundId ) statusLabel:UpdateName("Status: " .. charName .. " → Submitted") end else statusLabel:UpdateName("Status: " .. tostring(charName) .. (col and "" or " (unknown)")) end end) local old old = hookmetamethod(game, "__namecall", newcclosure(function(self, ...) local method = getnamecallmethod() if method == "FireServer" and self == ResultEvent and autoColor and currentChar and Colors[currentChar] and not rainbowMode then local c = Colors[currentChar] return old(self, math.round(c.R*255), math.round(c.G*255), math.round(c.B*255), select(4, ...)) end return old(self, ...) end)) saveColors(Colors) statusLabel:UpdateName("Status: Ready") counterLabel:UpdateName("Saved Colors: " .. getColorCount())