UnpatchaBomb v4
Key Required

UnpatchaBomb v4

Word Bombalsotwentycharactersalsotwentycharacters 2.2K views 1.4K executesUpdated Jul 4, 2026
3.3/ 5(3 votes)
2167% Positive
Lua Scriptβ€’838 lines (31402 chars)
--[[
    WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
-- made by aedynjames17 on scriptblox
-- feel free to modify the script or contribute to it
-- new gui coming soon
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

pcall(function()
    loadstring(game:HttpGet("https://raw.githubusercontent.com/MarsQQ/Unpatchabomb/master/unpatchabomb_english_words", true))()
end)

local WordList = {}
pcall(function()
    WordList = loadstring(game:HttpGet("https://raw.githubusercontent.com/jjengu/scripts/refs/heads/main/wordbomb/words.lua"))() or {}
end)

local WordList_Two = {}
pcall(function()
    WordList_Two = loadstring(game:HttpGet("https://raw.githubusercontent.com/jjengu/scripts/refs/heads/main/wordbomb/words_two.lua"))() or {}
end)

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", "duos", "duo", 
    "immunochemesties", "army", "haha", "hah",
}

local MegaList = {}
local function merge(tbl)
    if type(tbl) ~= "table" then return end
    for _, v in pairs(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

local FinalWordList = 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 Games = Services.ReplicatedStorage:WaitForChild("Network", 10)
if Games then Games = Games:WaitForChild("Games", 10) end

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,
    TypoChance    = 0.04,
    BurstMin      = 3,
    BurstMax      = 7,
    MinLen        = 1,
    MaxLen        = 99
}

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 findWord(str)
    local best, bestLen = nil, 0
    local lowerStr = string.lower(str)
    for _, v in ipairs(FinalWordList) do
        if string.find(string.lower(v), lowerStr, 1, true) and not tableItemExists(alreadyUsed, v) then
            if #v >= Settings.MinLen and #v <= Settings.MaxLen and #v > bestLen then
                best = v
                bestLen = #v
            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 best, bestLen = nil, 0

    for _, v in ipairs(FinalWordList) do
        local lv = string.lower(v)
        if string.find(lv, lowerL, 1, true)
            and not table.find(UsedWords, string.upper(v))
            and string.upper(v) ~= LastWord
            and #v >= Settings.MinLen
            and #v <= Settings.MaxLen
            and #v > bestLen
        then
            best = v
            bestLen = #v
        end
    end

    if best then 
        table.insert(UsedWords, string.upper(best))
        return string.upper(best) 
    end
    return nil
end

local function GetTurn()
    local s, r = pcall(function()
        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
    end)
    if s and r then return r end
    return nil
end

local function GetLetters()
    local s, r = pcall(function()
        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
    end)
    if s and r then return r 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, -240)
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                 = "UnpatchaBomb ⚑ 4th of July! πŸŽ‡"
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.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, "PRO EDITION")
local LoadingLabel = MakeIntroLabel(0.76, 0.08, "Loading...")

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

local PatrioticGradient = Instance.new("UIGradient")
PatrioticGradient.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 20, 40)),
    ColorSequenceKeypoint.new(0.5, Color3.fromRGB(240, 240, 240)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(20, 60, 160))
})
PatrioticGradient.Rotation = 90
PatrioticGradient.Enabled = false
PatrioticGradient.Parent = OuterFrame

local StarOverlay = Instance.new("ImageLabel")
StarOverlay.Parent = OuterFrame
StarOverlay.BackgroundTransparency = 1
StarOverlay.Image = "rbxassetid://60768979"
StarOverlay.ImageColor3 = Color3.fromRGB(255, 255, 255)
StarOverlay.ImageTransparency = 0.4
StarOverlay.ScaleType = Enum.ScaleType.Tile
StarOverlay.TileSize = UDim2.new(0, 64, 0, 64)
StarOverlay.Size = UDim2.new(1, 0, 1, 0)
StarOverlay.Position = UDim2.new(0, 0, 0, 0)
StarOverlay.ZIndex = 0
StarOverlay.Visible = false

local FireworkOverlay = Instance.new("ImageLabel")
FireworkOverlay.Parent = OuterFrame
FireworkOverlay.BackgroundTransparency = 1
FireworkOverlay.Image = "rbxassetid://5028857084"
FireworkOverlay.ImageColor3 = Color3.fromRGB(255, 255, 255)
FireworkOverlay.ImageTransparency = 0.7
FireworkOverlay.Size = UDim2.new(1.2, 0, 1.2, 0)
FireworkOverlay.Position = UDim2.new(-0.1, 0, -0.1, 0)
FireworkOverlay.ZIndex = 1
FireworkOverlay.Visible = false

Services.TweenService:Create(
    OuterFrame,
    TweenInfo.new(0.6, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
    {Size = UDim2.new(0, 320, 0, 480),
     Position = UDim2.new(0.5, -160, 0.5, -240),
     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 function MakeSmallTextBox(parent, posX, posY, sizeX, sizeY, placeholder)
    local tb = Instance.new("TextBox")
    tb.Parent              = parent
    tb.BackgroundColor3    = Color3.fromRGB(12, 12, 12)
    tb.BorderSizePixel     = 0
    tb.Position            = UDim2.new(posX, 0, posY, 0)
    tb.Size                = UDim2.new(sizeX, 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.06, "UNPATCHABOMB", Enum.Font.GothamBold)
local LetterBox    = MakeTextBox(MainFrame, 0.08, 0.06, "Type letters + Enter to auto-type")
local StatusLabel  = MakeLabel(MainFrame,  0.15, 0.06, "Status: Waiting for round...")
StatusLabel.TextColor3 = Color3.fromRGB(180, 180, 180)

local AutoTypeToggle = MakeButton(MainFrame, 0.22, 0.06, "Auto Type: OFF",   Color3.fromRGB(40, 40, 40))
local AutoJoinToggle = MakeButton(MainFrame, 0.29, 0.06, "Auto Join: OFF",   Color3.fromRGB(40, 40, 40))
local WPMBox         = MakeTextBox(MainFrame, 0.36, 0.06, "Typing WPM (default: 120)")
local JitterToggle   = MakeButton(MainFrame, 0.43, 0.06, "Humanise WPM: ON", Color3.fromRGB(40, 80, 40))

local TypoPresets   = {0, 0.02, 0.04, 0.08, 0.12, 0.20}
local TypoIndex     = 3
local TypoButton    = MakeButton(MainFrame, 0.50, 0.06,
    string.format("Typo Chance: %d%%", math.floor(TypoPresets[TypoIndex] * 100)),
    Color3.fromRGB(80, 40, 40))

local MinLenBox = MakeSmallTextBox(MainFrame, 0.02, 0.57, 0.47, 0.06, "Min Length (1)")
local MaxLenBox = MakeSmallTextBox(MainFrame, 0.51, 0.57, 0.47, 0.06, "Max Length (99)")

local OldGUIButton = MakeButton(MainFrame, 0.64, 0.06, "Switch Theme: Patriotic", Color3.fromRGB(50, 50, 50))

local HowToUseText = MakeLabel(MainFrame, 0.75, 0.1,
    "Modern UI Active\nMin/Max len set via textboxes")
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
    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 = 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 and Games then
        pcall(function()
            for i = -1, -1000, -1 do Games.GameEvent:FireServer(i, "JoinGame") end
        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)

MinLenBox.FocusLost:Connect(function()
    local n = tonumber(MinLenBox.Text)
    if n then
        Settings.MinLen = math.clamp(n, 1, 99)
        SetStatus("Min Length β†’ " .. Settings.MinLen)
    else
        Settings.MinLen = 1
        SetStatus("Min Length β†’ Default (1)")
    end
end)

MaxLenBox.FocusLost:Connect(function()
    local n = tonumber(MaxLenBox.Text)
    if n then
        Settings.MaxLen = math.clamp(n, 1, 99)
        SetStatus("Max Length β†’ " .. Settings.MaxLen)
    else
        Settings.MaxLen = 99
        SetStatus("Max Length β†’ Default (99)")
    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)

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 currentTheme = "Patriotic"

local function ApplyTheme(theme)
    currentTheme = theme
    if theme == "Patriotic" then
        PatrioticGradient.Enabled = true
        StarOverlay.Visible = true
        FireworkOverlay.Visible = true
        OuterFrame.BackgroundColor3 = Color3.fromRGB(10, 10, 20)
        TopFrame.BackgroundColor3 = Color3.fromRGB(10, 10, 25)
        MainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 30)
        WordText.TextColor3 = Color3.fromRGB(255, 255, 255)
        LetterBox.BackgroundColor3 = Color3.fromRGB(10, 10, 20)
        StatusLabel.TextColor3 = Color3.fromRGB(220, 220, 220)
        AutoTypeToggle.BackgroundColor3 = Color3.fromRGB(180, 30, 50)
        AutoJoinToggle.BackgroundColor3 = Color3.fromRGB(30, 80, 160)
        JitterToggle.BackgroundColor3 = Settings.HumaniseWPM and Color3.fromRGB(40, 120, 60) or Color3.fromRGB(40, 40, 40)
        TypoButton.BackgroundColor3 = Color3.fromRGB(160, 40, 60)
        WPMBox.BackgroundColor3 = Color3.fromRGB(10, 10, 25)
        MinLenBox.BackgroundColor3 = Color3.fromRGB(10, 10, 25)
        MaxLenBox.BackgroundColor3 = Color3.fromRGB(10, 10, 25)
        OldGUIButton.BackgroundColor3 = Color3.fromRGB(20, 60, 140)
        OldGUIButton.Text = "Switch Theme: Modern"
        HowToUseText.TextColor3 = Color3.fromRGB(230, 230, 230)
        HowToUseText.Text = "Patriotic UI Active\nMin/Max len set via textboxes"
        T1.TextColor3 = Color3.fromRGB(255, 255, 255)
        T2.TextColor3 = Color3.fromRGB(230, 230, 230)
        MinimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
    else
        PatrioticGradient.Enabled = false
        StarOverlay.Visible = false
        FireworkOverlay.Visible = false
        OuterFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
        TopFrame.BackgroundColor3 = Color3.fromRGB(12, 12, 12)
        MainFrame.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
        WordText.TextColor3 = Color3.fromRGB(255, 255, 255)
        LetterBox.BackgroundColor3 = Color3.fromRGB(12, 12, 12)
        StatusLabel.TextColor3 = Color3.fromRGB(180, 180, 180)
        AutoTypeToggle.BackgroundColor3 = Settings.AutoType and Color3.fromRGB(40, 80, 40) or Color3.fromRGB(40, 40, 40)
        AutoJoinToggle.BackgroundColor3 = Settings.AutoJoin and Color3.fromRGB(40, 80, 40) or Color3.fromRGB(40, 40, 40)
        JitterToggle.BackgroundColor3 = Settings.HumaniseWPM and Color3.fromRGB(40, 80, 40) or Color3.fromRGB(40, 40, 40)
        TypoButton.BackgroundColor3 = Color3.fromRGB(80, 40, 40)
        WPMBox.BackgroundColor3 = Color3.fromRGB(12, 12, 12)
        MinLenBox.BackgroundColor3 = Color3.fromRGB(12, 12, 12)
        MaxLenBox.BackgroundColor3 = Color3.fromRGB(12, 12, 12)
        OldGUIButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
        OldGUIButton.Text = "Switch Theme: Patriotic"
        HowToUseText.TextColor3 = Color3.fromRGB(140, 140, 140)
        HowToUseText.Text = "Modern UI Active\nMin/Max len set via textboxes"
        T1.TextColor3 = Color3.fromRGB(255, 255, 255)
        T2.TextColor3 = Color3.fromRGB(200, 200, 200)
        MinimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
    end
end

ApplyTheme("Patriotic")

OldGUIButton.MouseButton1Click:Connect(function()
    if currentTheme == "Patriotic" then
        ApplyTheme("Modern")
        SetStatus("Switched to Modern UI")
    else
        ApplyTheme("Patriotic")
        SetStatus("Switched to Patriotic UI")
    end
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, 480)
    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)

if Games then
    local registerGame = Games:FindFirstChild("RegisterGame")
    if registerGame then
        registerGame.OnClientEvent:Connect(function(int)
            GameID    = int
            UsedWords = {}
            LastWord  = ""
            SetStatus("Game registered β€” ID: " .. int)
            if Settings.AutoJoin then 
                pcall(function() Games.GameEvent:FireServer(int, "JoinGame") end)
            end
            task.wait(1)
            if Settings.AutoType then task.spawn(TryTyping) end
        end)
    end
end

Features & Information

4th of july version! added "Patriotic" theme increased top WPM (9999 -> 10000) added 1,481 words to word dictionary repository scriptblox mods stop taking down my script >:(

Community Comments (16)

starting now, unpatchaBomb will auto-update.

Replying to @alsotwentycharacters

this is so i dont have to continue making new versions

Replying to @alsotwentycharacters

@Wortexios Seems as if your GitHub may be disabled, or who ever owns the account: jjengu

Replying to @Experienced_Coder

@Experienced_Coder my account on GitHub is @aedynjames17, so that isn't mine, thanks.

Replying to @alsotwentycharacters
Experienced_CoderExperienced_CoderJul 9, 2026(edited)

@Wortexios I apologize, do you plan to upload them on your own account? Or is this script partly managed by another developer or person with a developer type of role, or?

Replying to @Experienced_Coder

@Experienced_Coder i make all of these myself, they are open-src so that you can modify them to your heart's content

Tsuki2202Tsuki2202Jul 6, 2026

auto type does not work

Replying to @Tsuki2202

@Tsuki2202 it does, however, your executor must support require. solara and xeno won't work. get Madium or Velocity.

Experienced_CoderExperienced_CoderJul 9, 2026(edited)

Also, I could not locate your GitHub account with that username, and I recommend putting your code into a Loadstring on GitHub, then post it on Pastebin and Pastefy as fallbacks for your script, I had to do that, and I receive more users, because if GitHub goes down, or my account receives a suspension or something similar, it loads Pastebin and Pastefy as a backup, if you need, I can friend you on Discord or something similar, and give you some code to do that! Just let me know, always happy to help.

Replying to @Experienced_Coder

@Experienced_Coder my github account was terminated

this dude deserves a verified badge fr πŸ₯Ί

Replying to @alsotwentycharacters

@Wortexios Lol, you're lowkey funny, I can't lie, but also, I love that you included the source code like that so the users can modify them how ever they want, I love that, and I guess it doesn't really matter since Delta users will just run it anyway πŸ˜­πŸ˜­πŸ™

Replying to @Experienced_Coder
alsotwentycharactersalsotwentycharactersJul 9, 2026(edited)

@Experienced_Coder * skids haha. yea most of my projects are free/keyless and all that cuz idc about the income i guess? i just code for the fun of it. most of my time is spent in roblox studio anyway

Replying to @Experienced_Coder

xeno and delta users

new version coming very soon (v4.3), with new UI, new plugins, and more... πŸ‘€

NOTE: As of now, the script is currently broken, i am working on a fix

More Scripts for Word Bomb