
Key Required VerifiedUniversal
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
loadstring(game:HttpGet("https://raw.githubusercontent.com/MarsQQ/Unpatchabomb/master/unpatchabomb_english_words", true))()
local WordList = loadstring(game:HttpGet("https://raw.githubusercontent.com/jjengu/scripts/refs/heads/main/wordbomb/words.lua"))()
local WordList_Two = loadstring(game:HttpGet("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",
}
local MegaList = {}
local function merge(tbl)
for _, v in ipairs(tbl) do
if type(v) == "string" then
MegaList[#MegaList + 1] = v
end
end
end
merge(ENGLISH_WORDS)
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 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 Settings = {
WordList = 0,
AutoType = false,
AutoJoin = false,
WPM = 120,
WordTypeDelay = 0.3,
HumaniseWPM = true,
ReactionTime = 0.35
}
local function GetLetterDelay()
local base = 60 / (Settings.WPM * 5)
if Settings.HumaniseWPM then
base = base * (0.85 + math.random() * 0.30)
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 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) 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
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
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
local UICorner = Instance.new("UICorner", OuterFrame)
UICorner.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)
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 = Color3.fromRGB(255, 255, 255)
l.TextScaled = true
l.ZIndex = 5
return l
end
MakeIntroLabel(0.38, 0.15, "UNPATCHABOMB", Enum.Font.GothamBold)
MakeIntroLabel(0.54, 0.08, "LET'S WIN EASILY.")
local LoadingLabel = MakeIntroLabel(0.76, 0.08, "Loading...")
MakeIntroLabel(0.86, 0.08, "WPM Edition")
task.spawn(function()
while LoadingLabel and LoadingLabel.Parent do
LoadingLabel.Text = "Loading." ; task.wait(0.15)
LoadingLabel.Text = "Loading.." ; task.wait(0.15)
LoadingLabel.Text = "Loading..."; task.wait(0.15)
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, 320), Position = UDim2.new(0.5, -160, 0.5, -140), BackgroundTransparency = 0}
):Play()
task.spawn(function()
for i = 1, 10 do
local t = i / 10
MainFrame.BackgroundTransparency = 1 - t
TopFrame.BackgroundTransparency = 1 - t
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(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.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(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.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.11, "Welcome to Unpatchabomb WPM!", Enum.Font.GothamBold)
local LetterBox = MakeTextBox(MainFrame, 0.13, 0.10, "Type letters + Enter to auto-type")
local StatusLabel = MakeLabel(MainFrame, 0.24, 0.09, "Status: Waiting for round...")
StatusLabel.TextColor3 = Color3.fromRGB(180, 180, 180)
local AutoTypeToggle = MakeButton(MainFrame, 0.34, 0.10, "Auto Type: OFF", Color3.fromRGB(40, 40, 40))
local AutoJoinToggle = MakeButton(MainFrame, 0.45, 0.10, "Auto Join: OFF", Color3.fromRGB(40, 40, 40))
local WPMBox = MakeTextBox(MainFrame, 0.56, 0.09, "Typing WPM (default: 120)")
local JitterToggle = MakeButton(MainFrame, 0.66, 0.09, "Humanise WPM: ON", Color3.fromRGB(40, 80, 40))
local ListNames = {"List: English", "List: One", "List: Two", "List: Three"}
local ListIndex = 1
local ListDropDown = MakeButton(MainFrame, 0.76, 0.09, ListNames[1], Color3.fromRGB(40, 40, 80))
local HowToUseText = MakeLabel(MainFrame, 0.87, 0.07, "Type letters + Enter | Auto types at WPM")
HowToUseText.TextColor3 = Color3.fromRGB(140, 140, 140)
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
SetStatus(string.format("Typing '%s' @ %d WPM", word, Settings.WPM))
if TypeBox then pcall(function() TypeBox:CaptureFocus() end) end
for i = 1, #word do
local char = string.sub(word, i, i)
SimulateKey(char)
task.wait(GetLetterDelay())
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)
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, 320)
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(2, 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)
W man
@2zf69s16m9 ^^ ty, i spent a long time working on this!
@Aedynjames17 its literally from claude
THX MAN
im glad yall enjoy it ;)
@Aedynjames17 its really good, but it doesnt actually type out the words, it just magically puts the whole word at once making it really blatant, but definitely work
@ALTERRATIC script is now updated with your suggestion!
does not work on xeno
@rat37440 of course it doesnt. Xeno lacks required methods n stuff. you need a better executor