ULTIMATE MODERN outfit SONIC
Key Required

ULTIMATE MODERN outfit SONIC

(ANNIVERSARY) Outcome Memories v0.2TheHkr3000TheHkr3000 2.4K views 125 executesUpdated Mar 28, 2026
Unrated
00
Lua Script•346 lines (9999 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local ASSET_ID = 114451723265397

local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local isScriptActive = false
local syncConn = nil
local currentMdl = nil

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 function waitForDodges()
	while true do
		local pf = workspace:FindFirstChild("Players")
		if pf and pf:FindFirstChild(player.Name) and pf:FindFirstChild(player.Name):FindFirstChild("Dodges") then return end
		task.wait(0.5)
	end
end

local HIDE_PARTS = {
	belly = true,
	Body = true,
	RFoot = true,
	LFoot = true,
	RSleeve = true,
	LSleeve = true,
	["Sphere.006"] = true,
	["Sphere.010"] = true,
}

local function setupCharacter(char)
	if not isScriptActive then return end
	if syncConn then syncConn:Disconnect() syncConn = nil end
	if currentMdl and currentMdl.Parent then currentMdl:Destroy() currentMdl = nil end

	local hrp = char:WaitForChild("HumanoidRootPart")

	for _, v in ipairs(char:GetDescendants()) do
		if v:IsA("BasePart") then
			v.Transparency = 1
			if v ~= hrp then v.CanCollide = false end
		end
	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 warn("me cago en todo1") return end

	local newHrp = mdl:FindFirstChild("HumanoidRootPart")
	if not newHrp then mdl:Destroy() return end
	mdl.PrimaryPart = newHrp

	if oldVisual then mdl.Parent = oldVisual else mdl.Parent = char end
	currentMdl = mdl

	newHrp.Anchored = true
	newHrp.Transparency = 1

	local mdlHum = mdl:FindFirstChildOfClass("Humanoid")
	if mdlHum then mdlHum:Destroy() end
	local mdlAnim = mdl:FindFirstChildOfClass("Animator")
	if mdlAnim then mdlAnim:Destroy() end

	for _, v in ipairs(mdl:GetDescendants()) do
		if v:IsA("BasePart") then
			v.CanCollide = false
			v.Transparency = HIDE_PARTS[v.Name] and 1 or 0
		end
	end

	mdl:PivotTo(hrp.CFrame)
	task.wait(0.1)
	newHrp.Transparency = 1
	local newWaist = mdl:FindFirstChild("Waist", true)
	if newWaist then newWaist.Transparency = 1 end

	-- MOTOR MAP
	local motorMap = {}
	local function buildMotorMap()
		motorMap = {}
		for _, oldMotor in ipairs(char:GetDescendants()) do
			if oldMotor:IsA("Motor6D") then
				local newMotor = nil
				if oldMotor.Parent then
					local mdlParent = mdl:FindFirstChild(oldMotor.Parent.Name, true)
					if mdlParent then
						newMotor = mdlParent:FindFirstChild(oldMotor.Name)
						if not (newMotor and newMotor:IsA("Motor6D")) then newMotor = nil end
					end
				end
				if not newMotor then
					newMotor = mdl:FindFirstChild(oldMotor.Name, true)
					if not (newMotor and newMotor:IsA("Motor6D")) then newMotor = nil end
				end
				if newMotor then motorMap[oldMotor] = newMotor end
			end
		end
	end
	buildMotorMap()
	print("[SKIN] motorMap entries:", (function() local n=0 for _ in pairs(motorMap) do n+=1 end return n end)())

	local isDropDashActive = false
	local lastImageRectOffset = Vector2.new(0, 0)

	task.spawn(function()
		local imgGui = player.PlayerGui
			:WaitForChild("Round", 30)
		if not imgGui then return end
		imgGui = imgGui:WaitForChild("Game", 30)
		if not imgGui then return end
		imgGui = imgGui:WaitForChild("Ability", 30)
		if not imgGui then return end
		imgGui = imgGui:WaitForChild("Bar", 30)
		if not imgGui then return end
		imgGui = imgGui:WaitForChild("AB1", 30)
		if not imgGui then return end
		imgGui = imgGui:WaitForChild("iMG", 30)
		if not imgGui then return end

		RunService.Heartbeat:Connect(function()
			if not imgGui or not imgGui.Parent then return end
			local currentOffset = imgGui.ImageRectOffset
			if currentOffset ~= lastImageRectOffset then
				isDropDashActive = currentOffset ~= Vector2.new(0, 0)
				lastImageRectOffset = currentOffset
			end
		end)
	end)

	newHrp.CFrame = hrp.CFrame

	syncConn = RunService.Stepped:Connect(function()
		if not char.Parent or not hrp.Parent or not newHrp.Parent then
			if syncConn then syncConn:Disconnect() syncConn = nil end
			return
		end
		if not next(motorMap) then buildMotorMap() end

		newHrp.CFrame = hrp.CFrame

		for oldMotor, newMotor in pairs(motorMap) do
			if oldMotor.Parent and newMotor.Parent then
				newMotor.Transform = oldMotor.Transform
			end
		end

		local pf = workspace:FindFirstChild("Players")
		local pFolder = pf and pf:FindFirstChild(player.Name)
		local nativeSpindash = pFolder and pFolder:FindFirstChild("Spindash")

		if isDropDashActive then
			for _, v in ipairs(mdl:GetDescendants()) do
				if v:IsA("BasePart") then
					v.Transparency = 1
				end
			end
			if nativeSpindash then
				for _, v in ipairs(nativeSpindash:GetDescendants()) do
					if v:IsA("BasePart") then
						v.Transparency = 0
					end
				end
			end
		else
			
			for _, v in ipairs(mdl:GetDescendants()) do
				if v:IsA("BasePart") then
					v.Transparency = HIDE_PARTS[v.Name] and 1 or 0
				end
			end
		end

		newHrp.Transparency = 1
		if newWaist then newWaist.Transparency = 1 end
	end)

	char.DescendantAdded:Connect(function(d)
		if d:IsA("BasePart") and not d:IsDescendantOf(mdl) then
			d.Transparency = 1
			if d ~= hrp then d.CanCollide = false end
		end
	end)
end

local function setupViewport()
	task.spawn(function()
		local viewportFrame = player.PlayerGui
			:WaitForChild("Round", 30)
			:WaitForChild("Game", 30)
			:WaitForChild("SurvivorHP", 30)
			:WaitForChild("ViewportFrame", 30)
		if not viewportFrame then warn("no hay frame?") return end

		local viewportModel = viewportFrame
			:WaitForChild("WorldModel", 30)
			:WaitForChild("Default", 30)
		if not viewportModel then warn("no hay modelo??") return end

		local vpOverrideModel = nil
		local function replaceViewportModel()
			local ok, objects = pcall(game.GetObjects, game, "rbxassetid://" .. ASSET_ID)
			if not ok or #objects == 0 then
				warn("me cago en todo2")
				return
			end
			if vpOverrideModel and vpOverrideModel.Parent then
				vpOverrideModel:Destroy()
				vpOverrideModel = nil
			end
			local newModel = objects[1]:Clone()
			vpOverrideModel = newModel

			for _, part in ipairs(viewportModel:GetDescendants()) do
				if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
					part.Transparency = 1
				end
			end

			local newHum = newModel:FindFirstChildOfClass("Humanoid")
			if newHum then newHum:Destroy() end

			for _, v in ipairs(newModel:GetDescendants()) do
				if v:IsA("BasePart") then
					v.CanCollide = false
					v.Transparency = HIDE_PARTS[v.Name] and 1 or 0
				end
			end

			newModel.Parent = viewportModel

			local viewportRootPart = viewportModel:FindFirstChild("HumanoidRootPart")
			local primaryPart = newModel.PrimaryPart or newModel:FindFirstChildWhichIsA("BasePart")
			if viewportRootPart and primaryPart then
				newModel:PivotTo(viewportRootPart.CFrame)
				primaryPart.Transparency = 1
				local weld = Instance.new("WeldConstraint")
				weld.Part0 = viewportRootPart
				weld.Part1 = primaryPart
				weld.Parent = viewportRootPart
			end

			print("[SKIN] viewport reemplazado")
		end

		replaceViewportModel()

		viewportModel.DescendantAdded:Connect(function()
			task.wait(0.1)
			if not vpOverrideModel or not vpOverrideModel.Parent then
				vpOverrideModel = nil
				replaceViewportModel()
			end
		end)

		player.CharacterAdded:Connect(function()
			task.wait(3)
			vpOverrideModel = nil
			local newVM = viewportFrame:FindFirstChild("WorldModel")
				and viewportFrame.WorldModel:FindFirstChild("Default")
			if newVM then
				viewportModel = newVM
				replaceViewportModel()
			end
		end)
	end)
end

-- Start
waitForDodges()
task.wait(3)
isScriptActive = true
setupCharacter(character)
setupViewport()
print("TROLEADO XDDDXDXD")
print("TROLEADO XDDDXDXD")
print("TROLEADO XDDDXDXD")
print("TROLEADO XDDDXDXD")
print("TROLEADO XDDDXDXD")
player.CharacterAdded:Connect(function(newChar)
	character = newChar
	humanoid = newChar:WaitForChild("Humanoid")
	task.wait(1)
	setupCharacter(newChar)
end)

task.spawn(function()
	while true do
		local pf = workspace:FindFirstChild("Players")
		local playerFolder = pf and pf: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
		task.wait(0.1)
	end
end)

-- MÚSICA
local function loadCustomAsset(url, filename)
	if not isfile(filename) then
		writefile(filename, game:HttpGet(url))
	end
	return getcustomasset(filename)
end

local CUSTOM_MUSIC = loadCustomAsset(
	"https://github.com/monicagalindo-wq/RECUP/raw/refs/heads/main/InfTKD.mp3",
	"InfTKD.mp3"
)

task.spawn(function()
	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 not theme then
		warn("no musica pipipi")
		return
	end
	theme.SoundId = CUSTOM_MUSIC
	theme.Volume = 1.5
	theme.Looped = true
end)

Features & Information

"Oh yeah, this is happening!" (EXECUTE DURING A MATCH, NOT BEFORE OR AFTER)

Community Comments (9)

SaohajimiZccSaohajimiZccMar 28, 2026

hi!Your modern super sonic is modified based on what I made, right? Can I add you as a friend and then we modify the model together? I now have a remastered Sonic model.

Replying to @SaohajimiZcc
TheHkr3000TheHkr3000Mar 28, 2026

@SaohajimiZcc My modern super sonic is a joke, I mean, I edited a Modern Sonic Model for thumbnail but it's not playable bc the RootPart is broken

Replying to @TheHkr3000
SaohajimiZccSaohajimiZccMar 28, 2026

@TheHkr3000 It's okay, I added you as a friend, please accept it, and then we'll meet at the studio.

Replying to @SaohajimiZcc
Area51anomlyArea51anomlyJul 2, 2026

@SaohajimiZcc becuase I knew it’s a joke becuase there was a x mark

Replying to @TheHkr3000
SaohajimiZccSaohajimiZccMar 28, 2026

@TheHkr3000 name saohajimizcc and satoru

Replying to @SaohajimiZcc
TheHkr3000TheHkr3000Mar 28, 2026

@SaohajimiZcc okay, but I'll accept later. I'm not at home right now.

Replying to @TheHkr3000
SaohajimiZccSaohajimiZccMar 28, 2026

@TheHkr3000 ok

OutcomeScripterOutcomeScripterApr 4, 2026(edited)

I just execute myself and i become amy's costume

Replying to @OutcomeScripter
TheHkr3000TheHkr3000Apr 5, 2026

@OutcomeScripter That's why it says "modern outfit"

More Scripts for (ANNIVERSARY) Outcome Memories v0.2