Run it
Copy the script and paste it into your executor.
()
()
()
Players = :()
RunService = :()
TweenService = :()
ReplicatedStorage = :()
Debris = :()
UserInputService = :()
ContextActionService = :()
Lighting = :()
Workspace = :()
player = Players.LocalPlayer
character = player.Character player.CharacterAdded:()
humanoid = character:()
rootPart = character:()
camera = Workspace.CurrentCamera
Settings = {
NormalSpeed = ,
MinSonicSpeed = ,
MaxSonicSpeed = ,
SpeedDuration = ,
SpeedCooldown = ,
ChargeTime = ,
ChargeRate = ,
DashSpeed = ,
DashDuration = ,
DashCooldown = ,
SpinDamage = ,
SpinRadius = ,
SpinCooldown = ,
MaxEnergy = ,
EnergyRegen = ,
SpeedEnergyCost = ,
DashEnergyCost = ,
SpinEnergyCost = ,
MotionBlurIntensity = ,
MinFOV = ,
MaxFOV = ,
TrailDuration = ,
SpeedLines =
}
SonicData = {
IsSonicSpeed = ,
IsCharging = ,
ChargePower = ,
IsDashing = ,
IsSpinning = ,
Energy = Settings.MaxEnergy,
SpeedCooldown = ,
DashCooldown = ,
SpinCooldown = ,
OriginalWalkSpeed = humanoid.WalkSpeed,
OriginalFOV = camera.FieldOfView,
Effects = {},
Connections = {},
LastBlurTween = ,
GUI = ,
ChargeUI =
}
motionBlur =
speedLines = {}
spinEffect =
speedTrail =
()
LMG2L = {}
LMG2L[] = .(, :().LocalPlayer:())
LMG2L[][] = .ZIndexBehavior.Sibling
LMG2L[] = .(, LMG2L[])
LMG2L[][] =
LMG2L[][] = .(, , )
LMG2L[][] = Font.(, .FontWeight.Bold, .FontStyle.Normal)
LMG2L[][] =
LMG2L[][] = .(, , , )
LMG2L[][] =
LMG2L[][] = .(, , , )
LMG2L[] = .(, LMG2L[])
LMG2L[] = .(, LMG2L[])
LMG2L[][] =
LMG2L[][] = .(, , )
LMG2L[][] = Font.(, .FontWeight.Bold, .FontStyle.Normal)
LMG2L[][] =
LMG2L[][] = .(, , , )
LMG2L[][] =
LMG2L[][] = .(, -, , )
LMG2L[] = .(, LMG2L[])
LMG2L[] = .(, LMG2L[])
LMG2L[][] =
LMG2L[][] = .(, , )
LMG2L[][] = .(, , , )
LMG2L[][] =
LMG2L[][] = -
LMG2L[][] = .(, , , )
LMG2L[] = .(, LMG2L[])
LMG2L[] = .(, LMG2L[])
LMG2L[][] =
LMG2L[][] = .(, , )
LMG2L[][] = .(, , , )
LMG2L[][] =
LMG2L[][] = .(, , , -)
LMG2L[] = .(, LMG2L[])
LMG2L[][] = .(, )
LMG2L[] = .(, LMG2L[])
LMG2L[][] =
LMG2L[] = .(, LMG2L[])
LMG2L[][] =
LMG2L[][] = .(, , )
LMG2L[][] = .(, , , )
LMG2L[][] =
LMG2L[][] = .(, , , )
LMG2L[] = .(, LMG2L[])
LMG2L[][] = .(, )
LMG2L[] = .(, LMG2L[])
LMG2L[] = .(, LMG2L[])
LMG2L[][] =
LMG2L[][] =
LMG2L[][] = .(, , )
LMG2L[][] = Font.(, .FontWeight.Regular, .FontStyle.Normal)
LMG2L[][] = .(, , )
LMG2L[][] =
LMG2L[][] = .(, , , )
LMG2L[][] =
LMG2L[][] = .(, , , )
{
ScreenGui = LMG2L[],
BoostButton = LMG2L[],
DashButton = LMG2L[],
SpinButton = LMG2L[],
EnergyBar = LMG2L[],
EnergyText = LMG2L[],
EnergyContainer = LMG2L[]
}
()
chargeScreenGui = .(, player:())
chargeScreenGui.Name =
chargeScreenGui.ZIndexBehavior = .ZIndexBehavior.Sibling
chargeScreenGui.Enabled =
chargeContainer = .(, chargeScreenGui)
chargeContainer.Name =
chargeContainer.Size = .(, , , )
chargeContainer.Position = .(, -, , )
chargeContainer.BackgroundColor3 = .(, , )
chargeContainer.BackgroundTransparency =
chargeContainer.BorderSizePixel =
containerCorner = .(, chargeContainer)
containerCorner.CornerRadius = .(, )
containerStroke = .(, chargeContainer)
containerStroke.Color = .(, , )
containerStroke.Thickness =
chargeBg = .(, chargeContainer)
chargeBg.Name =
chargeBg.Size = .(, , , )
chargeBg.Position = .(, , , )
chargeBg.BackgroundColor3 = .(, , )
chargeBg.BorderSizePixel =
bgCorner = .(, chargeBg)
bgCorner.CornerRadius = .(, )
chargeBar = .(, chargeBg)
chargeBar.Name =
chargeBar.Size = .(, , , )
chargeBar.BackgroundColor3 = .(, , )
chargeBar.BorderSizePixel =
barCorner = .(, chargeBar)
barCorner.CornerRadius = .(, )
percentText = .(, chargeContainer)
percentText.Name =
percentText.Size = .(, , , )
percentText.Position = .(, , , )
percentText.BackgroundTransparency =
percentText.Text =
percentText.TextColor3 = .(, , )
percentText.Font = .Font.GothamBold
percentText.TextSize =
percentText.TextStrokeTransparency =
{
ScreenGui = chargeScreenGui,
Container = chargeContainer,
ChargeBar = chargeBar,
PercentText = percentText,
ChargeBg = chargeBg
}
()
SonicData.GUI = ()
SonicData.ChargeUI = ()
()
()
()
()
SonicData.GUI
boostPressed =
chargeStartTime =
SonicData.GUI.BoostButton.MouseButton1Down:(()
boostPressed =
chargeStartTime = .()
()
)
SonicData.GUI.BoostButton.MouseButton1Up:(()
boostPressed
boostPressed =
chargeDuration = .() - chargeStartTime
(chargeDuration)
)
SonicData.GUI.BoostButton.MouseLeave:(()
boostPressed
boostPressed =
chargeDuration = .() - chargeStartTime
(chargeDuration)
)
SonicData.GUI.DashButton.MouseButton1Click:(()
()
)
SonicData.GUI.SpinButton.MouseButton1Click:(()
()
)
()
()
SonicData.IsDashing SonicData.IsSpinning SonicData.IsSonicSpeed
()
.() < SonicData.SpeedCooldown
remaining = SonicData.SpeedCooldown - .()
( .. .(, remaining) .. )
SonicData.IsCharging =
SonicData.ChargePower =
SonicData.ChargeUI
SonicData.ChargeUI.ScreenGui.Enabled =
()
camera.FieldOfView = Settings.MaxFOV
()
chargeLoop
chargeLoop = RunService.Heartbeat:((dt)
SonicData.IsCharging
SonicData.ChargePower = .(, SonicData.ChargePower + (Settings.ChargeRate * dt / Settings.ChargeTime))
targetFOV = Settings.MaxFOV - (SonicData.ChargePower * (Settings.MaxFOV - Settings.MinFOV))
camera.FieldOfView = targetFOV
()
SonicData.ChargePower >=
()
chargeLoop:()
)
.(SonicData.Connections, chargeLoop)
(chargeDuration)
SonicData.IsCharging
SonicData.IsCharging =
SonicData.ChargeUI
SonicData.ChargeUI.ScreenGui.Enabled =
energyCost = Settings.SpeedEnergyCost * ( + SonicData.ChargePower * )
(energyCost)
()
()
(energyCost)
speedMultiplier = SonicData.ChargePower
targetSpeed = Settings.MinSonicSpeed + (Settings.MaxSonicSpeed - Settings.MinSonicSpeed) * speedMultiplier
()
( .. .(, chargeDuration) .. )
( .. .(, SonicData.ChargePower * ) .. )
( .. .(targetSpeed))
( .. .(energyCost))
SonicData.OriginalWalkSpeed = humanoid.WalkSpeed
humanoid.WalkSpeed = targetSpeed
SonicData.IsSonicSpeed =
(, speedMultiplier)
SonicData.SpeedCooldown = .() + Settings.SpeedCooldown
()
energyLoop
energyLoop = RunService.Heartbeat:((dt)
SonicData.IsSonicSpeed
(Settings.SpeedEnergyCost * dt * ( + speedMultiplier)) <=
SonicData.IsSonicSpeed =
humanoid.WalkSpeed = SonicData.OriginalWalkSpeed
()
energyLoop:()
energyLoop:()
)
.(SonicData.Connections, energyLoop)
.(()
duration = Settings.SpeedDuration * ( + speedMultiplier * )
.(duration)
SonicData.IsSonicSpeed
SonicData.IsSonicSpeed =
humanoid.WalkSpeed = SonicData.OriginalWalkSpeed
()
)
()
SonicData.ChargeUI SonicData.ChargeUI.ChargeBar SonicData.ChargeUI.PercentText
chargePercent = SonicData.ChargePower *
SonicData.ChargeUI.ChargeBar.Size = .(SonicData.ChargePower, , , )
SonicData.ChargeUI.PercentText.Text = .. .(chargePercent) ..
chargePercent >
SonicData.ChargeUI.ChargeBar.BackgroundColor3 = .(, , )
SonicData.ChargeUI.PercentText.TextColor3 = .(, , )
chargePercent >
SonicData.ChargeUI.ChargeBar.BackgroundColor3 = .(, , )
SonicData.ChargeUI.PercentText.TextColor3 = .(, , )
SonicData.ChargeUI.ChargeBar.BackgroundColor3 = .(, , )
SonicData.ChargeUI.PercentText.TextColor3 = .(, , )
()
SonicData.GUI SonicData.GUI.EnergyBar SonicData.GUI.EnergyText
energyPercent = SonicData.Energy / Settings.MaxEnergy
SonicData.GUI.EnergyBar.Size = .(energyPercent, , , )
energyPercent >
SonicData.GUI.EnergyBar.BackgroundColor3 = .(, , )
energyPercent >
SonicData.GUI.EnergyBar.BackgroundColor3 = .(, , )
SonicData.GUI.EnergyBar.BackgroundColor3 = .(, , )
()
()
SonicData.GUI
buttons = {
{button = SonicData.GUI.BoostButton, cooldown = SonicData.SpeedCooldown, cost = Settings.SpeedEnergyCost, name = },
{button = SonicData.GUI.DashButton, cooldown = SonicData.DashCooldown, cost = Settings.DashEnergyCost, name = },
{button = SonicData.GUI.SpinButton, cooldown = SonicData.SpinCooldown, cost = Settings.SpinEnergyCost, name = }
}
_, btnData (buttons)
btnData.button
remaining = btnData.cooldown - .()
hasEnergy = SonicData.Energy >= btnData.cost
remaining >
btnData.button.Text = .(, remaining) ..
btnData.button.BackgroundTransparency =
hasEnergy
btnData.button.Text =
btnData.button.BackgroundTransparency =
btnData.button.Text = btnData.name
btnData.button.BackgroundTransparency =
btnData.button == SonicData.GUI.BoostButton
btnData.button.BackgroundColor3 = .(, , )
btnData.button == SonicData.GUI.DashButton
btnData.button.BackgroundColor3 = .(, , )
btnData.button.BackgroundColor3 = .(, , )
(active, speedMultiplier)
speedMultiplier = speedMultiplier
active
fovIncrease = + ( * speedMultiplier)
camera.FieldOfView = SonicData.OriginalFOV + fovIncrease
motionBlur
motionBlur = .()
motionBlur.Name =
motionBlur.Size =
motionBlur.Parent = Lighting
motionBlur.Enabled =
motionBlur.Size = Settings.MotionBlurIntensity * speedMultiplier
speedTrail
speedTrail = .()
speedTrail.Color = ColorSequence.({
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , ))
})
speedTrail.Transparency = NumberSequence.({
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, )
})
speedTrail.Lifetime = Settings.TrailDuration * ( + speedMultiplier * )
speedTrail.WidthScale = NumberSequence.( + speedMultiplier * )
attachment0 = .()
attachment0.Position = .(, , )
attachment0.Parent = rootPart
attachment1 = .()
attachment1.Position = .(-, , )
attachment1.Parent = rootPart
speedTrail.Attachment0 = attachment0
speedTrail.Attachment1 = attachment1
speedTrail.Parent = rootPart
speedTrail.Enabled =
Settings.SpeedLines
_, line (speedLines)
line.Emitter.Enabled =
line.Emitter.Rate = + ( * speedMultiplier)
shakeConnection
shakeConnection = RunService.RenderStepped:(()
SonicData.IsSonicSpeed
shakeConnection
shakeConnection:()
shakeIntensity = * speedMultiplier
shake = .(
(.() * - ) * shakeIntensity,
(.() * - ) * shakeIntensity,
)
camera.CFrame = camera.CFrame * .(shake)
)
.(SonicData.Connections, shakeConnection)
camera.FieldOfView = SonicData.OriginalFOV
motionBlur
motionBlur.Enabled =
motionBlur.Size =
speedTrail
speedTrail.Enabled =
_, line (speedLines)
line.Emitter.Enabled =
()
()
camera.FieldOfView = SonicData.OriginalFOV +
.(Settings.DashDuration, ()
camera.FieldOfView = SonicData.OriginalFOV
)
dashTrail = .()
dashTrail.Color = ColorSequence.(.(, , ))
dashTrail.Transparency = NumberSequence.()
dashTrail.Lifetime =
dashTrail.WidthScale = NumberSequence.()
att0 = .()
att0.Position = .(, , )
att0.Parent = rootPart
att1 = .()
att1.Position = .(, , -)
att1.Parent = rootPart
dashTrail.Attachment0 = att0
dashTrail.Attachment1 = att1
dashTrail.Parent = rootPart
Debris:(dashTrail, )
()
()
spinEffect
spinEffect = {
Part = .(),
Emitter = .()
}
spinEffect.Part.Transparency =
spinEffect.Part.Anchored =
spinEffect.Part.CanCollide =
spinEffect.Part.Size = .(, , )
spinEffect.Part.Parent = Workspace.Terrain
attachment = .()
attachment.Parent = spinEffect.Part
spinEffect.Emitter.Texture =
spinEffect.Emitter.Color = ColorSequence.(.(, , ))
spinEffect.Emitter.Transparency = NumberSequence.({
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, )
})
spinEffect.Emitter.Size = NumberSequence.({
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, )
})
spinEffect.Emitter.Lifetime = NumberRange.()
spinEffect.Emitter.Rate =
spinEffect.Emitter.Speed = NumberRange.()
spinEffect.Emitter.Rotation = NumberRange.(, )
spinEffect.Emitter.Parent = attachment
spinEffect.Emitter.Enabled =
.(, ()
spinEffect
spinEffect.Emitter.Enabled =
)
()
SonicData.IsDashing SonicData.IsSpinning SonicData.IsCharging SonicData.IsSonicSpeed
()
.() < SonicData.DashCooldown
remaining = SonicData.DashCooldown - .()
( .. .(, remaining) .. )
(Settings.DashEnergyCost)
()
SonicData.IsDashing =
(Settings.DashEnergyCost)
lookVector = camera.CFrame.LookVector
lookVector = .(lookVector.X, , lookVector.Z).Unit
dashVelocity = .()
dashVelocity.Velocity = lookVector * Settings.DashSpeed
dashVelocity.MaxForce = .(, , )
dashVelocity.P =
dashVelocity.Parent = rootPart
()
.(Settings.DashDuration, ()
dashVelocity dashVelocity.Parent
dashVelocity:()
SonicData.IsDashing =
SonicData.DashCooldown = .() + Settings.DashCooldown
()
)
()
SonicData.IsDashing SonicData.IsSpinning SonicData.IsCharging SonicData.IsSonicSpeed
()
.() < SonicData.SpinCooldown
remaining = SonicData.SpinCooldown - .()
( .. .(, remaining) .. )
(Settings.SpinEnergyCost)
()
SonicData.IsSpinning =
(Settings.SpinEnergyCost)
()
.(, ()
SonicData.IsSpinning =
SonicData.SpinCooldown = .() + Settings.SpinCooldown
()
)
(cost)
SonicData.Energy >= cost
(amount)
SonicData.Energy = .(, SonicData.Energy - amount)
()
SonicData.Energy
(dt)
SonicData.IsSonicSpeed SonicData.IsDashing SonicData.IsSpinning SonicData.IsCharging
SonicData.Energy = .(Settings.MaxEnergy, SonicData.Energy + Settings.EnergyRegen * dt)
()
()
motionBlur
motionBlur.Enabled =
motionBlur.Size =
camera.FieldOfView = SonicData.OriginalFOV
()
()
character humanoid rootPart
()
()
()
regenLoop = RunService.Heartbeat:((dt)
(dt)
()
)
.(SonicData.Connections, regenLoop)
deathConnection = humanoid.Died:(()
()
()
)
.(SonicData.Connections, deathConnection)
()
()
()
()
()
()
()
()
()
_, connection (SonicData.Connections)
connection (connection) ==
(() connection:() )
SonicData.Connections = {}
SonicData.GUI SonicData.GUI.ScreenGui
SonicData.GUI.ScreenGui:()
SonicData.ChargeUI SonicData.ChargeUI.ScreenGui
SonicData.ChargeUI.ScreenGui:()
humanoid
humanoid.WalkSpeed = SonicData.OriginalWalkSpeed
success, errorMsg = (()
()
)
success
( .. errorMsg)
(()
()
()
)
.DisableSonicPowers = ()
()
()
()
.RefillEnergy = ()
SonicData.Energy = Settings.MaxEnergy
()
()
()
()
()
()
{
Disable = .DisableSonicPowers,
RefillEnergy = .RefillEnergy
}
Universal