MODERN SONIC OM HAVE SUPER CREDITS FOR ISJUSTYUMMY
Key RequiredUniversal

MODERN SONIC OM HAVE SUPER CREDITS FOR ISJUSTYUMMY

Universal Scriptmoderngabrisonicmoderngabrisonic 1.7K views 605 executesUpdated Mar 28, 2026
Unrated
00
Lua Script•1 lines (41397 chars)
local ANIMATIONS = { 	Idle = {id = "rbxassetid://120101636793898", track = nil, shouldLoop = true}, 	Walk = {id = "rbxassetid://91043029480065", track = nil, shouldLoop = true}, 	Run = {id = "rbxassetid://139348920670961", track = nil, shouldLoop = true}, 	SuperRun = {id = "rbxassetid://139348920670961", track = nil, shouldLoop = true}, 	Jump = {id = "rbxassetid://139272524520189", track = nil, shouldLoop = false}, 	Fall = {id = "rbxassetid://139272524520189", track = nil, shouldLoop = true}, 	PeelCharge = {id = "rbxassetid://95970005202318", track = nil, shouldLoop = true} } local function loadAsset(id) 	local ok, objects = pcall(game.GetObjects, game, "rbxassetid://" .. id) 	if not ok or not objects or #objects == 0 then return nil end 	return objects[1]:Clone() end local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local isMobile = UserInputService.TouchEnabled local Workspace = game:GetService("Workspace") local ContextActionService = game:GetService("ContextActionService") local workspace = Workspace local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local humanoidRootPart = character:WaitForChild("HumanoidRootPart") local isScriptActive = false local animationConnections = {} local meshReplacementConnection = nil local peeloutPlayed = false local SPINDASH_ASSET_ID = 95339729195359 local ASSET_ID = 139567169544950 local LMS_ASSET_ID = 95285665897654 local currentNormalModel = nil local currentLMSModel = nil local isInLMS = false local lmsModelConnection = nil local CUSTOM_BUTTON_ASSET_ID = 9259054284 local PEEL_OUT_VOICE_ID = 537371462 local highlightEnabled = false local highlightCooldown = false local HIGHLIGHT_COOLDOWN_TIME = 20 local HIGHLIGHT_DURATION = 5 local activeHighlights = {} local activeBillboards = {} local ADDITIONAL_ASSET_ID = 73750640215993 local GUI_ID = 96036286115324 local currentSpindashModel = nil local spindashSpinConnection = nil local spindashSpeedBoostConnection = nil local isSpindashActive = false local spindashSpeedBoost = 1 local spindashTargetSpeed = 1 local SPINDASH_BASELINE = 0.1 local SPINDASH_MAX = 1.5 local SPINDASH_RAMP_TIME = 1 local spindashSpeedRate = (SPINDASH_MAX - SPINDASH_BASELINE) / SPINDASH_RAMP_TIME local isPeelOutActive = false local isHoldingPeelOut = false local isPeelOutReleasing = false local isDropDashActive = false local lastImageRectOffset = Vector2.new(0, 0) local dropDashCheckConnection = nil local isHoldingInput = false local function playSound(id, parent, volume) local sound = Instance.new("Sound") sound.SoundId = "rbxassetid://" .. id sound.Volume = volume or 1.5 sound.Parent = parent or humanoidRootPart sound:Play() sound.Ended:Connect(function() sound:Destroy() end) end local function onIndicatorAction(actionName, inputState, inputObject) if inputState == Enum.UserInputState.Begin then activateIndicator() end end ContextActionService:BindAction("ActivateIndicator", onIndicatorAction, false, Enum.KeyCode.Y) local function onInputBegan(input, gp) if gp then return end if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then isHoldingInput = true if isPeelOutActive then isHoldingPeelOut = true end end end local function onInputEnded(input, gp) if gp then return end if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then isHoldingInput = false isHoldingPeelOut = false end end UserInputService.InputBegan:Connect(onInputBegan) UserInputService.InputEnded:Connect(onInputEnded) local function setCharacterSpeedBoost(value) 	if character and character.Parent then 		character:SetAttribute("SpeedBoost", value) 	end end local function stopSpindashSpeedBoost() 	isSpindashActive = false 	if spindashSpeedBoostConnection then 		spindashSpeedBoostConnection:Disconnect() 		spindashSpeedBoostConnection = nil 	end 	setCharacterSpeedBoost(1) end local function startSpindashSpeedBoost() 	if spindashSpeedBoostConnection then return end 	isSpindashActive = true 	spindashSpeedBoost = SPINDASH_BASELINE 	spindashTargetSpeed = SPINDASH_BASELINE 	setCharacterSpeedBoost(spindashSpeedBoost) 	spindashSpeedBoostConnection = RunService.Heartbeat:Connect(function(delta) 		if not isSpindashActive then 			if spindashSpeedBoostConnection then 				spindashSpeedBoostConnection:Disconnect() 				spindashSpeedBoostConnection = nil 			end 			return 		end 		if isPeelOutActive then 			stopSpindashSpeedBoost() 			return 		end 		local holding = isHoldingInput or UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) 		if holding then 			spindashTargetSpeed = SPINDASH_MAX 		else 			spindashTargetSpeed = SPINDASH_BASELINE 		end 		if spindashSpeedBoost < spindashTargetSpeed then 			spindashSpeedBoost = math.min(spindashSpeedBoost + (spindashSpeedRate * delta), spindashTargetSpeed) 		elseif spindashSpeedBoost > spindashTargetSpeed then 			spindashSpeedBoost = math.max(spindashSpeedBoost - (spindashSpeedRate * delta), spindashTargetSpeed) 		end 		if not isPeelOutActive then 			setCharacterSpeedBoost(spindashSpeedBoost) 		end 	end) end local function stopSpindashFollow() 	if spindashSpinConnection then 		spindashSpinConnection:Disconnect() 		spindashSpinConnection = nil 	end 	if currentSpindashModel then 		currentSpindashModel:Destroy() 		currentSpindashModel = nil 	end 	local playersFolder = workspace:FindFirstChild("Players") 	if playersFolder then 		local playerFolder = playersFolder:FindFirstChild(player.Name) 		if playerFolder then 			local spindashFolder = playerFolder:FindFirstChild("Spindash") 			if spindashFolder then 				local spindashPart = spindashFolder:FindFirstChild("Spindash") 				if spindashPart then 					spindashPart.Transparency = 0 				end 			end 		end 	end 	stopSpindashSpeedBoost() end local function stopPeelOutSpeedBoost() end local function startPeelOutSpeedBoost() end local function freezePlayer() 	setCharacterSpeedBoost(0) 	humanoid.WalkSpeed = 0 end local function unfreezePlayer() 	humanoid.WalkSpeed = 16 end local stopPeelOut = nil local monitorPeelOutSounds = nil local lastDropDashState = false local function detectDropDash() 	local playerGui = player:WaitForChild("PlayerGui", 5) 	if not playerGui then return end 	local roundGui = playerGui:WaitForChild("Round", 5) 	if not roundGui then return end 	local gameGui = roundGui:WaitForChild("Game", 5) 	if not gameGui then return end 	local abilityGui = gameGui:WaitForChild("Ability", 5) 	if not abilityGui then return end 	local barGui = abilityGui:WaitForChild("Bar", 5) 	if not barGui then return end 	local ab1Gui = barGui:WaitForChild("AB1", 5) 	if not ab1Gui then return end 	local imgGui = ab1Gui:WaitForChild("iMG", 5) 	if not imgGui then return end 	 	dropDashCheckConnection = RunService.Heartbeat:Connect(function() 		if imgGui and imgGui.ImageRectOffset then 			local currentOffset = imgGui.ImageRectOffset 			local isCurrentlyDropDashing = (currentOffset ~= Vector2.new(0, 0)) 			 			 			if isCurrentlyDropDashing and not lastDropDashState then 				isDropDashActive = true 				performDropDashLunge() 			elseif not isCurrentlyDropDashing then 				isDropDashActive = false 			end 			 			lastImageRectOffset = currentOffset 			lastDropDashState = isCurrentlyDropDashing 		end 	end) end local function replacePlayerFrame() 	local playerGui = player:WaitForChild("PlayerGui", 5) 	if not playerGui then return end 	local roundGui = playerGui:WaitForChild("Round", 5) 	if not roundGui then return end 	local gameGui = roundGui:WaitForChild("Game", 5) 	if not gameGui then return end 	local teamsGui = gameGui:WaitForChild("Teams", 5) 	if not teamsGui then return end 	local playerFrame = teamsGui:FindFirstChild(player.Name) 	if not playerFrame then 		teamsGui.ChildAdded:Wait() 		playerFrame = teamsGui:FindFirstChild(player.Name) 	end 	if playerFrame and playerFrame:FindFirstChild("Frame") then 		local frame = playerFrame.Frame 		if frame and frame:FindFirstChild("Character") then 			local characterContainer = frame.Character 			characterContainer:ClearAllChildren() 			local success, objects = pcall(game.GetObjects, game, "rbxassetid://136982160236927") 			if success and #objects > 0 then 				local asset = objects[1] 				for _, obj in asset:GetChildren() do 					obj:Clone().Parent = characterContainer 				end 				if characterContainer:IsA("GuiObject") then 					characterContainer.BackgroundTransparency = 1 				end 			end 		end 	end end local function startSpindashFollow() 	if not currentSpindashModel then return end 	local spindashFolder = currentSpindashModel.Parent 	local spindashPart = spindashFolder and spindashFolder:FindFirstChild("Spindash") 	if not spindashPart then return end 	if spindashSpinConnection then 		spindashSpinConnection:Disconnect() 	end 	spindashSpinConnection = RunService.Heartbeat:Connect(function() 		if not currentSpindashModel or not currentSpindashModel.Parent or not spindashPart or not spindashPart.Parent then 			if spindashSpinConnection then 				spindashSpinConnection:Disconnect() 				spindashSpinConnection = nil 			end 			currentSpindashModel = nil 			stopSpindashFollow() 			return 		end 		local liftOffset = Vector3.new(0, 0, 0) 		if currentSpindashModel:IsA("BasePart") then 			currentSpindashModel.CFrame = spindashPart.CFrame * CFrame.new(liftOffset) 		else 			local primary = currentSpindashModel.PrimaryPart or currentSpindashModel:FindFirstChildWhichIsA("BasePart") 			if primary then 				primary.CFrame = spindashPart.CFrame * CFrame.new(liftOffset) 			end 		end 	end) end local function replaceSpindashMesh() 	local playersFolder = workspace:FindFirstChild("Players") 	if not playersFolder then return end 	local playerFolder = playersFolder:FindFirstChild(player.Name) 	if not playerFolder then return end 	local spindashFolder = playerFolder:FindFirstChild("Spindash") 	if not spindashFolder then return end 	local spindashPart = spindashFolder:FindFirstChild("Spindash") 	if spindashPart and spindashPart:IsA("BasePart") and not currentSpindashModel then 		local ok, objects = pcall(game.GetObjects, game, "rbxassetid://" .. SPINDASH_ASSET_ID) 		if ok and objects and #objects > 0 then 			local newMesh = objects[1]:Clone() 			local inserted = nil 			if newMesh:IsA("BasePart") then 				inserted = newMesh 				newMesh.Parent = spindashPart.Parent 			else 				newMesh.Parent = spindashPart.Parent 				inserted = newMesh.PrimaryPart or newMesh:FindFirstChildWhichIsA("BasePart") 			end 			if inserted then 				inserted.CFrame = spindashPart.CFrame * CFrame.new(0, 5, 0) 				inserted.Anchored = false 				inserted.CanCollide = false 				currentSpindashModel = newMesh 				spindashPart.Transparency = 1 				startSpindashFollow() 				startSpindashSpeedBoost() 			else 				newMesh:Destroy() 			end 		end 	end end local function monitorSpindashMesh() 	local function checkAndReplace() 		if isScriptActive then 			replaceSpindashMesh() 		end 	end 	checkAndReplace() 	local playersFolder = workspace:FindFirstChild("Players") 	if playersFolder then 		local playerFolder = playersFolder:FindFirstChild(player.Name) 		if playerFolder then 			local spindashFolder = playerFolder:FindFirstChild("Spindash") 			if spindashFolder then 				spindashFolder.DescendantAdded:Connect(function(descendant) 					if descendant.Name == "Spindash" and descendant:IsA("BasePart") and not currentSpindashModel then 						task.wait(0.1) 						checkAndReplace() 					end 				end) 				spindashFolder.DescendantRemoving:Connect(function(descendant) 					if descendant.Name == "Spindash" and descendant:IsA("BasePart") then 						task.wait(0.1) 						if not (spindashFolder:FindFirstChild("Spindash")) then 							stopSpindashFollow() 						end 					end 				end) 			else 				playerFolder.ChildAdded:Connect(function(child) 					if child.Name == "Spindash" then 						child.DescendantAdded:Connect(function(descendant) 							if descendant.Name == "Spindash" and descendant:IsA("BasePart") and not currentSpindashModel then 								task.wait(0.1) 								checkAndReplace() 							end 						end) 					end 				end) 			end 		else 			playersFolder.ChildAdded:Connect(function(child) 				if child.Name == player.Name then 					child.ChildAdded:Connect(function(spindashChild) 						if spindashChild.Name == "Spindash" then 							spindashChild.DescendantAdded:Connect(function(descendant) 								if descendant.Name == "Spindash" and descendant:IsA("BasePart") and not currentSpindashModel then 									task.wait(0.1) 									checkAndReplace() 								end 							end) 						end 					end) 				end 			end) 		end 	end 	if meshReplacementConnection then 		meshReplacementConnection:Disconnect() 		meshReplacementConnection = nil 	end 	meshReplacementConnection = RunService.Heartbeat:Connect(function() 		if isScriptActive and tick() % 1 < 0.1 then 			checkAndReplace() 		end 	end) end local function setupSonicViewport() 	local ok, viewportFrame = pcall(function() 		return player.PlayerGui 			:WaitForChild("Round", 30) 			:WaitForChild("Game", 30) 			:WaitForChild("SurvivorHP", 30) 			:WaitForChild("ViewportFrame", 30) 	end) 	if not ok or not viewportFrame then return end 	local viewportModel = viewportFrame 		:WaitForChild("WorldModel", 30) 		:WaitForChild("Default", 30) 	local assetId = "139567169544950" 	local function replaceViewportModel() 		local ok2, objects = pcall(game.GetObjects, game, "rbxassetid://" .. assetId) 		if not ok2 or #objects == 0 then return end 		local newModel = objects[1]:Clone() 		for _, part in ipairs(viewportModel:GetDescendants()) do 			if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then 				part.Transparency = 1 			end 		end 		newModel.Parent = viewportModel 		local newHumanoid = newModel:FindFirstChildOfClass("Humanoid") 		if newHumanoid then newHumanoid:Destroy() end 		local viewportRootPart = viewportModel:FindFirstChild("HumanoidRootPart") 		if viewportRootPart then 			newModel:PivotTo(viewportRootPart.CFrame * CFrame.new(0, 0, 0) * CFrame.Angles(math.rad(0), math.rad(0), 0)) 			local primaryPart = newModel.PrimaryPart or newModel:FindFirstChildWhichIsA("BasePart") 			if primaryPart then 				local weld = Instance.new("WeldConstraint") 				weld.Part0 = viewportRootPart 				weld.Part1 = primaryPart 				weld.Parent = viewportRootPart 			end 		end 	end 	replaceViewportModel() 	local viewportHumanoid = viewportModel:FindFirstChild("Humanoid") 	local currentViewportAnimation = nil 	local viewportAnimations = { 		Idle = {id = "rbxassetid://103492267285940", track = nil, shouldLoop = true}, 		Walk = {id = "rbxassetid://124016876172487", track = nil, shouldLoop = true}, 		Run = {id = "rbxassetid://102091744008058", track = nil, shouldLoop = true}, 		Jump = {id = "rbxassetid://125236763187476", track = nil, shouldLoop = false}, 		Fall = {id = "rbxassetid://72841784729233", track = nil, shouldLoop = true} 	} 	local function loadViewportAnimation(animName) 		local animData = viewportAnimations[animName] 		if not animData or not viewportHumanoid then return nil end 		local animation = Instance.new("Animation") 		animation.AnimationId = animData.id 		local track = viewportHumanoid:LoadAnimation(animation) 		track.Looped = animData.shouldLoop 		animData.track = track 		return track 	end 	local function playViewportAnimation(animName) 		if not viewportHumanoid then return end 		for _, animData in pairs(viewportAnimations) do 			if animData.track and animData.track.IsPlaying then 				animData.track:Stop() 			end 		end 		local animData = viewportAnimations[animName] 		if animData then 			if not animData.track then loadViewportAnimation(animName) end 			if animData.track then animData.track:Play() end 		end 	end 	local function updateViewportAnimations() 		local newAnimation = "Idle" 		if viewportHumanoid then 			if viewportHumanoid.MoveDirection.Magnitude > 0.1 then 				if viewportHumanoid:GetState() == Enum.HumanoidStateType.Running then 					if viewportHumanoid.WalkSpeed > 16 then 						newAnimation = "Run" 					else 						newAnimation = "Walk" 					end 				end 			else 				local state = viewportHumanoid:GetState() 				if state == Enum.HumanoidStateType.Jumping then 					newAnimation = "Jump" 				elseif state == Enum.HumanoidStateType.Freefall then 					newAnimation = "Fall" 				else 					newAnimation = "Idle" 				end 			end 		end 		if newAnimation ~= currentViewportAnimation then 			playViewportAnimation(newAnimation) 			currentViewportAnimation = newAnimation 		end 	end 	RunService.Heartbeat:Connect(updateViewportAnimations) 	viewportModel.DescendantAdded:Connect(function() task.wait(0.5) replaceViewportModel() end) end local function loadCustomAsset(url, filename) 	if not isfile(filename) then 		writefile(filename, game:HttpGet(url)) 	end 	return getcustomasset(filename) end local DEFAULT_MUSIC = loadCustomAsset( 	"https://raw.githubusercontent.com/makinmaking/NOMOREGAMES/main/NO%20MORE%20GAMES%20-%20Sonic.exe_%20OUTCOME%20MEMORIES%20UST%20(Super%20Sonic%20THEME).mp3", 	"default.mp3" ) local function setupSonicMusic() 	if not isScriptActive then return end 	local theme = game:GetService("ReplicatedStorage") 		:FindFirstChild("ClientAssets") 		and game.ReplicatedStorage.ClientAssets:FindFirstChild("Sounds") 		and game.ReplicatedStorage.ClientAssets.Sounds:FindFirstChild("mus") 		and game.ReplicatedStorage.ClientAssets.Sounds.mus:FindFirstChild("Game") 		and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game:FindFirstChild("Round") 		and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game.Round:FindFirstChild("SoloTheme") 		and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game.Round.SoloTheme:FindFirstChild("SonicSolo") 	if theme then 		theme.Looped = true 		theme.Volume = 2 		theme.SoundId = DEFAULT_MUSIC 	end end local function setupCharacter(char) 	if not isScriptActive then return end 	local originalParts = {} 	for _, v in ipairs(char:GetDescendants()) do 		if v:IsA("BasePart") then table.insert(originalParts, v) end 	end 	for _, part in ipairs(originalParts) do part.Transparency = 1 end 	local playersFolder = workspace:FindFirstChild("Players") 	local oldVisual = playersFolder and playersFolder:FindFirstChild(player.Name) 	if oldVisual then 		for _, v in ipairs(oldVisual:GetDescendants()) do 			if v:IsA("BasePart") then v.Transparency = 1 end 		end 	end 	local mdl = loadAsset(ASSET_ID) if not mdl then return end currentNormalModel = mdl 	if oldVisual then mdl.Parent = oldVisual else mdl.Parent = char end 	local hrp = char:FindFirstChild("HumanoidRootPart") 	local newHrp = mdl:FindFirstChild("HumanoidRootPart") 	if not hrp or not newHrp then mdl:Destroy() return end 	newHrp.Anchored = true 	newHrp.Transparency = 1 	local existingHum = mdl:FindFirstChildOfClass("Humanoid") 	if existingHum then existingHum:Destroy() end 	local existingAnim = mdl:FindFirstChildOfClass("Animator") 	if existingAnim then existingAnim:Destroy() end 	for _, v in ipairs(mdl:GetDescendants()) do 		if v:IsA("BasePart") then 			v.CanCollide = false 			v.Transparency = 0 		end 	end 	newHrp.CFrame = hrp.CFrame 	task.wait(0.1) 	newHrp.Transparency = 1 	local syncConn 	syncConn = RunService.Stepped:Connect(function() 		if not char.Parent or not hrp.Parent or not newHrp.Parent then 			if syncConn then syncConn:Disconnect() end 			return 		end 		newHrp.CFrame = hrp.CFrame * CFrame.new(0, 1.1, 0) 	end) 	local animateScript = char:FindFirstChild("Animate") 	if animateScript then animateScript.Disabled = true end end -- ==================== FIXED BUTTON + INDICATOR ==================== local function highlightPlayers(enable) 	if enable then 		for _, hl in ipairs(activeHighlights) do 			if hl and hl.Parent then hl:Destroy() end 		end 		for _, b in ipairs(activeBillboards) do 			if b and b.Parent then b:Destroy() end 		end 		activeHighlights = {} 		activeBillboards = {} 		for _, p in ipairs(Players:GetPlayers()) do 			if p ~= player and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then 				local hl = Instance.new("Highlight") 				hl.FillColor = Color3.fromRGB(255, 0, 0) 				hl.FillTransparency = 0.7 				hl.OutlineTransparency = 0.5 				hl.OutlineColor = Color3.fromRGB(255, 100, 100) 				hl.Parent = p.Character 				table.insert(activeHighlights, hl) 			 				local success, billboards = pcall(function() 					return game:GetObjects("rbxassetid://" .. ADDITIONAL_ASSET_ID) 				end) 				if success and #billboards > 0 then 					local billboard = billboards[1]:Clone() 					billboard.Parent = p.Character.HumanoidRootPart 					table.insert(activeBillboards, billboard) 				end 			end 		end 	else 		for _, hl in ipairs(activeHighlights) do 			if hl and hl.Parent then hl:Destroy() end 		end 		for _, b in ipairs(activeBillboards) do 			if b and b.Parent then b:Destroy() end 		end 		activeHighlights = {} 		activeBillboards = {} 	end end local function activateIndicator() 	if highlightCooldown then 		print("Indicator on cooldown!") 		return 	end 	print("✅ INDICATOR ACTIVATED!") 	highlightCooldown = true 	highlightEnabled = true 	highlightPlayers(true) 	task.delay(HIGHLIGHT_DURATION, function() 		highlightPlayers(false) 		highlightEnabled = false 	end) 	task.delay(HIGHLIGHT_COOLDOWN_TIME, function() 		highlightCooldown = false 	end) end local function createButton(parent, x, y, color, name, key, callback) 	local btn = Instance.new("ImageButton") 	btn.Name = name 	btn.BackgroundTransparency = 1 	btn.Image = "rbxassetid://72410974345101" 	btn.ImageColor3 = color 	if isMobile then 		btn.Size = UDim2.new(0, 55, 0, 55) 		btn.Position = UDim2.new(0, x, 0, y) 	else 		btn.Size = UDim2.new(0, 80, 0, 80) 		btn.Position = UDim2.new(0, x, 0, y) 	end 	btn.Parent = parent 	 	local nameLbl = Instance.new("TextLabel") 	nameLbl.Size = UDim2.new(1, 0, 0.32, 0) 	nameLbl.Position = UDim2.new(0, 0, 0.68, 0) 	nameLbl.BackgroundTransparency = 1 	nameLbl.Text = name 	nameLbl.TextColor3 = color 	nameLbl.Font = Enum.Font.GothamBold 	nameLbl.TextScaled = true 	nameLbl.TextStrokeTransparency = 0.8 	nameLbl.Parent = btn 	 	local cdLbl = Instance.new("TextLabel") 	cdLbl.Name = "CooldownLabel" 	cdLbl.Size = UDim2.new(1, 0, 1, 0) 	cdLbl.Position = UDim2.new(0, 0, 0, 0) 	cdLbl.BackgroundTransparency = 1 	cdLbl.Text = "" 	cdLbl.TextColor3 = Color3.fromRGB(255, 60, 60) 	cdLbl.Font = Enum.Font.GothamBold 	cdLbl.TextScaled = true 	cdLbl.TextStrokeTransparency = 0.7 	cdLbl.Parent = btn 	 	local keyLbl = Instance.new("TextLabel") 	keyLbl.Size = UDim2.new(1, 0, 0.25, 0) 	keyLbl.Position = UDim2.new(0, 5, -0.18, 0) 	keyLbl.BackgroundTransparency = 1 	keyLbl.Text = key 	keyLbl.TextColor3 = color 	keyLbl.Font = Enum.Font.GothamBold 	keyLbl.TextScaled = true 	keyLbl.TextXAlignment = Enum.TextXAlignment.Left 	keyLbl.Parent = btn 	btn.Activated:Connect(function() 		if name == "INDICATOR" and highlightCooldown then return end 		if callback then callback() end 	end) 	return btn, cdLbl end local function setupCustomButton() 	if indicatorFrame then 		indicatorFrame:Destroy() 	end 	indicatorFrame = Instance.new("Frame") 	indicatorFrame.Name = "IndicatorFrame" 	indicatorFrame.BackgroundTransparency = 1 	 	if isMobile then 		indicatorFrame.Size = UDim2.new(0,72,0,96) 		indicatorFrame.Position = UDim2.new(0,8,0.5,150 - 40) 	else 		indicatorFrame.Size = UDim2.new(0,150,0,220) 		indicatorFrame.Position = UDim2.new(0,20,0.5,220) 	end 	indicatorFrame.Parent = player:WaitForChild("PlayerGui") 		:WaitForChild("Round", 5) 		:WaitForChild("Game", 5) 	createButton( 		indicatorFrame, 		0, 0, 		Color3.fromRGB(0, 255, 255), 		"INDICATOR", 		"Y", 		activateIndicator 	) 	print("✅ sigma sigma boi sigma boi sigma boi") end local function cleanupCustomButton() 	if customButton then 		customButton:Destroy() 		customButton = nil 	end end -- ==================== LMS MODEL SWITCHER ==================== local function switchToLMSModel() 	if isInLMS or not character then return end 	isInLMS = true 	 	print("🔄 Switching to LMS Model...") 	 	 	if currentNormalModel then 		for _, v in ipairs(currentNormalModel:GetDescendants()) do 			if v:IsA("BasePart") then 				v.Transparency = 1 			end 		end 	end 	 	 	if currentLMSModel then 		currentLMSModel:Destroy() 		currentLMSModel = nil 	end 	 	local ok, objects = pcall(game.GetObjects, game, "rbxassetid://" .. LMS_ASSET_ID) 	if not ok or #objects == 0 then 		warn("Failed to load LMS model:", LMS_ASSET_ID) 		return 	end 	 	local lmsModel = objects[1]:Clone() 	lmsModel.Name = "LMS_Model" 	 	local playersFolder = workspace:FindFirstChild("Players") 	local visualFolder = playersFolder and playersFolder:FindFirstChild(player.Name) 	 	if visualFolder then 		lmsModel.Parent = visualFolder 	else 		lmsModel.Parent = character 	end 	 	local hrp = character:FindFirstChild("HumanoidRootPart") 	local newHrp = lmsModel:FindFirstChild("HumanoidRootPart") or lmsModel:FindFirstChildWhichIsA("BasePart") 	 	if hrp and newHrp then 		newHrp.Anchored = true 		newHrp.Transparency = 1 		 		local hum = lmsModel:FindFirstChildOfClass("Humanoid") 		if hum then hum:Destroy() end 		local anim = lmsModel:FindFirstChildOfClass("Animator") 		if anim then anim:Destroy() end 		 		for _, v in ipairs(lmsModel:GetDescendants()) do 			if v:IsA("BasePart") then 				v.CanCollide = false 				v.Transparency = 0 			end 		end 		 		task.spawn(function() 			while isInLMS and lmsModel.Parent and hrp.Parent and character.Parent do 				newHrp.CFrame = hrp.CFrame * CFrame.new(0, 1.1, 0) 				task.wait() 			end 		end) 	end 	 	currentLMSModel = lmsModel 	print("✅ LMS Model Successfully Loaded") end local function revertToNormalModel() 	isInLMS = false 	 	if currentLMSModel then 		currentLMSModel:Destroy() 		currentLMSModel = nil 	end 	 	if currentNormalModel then 		for _, v in ipairs(currentNormalModel:GetDescendants()) do 			if v:IsA("BasePart") then 				v.Transparency = 0 			end 		end 		print("✅ Reverted to Normal Model") 	else 		setupCharacter(character) 	end end local function monitorLMS() 	if lmsModelConnection then lmsModelConnection:Disconnect() end 	 	lmsModelConnection = RunService.Heartbeat:Connect(function() 		if not isScriptActive then return end 		 		 		local soloTheme = game:GetService("ReplicatedStorage") 			:FindFirstChild("ClientAssets") 			and game.ReplicatedStorage.ClientAssets:FindFirstChild("Sounds") 			and game.ReplicatedStorage.ClientAssets.Sounds:FindFirstChild("mus") 			and game.ReplicatedStorage.ClientAssets.Sounds.mus:FindFirstChild("Game") 			and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game:FindFirstChild("Round") 			and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game.Round:FindFirstChild("SoloTheme") 			and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game.Round.SoloTheme:FindFirstChild("SonicSolo") 		 		local isSoloPlaying = soloTheme and soloTheme.IsPlaying 		 		 		local aliveCount = 0 		local playersFolder = workspace:FindFirstChild("Players") 		if playersFolder then 			for _, folder in ipairs(playersFolder:GetChildren()) do 				local hum = folder:FindFirstChild("Humanoid") 				if hum and hum.Health > 0 then 					aliveCount += 1 				end 			end 		end 		 		local shouldBeInLMS = isSoloPlaying or (aliveCount <= 1) 		 		if shouldBeInLMS and not isInLMS then 			switchToLMSModel() 		elseif not shouldBeInLMS and isInLMS then 			revertToNormalModel() 		end 	end) end local function startScript() 	if isScriptActive then return end 	task.wait(3) 	isScriptActive = true 	 	task.spawn(setupSonicViewport) 	setupSonicMusic() 	monitorPeelOutSounds() 	detectDropDash() 	replacePlayerFrame() 	 	if character then 		setupCharacter(character) 	end 	setupCustomButton() 	monitorLMS() end local function showWaitingNotification() 	local StarterGui = game:GetService("StarterGui") 	StarterGui:SetCore("SendNotification", { 		Title = "Sonic but being Modern is scary"; 		Text = "made by itsjustyumy da goat"; 		Duration = 20; 	}) end local function stopScript() 	if not isScriptActive then return end 	isScriptActive = false cleanupCustomButton() 	showWaitingNotification() 	for _, animData in pairs(ANIMATIONS) do 		if animData.track and animData.track.IsPlaying then 			animData.track:Stop() 		end 	end 	stopSpindashFollow() 	if stopPeelOut then stopPeelOut() end 	if dropDashCheckConnection then 		dropDashCheckConnection:Disconnect() 		dropDashCheckConnection = nil 	end 	for _, connection in ipairs(animationConnections) do 		if connection then 			connection:Disconnect() 		end 	end 	animationConnections = {} 	if meshReplacementConnection then 		meshReplacementConnection:Disconnect() 		meshReplacementConnection = nil 	end 	if stopPeelOut then stopPeelOut() end 		task.spawn(function() 		task.wait(10) 		local theme = game:GetService("ReplicatedStorage") 			:FindFirstChild("ClientAssets") 			and game.ReplicatedStorage.ClientAssets:FindFirstChild("Sounds") 			and game.ReplicatedStorage.ClientAssets.Sounds:FindFirstChild("mus") 			and game.ReplicatedStorage.ClientAssets.Sounds.mus:FindFirstChild("Game") 			and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game:FindFirstChild("Round") 			and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game.Round:FindFirstChild("SoloTheme") 			and game.ReplicatedStorage.ClientAssets.Sounds.mus.Game.Round.SoloTheme:FindFirstChild("SonicSolo") 		if theme then 			theme:Stop() 		end 	end) end local playerModelCache = nil local isCurrentlySonic = false local function getPlayerModel() 	if not playerModelCache or not playerModelCache.Parent then 		local playersFolder = workspace:FindFirstChild("Players") 		if playersFolder then 			playerModelCache = playersFolder:FindFirstChild(player.Name) 		end 	end 	return playerModelCache end local function isSonic() 	local model = getPlayerModel() 	return model and model:GetAttribute("Character") == "Sonic" end local function onHeartbeat() 	local sonicCheck = isSonic() 	if sonicCheck ~= isCurrentlySonic then 		isCurrentlySonic = sonicCheck 		if isCurrentlySonic then 			startScript() 		else 			stopScript() 		end 	end end local function checkCharacterAttribute() end local function monitorCharacterAttribute() end local currentAnimation = nil local animationsToDisable = { 	"rbxassetid://106608035337434343447", 	"rbxassetid://9191426583290243434", 	"rbxassetid://1381145986434514343434", 	"rbxassetid://12355823787878779758443434", 	"rbxassetid://12830070429117134343434", 	"rbxassetid://8308909881303234343434", 	"rbxassetid://1246987295976683434343343", 	"rbxassetid://7622317178271243434343434" } local jumpStartTime = 0 local jumpAnimationDuration = 0.6 local runStartTime = 0 local isRunning = false local speedBoostRate = (4 - 1) / 1.25 local lastWalkSpeed = 16 local speedChangeThreshold = 2 local isSpeedBoostActive = false local lastSpeedCheckTime = 0 local speedCheckInterval = 0.1 local function loadAnimation(animName) 	local animData = ANIMATIONS[animName] 	if not animData then return nil end 	local animation = Instance.new("Animation") 	animation.AnimationId = animData.id 	local track = humanoid:LoadAnimation(animation) 	track.Looped = animData.shouldLoop 	animData.track = track 	return track end local function playAnimation(animName) 	for _, animData in pairs(ANIMATIONS) do 		if animData.track and animData.track.IsPlaying then 			animData.track:Stop() 		end 	end 	local animData = ANIMATIONS[animName] 	if animData then 		if not animData.track then loadAnimation(animName) end 		if animData.track then 			animData.track:Play() 			if animName == "SuperRun" then 				animData.track:AdjustSpeed(5) 			end 		end 	end end local function updateAnimations() 	if not isScriptActive then return end 		if isPeelOutActive then 		character:SetAttribute("SpeedBoost", 1.1) 		isSpeedBoostActive = false 		isRunning = false 		stopSpindashSpeedBoost() 		return 	end 		if isSpindashActive then 		return 	end 	if not isSpindashActive and not isPeelOutActive and not isPeelOutReleasing then 		local currentTime = tick() 		if currentTime - lastSpeedCheckTime >= speedCheckInterval then 			lastSpeedCheckTime = currentTime 			local currentWalkSpeed = humanoid.WalkSpeed 			local speedChange = currentWalkSpeed - lastWalkSpeed 			if speedChange > speedChangeThreshold and currentWalkSpeed > 16 and humanoid.MoveDirection.Magnitude > 0.1 then 				if not isRunning then 					isRunning = true 					runStartTime = tick() 				end 				isSpeedBoostActive = true 			elseif speedChange < -speedChangeThreshold or (currentWalkSpeed <= 16 and isSpeedBoostActive) then 				if isRunning then 					isRunning = false 				end 				isSpeedBoostActive = false 				character:SetAttribute("SpeedBoost", 1) 			end 			lastWalkSpeed = currentWalkSpeed 		end 	end 	local state = humanoid:GetState() 	local newAnimation = nil 	if state == Enum.HumanoidStateType.Jumping then 		if currentAnimation ~= "Jump" then jumpStartTime = tick() end 		newAnimation = "Jump" 	elseif state == Enum.HumanoidStateType.Freefall then 		if tick() - jumpStartTime > jumpAnimationDuration then 			newAnimation = "Fall" 		else 			newAnimation = "Jump" 		end 	elseif humanoid.MoveDirection.Magnitude > 0.1 then 		if humanoid.WalkSpeed > 16 then 			newAnimation = "Run" 		else 			newAnimation = "Walk" 		end 	else 		newAnimation = "Idle" 	end 	if not isPeelOutActive and not isSpindashActive then 		local currentSpeedBoost = character:GetAttribute("SpeedBoost") or 1 		if currentSpeedBoost >= 2.5 and isSpeedBoostActive and humanoid.MoveDirection.Magnitude > 0.1 and humanoid.WalkSpeed > 16 and state ~= Enum.HumanoidStateType.Jumping and state ~= Enum.HumanoidStateType.Freefall then 			newAnimation = "SuperRun" 		end 		if isSpeedBoostActive and isRunning then 			local runDuration = tick() - runStartTime 			local newSpeedBoost = math.min(1 + (runDuration * speedBoostRate), 3) 			local currentBoost = character:GetAttribute("SpeedBoost") 			if currentBoost ~= nil then 				character:SetAttribute("SpeedBoost", newSpeedBoost) 			end 		end 	end 	if newAnimation and newAnimation ~= currentAnimation then 		playAnimation(newAnimation) 		currentAnimation = newAnimation 	end end local function disableAnimations() 	if not isScriptActive then return end 	local animator = humanoid:FindFirstChildOfClass("Animator") 	if not animator then return end 	for _, track in ipairs(humanoid:GetPlayingAnimationTracks()) do 		for _, animId in ipairs(animationsToDisable) do 			if track.Animation and track.Animation.AnimationId == animId then 				track:Stop() 				break 			end 		end 	end end player.CharacterAdded:Connect(function(newChar) 	character = newChar 	humanoid = newChar:WaitForChild("Humanoid") 	humanoidRootPart = newChar:WaitForChild("HumanoidRootPart") 	playerModelCache = nil 	monitorSpindashMesh() 	setupCharacter(newChar) 	for name in pairs(ANIMATIONS) do 		if ANIMATIONS[name].track then 			ANIMATIONS[name].track:Stop() 			ANIMATIONS[name].track = nil 		end 	end 	for name in pairs(ANIMATIONS) do loadAnimation(name) end 	playAnimation("Idle") 	table.insert(animationConnections, humanoid.StateChanged:Connect(updateAnimations)) 	table.insert(animationConnections, RunService.Heartbeat:Connect(updateAnimations)) 	table.insert(animationConnections, RunService.Heartbeat:Connect(disableAnimations)) end) if monitorSpindashMesh then monitorSpindashMesh() end if setupCharacter and character and isScriptActive then 	setupCharacter(character) end if isScriptActive then 	for name in pairs(ANIMATIONS) do 		loadAnimation(name) 	end 	playAnimation("Idle") 	if humanoid then 		table.insert(animationConnections, humanoid.StateChanged:Connect(updateAnimations)) 		table.insert(animationConnections, RunService.Heartbeat:Connect(updateAnimations)) 		table.insert(animationConnections, RunService.Heartbeat:Connect(disableAnimations)) 	end end task.spawn(function() 	while true do 		local playersFolder = workspace:FindFirstChild("Players") 		if playersFolder then 			local playerFolder = playersFolder:FindFirstChild(player.Name) 			if playerFolder then 				local defaultFolder = playerFolder:FindFirstChild("Default") 				if defaultFolder then 					local waist = defaultFolder:FindFirstChild("Waist") 					local hrpDefault = defaultFolder:FindFirstChild("HumanoidRootPart") 					if waist and waist:IsA("BasePart") then waist.Transparency = 1 end 					if hrpDefault and hrpDefault:IsA("BasePart") then hrpDefault.Transparency = 1 end 				end 			end 		end 		task.wait(0.1) 	end end) stopPeelOut = function() 	isPeelOutActive = false 	peeloutPlayed = false 	isHoldingPeelOut = false 	isPeelOutReleasing = true 	unfreezePlayer() 	stopPeelOutSpeedBoost() 	isRunning = false 	isSpeedBoostActive = false 	runStartTime = tick() 	character:SetAttribute("SpeedBoost", 1.1) 	if ANIMATIONS.PeelCharge.track and ANIMATIONS.PeelCharge.track.IsPlaying then 		ANIMATIONS.PeelCharge.track:Stop() 	end 	 	task.spawn(function() 		task.wait(0.5) 		isPeelOutReleasing = false 	end) end local function getNearestEXE() 	local playersFolder = workspace:FindFirstChild("Players") 	if not playersFolder then return nil end 	 	local myModel = getPlayerModel() 	if not myModel then return nil end 	 	local myHRP = myModel:FindFirstChild("HumanoidRootPart") or myModel:FindFirstChildWhichIsA("BasePart") 	if not myHRP then return nil end 	 	local nearest = nil 	local shortestDistance = 140 	for _, model in ipairs(playersFolder:GetChildren()) do 		if model ~= myModel then 			local charType = model:GetAttribute("Character") or model.Name 			 			if charType then 				local lower = tostring(charType):lower() 				 				 				if lower:find("fleetway") or 				 lower:find("tripwire") or 				 lower:find("kolossos") or 				 lower:find("2011x") or 				 lower:find("2011 x") or 				 lower:find("x") or 				 lower:find("exe") then 					 					local exeHRP = model:FindFirstChild("HumanoidRootPart") 					if exeHRP then 						local dist = (myHRP.Position - exeHRP.Position).Magnitude 						if dist < shortestDistance then 							shortestDistance = dist 							nearest = exeHRP 						end 					end 				end 			end 		end 	end 	 	return nearest end local function performDropDashLunge() 	local targetHRP = getNearestEXE() 	if not targetHRP or not humanoidRootPart then 		 		local bodyVel = Instance.new("BodyVelocity") 		bodyVel.Name = "DropDashBoost" 		bodyVel.MaxForce = Vector3.new(8000, 0, 8000) 		bodyVel.Velocity = humanoidRootPart.CFrame.LookVector * 90 		bodyVel.Parent = humanoidRootPart 		task.delay(0.6, function() if bodyVel.Parent then bodyVel:Destroy() end end) 		return 	end 	 	local direction = (targetHRP.Position - humanoidRootPart.Position).Unit 	local distance = (targetHRP.Position - humanoidRootPart.Position).Magnitude 	 	local bodyVelocity = Instance.new("BodyVelocity") 	bodyVelocity.Name = "DropDashLunge" 	bodyVelocity.MaxForce = Vector3.new(15000, 1000, 15000) 	bodyVelocity.Velocity = direction * math.clamp(85 + distance * 0.8, 85, 180) 	bodyVelocity.Parent = humanoidRootPart 	 	local attach0 = Instance.new("Attachment", humanoidRootPart) 	local attach1 = Instance.new("Attachment", humanoidRootPart) 	attach1.Position = Vector3.new(0, -2.5, 0) 	 	local trail = Instance.new("Trail", humanoidRootPart) 	trail.Color = ColorSequence.new(Color3.fromRGB(220, 255, 255)) 	trail.LightEmission = 1 	trail.LightInfluence = 0 	trail.Lifetime = 0.5 	trail.Transparency = NumberSequence.new({NumberSequenceKeypoint.new(0, 0.1), NumberSequenceKeypoint.new(1, 1)}) 	trail.Attachment0 = attach0 	trail.Attachment1 = attach1 	 	task.delay(0.85, function() 		if bodyVelocity and bodyVelocity.Parent then bodyVelocity:Destroy() end 		if trail and trail.Parent then trail:Destroy() end 		if attach0 and attach0.Parent then attach0:Destroy() end 		if attach1 and attach1.Parent then attach1:Destroy() end 	end) end monitorPeelOutSounds = function() 	if not humanoidRootPart then return end 	local lastPeelStart = 0 	local VOICE_COOLDOWN = 8.9 	local function checkForSounds() 		if not isScriptActive or not humanoidRootPart.Parent then return end 		local peelCharge = humanoidRootPart:FindFirstChild("PeelCharge") 		if peelCharge and peelCharge:IsA("Sound") and not isPeelOutActive then 			local now = tick() 			isPeelOutActive = true 			freezePlayer() 			playAnimation("PeelCharge") 			currentAnimation = "PeelCharge" 			 			if now - lastPeelStart > VOICE_COOLDOWN then 				lastPeelStart = now 				playSound(PEEL_OUT_VOICE_ID, humanoidRootPart, 2.0) 				print("🔊 Peel Out voice played once") 			end 			if startPeelOutSpeedBoost then 				startPeelOutSpeedBoost() 			end 		end 		 		local peelRelease = humanoidRootPart:FindFirstChild("PeelRelease") 		if (peelRelease and peelRelease:IsA("Sound")) or 		 (isPeelOutActive and not peelCharge) then 			 			if isPeelOutActive then 				stopPeelOut() 			end 		end 	end 	 	humanoidRootPart.ChildAdded:Connect(function(child) 		if child.Name == "PeelCharge" or child.Name == "PeelRelease" then 			task.delay(0.08, checkForSounds) 		end 	end) 	humanoidRootPart.ChildRemoved:Connect(function(child) 		if child.Name == "PeelCharge" or child.Name == "PeelRelease" then 			task.delay(0.08, checkForSounds) 		end 	end) 	 	RunService.Heartbeat:Connect(function() 		if tick() % 0.5 < 0.06 then 			checkForSounds() 		end 	end) 	checkForSounds() 	print("✅ PeelOut monitor fixed - voice should play only once now") end local initialSonic = isSonic() if initialSonic then 	startScript() else 	showWaitingNotification() end isCurrentlySonic = initialSonic RunService.Heartbeat:Connect(onHeartbeat) Players.PlayerAdded:Connect(function(plr) 	plr.CharacterAdded:Connect(function() 		if highlightEnabled then 			task.wait(0.5) 			highlightPlayers(true) 		end 	end) end)

Features & Information

FINALY FIXXX AGAIN (THE HANDS DONT MOVE)

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts