JERRY IN OM
Key Required

JERRY IN OM

(ANNIVERSARY) Outcome Memories v0.2sonicplayman2sonicplayman2 1.8K views 384 executesUpdated Jun 1, 2026
5.0/ 5(3 votes)
30100% Positive
Lua Script•1539 lines (44823 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 = 79700986108677
local ASSET_ID = 100074831520455
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 = "100074831520455"
	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(1,-20,0.5,220)
	end

	indicatorFrame.Parent = player:WaitForChild("PlayerGui")
		:WaitForChild("Round", 5)
		:WaitForChild("Game", 5)

	createButton(
		indicatorFrame,
		-70, 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 = "jerr";
		Text = "made by outcome dev";
		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
	root = newChar:WaitForChild("HumanoidRootPart")
	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

--====================================================--
--           FIXED HOVER + HOMING SYSTEM              --
--====================================================--

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")

local player = Players.LocalPlayer

-- ALWAYS GET CURRENT CHARACTER (fixes respawn bug)
local function getCharacter()
	return player.Character
end

local function getRoot()
	local char = getCharacter()
	if char then
		return char:FindFirstChild("HumanoidRootPart")
	end
	return nil
end

local function getHumanoid()
	local char = getCharacter()
	if char then
		return char:FindFirstChild("Humanoid")
	end
	return nil
end

-- SETTINGS
local HOVER_HEIGHT = 20
local HOVER_DURATION = 3
local ASCEND_TIME = 0.6
local DASH_SPEED = 275
local DASH_STOP_DISTANCE = 5
local HIGHLIGHT_RADIUS = 200

-- STATE
local isHovering = false
local hoverStart = 0
local hoverPosition = nil
local isAttacking = false
local highlights = {}

-----------------------------------------------------------
-- HIGHLIGHT
-----------------------------------------------------------
local function highlightPlayers()
	local root = getRoot()
	if not root then return end

	for _, p in ipairs(Players:GetPlayers()) do
		if p ~= player and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
			local distance = (p.Character.HumanoidRootPart.Position - root.Position).Magnitude
			if distance <= HIGHLIGHT_RADIUS and not highlights[p] then
				local highlight = Instance.new("Highlight")
				highlight.Adornee = p.Character
				highlight.FillTransparency = 1
				highlight.OutlineTransparency = 0
				highlight.OutlineColor = Color3.new(1,1,1)
				highlight.Parent = p.Character
				highlights[p] = highlight
			end
		end
	end
end

local function removeHighlights()
	for _, hl in pairs(highlights) do
		if hl then hl:Destroy() end
	end
	highlights = {}
end

-----------------------------------------------------------
-- HOVER
-----------------------------------------------------------
local function startHover()
	local root = getRoot()
	local humanoid = getHumanoid()
	if not root or not humanoid then return end
	if isHovering then return end

	isHovering = true
	hoverStart = tick()

	humanoid.AutoRotate = false
	humanoid:ChangeState(Enum.HumanoidStateType.Physics)

	hoverPosition = root.Position + Vector3.new(0, HOVER_HEIGHT, 0)

	highlightPlayers()

	local tween = TweenService:Create(
		root,
		TweenInfo.new(ASCEND_TIME, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
		{CFrame = CFrame.new(hoverPosition)}
	)

	tween:Play()
end

local function stopHover()
	local humanoid = getHumanoid()
	if humanoid then
		humanoid.AutoRotate = true
		humanoid:ChangeState(Enum.HumanoidStateType.Freefall)
	end

	isHovering = false
	removeHighlights()
end

-----------------------------------------------------------
-- TARGETING
-----------------------------------------------------------
local function getNearestPlayer()
	local root = getRoot()
	if not root then return nil end

	local closestPlayer = nil
	local closestDistance = math.huge

	for _, p in ipairs(Players:GetPlayers()) do
		if p ~= player and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
			local distance = (p.Character.HumanoidRootPart.Position - root.Position).Magnitude
			if distance < closestDistance then
				closestDistance = distance
				closestPlayer = p
			end
		end
	end

	return closestPlayer
end

-----------------------------------------------------------
-- HOMING COMBO
-----------------------------------------------------------
local function homingCombo()
	if isAttacking then return end
	isAttacking = true

	stopHover()

	local hits = 0
	local maxHits = 3

	local function returnToAir(callback)
		local root = getRoot()
		if not root or not hoverPosition then
			callback()
			return
		end

		local tween = TweenService:Create(
			root,
			TweenInfo.new(0.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
			{CFrame = CFrame.new(hoverPosition)}
		)

		tween:Play()
		tween.Completed:Wait()

		callback()
	end

	local function doDash()
		local root = getRoot()
		if not root then
			isAttacking = false
			return
		end

		local target = getNearestPlayer()
		if not target then
			isAttacking = false
			return
		end

		local connection
		connection = RunService.Heartbeat:Connect(function()
			local root = getRoot()
			if not root or not target.Character or not target.Character:FindFirstChild("HumanoidRootPart") then
				connection:Disconnect()
				isAttacking = false
				return
			end

			local currentPos = root.Position
			local targetPos = target.Character.HumanoidRootPart.Position
			local direction = targetPos - currentPos
			local distance = direction.Magnitude

			if distance < DASH_STOP_DISTANCE then
				connection:Disconnect()
				root.Velocity = Vector3.new(0,0,0)

				hits += 1

				if hits >= maxHits then
					isAttacking = false
					return
				end

				returnToAir(function()
					task.wait(0.05)
					doDash()
				end)

				return
			end

			root.Velocity = direction.Unit * DASH_SPEED
		end)
	end

	doDash()
end

-----------------------------------------------------------
-- INPUT
-----------------------------------------------------------
UserInputService.InputBegan:Connect(function(input, gp)
	if gp then return end

	if input.KeyCode == Enum.KeyCode.R then
		startHover()

		task.wait(ASCEND_TIME + 0.05)

		homingCombo()
	end
end)

-----------------------------------------------------------
-- HOVER LOOP
-----------------------------------------------------------
RunService.Heartbeat:Connect(function()
	if not isHovering then return end

	local root = getRoot()
	if not root then return end

	local elapsed = tick() - hoverStart

	if elapsed >= HOVER_DURATION then
		stopHover()
	else
		root.Velocity = Vector3.new(0,0,0)
	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

HOME ATTACK SUPER SPEED DROP DASH PEELOUT AND MORE!!!!

Community Comments (5)

whoisthisrandomwhoisthisrandomJun 2, 2026

Erm which characecter do you sel

Replying to @whoisthisrandom
sonicplayman2sonicplayman2Jun 2, 2026

@whoisthisrandom sonic

whoisthisrandomwhoisthisrandomJun 2, 2026

Ect for this

Replying to @whoisthisrandom
sonicplayman2sonicplayman2Jun 2, 2026

@whoisthisrandom yes

whoisthisrandomwhoisthisrandomJun 3, 2026

Oh thanks

More Scripts for (ANNIVERSARY) Outcome Memories v0.2