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 =
maxStamina =
staminaDrainRate =
staminaRegenRate =
fovSprint =
fovNormal =
fovExhausted =
fadeSpeed =
flashInterval =
sprintButtonYOffset =
stamina = maxStamina
sprinting =
isFlashing =
isExhausted =
isShaking =
isCameraShaking =
currentFOVState =
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 =
(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:()
breathSound.Parent = hrp
stamina = maxStamina
sprinting =
isExhausted =
()
()
(humanoid)
breathSound.IsPlaying
breathSound:()
TweenService:(blurEffect, TweenInfo.(), {Size = }):()
(fovNormal)
currentFOVState =
humanoid.WalkSpeed = walkSpeed
humanoid.Died:(()
sprinting =
isExhausted =
()
()
(humanoid)
breathSound.IsPlaying
breathSound:()
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 =
sprinting stamina > isMoving isExhausted
stamina = .(, stamina - staminaDrainRate * dt)
humanoid.WalkSpeed = sprintSpeed
currentFOVState ~=
(fovSprint)
currentFOVState =
humanoid.WalkSpeed = walkSpeed
isExhausted
stamina = .(maxStamina, stamina + staminaRegenRate * * dt)
currentFOVState ~=
(fovExhausted)
currentFOVState =
stamina = .(maxStamina, stamina + staminaRegenRate * dt)
currentFOVState ~=
(fovNormal)
currentFOVState =
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
)
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 go to my profile to get version 2.

Universal