Marvellous Menu
Key Required

Marvellous Menu

[SPOOKY] Marvellous SmackdownIDoThatBudIDoThatBud 2.6K views 3.1K executesUpdated Jul 9, 2026
3.3/ 5(3 votes)
2167% Positive
Lua Script•840 lines (28125 chars)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

local CHARS_PATH = ReplicatedStorage:WaitForChild("Characters")
local CHOSEN_VALUE_NAME = "CharacterCHOSENVALUE"
local CAMERA_REMOTES_PATH = {"Remotes", "Camera"}
local DISABLED_PREFIX = "__off_"
local UI_TOGGLE_KEY = Enum.KeyCode.RightControl
local MOUSE_UNLOCK_KEY = Enum.KeyCode.M
local HOLD_INTERVAL = 0.12
local RAPID_INTERVAL = 0.03

local AttackKeybinds = {}
local AttackModes = {}
local HeldKeys = {}
local FireTimers = {}
local SidebarEntries = {}
local CameraToggles = {}
local CapturingKeybindFor, CapturingKeybindBtn = nil, nil
local MouseUnlocked, Minimized = false, false
local SelectedCharacter = nil
local ActiveTab = "Abilities"

local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")

local function make(class, props, parent)
	local obj = Instance.new(class)
	for k, v in pairs(props) do obj[k] = v end
	if parent then obj.Parent = parent end
	return obj
end
local function corner(r, p) make("UICorner", {CornerRadius=UDim.new(0,r)}, p) end
local function pad(t, l, r, b, p)
	make("UIPadding", {PaddingTop=UDim.new(0,t),PaddingLeft=UDim.new(0,l),PaddingRight=UDim.new(0,r),PaddingBottom=UDim.new(0,b or 0)}, p)
end
local function stroke(th, col, p)
	make("UIStroke", {Thickness=th,Color=col,ApplyStrokeMode=Enum.ApplyStrokeMode.Border}, p)
end

local C = {
	BG      = Color3.fromRGB(8,   8,   8),
	PANEL   = Color3.fromRGB(13,  13,  13),
	ROW     = Color3.fromRGB(20,  20,  20),
	BAR     = Color3.fromRGB(11,  11,  11),
	BTN     = Color3.fromRGB(30,  30,  30),
	BORDER  = Color3.fromRGB(40,  40,  40),
	BORDLO  = Color3.fromRGB(28,  28,  28),
	WHITE   = Color3.fromRGB(220, 220, 220),
	DIM     = Color3.fromRGB(90,  90,  90),
	MID     = Color3.fromRGB(140, 140, 140),
	SEARCH  = Color3.fromRGB(15,  15,  15),
	SEL_BG  = Color3.fromRGB(26,  26,  26),
	SEL_TXT = Color3.fromRGB(200, 200, 200),
	TAB_ACT = Color3.fromRGB(26,  26,  26),
	ON      = Color3.fromRGB(200, 200, 200),
	OFF     = Color3.fromRGB(30,  30,  30),
	PENDING = Color3.fromRGB(50,  44,  18),
}

local MODES = {"Click", "Hold", "Rapid"}
local MODE_CFG = {
	Click = {bg=Color3.fromRGB(22,22,22),    tc=Color3.fromRGB(75,75,75),    br=Color3.fromRGB(35,35,35)},
	Hold  = {bg=Color3.fromRGB(35,35,35),    tc=Color3.fromRGB(160,160,160), br=Color3.fromRGB(55,55,55)},
	Rapid = {bg=Color3.fromRGB(210,210,210), tc=Color3.fromRGB(15,15,15),    br=Color3.fromRGB(180,180,180)},
}

local ScreenGui = make("ScreenGui", {
	Name="AbilityManagerUI", ResetOnSpawn=false, IgnoreGuiInset=true, DisplayOrder=15
}, PlayerGui)

local ModalButton = make("TextButton", {
	Size=UDim2.new(0,0,0,0), BackgroundTransparency=1, Modal=false, Text="", ZIndex=1
}, ScreenGui)

local CaptureOverlay = make("TextButton", {
	Size=UDim2.new(1,0,1,0), BackgroundTransparency=1, Text="", ZIndex=4, Visible=false
}, ScreenGui)

local MainFrame = make("Frame", {
	Name="MainFrame", Size=UDim2.new(0,500,0,420),
	Position=UDim2.new(0.5,-250,0.5,-210),
	BackgroundColor3=C.BG, BorderSizePixel=0, ClipsDescendants=true
}, ScreenGui)
corner(8, MainFrame)
stroke(1, C.BORDER, MainFrame)

local TitleBar = make("Frame", {
	Size=UDim2.new(1,0,0,32), BackgroundColor3=C.BAR, BorderSizePixel=0, Active=true
}, MainFrame)
corner(8, TitleBar)
make("Frame", {
	Size=UDim2.new(1,0,0.5,0), Position=UDim2.new(0,0,0.5,0),
	BackgroundColor3=C.BAR, BorderSizePixel=0
}, TitleBar)
make("Frame", {
	Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
	BackgroundColor3=C.BORDER, BorderSizePixel=0
}, TitleBar)

make("TextLabel", {
	Size=UDim2.new(0,160,1,0), Position=UDim2.new(0,10,0,0),
	BackgroundTransparency=1, Text="Ability Manager",
	TextColor3=C.WHITE, TextXAlignment=Enum.TextXAlignment.Left,
	Font=Enum.Font.GothamBold, TextSize=12
}, TitleBar)

local function titleBtn(xOff, w, label)
	local b = make("TextButton", {
		Size=UDim2.new(0,w,0,20), Position=UDim2.new(1,xOff,0.5,-10),
		BackgroundColor3=C.BTN, BorderSizePixel=0,
		Text=label, TextColor3=C.MID,
		Font=Enum.Font.GothamBold, TextSize=11, ZIndex=5
	}, TitleBar)
	corner(4, b)
	stroke(1, C.BORDER, b)
	return b
end

local CloseBtn    = titleBtn(-26,  20, "X")
local MinimizeBtn = titleBtn(-52,  20, "-")
local MouseBtn    = titleBtn(-122, 64, "Unlock [M]")
MouseBtn.TextSize = 10

local function SetMouseUnlock(state)
	MouseUnlocked = state
	ModalButton.Modal = state
	MouseBtn.Text = state and "Lock [M]" or "Unlock [M]"
	MouseBtn.TextColor3 = state and C.WHITE or C.MID
	MouseBtn.BackgroundColor3 = state and Color3.fromRGB(38,38,38) or C.BTN
end
MouseBtn.MouseButton1Click:Connect(function() SetMouseUnlock(not MouseUnlocked) end)

local TabBar = make("Frame", {
	Size=UDim2.new(1,0,0,28), Position=UDim2.new(0,0,0,32),
	BackgroundColor3=C.PANEL, BorderSizePixel=0
}, MainFrame)
make("Frame", {
	Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
	BackgroundColor3=C.BORDER, BorderSizePixel=0
}, TabBar)

local function makeTab(label, xPos, w)
	local t = make("TextButton", {
		Size=UDim2.new(0,w,0,22), Position=UDim2.new(0,xPos,0.5,-11),
		BackgroundColor3=C.BTN, BorderSizePixel=0,
		Text=label, TextColor3=C.DIM,
		Font=Enum.Font.GothamBold, TextSize=10, ZIndex=3
	}, TabBar)
	corner(4, t)
	stroke(1, C.BORDLO, t)
	return t
end

local TabAbilities = makeTab("Abilities", 6, 72)
local TabSettings  = makeTab("Settings",  84, 62)

local Body = make("Frame", {
	Size=UDim2.new(1,0,1,-60), Position=UDim2.new(0,0,0,60),
	BackgroundTransparency=1, BorderSizePixel=0
}, MainFrame)

local AbilitiesPanel = make("Frame", {
	Size=UDim2.new(1,0,1,0), BackgroundTransparency=1, BorderSizePixel=0
}, Body)

make("Frame", {
	Size=UDim2.new(0,1,1,0), Position=UDim2.new(0,148,0,0),
	BackgroundColor3=C.BORDER, BorderSizePixel=0
}, AbilitiesPanel)

local SidebarBg = make("Frame", {
	Size=UDim2.new(0,148,1,0), BackgroundColor3=C.PANEL, BorderSizePixel=0
}, AbilitiesPanel)

local SidebarHeader = make("Frame", {
	Size=UDim2.new(1,0,0,72), BackgroundColor3=C.BAR, BorderSizePixel=0
}, SidebarBg)
make("Frame", {
	Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
	BackgroundColor3=C.BORDER, BorderSizePixel=0
}, SidebarHeader)

make("TextLabel", {
	Size=UDim2.new(1,0,0,20), Position=UDim2.new(0,0,0,4),
	BackgroundTransparency=1, Text="CHARACTERS",
	TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Center,
	Font=Enum.Font.GothamBold, TextSize=9
}, SidebarHeader)

local StatusLabel = make("TextLabel", {
	Size=UDim2.new(1,-8,0,18), Position=UDim2.new(0,4,0,24),
	BackgroundColor3=C.SEARCH, BorderSizePixel=0,
	Text="Active: None", TextColor3=C.DIM,
	Font=Enum.Font.Gotham, TextSize=10
}, SidebarHeader)
corner(4, StatusLabel)
stroke(1, C.BORDLO, StatusLabel)

local SearchBox = make("TextBox", {
	Size=UDim2.new(1,-8,0,20), Position=UDim2.new(0,4,0,46),
	BackgroundColor3=C.SEARCH, BorderSizePixel=0,
	Text="", PlaceholderText="Search...",
	TextColor3=C.WHITE, PlaceholderColor3=C.DIM,
	Font=Enum.Font.Gotham, TextSize=11,
	ClearTextOnFocus=false, ZIndex=5
}, SidebarHeader)
corner(4, SearchBox)
stroke(1, C.BORDLO, SearchBox)

local SidebarScroll = make("ScrollingFrame", {
	Size=UDim2.new(1,0,1,-72), Position=UDim2.new(0,0,0,72),
	BackgroundTransparency=1, BorderSizePixel=0,
	ScrollBarThickness=2, ScrollBarImageColor3=C.BORDER,
	CanvasSize=UDim2.new(0,0,0,0), AutomaticCanvasSize=Enum.AutomaticSize.Y
}, SidebarBg)
make("UIListLayout", {Padding=UDim.new(0,2), SortOrder=Enum.SortOrder.LayoutOrder}, SidebarScroll)
pad(4,4,4,0, SidebarScroll)

local MainPanel = make("Frame", {
	Size=UDim2.new(1,-149,1,0), Position=UDim2.new(0,149,0,0),
	BackgroundTransparency=1, BorderSizePixel=0
}, AbilitiesPanel)

local PanelHeader = make("Frame", {
	Size=UDim2.new(1,0,0,32), BackgroundColor3=C.BAR, BorderSizePixel=0
}, MainPanel)
make("Frame", {
	Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
	BackgroundColor3=C.BORDER, BorderSizePixel=0
}, PanelHeader)

local PanelHeaderLabel = make("TextLabel", {
	Size=UDim2.new(1,-116,1,0), Position=UDim2.new(0,10,0,0),
	BackgroundTransparency=1, Text="Select a character",
	TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Left,
	Font=Enum.Font.GothamBold, TextSize=11
}, PanelHeader)

local SelectBtn = make("TextButton", {
	Size=UDim2.new(0,100,0,22), Position=UDim2.new(1,-106,0.5,-11),
	BackgroundColor3=C.BTN, BorderSizePixel=0,
	Text="Use Character", TextColor3=C.MID,
	Font=Enum.Font.GothamBold, TextSize=10, ZIndex=5, Visible=false
}, PanelHeader)
corner(4, SelectBtn)
stroke(1, C.BORDER, SelectBtn)

local ColHeader = make("Frame", {
	Size=UDim2.new(1,0,0,20), Position=UDim2.new(0,0,0,32),
	BackgroundColor3=C.PANEL, BorderSizePixel=0
}, MainPanel)
make("Frame", {
	Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
	BackgroundColor3=C.BORDLO, BorderSizePixel=0
}, ColHeader)
for _, cfg in ipairs({
	{text="ABILITY",  pos=UDim2.new(0,10,0,0),     size=UDim2.new(1,-198,1,0), align=Enum.TextXAlignment.Left},
	{text="MODE",     pos=UDim2.new(1,-190,0,0),   size=UDim2.new(0,50,1,0),  align=Enum.TextXAlignment.Center},
	{text="FIRE",     pos=UDim2.new(1,-134,0,0),   size=UDim2.new(0,44,1,0),  align=Enum.TextXAlignment.Center},
	{text="KEYBIND",  pos=UDim2.new(1,-82,0,0),    size=UDim2.new(0,76,1,0),  align=Enum.TextXAlignment.Center},
}) do
	make("TextLabel", {
		Size=cfg.size, Position=cfg.pos, BackgroundTransparency=1,
		Text=cfg.text, TextColor3=C.DIM, TextXAlignment=cfg.align,
		Font=Enum.Font.GothamBold, TextSize=9
	}, ColHeader)
end

local AttackScroll = make("ScrollingFrame", {
	Size=UDim2.new(1,0,1,-70), Position=UDim2.new(0,0,0,52),
	BackgroundTransparency=1, BorderSizePixel=0,
	ScrollBarThickness=2, ScrollBarImageColor3=C.BORDER,
	CanvasSize=UDim2.new(0,0,0,0), AutomaticCanvasSize=Enum.AutomaticSize.Y
}, MainPanel)
make("UIListLayout", {Padding=UDim.new(0,2), SortOrder=Enum.SortOrder.LayoutOrder}, AttackScroll)
pad(4,6,6,0, AttackScroll)

local AbilityHint = make("Frame", {
	Size=UDim2.new(1,-149,0,18), Position=UDim2.new(0,149,1,-18),
	BackgroundColor3=C.BAR, BorderSizePixel=0, ZIndex=2
}, AbilitiesPanel)
make("Frame", {
	Size=UDim2.new(1,0,0,1), BackgroundColor3=C.BORDLO, BorderSizePixel=0, ZIndex=2
}, AbilityHint)
make("TextLabel", {
	Size=UDim2.new(1,-8,1,0), Position=UDim2.new(0,8,0,0),
	BackgroundTransparency=1,
	Text="Left-click keybind to set  |  Right-click to clear  |  Mode cycles: Click > Hold > Rapid",
	TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Left,
	Font=Enum.Font.Gotham, TextSize=9, ZIndex=3
}, AbilityHint)

local SettingsPanel = make("Frame", {
	Size=UDim2.new(1,0,1,0), BackgroundTransparency=1, BorderSizePixel=0, Visible=false
}, Body)

local SettingsHeader = make("Frame", {
	Size=UDim2.new(1,0,0,52), BackgroundColor3=C.BAR, BorderSizePixel=0
}, SettingsPanel)
make("Frame", {
	Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
	BackgroundColor3=C.BORDER, BorderSizePixel=0
}, SettingsHeader)

make("TextLabel", {
	Size=UDim2.new(1,-200,0,20), Position=UDim2.new(0,12,0,6),
	BackgroundTransparency=1,
	Text="Camera Shake Remotes",
	TextColor3=C.WHITE, TextXAlignment=Enum.TextXAlignment.Left,
	Font=Enum.Font.GothamBold, TextSize=12
}, SettingsHeader)
make("TextLabel", {
	Size=UDim2.new(1,-200,0,14), Position=UDim2.new(0,12,0,28),
	BackgroundTransparency=1,
	Text="Mark changes then Apply — reset yourself after for it to take effect.",
	TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Left,
	Font=Enum.Font.Gotham, TextSize=9
}, SettingsHeader)

local AllOnBtn = make("TextButton", {
	Size=UDim2.new(0,46,0,20), Position=UDim2.new(1,-196,0.5,-10),
	BackgroundColor3=C.BTN, BorderSizePixel=0,
	Text="All On", TextColor3=C.MID,
	Font=Enum.Font.GothamBold, TextSize=10, ZIndex=5
}, SettingsHeader)
corner(4, AllOnBtn)
stroke(1, C.BORDER, AllOnBtn)

local AllOffBtn = make("TextButton", {
	Size=UDim2.new(0,46,0,20), Position=UDim2.new(1,-144,0.5,-10),
	BackgroundColor3=C.BTN, BorderSizePixel=0,
	Text="All Off", TextColor3=C.MID,
	Font=Enum.Font.GothamBold, TextSize=10, ZIndex=5
}, SettingsHeader)
corner(4, AllOffBtn)
stroke(1, C.BORDER, AllOffBtn)

local ApplyChangesBtn = make("TextButton", {
	Size=UDim2.new(0,84,0,20), Position=UDim2.new(1,-88,0.5,-10),
	BackgroundColor3=Color3.fromRGB(38,34,16), BorderSizePixel=0,
	Text="Apply Changes", TextColor3=Color3.fromRGB(200,180,80),
	Font=Enum.Font.GothamBold, TextSize=10, ZIndex=5
}, SettingsHeader)
corner(4, ApplyChangesBtn)
stroke(1, Color3.fromRGB(80,70,30), ApplyChangesBtn)

local SettingsColHeader = make("Frame", {
	Size=UDim2.new(1,0,0,20), Position=UDim2.new(0,0,0,52),
	BackgroundColor3=C.PANEL, BorderSizePixel=0
}, SettingsPanel)
make("Frame", {
	Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
	BackgroundColor3=C.BORDLO, BorderSizePixel=0
}, SettingsColHeader)
make("TextLabel", {
	Size=UDim2.new(1,-80,1,0), Position=UDim2.new(0,12,0,0),
	BackgroundTransparency=1, Text="REMOTE NAME",
	TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Left,
	Font=Enum.Font.GothamBold, TextSize=9
}, SettingsColHeader)
make("TextLabel", {
	Size=UDim2.new(0,70,1,0), Position=UDim2.new(1,-76,0,0),
	BackgroundTransparency=1, Text="STATE",
	TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Center,
	Font=Enum.Font.GothamBold, TextSize=9
}, SettingsColHeader)

local SettingsScroll = make("ScrollingFrame", {
	Size=UDim2.new(1,0,1,-72), Position=UDim2.new(0,0,0,72),
	BackgroundTransparency=1, BorderSizePixel=0,
	ScrollBarThickness=2, ScrollBarImageColor3=C.BORDER,
	CanvasSize=UDim2.new(0,0,0,0), AutomaticCanvasSize=Enum.AutomaticSize.Y
}, SettingsPanel)
make("UIListLayout", {Padding=UDim.new(0,2), SortOrder=Enum.SortOrder.LayoutOrder}, SettingsScroll)
pad(4,6,6,0, SettingsScroll)

local function SetTab(name)
	ActiveTab = name
	AbilitiesPanel.Visible = name == "Abilities"
	SettingsPanel.Visible  = name == "Settings"
	TabAbilities.BackgroundColor3 = name == "Abilities" and C.TAB_ACT or C.BTN
	TabAbilities.TextColor3       = name == "Abilities" and C.WHITE   or C.DIM
	TabSettings.BackgroundColor3  = name == "Settings"  and C.TAB_ACT or C.BTN
	TabSettings.TextColor3        = name == "Settings"  and C.WHITE   or C.DIM
end

TabAbilities.MouseButton1Click:Connect(function() SetTab("Abilities") end)
TabSettings.MouseButton1Click:Connect(function()  SetTab("Settings")  end)
SetTab("Abilities")

local function GetCameraFolder()
	local node = ReplicatedStorage
	for _, part in ipairs(CAMERA_REMOTES_PATH) do
		node = node:FindFirstChild(part)
		if not node then return nil end
	end
	return node
end

local function IsDisabled(remote)
	return remote.Name:sub(1, #DISABLED_PREFIX) == DISABLED_PREFIX
end

local function UpdateToggleVisual(entry)
	local desired = entry.pending ~= nil and entry.pending or entry.enabled
	local isPending = entry.pending ~= nil and (entry.pending ~= entry.enabled)
	local s = entry.btn:FindFirstChildWhichIsA("UIStroke")

	if desired then
		entry.btn.BackgroundColor3 = isPending and C.PENDING or Color3.fromRGB(34,34,34)
		entry.btn.TextColor3       = isPending and Color3.fromRGB(200,180,80) or C.WHITE
		entry.btn.Text             = isPending and "Enable →" or "Enabled"
		if s then s.Color = isPending and Color3.fromRGB(90,80,30) or Color3.fromRGB(60,60,60) end
	else
		entry.btn.BackgroundColor3 = isPending and Color3.fromRGB(40,18,18) or C.OFF
		entry.btn.TextColor3       = isPending and Color3.fromRGB(200,100,100) or C.DIM
		entry.btn.Text             = isPending and "Disable →" or "Disabled"
		if s then s.Color = isPending and Color3.fromRGB(80,35,35) or C.BORDLO end
	end

	entry.nameLabel.TextColor3 = desired and C.WHITE or C.DIM
end

local function MarkPending(entry, wantEnabled)
	if wantEnabled ~= entry.enabled then
		entry.pending = wantEnabled
	else
		entry.pending = nil
	end
	UpdateToggleVisual(entry)
end

local function ApplySettings()
	local anyChange = false
	for _, entry in ipairs(CameraToggles) do
		if entry.pending ~= nil then
			anyChange = true
			if entry.pending then
				entry.remote.Name = entry.original
			else
				entry.remote.Name = DISABLED_PREFIX .. entry.original
			end
			entry.enabled = entry.pending
			entry.pending = nil
			UpdateToggleVisual(entry)
		end
	end
	if anyChange then
		local char = LocalPlayer.Character
		local chosen = char and char:FindFirstChild(CHOSEN_VALUE_NAME)
		if chosen and tostring(chosen.Value) ~= "" then
			task.wait(0.1)
			LocalPlayer:LoadCharacter()
		end
	end
end

local function BuildSettings()
	for _, c in pairs(SettingsScroll:GetChildren()) do
		if c:IsA("GuiObject") then c:Destroy() end
	end
	CameraToggles = {}

	local folder = GetCameraFolder()
	if not folder then
		make("TextLabel", {
			Size=UDim2.new(1,0,0,40), BackgroundTransparency=1,
			Text="Could not find ReplicatedStorage/" .. table.concat(CAMERA_REMOTES_PATH, "/"),
			TextColor3=C.DIM, Font=Enum.Font.Gotham, TextSize=11
		}, SettingsScroll)
		return
	end

	local remotes = {}
	for _, obj in pairs(folder:GetChildren()) do
		if obj:IsA("RemoteEvent") or obj:IsA("RemoteFunction") then
			table.insert(remotes, obj)
		end
	end
	table.sort(remotes, function(a, b)
		local na = IsDisabled(a) and a.Name:sub(#DISABLED_PREFIX+1) or a.Name
		local nb = IsDisabled(b) and b.Name:sub(#DISABLED_PREFIX+1) or b.Name
		return na:lower() < nb:lower()
	end)

	if #remotes == 0 then
		make("TextLabel", {
			Size=UDim2.new(1,0,0,40), BackgroundTransparency=1,
			Text="No RemoteEvents found in that folder.",
			TextColor3=C.DIM, Font=Enum.Font.Gotham, TextSize=11
		}, SettingsScroll)
		return
	end

	for _, remote in ipairs(remotes) do
		local originalName = IsDisabled(remote) and remote.Name:sub(#DISABLED_PREFIX+1) or remote.Name
		local isEnabled = not IsDisabled(remote)

		local Row = make("Frame", {
			Size=UDim2.new(1,0,0,32), BackgroundColor3=C.ROW, BorderSizePixel=0
		}, SettingsScroll)
		corner(5, Row)
		stroke(1, C.BORDLO, Row)

		local nameLabel = make("TextLabel", {
			Size=UDim2.new(1,-90,1,0), Position=UDim2.new(0,10,0,0),
			BackgroundTransparency=1, Text=originalName,
			TextColor3=isEnabled and C.WHITE or C.DIM,
			TextXAlignment=Enum.TextXAlignment.Left,
			Font=Enum.Font.Gotham, TextSize=12
		}, Row)

		local toggleBtn = make("TextButton", {
			Size=UDim2.new(0,72,0,22), Position=UDim2.new(1,-78,0.5,-11),
			BackgroundColor3=isEnabled and Color3.fromRGB(34,34,34) or C.OFF,
			Text=isEnabled and "Enabled" or "Disabled",
			TextColor3=isEnabled and C.WHITE or C.DIM,
			Font=Enum.Font.GothamBold, TextSize=10,
			BorderSizePixel=0, ZIndex=5
		}, Row)
		corner(4, toggleBtn)
		stroke(1, isEnabled and Color3.fromRGB(60,60,60) or C.BORDLO, toggleBtn)

		local entry = {
			remote=remote, original=originalName,
			enabled=isEnabled, pending=nil,
			btn=toggleBtn, nameLabel=nameLabel
		}
		table.insert(CameraToggles, entry)

		toggleBtn.MouseButton1Click:Connect(function()
			if entry.pending ~= nil then
				MarkPending(entry, entry.enabled)
			else
				MarkPending(entry, not entry.enabled)
			end
		end)
	end
end

ApplyChangesBtn.MouseButton1Click:Connect(ApplySettings)

AllOnBtn.MouseButton1Click:Connect(function()
	for _, entry in ipairs(CameraToggles) do
		MarkPending(entry, true)
	end
end)

AllOffBtn.MouseButton1Click:Connect(function()
	for _, entry in ipairs(CameraToggles) do
		MarkPending(entry, false)
	end
end)

TabSettings.MouseButton1Click:Connect(function()
	SetTab("Settings")
	BuildSettings()
end)

local function CancelCapture()
	if not CapturingKeybindFor then return end
	CapturingKeybindBtn.Text = AttackKeybinds[CapturingKeybindFor] or "None"
	CapturingKeybindBtn.TextColor3 = C.DIM
	CapturingKeybindBtn.BackgroundColor3 = C.SEARCH
	CapturingKeybindFor, CapturingKeybindBtn = nil, nil
	CaptureOverlay.Visible = false
end
CaptureOverlay.MouseButton1Click:Connect(CancelCapture)

local function CanFire(remote)
	local char = LocalPlayer.Character
	local chosen = char and char:FindFirstChild(CHOSEN_VALUE_NAME)
	return chosen and chosen.Value == remote.Parent.Parent.Name
end

local function FireRemote(remote)
	if CanFire(remote) then pcall(function() remote:FireServer() end) end
end

local function SelectCharacter(name)
	local folder = ReplicatedStorage:FindFirstChild("SelectACharacter")
	if not folder then return end
	local remote = folder:FindFirstChild("ChangeChar")
	if remote and remote:IsA("RemoteEvent") then
		pcall(function() remote:FireServer(name) end)
	end
end

SelectBtn.MouseButton1Click:Connect(function()
	if SelectedCharacter then SelectCharacter(SelectedCharacter.Name) end
end)

local function LoadAttacks(charFolder)
	for _, c in pairs(AttackScroll:GetChildren()) do
		if c:IsA("GuiObject") then c:Destroy() end
	end

	SelectedCharacter = charFolder
	PanelHeaderLabel.Text = charFolder.Name
	PanelHeaderLabel.TextColor3 = C.WHITE
	SelectBtn.Visible = true

	local Remotes = charFolder:FindFirstChild("Remotes")
	if not Remotes then
		make("TextLabel", {
			Size=UDim2.new(1,0,0,30), BackgroundTransparency=1,
			Text="No Remotes folder found.", TextColor3=C.DIM,
			Font=Enum.Font.Gotham, TextSize=12
		}, AttackScroll)
		return
	end

	for _, remote in pairs(Remotes:GetChildren()) do
		if not remote:IsA("RemoteEvent") then continue end
		if not AttackModes[remote] then AttackModes[remote] = "Click" end

		local Row = make("Frame", {
			Name=remote.Name, Size=UDim2.new(1,0,0,32),
			BackgroundColor3=C.ROW, BorderSizePixel=0
		}, AttackScroll)
		corner(5, Row)
		stroke(1, C.BORDLO, Row)

		make("TextLabel", {
			Size=UDim2.new(1,-198,1,0), Position=UDim2.new(0,10,0,0),
			BackgroundTransparency=1, Text=remote.Name,
			TextColor3=C.WHITE, TextXAlignment=Enum.TextXAlignment.Left,
			Font=Enum.Font.Gotham, TextSize=12
		}, Row)

		local cfg = MODE_CFG[AttackModes[remote]]
		local ModeBtn = make("TextButton", {
			Size=UDim2.new(0,50,0,22), Position=UDim2.new(1,-190,0.5,-11),
			BackgroundColor3=cfg.bg, Text=AttackModes[remote],
			TextColor3=cfg.tc, Font=Enum.Font.GothamBold, TextSize=10,
			BorderSizePixel=0, ZIndex=5
		}, Row)
		corner(4, ModeBtn)
		stroke(1, cfg.br, ModeBtn)

		local FireBtn = make("TextButton", {
			Size=UDim2.new(0,42,0,22), Position=UDim2.new(1,-134,0.5,-11),
			BackgroundColor3=C.BTN, Text="Fire",
			TextColor3=C.MID, Font=Enum.Font.GothamBold, TextSize=11,
			BorderSizePixel=0, ZIndex=5
		}, Row)
		corner(4, FireBtn)
		stroke(1, C.BORDER, FireBtn)

		local KeybindBtn = make("TextButton", {
			Size=UDim2.new(0,76,0,22), Position=UDim2.new(1,-84,0.5,-11),
			BackgroundColor3=C.SEARCH, Text=AttackKeybinds[remote] or "None",
			TextColor3=C.DIM, Font=Enum.Font.Gotham, TextSize=10,
			BorderSizePixel=0, ZIndex=5
		}, Row)
		corner(4, KeybindBtn)
		stroke(1, C.BORDLO, KeybindBtn)

		ModeBtn.MouseButton1Click:Connect(function()
			local idx = table.find(MODES, AttackModes[remote]) or 1
			AttackModes[remote] = MODES[(idx % #MODES) + 1]
			local ncfg = MODE_CFG[AttackModes[remote]]
			ModeBtn.Text = AttackModes[remote]
			ModeBtn.BackgroundColor3 = ncfg.bg
			ModeBtn.TextColor3 = ncfg.tc
			local s = ModeBtn:FindFirstChildWhichIsA("UIStroke")
			if s then s.Color = ncfg.br end
		end)

		FireBtn.MouseButton1Click:Connect(function() FireRemote(remote) end)
		FireBtn.MouseEnter:Connect(function() FireBtn.TextColor3 = C.WHITE end)
		FireBtn.MouseLeave:Connect(function() FireBtn.TextColor3 = C.MID end)

		KeybindBtn.MouseButton1Click:Connect(function()
			if CapturingKeybindFor ~= nil then CancelCapture() return end
			CapturingKeybindFor = remote
			CapturingKeybindBtn = KeybindBtn
			KeybindBtn.Text = "press key..."
			KeybindBtn.TextColor3 = C.WHITE
			KeybindBtn.BackgroundColor3 = Color3.fromRGB(25,25,18)
			CaptureOverlay.Visible = true
		end)

		KeybindBtn.MouseButton2Click:Connect(function()
			AttackKeybinds[remote] = nil
			KeybindBtn.Text = "None"
			KeybindBtn.TextColor3 = C.DIM
			KeybindBtn.BackgroundColor3 = C.SEARCH
			if CapturingKeybindFor == remote then CancelCapture() end
		end)
	end
end

local function ApplySearch(query)
	query = query:lower()
	for _, entry in ipairs(SidebarEntries) do
		entry.btn.Visible = query == "" or entry.folder.Name:lower():find(query,1,true) ~= nil
	end
end

local function BuildSidebar()
	for _, c in pairs(SidebarScroll:GetChildren()) do
		if c:IsA("GuiObject") then c:Destroy() end
	end
	SidebarEntries = {}

	local folders = {}
	for _, f in pairs(CHARS_PATH:GetChildren()) do
		if f:FindFirstChild("Remotes") then table.insert(folders, f) end
	end
	table.sort(folders, function(a,b) return a.Name:lower() < b.Name:lower() end)

	for _, charFolder in ipairs(folders) do
		local CharBtn = make("TextButton", {
			Size=UDim2.new(1,0,0,28), BackgroundColor3=C.PANEL,
			Text=charFolder.Name, TextColor3=C.DIM,
			Font=Enum.Font.Gotham, TextSize=11,
			BorderSizePixel=0, ZIndex=5
		}, SidebarScroll)
		corner(5, CharBtn)
		stroke(1, C.BORDLO, CharBtn)

		table.insert(SidebarEntries, {folder=charFolder, btn=CharBtn})

		CharBtn.MouseButton1Click:Connect(function()
			for _, entry in ipairs(SidebarEntries) do
				entry.btn.BackgroundColor3 = C.PANEL
				entry.btn.TextColor3 = C.DIM
			end
			CharBtn.BackgroundColor3 = C.SEL_BG
			CharBtn.TextColor3 = C.SEL_TXT
			LoadAttacks(charFolder)
		end)
	end

	ApplySearch(SearchBox.Text)
end

SearchBox:GetPropertyChangedSignal("Text"):Connect(function()
	ApplySearch(SearchBox.Text)
end)

RunService.Heartbeat:Connect(function()
	local char = LocalPlayer.Character
	local chosen = char and char:FindFirstChild(CHOSEN_VALUE_NAME)
	StatusLabel.Text = chosen and ("> " .. tostring(chosen.Value)) or "> None"
	StatusLabel.TextColor3 = chosen and C.WHITE or C.DIM

	local now = tick()
	for remote, key in pairs(AttackKeybinds) do
		if not HeldKeys[key] then continue end
		local mode = AttackModes[remote] or "Click"
		local interval = mode == "Rapid" and RAPID_INTERVAL or mode == "Hold" and HOLD_INTERVAL or nil
		if interval then
			local last = FireTimers[remote] or 0
			if now - last >= interval then
				FireTimers[remote] = now
				FireRemote(remote)
			end
		end
	end
end)

CloseBtn.MouseButton1Click:Connect(function()
	CancelCapture()
	MainFrame.Visible = false
end)

MinimizeBtn.MouseButton1Click:Connect(function()
	Minimized = not Minimized
	Body.Visible = not Minimized
	TabBar.Visible = not Minimized
	MainFrame.Size = Minimized and UDim2.new(0,500,0,32) or UDim2.new(0,500,0,420)
end)

UserInputService.InputBegan:Connect(function(input, processed)
	if input.KeyCode == UI_TOGGLE_KEY then
		MainFrame.Visible = not MainFrame.Visible
		return
	end
	if input.KeyCode == MOUSE_UNLOCK_KEY and not processed then
		SetMouseUnlock(not MouseUnlocked)
		return
	end
	if CapturingKeybindFor ~= nil then
		if input.KeyCode == Enum.KeyCode.Escape then
			CancelCapture()
		elseif input.UserInputType == Enum.UserInputType.Keyboard then
			local keyName = input.KeyCode.Name
			AttackKeybinds[CapturingKeybindFor] = keyName
			CapturingKeybindBtn.Text = keyName
			CapturingKeybindBtn.TextColor3 = C.MID
			CapturingKeybindBtn.BackgroundColor3 = C.SEARCH
			CapturingKeybindFor, CapturingKeybindBtn = nil, nil
			CaptureOverlay.Visible = false
		end
		return
	end
	if not processed then
		local keyName = input.KeyCode.Name
		HeldKeys[keyName] = true
		for remote, key in pairs(AttackKeybinds) do
			if key == keyName and (AttackModes[remote] or "Click") == "Click" then
				FireRemote(remote)
			end
		end
	end
end)

UserInputService.InputEnded:Connect(function(input)
	HeldKeys[input.KeyCode.Name] = nil
end)

local isDragging, dragStart, startPos = false, nil, nil
TitleBar.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		isDragging = true
		dragStart = input.Position
		startPos = MainFrame.Position
	end
end)
TitleBar.InputChanged:Connect(function(input)
	if isDragging and input.UserInputType == Enum.UserInputType.MouseMovement then
		local d = input.Position - dragStart
		MainFrame.Position = UDim2.new(
			startPos.X.Scale, startPos.X.Offset + d.X,
			startPos.Y.Scale, startPos.Y.Offset + d.Y
		)
	end
end)
TitleBar.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		isDragging = false
	end
end)

BuildSidebar()

Features & Information

A script I made since the game hasn't received fixes for it yet, I want to bring awareness so that's why this script is open source! I have used it wrong, treating others poorly, now I must release it to help the developers, or even bring this game to a boiling point where they need to fix it. Thank you!
#Fighting

Community Comments (7)

MathguyMathguyJul 10, 2026(edited)

Nvm, nice gui bro but it doesn't work

Replying to @Mathguy
IDoThatBudIDoThatBudJul 22, 2026

@Mathguy What doesn't work? Did you use the keybind system?

Replying to @IDoThatBud
MathguyMathguyJul 22, 2026

@IDoThatBud Some keybinds don't work :(

Replying to @Mathguy
IDoThatBudIDoThatBudJul 25, 2026

@Mathguy I don't know why some don't, always been trying to figure it out, especially how people are using other characters abilities as someone completely different!

tontoam*otontoam*oJul 16, 2026

My friend, the script is good, can you make an update please

tontoam*otontoam*oJul 16, 2026

I've been using the script for a few days and it's really good. If you could make an update.

IsakbarutIsakbarutSep 11, 2026

I can’t play with lyle and zodiac pls can we play with them?

More Scripts for [SPOOKY] Marvellous Smackdown