Ova Metal Sonic
Key Required

Ova Metal Sonic

(ANNIVERSARY) Outcome Memories v0.2TheManuCcdxDTheManuCcdxD 2.5K views 4.1K executesUpdated Jun 15, 2026
5.0/ 5(2 votes)
20100% Positive
Lua Script•457 lines (10411 chars)
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()

local humanoid = char:WaitForChild("Humanoid")
local root = char:WaitForChild("HumanoidRootPart")

-- ANTI SLIP
humanoid:SetStateEnabled(Enum.HumanoidStateType.FallingDown,false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Ragdoll,false)

-- MAIN ANIMATION
local anim = Instance.new("Animation")
anim.AnimationId = "rbxassetid://91409825184210"

local track = humanoid:LoadAnimation(anim)
track.Priority = Enum.AnimationPriority.Action4
track.Looped = true

-- DOUBLE JUMP ANIMATION
local jumpAnim = Instance.new("Animation")
jumpAnim.AnimationId = "rbxassetid://476778305"

local jumpTrack = humanoid:LoadAnimation(jumpAnim)
jumpTrack.Priority = Enum.AnimationPriority.Action4

local canDouble = false
local usedDouble = false

-- NO STUN
local function removeStun()

	for _,v in pairs(char:GetDescendants()) do
		
		local name = string.lower(v.Name)

		if name:find("stun")
		or name:find("freeze")
		or name:find("ragdoll") then
			
			pcall(function()
				v:Destroy()
			end)
		end
	end
end

-- KEEP ANIMATION PLAYING
RunService.RenderStepped:Connect(function()

	removeStun()

	for _,v in pairs(humanoid:GetPlayingAnimationTracks()) do
		
		if v ~= track and v ~= jumpTrack then
			v:Stop()
		end
	end

	if not track.IsPlaying then
		track:Play()
	end
end)

-- DETECT JUMP
humanoid.StateChanged:Connect(function(_,new)

	if new == Enum.HumanoidStateType.Jumping then
		
		if not canDouble then
			canDouble = true
			usedDouble = false
		end
	end

	if new == Enum.HumanoidStateType.Landed then
		
		canDouble = false
		usedDouble = false
	end
end)

-- DOUBLE JUMP
UIS.JumpRequest:Connect(function()

	if canDouble and not usedDouble then
		
		usedDouble = true

		root.AssemblyLinearVelocity = Vector3.new(
			root.AssemblyLinearVelocity.X,
			85,
			root.AssemblyLinearVelocity.Z
		)

		jumpTrack:Play()

		task.delay(0.3,function()
			jumpTrack:Stop()
		end)
	end
end)
print("[May the bullying commence]")

    local function makeAntiSlip(part)
        if part:IsA("BasePart") then
            part.CustomPhysicalProperties = PhysicalProperties.new(1, 1.5, 0, 1.5, 0)
        end
    end

    for _, obj in ipairs(workspace:GetDescendants()) do
        makeAntiSlip(obj)
    end

    workspace.DescendantAdded:Connect(function(obj)
        makeAntiSlip(obj)
    end) 

local Players = game:GetService("Players")
local lp = Players.LocalPlayer
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")

local function antiStun(char)
    local humanoid = char:WaitForChild("Humanoid")
    RunService.Heartbeat:Connect(function()
        if CollectionService:HasTag(char, "Stunned") then
            CollectionService:RemoveTag(char, "Stunned")
        end
        
        local currentState = humanoid:GetState()
        if currentState == Enum.HumanoidStateType.Physics or 
           currentState == Enum.HumanoidStateType.Ragdoll or 
           currentState == Enum.HumanoidStateType.FallingDown or
           currentState == Enum.HumanoidStateType.PlatformStanding then
            humanoid:ChangeState(Enum.HumanoidStateType.RunningNoPhysics)
        end
    end)
end

if lp.Character then
    antiStun(lp.Character)
end

lp.CharacterAdded:Connect(antiStun)

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

    local player = Players.LocalPlayer
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:WaitForChild("Humanoid")
---SUPER METAL JIJIJIJA (LMS)


-- OVA METAL SONIC DARK LMS FORM

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

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()

local humanoid = character:WaitForChild("Humanoid")
local hrp = character:WaitForChild("HumanoidRootPart")

local transformed = false

-- RESPAWN
player.CharacterAdded:Connect(function(c)

	character = c
	humanoid = character:WaitForChild("Humanoid")
	hrp = character:WaitForChild("HumanoidRootPart")

	transformed = false
end)

-- PLAYER MODEL
local function getPlayerModel()

	local folder = workspace:FindFirstChild("Players")

	if not folder then
		return nil
	end

	return folder:FindFirstChild(player.Name)
end

-- LMS DETECTOR
local function isLastLife()

	local model = getPlayerModel()

	return model and model:GetAttribute("LastLife") == true
end

-- CHAOS EMERALDS INTRO
local function playChaosEmeraldIntro(callback)

	local chaosEmeraldsId = 127338011222921

	local success, objects =
		pcall(game.GetObjects, game, "rbxassetid://" .. chaosEmeraldsId)

	if not success or #objects == 0 then

		if callback then
			callback()
		end

		return
	end

	local chaosModel = objects[1]:Clone()
	chaosModel.Parent = workspace

	local emeralds = {}

	for _,obj in ipairs(chaosModel:GetDescendants()) do

		if obj:IsA("MeshPart") then

			table.insert(emeralds,obj)

			obj.Anchored = false
			obj.CanCollide = false
		end
	end

	local radius = 7
	local angleStep = (2 * math.pi) / #emeralds

	local spin = 0

	local connection

	connection = RunService.Heartbeat:Connect(function(dt)

		spin += dt * 4

		for i,emerald in ipairs(emeralds) do

			local angle = (i * angleStep) + spin

			local x = math.cos(angle) * radius
			local z = math.sin(angle) * radius

			emerald.Position =
				hrp.Position + Vector3.new(x,2,z)
		end
	end)

	task.wait(2)

	connection:Disconnect()

	for _,emerald in ipairs(emeralds) do

		local tween = TweenService:Create(
			emerald,
			TweenInfo.new(0.25),
			{
				Position = hrp.Position
			}
		)

		tween:Play()
	end

	task.wait(0.35)

	chaosModel:Destroy()

	if callback then
		callback()
	end
end

-- DARK FORM
local function makeDarkForm()

	if transformed then
		return
	end

	transformed = true

	local blackColor = Color3.fromRGB(0,0,0)
	local whiteColor = Color3.fromRGB(255,255,255)

	for _,obj in ipairs(character:GetDescendants()) do

		if obj:IsA("BasePart") then

			local name = obj.Name:lower()

			-- EYES
			if string.find(name,"eye")
			or string.find(name,"pupil")
			or string.find(name,"iris") then

				obj.Material = Enum.Material.Neon
				obj.Color = whiteColor

			else

				-- TODO NEGRO
				obj.Material = Enum.Material.SmoothPlastic
				obj.Color = blackColor
			end
		end
	end

	-- AURA
	local aura = Instance.new("Highlight")

	aura.FillColor = blackColor
	aura.FillTransparency = 0.4

	aura.OutlineColor = whiteColor
	aura.OutlineTransparency = 0

	aura.Parent = character

	-- Sound
	local sound = Instance.new("Sound")

	sound.SoundId = "rbxassetid://9129996965"
	sound.Volume = 2

	sound.Parent = hrp

	sound:Play()

	-- SPEED
	humanoid.WalkSpeed += 4
end

-- LMS CHECK
RunService.Heartbeat:Connect(function()

	if isLastLife() and not transformed then

		playChaosEmeraldIntro(function()

			makeDarkForm()
		end)
	end
end)

local player = game:GetService("Players").LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local camera = workspace.CurrentCamera
local playerGui = player:WaitForChild("PlayerGui")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")

-- ============================================================
-- SCRIPT 1: FLIGHT SYSTEM (3s) + SOFT BUTTON (40x40) + FOV 120
-- ============================================================

local FLY_SFX_ID = 118787708282878
local FLY_DURATION = 3 
local FLY_SPEED = 120
local NORMAL_FOV = 70
local MAX_FOV = 120
local isFlying = false

local sfx = Instance.new("Sound", humanoidRootPart)
sfx.SoundId = "rbxassetid://" .. FLY_SFX_ID
sfx.Volume = 1
sfx.Looped = true

local screenGui = Instance.new("ScreenGui", playerGui)
screenGui.ResetOnSpawn = true -- CAMBIADO A TRUE: El botón desaparece al morir/respawnear

local flyBtn = Instance.new("TextButton", screenGui)
flyBtn.Name = "SoftFlyButton"
flyBtn.Size = UDim2.new(0, 40, 0, 40)
flyBtn.Position = UDim2.new(0.85, 0, 0.5, 0)
flyBtn.BackgroundColor3 = Color3.new(0, 0, 0)
flyBtn.Text = ""
flyBtn.Rotation = 45

local uiCorner = Instance.new("UICorner", flyBtn)
uiCorner.CornerRadius = UDim.new(0, 8)

local uiStroke = Instance.new("UIStroke", flyBtn)
uiStroke.Color = Color3.new(0, 1, 1)
uiStroke.Thickness = 2
uiStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border

local function tweenFOV(target)
    local info = TweenInfo.new(0.5, Enum.EasingStyle.Quart, Enum.EasingDirection.Out)
    TweenService:Create(camera, info, {FieldOfView = target}):Play()
end

local bv, bg, renderConn

local function stopFlying()
    isFlying = false
    if bv then bv:Destroy() end
    if bg then bg:Destroy() end
    if renderConn then renderConn:Disconnect() end
    sfx:Stop()
    humanoid.PlatformStand = false
    flyBtn.BackgroundColor3 = Color3.new(0, 0, 0)
    tweenFOV(NORMAL_FOV)
end

local function startFlying()
    if isFlying then return end
    isFlying = true
    humanoid.PlatformStand = true
    flyBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
    tweenFOV(MAX_FOV)
    
    bv = Instance.new("BodyVelocity", humanoidRootPart)
    bv.MaxForce = Vector3.new(1, 1, 1) * math.huge
    bg = Instance.new("BodyGyro", humanoidRootPart)
    bg.MaxTorque = Vector3.new(1, 1, 1) * math.huge
    sfx:Play()

    renderConn = RunService.RenderStepped:Connect(function()
        if isFlying and bv and bg then
            if humanoid.MoveDirection.Magnitude > 0 then
                bv.Velocity = camera.CFrame.LookVector * FLY_SPEED
            else
                bv.Velocity = Vector3.new(0, 0, 0)
            end
            bg.CFrame = camera.CFrame
        end
    end)

    task.delay(FLY_DURATION, function()
        stopFlying()
    end)
end

flyBtn.MouseButton1Click:Connect(startFlying)

player.CharacterAdded:Connect(function(newChar)
    character = newChar
    humanoid = character:WaitForChild("Humanoid")
    humanoidRootPart = character:WaitForChild("HumanoidRootPart")
    stopFlying()
    sfx.Parent = humanoidRootPart
    camera.FieldOfView = NORMAL_FOV
end)

Features & Information

There's a bug in the Emeralds intro in LMS, but meh, I'll fix that in the next update.

Community Comments (5)

ErizotdErizotdJun 16, 2026

Hermano lo puedes hacer loadtring?

AxoPleys8AxoPleys8Jun 22, 2026

Tengo una pregunta...que ase el script o para ser más específico que cambia en metal?

Replying to @AxoPleys8
TheManuCcdxDTheManuCcdxDJun 24, 2026

@AxoPleys8 lo que hace es darle doble salto no stun para la carga y cuando se cura y puede volar si no les funciona lo hago en loadstring

Replying to @TheManuCcdxD
AxoPleys8AxoPleys8Jun 26, 2026

@TheManuCcdxD okey gracias 😃

diegoga075diegoga075Jun 27, 2026

Lo podrían hacer loadstring pls?

More Scripts for (ANNIVERSARY) Outcome Memories v0.2