--made by aedynjames17 local Services = { Players = game:GetService("Players"), ReplicatedStorage = game:GetService("ReplicatedStorage"), VirtualInputManager = game:GetService("VirtualInputManager"), UserInputService = game:GetService("UserInputService"), TweenService = game:GetService("TweenService"), RunService = game:GetService("RunService"), CoreGui = game:GetService("CoreGui") } local LocalPlayer = Services.Players.LocalPlayer local function SafeLoad(url) local ok, result = pcall(function() return loadstring(game:HttpGet(url, true))() end) if ok and type(result) == "table" then return result end return {} end SafeLoad("https://raw.githubusercontent.com/MarsQQ/Unpatchabomb/master/unpatchabomb_english_words") local WordList = SafeLoad("https://raw.githubusercontent.com/jjengu/scripts/refs/heads/main/wordbomb/words.lua") local WordList_Two = SafeLoad("https://raw.githubusercontent.com/jjengu/scripts/refs/heads/main/wordbomb/words_two.lua") local WordList_Three = { "pseudopseudohypoparathyroidism", "floccinaucinihilipilification", "antidisestablishmentarianism", "supercalifragilisticexpialidocious", "hexakosioihexekontahexaphobia", "dichlorodiphenyltrichloroethane", "electroencephalographically", "xenotransplantations", "counterdemonstrations", "characteristically", "unconstitutionality", "intercontinental", "phenomenological", "oversimplification", "disenfranchisement", "incompatibilities", "thermodynamically", "magnetohydrodynamics", "uncharacteristically", "electroencephalogram", "counterrevolutionary", "internationalization", "counterproductive", "environmentalists", "telecommunications", "immunohistochemistry", "hypercholesterolemia", "incomprehensibilities", "deinstitutionalization", "psychopharmacological", "reconceptualizations", "reindustrialization", "spectroscopically", "standardizations", "vulnerabilities", "westernization", "xenotransplantation", "sphenopalatineganglioneuralgia", } local MegaList = {} local function merge(tbl) for _, v in ipairs(tbl) do if type(v) == "string" then MegaList[#MegaList + 1] = v end end end if type(ENGLISH_WORDS) == "table" then merge(ENGLISH_WORDS) end merge(WordList) merge(WordList_Two) merge(WordList_Three) local seen = {} local UniqueMegaList = {} for _, word in ipairs(MegaList) do local lower = string.lower(word) if not seen[lower] then seen[lower] = true UniqueMegaList[#UniqueMegaList + 1] = word end end ENGLISH_WORDS = UniqueMegaList WordList = UniqueMegaList WordList_Two = UniqueMegaList WordList_Three = UniqueMegaList local TypoNeighbours = { a="s", b="v", c="v", d="f", e="w", f="d", g="h", h="j", i="o", j="h", k="l", l="k", m="n", n="m", o="i", p="o", q="w", r="t", s="a", t="r", u="y", v="c", w="e", x="z", y="u", z="x", } local MOTDs = { "this game sucks, imma go play DOORS", "bro really thought they could beat me", "skill issue detected (not mine)", "imagine not using unpatchabomb lol", "i could type faster asleep", "another round, another W for me", "touch grass? nah, touch keyboard", "they typed 'cat'... i typed 'catastrophically'", "my grandma types faster than this lobby", "error 404: competition not found", } local IsOnMobile = table.find({Enum.Platform.IOS, Enum.Platform.Android}, Services.UserInputService:GetPlatform()) local Games = Services.ReplicatedStorage:WaitForChild("Network"):WaitForChild("Games") local GameID = "-1" local UsedWords = {} local Typing = false local TypingActive = false local LastWord = "" local DifficultyModes = {"Difficulty: Short", "Difficulty: Medium", "Difficulty: Hard", "Difficulty: Any"} local DifficultyIndex = 4 local DifficultyRanges = { Short = {min = 1, max = 5}, Medium = {min = 6, max = 10}, Hard = {min = 11, max = 9999}, Any = {min = 1, max = 9999}, } local Settings = { WordList = 0, AutoType = false, AutoJoin = false, WPM = 120, WordTypeDelay = 0.3, HumaniseWPM = true, ReactionTime = 0.35, TypoChance = 0.04, BurstMin = 3, BurstMax = 7, Difficulty = "Any", } local burstCounter = 0 local burstTarget = math.random(3, 7) local function GetLetterDelay() local base = 60 / (Settings.WPM * 5) if Settings.HumaniseWPM then local roll = math.random() if roll < 0.15 then base = base * (0.35 + math.random() * 0.25) elseif roll < 0.80 then base = base * (0.80 + math.random() * 0.40) else base = base * (1.20 + math.random() * 0.60) end burstCounter = burstCounter + 1 if burstCounter >= burstTarget then burstCounter = 0 burstTarget = math.random(Settings.BurstMin, Settings.BurstMax) base = base + (0.04 + math.random() * 0.08) end end return math.max(base, 0.005) end local alreadyUsed = {} local function tableItemExists(array, val) for _, v in pairs(array) do if v == val then return true end end return false end local function WordMatchesDifficulty(word) local range = DifficultyRanges[Settings.Difficulty] or DifficultyRanges["Any"] return #word >= range.min and #word <= range.max end local function findWord(str) local best, bestLen = nil, 0 local lowerStr = string.lower(str) local lists = {ENGLISH_WORDS, WordList, WordList_Two, WordList_Three} for _, wlist in pairs(lists) do if type(wlist) == "table" then for _, v in pairs(wlist) do if type(v) == "string" then if string.find(string.lower(v), lowerStr, 1, true) and not tableItemExists(alreadyUsed, v) and WordMatchesDifficulty(v) then if #v > bestLen then best = v; bestLen = #v end end end end end end if best then table.insert(alreadyUsed, best) end return best end local function FindWordAuto(l) if not l or l == "" then return nil end local lowerL = string.lower(l) local lists = {ENGLISH_WORDS, WordList, WordList_Two, WordList_Three} local order = {lists[Settings.WordList + 1]} for i = 1, 4 do if i ~= Settings.WordList + 1 then table.insert(order, lists[i]) end end local best, bestLen = nil, 0 for _, wlist in ipairs(order) do if type(wlist) == "table" then for _, v in pairs(wlist) do if v and type(v) == "string" then local lv = string.lower(v) if string.find(lv, lowerL, 1, true) and not table.find(UsedWords, v) and string.upper(v) ~= LastWord and #v > bestLen and WordMatchesDifficulty(v) then best = v; bestLen = #v end end end end end if best then table.insert(UsedWords, best); return string.upper(best) end return nil end local function GetTurn() for _, v in pairs(getgc()) do if type(v) == "function" and debug.getinfo(v).name == "updateInfoFrame" then for __, vv in ipairs(debug.getupvalues(v)) do if type(vv) == "table" and vv.PlayerID ~= nil then return vv.PlayerID end end end end return nil end local function GetLetters() for _, v in pairs(getgc()) do if type(v) == "function" and debug.getinfo(v).name == "updateInfoFrame" then for __, vv in pairs(debug.getupvalues(v)) do if type(vv) == "table" and vv.Prompt ~= nil then return vv.Prompt end end end end local PlayerGui = LocalPlayer:FindFirstChild("PlayerGui") if PlayerGui then local PromptLbl = PlayerGui:FindFirstChild("PromptLabel", true) if PromptLbl then return PromptLbl.Text end end return "" end local function SimulateKey(character) local keyCode if character == "\n" or character == "\r" then keyCode = Enum.KeyCode.Return else pcall(function() keyCode = Enum.KeyCode[string.upper(character)] end) end if keyCode then Services.VirtualInputManager:SendKeyEvent(true, keyCode, false, game) task.wait(0.01) Services.VirtualInputManager:SendKeyEvent(false, keyCode, false, game) end end local function SimulateBackspace() Services.VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Backspace, false, game) task.wait(0.01) Services.VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Backspace, false, game) end if Services.CoreGui:FindFirstChild("Unpatchabomb") then Services.CoreGui.Unpatchabomb:Destroy() end local Unpatchabomb = Instance.new("ScreenGui") Unpatchabomb.Name = "Unpatchabomb" Unpatchabomb.Parent = Services.CoreGui Unpatchabomb.ZIndexBehavior = Enum.ZIndexBehavior.Sibling Unpatchabomb.ResetOnSpawn = false local OuterFrame = Instance.new("Frame") OuterFrame.Name = "OuterFrame" OuterFrame.Parent = Unpatchabomb OuterFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 30) OuterFrame.BorderSizePixel = 0 OuterFrame.Position = UDim2.new(0.5, -160, 0.5, -200) OuterFrame.Size = UDim2.new(0, 320, 0, 0) OuterFrame.ClipsDescendants = true OuterFrame.BackgroundTransparency = 1 Instance.new("UICorner", OuterFrame).CornerRadius = UDim.new(0, 8) local TopFrame = Instance.new("Frame") TopFrame.Parent = OuterFrame TopFrame.BackgroundColor3 = Color3.fromRGB(12, 12, 12) TopFrame.BorderSizePixel = 0 TopFrame.Size = UDim2.new(1, 0, 0, 28) TopFrame.BackgroundTransparency = 1 Instance.new("UICorner", TopFrame).CornerRadius = UDim.new(0, 8) local T1 = Instance.new("TextLabel") T1.Parent = TopFrame T1.BackgroundTransparency = 1 T1.Size = UDim2.new(0.5, 0, 1, 0) T1.Position = UDim2.new(0.04, 0, 0, 0) T1.Font = Enum.Font.GothamBold T1.Text = "UNPATCHA" T1.TextColor3 = Color3.fromRGB(255, 255, 255) T1.TextSize = 14 T1.TextXAlignment = Enum.TextXAlignment.Left local T2 = Instance.new("TextLabel") T2.Parent = TopFrame T2.BackgroundTransparency = 1 T2.Size = UDim2.new(0.4, 0, 1, 0) T2.Position = UDim2.new(0.34, 0, 0, 0) T2.Font = Enum.Font.Gotham T2.Text = "BOMB | WPM" T2.TextColor3 = Color3.fromRGB(200, 200, 200) T2.TextSize = 14 T2.TextXAlignment = Enum.TextXAlignment.Left local MinimizeButton = Instance.new("TextButton") MinimizeButton.Parent = TopFrame MinimizeButton.BackgroundTransparency = 1 MinimizeButton.Position = UDim2.new(1, -28, 0, 0) MinimizeButton.Size = UDim2.new(0, 28, 1, 0) MinimizeButton.Font = Enum.Font.GothamBold MinimizeButton.Text = "—" MinimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255) MinimizeButton.TextSize = 18 local IntroFrame = Instance.new("Frame") IntroFrame.Parent = OuterFrame IntroFrame.BackgroundColor3 = Color3.fromRGB(22, 22, 22) IntroFrame.BorderSizePixel = 0 IntroFrame.Position = UDim2.new(0, 0, 0, 28) IntroFrame.Size = UDim2.new(1, 0, 1, -28) IntroFrame.ZIndex = 5 local function MakeIntroLabel(posY, sizeY, text, font, color) local l = Instance.new("TextLabel") l.Parent = IntroFrame l.BackgroundTransparency = 1 l.Position = UDim2.new(0, 0, posY, 0) l.Size = UDim2.new(1, 0, sizeY, 0) l.Font = font or Enum.Font.Gotham l.Text = text l.TextColor3 = color or Color3.fromRGB(255, 255, 255) l.TextScaled = true l.ZIndex = 5 return l end MakeIntroLabel(0.04, 0.13, "UNPATCHABOMB", Enum.Font.GothamBold) MakeIntroLabel(0.18, 0.07, "by aedynjames17", Enum.Font.GothamBold, Color3.fromRGB(180, 180, 255)) MakeIntroLabel(0.26, 0.07, "LET'S WIN EASILY.") local MOTDLabel = MakeIntroLabel(0.36, 0.10, MOTDs[math.random(1, #MOTDs)], Enum.Font.GothamBold, Color3.fromRGB(255, 220, 80)) MOTDLabel.TextWrapped = true local LoadingLabel = MakeIntroLabel(0.52, 0.07, "Loading...") local CountdownLabel = MakeIntroLabel(0.61, 0.12, "9", Enum.Font.GothamBold, Color3.fromRGB(100, 200, 255)) local ScriptBloxLabel = MakeIntroLabel(0.76, 0.07, "check me out on scriptblox!", Enum.Font.Gotham, Color3.fromRGB(180, 180, 180)) local ScriptBloxLink = MakeIntroLabel(0.83, 0.07, "scriptblox.com/u/aedynjames17", Enum.Font.GothamBold, Color3.fromRGB(100, 180, 255)) MakeIntroLabel(0.91, 0.07, "WPM Edition", Enum.Font.Gotham, Color3.fromRGB(140, 140, 140)) task.spawn(function() local dots = {"Loading.", "Loading..", "Loading..."} local di = 1 while LoadingLabel and LoadingLabel.Parent do LoadingLabel.Text = dots[di] di = (di % 3) + 1 task.wait(0.15) end end) task.spawn(function() for i = 9, 1, -1 do if CountdownLabel and CountdownLabel.Parent then CountdownLabel.Text = tostring(i) end task.wait(1) end end) local MainFrame = Instance.new("Frame") MainFrame.Parent = OuterFrame MainFrame.BackgroundColor3 = Color3.fromRGB(22, 22, 22) MainFrame.BorderSizePixel = 0 MainFrame.Position = UDim2.new(0, 0, 0, 28) MainFrame.Size = UDim2.new(1, 0, 1, -28) MainFrame.ClipsDescendants = true MainFrame.BackgroundTransparency = 1 Services.TweenService:Create( OuterFrame, TweenInfo.new(0.6, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.new(0, 320, 0, 390), Position = UDim2.new(0.5, -160, 0.5, -195), BackgroundTransparency = 0} ):Play() task.spawn(function() for i = 1, 10 do MainFrame.BackgroundTransparency = 1 - i/10 TopFrame.BackgroundTransparency = 1 - i/10 task.wait(0.03) end end) local function MakeLabel(parent, posY, sizeY, text, font) local l = Instance.new("TextLabel") l.Parent = parent l.BackgroundTransparency = 1 l.Position = UDim2.new(0.02, 0, posY, 0) l.Size = UDim2.new(0.96, 0, sizeY, 0) l.Font = font or Enum.Font.Gotham l.Text = text l.TextColor3 = Color3.fromRGB(255, 255, 255) l.TextScaled = true return l end local function MakeButton(parent, posY, sizeY, text, color) local b = Instance.new("TextButton") b.Parent = parent b.BackgroundColor3 = color or Color3.fromRGB(35, 35, 35) b.BorderSizePixel = 0 b.Position = UDim2.new(0.02, 0, posY, 0) b.Size = UDim2.new(0.96, 0, sizeY, 0) b.Font = Enum.Font.GothamBold b.Text = text b.TextColor3 = Color3.fromRGB(255, 255, 255) b.TextScaled = true Instance.new("UICorner", b).CornerRadius = UDim.new(0, 4) b.InputBegan:Connect(function(inp) if inp.UserInputType == Enum.UserInputType.MouseButton1 or inp.UserInputType == Enum.UserInputType.Touch then Services.TweenService:Create(b, TweenInfo.new(0.08, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0.96, 0, sizeY * 0.95, 0)}):Play() end end) b.InputEnded:Connect(function(inp) if inp.UserInputType == Enum.UserInputType.MouseButton1 or inp.UserInputType == Enum.UserInputType.Touch then Services.TweenService:Create(b, TweenInfo.new(0.08, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0.96, 0, sizeY, 0)}):Play() end end) return b end local function MakeTextBox(parent, posY, sizeY, placeholder) local tb = Instance.new("TextBox") tb.Parent = parent tb.BackgroundColor3 = Color3.fromRGB(12, 12, 12) tb.BorderSizePixel = 0 tb.Position = UDim2.new(0.02, 0, posY, 0) tb.Size = UDim2.new(0.96, 0, sizeY, 0) tb.Font = Enum.Font.GothamBold tb.PlaceholderText = placeholder tb.Text = "" tb.TextColor3 = Color3.fromRGB(255, 255, 255) tb.TextScaled = true tb.ClearTextOnFocus = true Instance.new("UICorner", tb).CornerRadius = UDim.new(0, 4) return tb end local WordText = MakeLabel(MainFrame, 0.01, 0.08, "Welcome to Unpatchabomb WPM!", Enum.Font.GothamBold) local LetterBox = MakeTextBox(MainFrame, 0.10, 0.075, "Type letters + Enter to auto-type") local StatusLabel = MakeLabel(MainFrame, 0.185, 0.075, "Status: Waiting for round...") StatusLabel.TextColor3 = Color3.fromRGB(180, 180, 180) local AutoTypeToggle = MakeButton(MainFrame, 0.265, 0.075, "Auto Type: OFF", Color3.fromRGB(40, 40, 40)) local AutoJoinToggle = MakeButton(MainFrame, 0.345, 0.075, "Auto Join: OFF", Color3.fromRGB(40, 40, 40)) local WPMBox = MakeTextBox(MainFrame, 0.425, 0.075, "Typing WPM (default: 120)") local JitterToggle = MakeButton(MainFrame, 0.505, 0.075, "Humanise WPM: ON", Color3.fromRGB(40, 80, 40)) local DifficultyColors = { Short = Color3.fromRGB(40, 100, 40), Medium = Color3.fromRGB(100, 80, 20), Hard = Color3.fromRGB(120, 30, 30), Any = Color3.fromRGB(40, 40, 80), } local DifficultyButton = MakeButton(MainFrame, 0.585, 0.075, DifficultyModes[DifficultyIndex], DifficultyColors["Any"]) local TypoPresets = {0, 0.02, 0.04, 0.08, 0.12, 0.20} local TypoIndex = 3 local TypoButton = MakeButton(MainFrame, 0.665, 0.075, string.format("Typo Chance: %d%%", math.floor(TypoPresets[TypoIndex] * 100)), Color3.fromRGB(80, 40, 40)) TypoButton.MouseButton1Click:Connect(function() TypoIndex = (TypoIndex % #TypoPresets) + 1 Settings.TypoChance = TypoPresets[TypoIndex] TypoButton.Text = string.format("Typo Chance: %d%%", math.floor(Settings.TypoChance * 100)) StatusLabel.Text = string.format("Status: Typo chance → %d%%", math.floor(Settings.TypoChance * 100)) end) local ListNames = {"List: English", "List: One", "List: Two", "List: Three"} local ListIndex = 1 local ListDropDown = MakeButton(MainFrame, 0.745, 0.075, ListNames[1], Color3.fromRGB(40, 40, 80)) local HowToUseText = MakeLabel(MainFrame, 0.83, 0.065, "Type letters + Enter | Auto types at WPM") HowToUseText.TextColor3 = Color3.fromRGB(140, 140, 140) local CreditText = MakeLabel(MainFrame, 0.90, 0.055, "by aedynjames17 | scriptblox.com/u/aedynjames17") CreditText.TextColor3 = Color3.fromRGB(100, 180, 255) local function SetStatus(msg) StatusLabel.Text = "Status: " .. msg end local TypeBox local function LinkTypeBox() local GameUI = LocalPlayer.PlayerGui:WaitForChild("GameUI", 5) if GameUI then TypeBox = GameUI:FindFirstChild("Typebox", true) GameUI.DescendantAdded:Connect(function(c) if c.Name == "Typebox" then TypeBox = c TypeBox:GetPropertyChangedSignal("Visible"):Connect(function() if Settings.AutoType then task.spawn(TryTyping) end end) end end) end end task.spawn(LinkTypeBox) local function TypeWord(word) if Typing then return end Typing = true burstCounter = 0 burstTarget = math.random(Settings.BurstMin, Settings.BurstMax) SetStatus(string.format("Typing '%s' @ %d WPM (typo: %d%%)", word, Settings.WPM, math.floor(Settings.TypoChance * 100))) if TypeBox then pcall(function() TypeBox:CaptureFocus() end) end local i = 1 while i <= #word do local char = string.sub(word, i, i) if Settings.TypoChance > 0 and math.random() < Settings.TypoChance then local lower = string.lower(char) local typoKey = TypoNeighbours[lower] or lower SimulateKey(typoKey) task.wait(GetLetterDelay()) task.wait(0.04 + math.random() * 0.08) SimulateBackspace() task.wait(0.03 + math.random() * 0.05) SimulateKey(char) else SimulateKey(char) end task.wait(GetLetterDelay()) i = i + 1 end task.wait(0.05) SimulateKey("\n") SetStatus("Submitted: " .. word) Typing = false end function TryTyping() if not Settings.AutoType or TypingActive then return end TypingActive = true while GetTurn() ~= LocalPlayer.UserId do if not Settings.AutoType then TypingActive = false return end task.wait(0.1) end if not Settings.AutoType then TypingActive = false return end local Word, attempts = nil, 0 repeat task.wait() local detectedLetters = GetLetters() if detectedLetters and detectedLetters ~= "" then LetterBox.Text = detectedLetters Word = FindWordAuto(detectedLetters) attempts += 1 if not Settings.AutoType then TypingActive = false return end end until Word or attempts >= 10 if Word then LastWord = Word task.wait(Settings.WordTypeDelay) if not Typing then TypeWord(Word) end task.wait(Settings.WordTypeDelay) if GetTurn() == LocalPlayer.UserId and Settings.AutoType then SetStatus("Still my turn — retrying…") LastWord = "" TypingActive = false TryTyping() return end else SetStatus("No word found for: " .. GetLetters()) end TypingActive = false end task.spawn(function() local lastPrompt = "" while task.wait(0.25) do if Settings.AutoType and GetTurn() == LocalPlayer.UserId and not Typing and not TypingActive then local currentPrompt = GetLetters() or "" if currentPrompt ~= "" and currentPrompt ~= lastPrompt then lastPrompt = currentPrompt task.spawn(TryTyping) end elseif GetTurn() ~= LocalPlayer.UserId then lastPrompt = "" end end end) LetterBox.FocusLost:Connect(function(enterPressed) if not enterPressed then return end local sub = LetterBox.Text if not sub or sub == "" then sub = GetLetters() if not sub or sub == "" then WordText.Text = "Error: empty input." return end end WordText.Text = sub .. " — Searching..." task.wait(0.1) local word = FindWordAuto(sub) or findWord(sub) if word then WordText.Text = "Typing: '" .. word .. "'..." task.spawn(function() TypeWord(word) WordText.Text = "Done: '" .. word .. "'" end) else WordText.Text = "No word found :(" end end) AutoTypeToggle.MouseButton1Click:Connect(function() Settings.AutoType = not Settings.AutoType local on = Settings.AutoType AutoTypeToggle.Text = "Auto Type: " .. (on and "ON" or "OFF") AutoTypeToggle.BackgroundColor3 = on and Color3.fromRGB(40, 80, 40) or Color3.fromRGB(40, 40, 40) SetStatus("Auto Type " .. (on and "Enabled" or "Disabled")) if not on then TypingActive = false end if on then task.spawn(TryTyping) end end) AutoJoinToggle.MouseButton1Click:Connect(function() Settings.AutoJoin = not Settings.AutoJoin local on = Settings.AutoJoin AutoJoinToggle.Text = "Auto Join: " .. (on and "ON" or "OFF") AutoJoinToggle.BackgroundColor3 = on and Color3.fromRGB(40, 80, 40) or Color3.fromRGB(40, 40, 40) SetStatus("Auto Join " .. (on and "Enabled" or "Disabled")) if on then for i = -1, -1000, -1 do Games.GameEvent:FireServer(i, "JoinGame") end end end) WPMBox.FocusLost:Connect(function() local n = tonumber(WPMBox.Text) if n then Settings.WPM = math.clamp(n, 10, 9999) SetStatus(string.format("WPM → %d (%.4fs/char)", Settings.WPM, 60 / (Settings.WPM * 5))) else SetStatus("Invalid WPM — enter a number.") end end) JitterToggle.MouseButton1Click:Connect(function() Settings.HumaniseWPM = not Settings.HumaniseWPM local on = Settings.HumaniseWPM JitterToggle.Text = "Humanise WPM: " .. (on and "ON" or "OFF") JitterToggle.BackgroundColor3 = on and Color3.fromRGB(40, 80, 40) or Color3.fromRGB(40, 40, 40) SetStatus("WPM jitter " .. (on and "ON" or "OFF")) end) DifficultyButton.MouseButton1Click:Connect(function() DifficultyIndex = (DifficultyIndex % #DifficultyModes) + 1 local name = DifficultyModes[DifficultyIndex] local key = name:match("Difficulty: (.+)") Settings.Difficulty = key DifficultyButton.Text = name DifficultyButton.BackgroundColor3 = DifficultyColors[key] SetStatus("Difficulty → " .. key) end) TypoButton.MouseButton1Click:Connect(function() TypoIndex = (TypoIndex % #TypoPresets) + 1 Settings.TypoChance = TypoPresets[TypoIndex] TypoButton.Text = string.format("Typo Chance: %d%%", math.floor(Settings.TypoChance * 100)) SetStatus(string.format("Typo chance → %d%%", math.floor(Settings.TypoChance * 100))) end) ListDropDown.MouseButton1Click:Connect(function() ListIndex = (ListIndex % #ListNames) + 1 Settings.WordList = ListIndex - 1 ListDropDown.Text = ListNames[ListIndex] SetStatus("Word list → " .. ListNames[ListIndex]) end) do local dragging, dragInput, dragStart, startPos TopFrame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = OuterFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) TopFrame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) Services.UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local d = input.Position - dragStart OuterFrame.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y ) end end) end local minimized = false MinimizeButton.MouseButton1Click:Connect(function() minimized = not minimized local targetSize = minimized and UDim2.new(0, 320, 0, 28) or UDim2.new(0, 320, 0, 390) local targetBodySize = minimized and UDim2.new(1, 0, 0, 0) or UDim2.new(1, 0, 1, -28) local glow = Instance.new("ImageLabel") glow.Parent = OuterFrame glow.BackgroundTransparency = 1 glow.Image = "rbxassetid://5028857084" glow.ImageColor3 = Color3.fromRGB(255, 255, 255) glow.Size = UDim2.new(1, 20, 1, 20) glow.Position = UDim2.new(0, -10, 0, -10) glow.ImageTransparency = 1 Services.TweenService:Create(glow, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageTransparency = 0.7}):Play() task.delay(0.4, function() glow:Destroy() end) Services.TweenService:Create(OuterFrame, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = targetSize}):Play() Services.TweenService:Create(MainFrame, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = targetBodySize}):Play() Services.TweenService:Create(IntroFrame, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = targetBodySize}):Play() MinimizeButton.Text = minimized and "+" or "—" end) task.delay(9, function() Services.TweenService:Create(IntroFrame, TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = UDim2.new(0, 0, 1, 0)}):Play() end) Games:WaitForChild("RegisterGame").OnClientEvent:Connect(function(int) GameID = int UsedWords = {} LastWord = "" SetStatus("Game registered — ID: " .. int) if Settings.AutoJoin then Games.GameEvent:FireServer(int, "JoinGame") end task.wait(1) if Settings.AutoType then task.spawn(TryTyping) end end)