Run it
Copy the script and paste it into your executor.
Players = :()
TweenService = :()
RunService = :()
player = Players.LocalPlayer
cam = .CurrentCamera
blurEffect = .()
blurEffect.Size =
blurEffect.Parent = cam
walkSpeed =
sprintSpeed =
accelRate =
decelRate =
maxStamina =
staminaDrainRate =
staminaRegenRate =
fovSprint =
fovNormal =
fovExhausted =
fadeSpeed =
flashInterval =
sprintButtonYOffset =
stamina = maxStamina
sprinting =
isFlashing =
isExhausted =
isShaking =
isCameraShaking =
currentFOVState =
currentWalkSpeed = walkSpeed
gui = .()
gui.Name =
gui.ResetOnSpawn =
gui.Parent = player:()
staminaBackground = .()
staminaBackground.Size = .(, , , )
staminaBackground.Position = .(, , , )
staminaBackground.BackgroundColor3 = .(, , )
staminaBackground.BackgroundTransparency =
staminaBackground.BorderSizePixel =
staminaBackground.Parent = gui
staminaFill = .()
staminaFill.Size = .(, , , )
staminaFill.BackgroundColor3 = .(, , )
staminaFill.BorderSizePixel =
staminaFill.Parent = staminaBackground
sprintBtn = .()
sprintBtn.Name =
sprintBtn.AnchorPoint = .(, )
sprintBtn.BackgroundTransparency =
sprintBtn.Image =
sprintBtn.Parent = gui
breathSound = .()
breathSound.SoundId =
breathSound.Volume =
breathSound.Looped =
sprintSound = .()
sprintSound.SoundId =
sprintSound.Volume =
sprintSound.Looped =
walkSound = .()
walkSound.SoundId =
walkSound.Volume =
walkSound.Looped =
fadeRate =
(target)
TweenService:(cam, TweenInfo.(, .EasingStyle.Sine, .EasingDirection.Out), {FieldOfView = target}):()
()
isShaking
isShaking =
.(()
isShaking
offsetX = .(-, )
offsetY = .(-, )
staminaBackground.Position = .(, offsetX, , offsetY)
.()
)
()
isShaking =
staminaBackground.Position = .(, , , )
(humanoid)
isCameraShaking
isCameraShaking =
.(()
isCameraShaking
camX = (.(-, ) * )
camY = (.(-, ) * )
humanoid.CameraOffset = .(camX, camY, )
.()
)
(humanoid)
isCameraShaking =
humanoid.CameraOffset = .(, , )
()
isFlashing
isFlashing =
.(()
isFlashing
staminaFill.BackgroundColor3 = .(, , )
TweenService:(staminaFill, TweenInfo.(flashInterval), {BackgroundTransparency = }):()
.(flashInterval)
TweenService:(staminaFill, TweenInfo.(flashInterval), {BackgroundTransparency = }):()
.(flashInterval)
)
()
isFlashing =
staminaFill.BackgroundColor3 = .(, , )
staminaFill.BackgroundTransparency =
()
sprintBtn.MouseButton1Down:(()
stamina > isExhausted
sprinting =
sprintBtn.Image =
)
sprintBtn.MouseButton1Up:(()
sprinting =
sprintBtn.Image =
)
()
(newCharacter)
humanoid = newCharacter:()
hrp = newCharacter:()
runningSound = hrp:()
runningSound
runningSound.Volume =
breathSound.Parent = hrp
sprintSound.Parent = hrp
walkSound.Parent = hrp
stamina = maxStamina
sprinting =
isExhausted =
()
()
(humanoid)
breathSound.IsPlaying
breathSound:()
sprintSound.IsPlaying
sprintSound:()
walkSound.IsPlaying
walkSound:()
TweenService:(blurEffect, TweenInfo.(), {Size = }):()
(fovNormal)
currentFOVState =
currentWalkSpeed = walkSpeed
humanoid.WalkSpeed = walkSpeed
humanoid.Died:(()
sprinting =
isExhausted =
()
()
(humanoid)
breathSound.IsPlaying
breathSound:()
sprintSound.IsPlaying
sprintSound:()
walkSound.IsPlaying
walkSound:()
TweenService:(blurEffect, TweenInfo.(), {Size = }):()
)
humanoid
humanoid = (player.Character player.CharacterAdded:())
player.CharacterAdded:((newCharacter)
humanoid = (newCharacter)
)
RunService.RenderStepped:(()
jumpBtn = player.PlayerGui:()
player.PlayerGui.TouchGui:()
player.PlayerGui.TouchGui.TouchControlFrame:()
jumpBtn
sprintBtn.Size = jumpBtn.Size
pos = jumpBtn.AbsolutePosition
size = jumpBtn.AbsoluteSize
sprintBtn.Position = .(, pos.X + size.X/, , pos.Y - size.Y + sprintButtonYOffset)
)
RunService.RenderStepped:((dt)
isMoving = humanoid.MoveDirection.Magnitude >
isExhausted stamina <=
sprinting =
sprintBtn.Image =
targetSpeed = (sprinting stamina > isMoving isExhausted) sprintSpeed walkSpeed
rate = (currentWalkSpeed < targetSpeed) accelRate decelRate
currentWalkSpeed < targetSpeed
currentWalkSpeed = .(currentWalkSpeed + rate * dt, targetSpeed)
currentWalkSpeed > targetSpeed
currentWalkSpeed = .(currentWalkSpeed - rate * dt, targetSpeed)
humanoid.WalkSpeed = currentWalkSpeed
speedFraction = .((currentWalkSpeed - walkSpeed) / (sprintSpeed - walkSpeed), , )
sprinting stamina > isMoving isExhausted
effectiveDrainRate = staminaDrainRate * speedFraction
stamina = .(, stamina - effectiveDrainRate * dt)
sprintSound.IsPlaying
sprintSound.Volume =
sprintSound:()
sprintSound.Volume = .(sprintSound.Volume + fadeRate * dt, speedFraction)
sprintSound.IsPlaying
sprintSound.Volume = .(sprintSound.Volume - fadeRate * dt, )
sprintSound.Volume <=
sprintSound:()
effectiveRegenRate
isExhausted
effectiveRegenRate = staminaRegenRate * * ( - speedFraction)
stamina = .(maxStamina, stamina + effectiveRegenRate * dt)
effectiveRegenRate = staminaRegenRate * ( - speedFraction)
stamina = .(maxStamina, stamina + effectiveRegenRate * dt)
isMoving sprinting isExhausted
walkSound.IsPlaying
walkSound.Volume =
walkSound:()
walkSound.Volume = .(walkSound.Volume + fadeRate * dt, )
walkSound.IsPlaying
walkSound.Volume = .(walkSound.Volume - fadeRate * dt, )
walkSound.Volume <=
walkSound:()
staminaFill.Size = .(stamina / maxStamina, , , )
stamina <= isExhausted
stamina =
sprinting =
sprintBtn.Image =
isExhausted =
()
()
(humanoid)
breathSound.IsPlaying
breathSound:()
breathSound.Volume =
TweenService:(blurEffect, TweenInfo.(), {Size = }):()
isExhausted stamina >= maxStamina *
isExhausted =
()
()
(humanoid)
TweenService:(blurEffect, TweenInfo.(), {Size = }):()
breathSound.IsPlaying
isExhausted
breathSound.Volume =
breathSound.Volume = .(breathSound.Volume - dt * , , )
breathSound.Volume <=
breathSound:()
breathSound.Volume =
isExhausted
breathSound:()
breathSound.Volume =
targetTransparency = (stamina >= maxStamina)
staminaBackground.BackgroundTransparency = staminaBackground.BackgroundTransparency + (targetTransparency - staminaBackground.BackgroundTransparency) * dt * fadeSpeed
staminaFill.BackgroundTransparency = staminaFill.BackgroundTransparency + (targetTransparency - staminaFill.BackgroundTransparency) * dt * fadeSpeed
targetFOV
isExhausted
targetFOV = fovExhausted
currentFOVState ~=
(targetFOV)
currentFOVState =
targetFOV = fovNormal + (fovSprint - fovNormal) * speedFraction
cam.FieldOfView = targetFOV
currentFOVState = (speedFraction > )
)
cam.FieldOfView = fovNormalFeatures: - Run button as in thumbnail - can be exhausted - Stamina Bar - can customize the script Updated: - if the player respawns the script still works - fixed an issue where holding the sprint button until the stamina bar runs out can still sprint if the player is still holding the button Updated v2: - Add Acceleration - Add Sound Effect (" You can delete the sound effect if you don't like it ") Fixed Default Footstep Deleted.

Universal