
Key RequiredUniversal

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Lighting = game:GetService("Lighting")
local SoundService = game:GetService("SoundService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local IDLE_FOV = 90
local INTRO_FOV = 20
local SPRINT_FOV_BOOST = 9
local DASH_FOV_BOOST = 20
local HIT_FOV_DROP = 95
local FOV_TWEEN_TIME = 1.5
local INTRO_WAIT_TIME = 1
local AUDIO_ID = "rbxassetid://139488665764275"
local HIT_SOUND_ID = "rbxassetid://138651783706047"
local DASH_ANIM_ID = "rbxassetid://73053491533472"
local DASH_DURATION = 0.6
local DASH_SPEED = 85
local DELAY_BEFORE_DASH = 0.5
local DASH_HITBOX_RADIUS = 6
local SKYBOX = {
Bk = "rbxassetid://108929045660200",
Dn = "rbxassetid://78646480540009",
Ft = "rbxassetid://90546017435179",
Lf = "rbxassetid://109838453114563",
Rt = "rbxassetid://94190734796082",
Up = "rbxassetid://126944775797063"
}
local isSprinting = false
local currentFOV = INTRO_FOV
local character, humanoid, rootPart, animator
local idleTrack, forwardTrack, backwardTrack, sprintTrack, currentTrack, dashTrack
local heartbeatConn, speedLoopTask, dashHitConnection
local isDashing = false
local hitDebounce = {}
local redFire = nil
local originalCollisionGroup
local function createBlackScreen()
local gui = Instance.new("ScreenGui")
gui.Name = "IntroBlackScreen"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.Parent = player:WaitForChild("PlayerGui")
local frame = Instance.new("Frame")
frame.Size = UDim2.new(1, 0, 1, 0)
frame.BackgroundColor3 = Color3.new(0, 0, 0)
frame.BorderSizePixel = 0
frame.ZIndex = 100
frame.Parent = gui
return gui, frame
end
local function createVignette()
local gui = Instance.new("ScreenGui")
gui.Name = "VignetteGui"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.Parent = player:WaitForChild("PlayerGui")
local vignette = Instance.new("ImageLabel")
vignette.Size = UDim2.new(1, 0, 1, 0)
vignette.BackgroundTransparency = 1
vignette.Image = "rbxassetid://4576475446"
vignette.ImageTransparency = 0.15
vignette.ImageColor3 = Color3.new(0, 0, 0)
vignette.ZIndex = 50
vignette.Parent = gui
return vignette
end
local function createRedAtmosphere()
for _, v in ipairs(Lighting:GetChildren()) do
if v:IsA("Atmosphere") then v:Destroy() end
end
local atmosphere = Instance.new("Atmosphere")
atmosphere.Name = "RedHellAtmosphere"
atmosphere.Density = 0.45
atmosphere.Offset = 0.25
atmosphere.Color = Color3.fromRGB(255, 40, 40)
atmosphere.Decay = Color3.fromRGB(180, 20, 20)
atmosphere.Glare = 0.8
atmosphere.Haze = 1.2
atmosphere.Parent = Lighting
end
local function setupCharacterVisuals(char)
local head = char:WaitForChild("Head", 5)
local leftHand = char:FindFirstChild("LeftHand")
if head then
local titleModel = game:GetService("ReplicatedStorage"):FindFirstChild("JohnDoeTitle")
if titleModel then
local clone = titleModel:Clone()
clone.Parent = char
local billboard = clone:FindFirstChildOfClass("BillboardGui")
if billboard then
billboard.Adornee = head
billboard.StudsOffset = Vector3.new(0, 3.8, 0)
end
end
end
if leftHand then
redFire = Instance.new("Fire")
redFire.Name = "RedHellFire"
redFire.Color = Color3.fromRGB(255, 40, 0)
redFire.SecondaryColor = Color3.fromRGB(255, 100, 0)
redFire.Size = 4.5
redFire.Heat = 12
redFire.Enabled = false
redFire.Parent = leftHand
end
end
local function tweenFOV(target, duration, easingStyle, easingDirection)
duration = duration or FOV_TWEEN_TIME
easingStyle = easingStyle or Enum.EasingStyle.Sine
easingDirection = easingDirection or Enum.EasingDirection.Out
TweenService:Create(camera, TweenInfo.new(duration, easingStyle, easingDirection), {FieldOfView = target}):Play()
end
local function onHitDuringDash(hitCharacter)
if not isDashing then return end
if hitDebounce[hitCharacter] then return end
hitDebounce[hitCharacter] = true
local current = camera.FieldOfView
tweenFOV(current - HIT_FOV_DROP, 2, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)
local hitSound = Instance.new("Sound")
hitSound.SoundId = HIT_SOUND_ID
hitSound.Volume = 0.7
hitSound.Pitch = 1
hitSound.Parent = SoundService
hitSound:Play()
hitSound.Ended:Connect(function() hitSound:Destroy() end)
task.delay(0.8, function()
if isDashing then
tweenFOV(IDLE_FOV + DASH_FOV_BOOST, 0.6, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)
elseif isSprinting then
tweenFOV(IDLE_FOV + SPRINT_FOV_BOOST, 0.6)
else
tweenFOV(IDLE_FOV, 0.6)
end
hitDebounce[hitCharacter] = nil
end)
end
local function playIntroSequence()
local blackGui, blackFrame = createBlackScreen()
local sky = Instance.new("Sky")
sky.SkyboxBk = SKYBOX.Bk
sky.SkyboxDn = SKYBOX.Dn
sky.SkyboxFt = SKYBOX.Ft
sky.SkyboxLf = SKYBOX.Lf
sky.SkyboxRt = SKYBOX.Rt
sky.SkyboxUp = SKYBOX.Up
sky.Parent = Lighting
createRedAtmosphere()
local audio = Instance.new("Sound")
audio.SoundId = AUDIO_ID
audio.Volume = 0.2
audio.Pitch = 1
audio.Looped = true
audio.Parent = SoundService
audio:Play()
camera.FieldOfView = INTRO_FOV
task.wait(INTRO_WAIT_TIME)
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Sine, Enum.EasingDirection.Out)
TweenService:Create(camera, tweenInfo, {FieldOfView = IDLE_FOV}):Play()
TweenService:Create(blackFrame, tweenInfo, {BackgroundTransparency = 1}):Play()
task.delay(2.5, function() blackGui:Destroy() end)
task.delay(1, createVignette)
end
local function stopTrack(track, fadeTime)
if track and track.IsPlaying then track:Stop(fadeTime or 0.1) end
end
local function playOnly(track, speedOverride)
if not track then return end
if currentTrack == track then
if not track.IsPlaying then track:Play(0.1) end
if speedOverride then track:AdjustSpeed(speedOverride) end
return
end
if currentTrack then currentTrack:Stop(0.1) end
currentTrack = track
track:Play(0.1, 1, speedOverride or 1)
end
local function makeTrack(id, priority, looped)
local anim = Instance.new("Animation")
anim.AnimationId = id
local track = animator:LoadAnimation(anim)
track.Priority = priority
track.Looped = looped or false
return track
end
local function cleanup()
if heartbeatConn then heartbeatConn:Disconnect() end
if dashHitConnection then dashHitConnection:Disconnect() end
stopTrack(idleTrack) stopTrack(forwardTrack) stopTrack(backwardTrack) stopTrack(sprintTrack) stopTrack(dashTrack)
hitDebounce = {}
if character and originalCollisionGroup then
for _, part in ipairs(character:GetDescendants()) do
if part:IsA("BasePart") then
part.CollisionGroup = originalCollisionGroup
part.CanCollide = true
end
end
end
end
local function applyWalkSpeed()
if not humanoid then return end
local md = humanoid.MoveDirection
local moving = md.Magnitude > 0.1
if not moving then
humanoid.WalkSpeed = isSprinting and 24 or 8
return
end
local dot = md:Dot(rootPart.CFrame.LookVector)
humanoid.WalkSpeed = (dot < -0.2) and 6 or (isSprinting and 24 or 8)
end
local function updateAnimations()
if not humanoid or not rootPart then return end
local md = humanoid.MoveDirection
local moving = md.Magnitude > 0.1
if not moving then playOnly(idleTrack)
elseif md:Dot(rootPart.CFrame.LookVector) < -0.2 then playOnly(backwardTrack)
elseif isSprinting then playOnly(sprintTrack, 2.5)
else playOnly(forwardTrack)
end
end
local function dash()
if not character or not rootPart or not humanoid or isDashing then return end
isDashing = true
isSprinting = false
hitDebounce = {}
if redFire then redFire.Enabled = true end
originalCollisionGroup = rootPart.CollisionGroup
for _, part in ipairs(character:GetDescendants()) do
if part:IsA("BasePart") then
part.CollisionGroup = "Default"
part.CanCollide = false
end
end
tweenFOV(IDLE_FOV + DASH_FOV_BOOST)
if animator then
local anim = Instance.new("Animation")
anim.AnimationId = DASH_ANIM_ID
dashTrack = animator:LoadAnimation(anim)
dashTrack.Priority = Enum.AnimationPriority.Action3
dashTrack.Looped = false
dashTrack:Play()
end
task.wait(DELAY_BEFORE_DASH)
if not rootPart or not rootPart.Parent then
isDashing = false
return
end
humanoid.AutoRotate = false
local forwardDir = rootPart.CFrame.LookVector
local currentVel = rootPart.AssemblyLinearVelocity
local dashTween = TweenService:Create(rootPart, TweenInfo.new(DASH_DURATION, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out), {
AssemblyLinearVelocity = forwardDir * DASH_SPEED + Vector3.new(0, currentVel.Y, 0)
})
dashTween:Play()
dashTween.Completed:Connect(function()
humanoid.AutoRotate = true
isDashing = false
tweenFOV(isSprinting and IDLE_FOV + SPRINT_FOV_BOOST or IDLE_FOV)
end)
task.delay(5, function()
if redFire and redFire.Parent then
local tween = TweenService:Create(redFire, TweenInfo.new(1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {
Heat = 0,
Size = 0.5
})
tween:Play()
tween.Completed:Connect(function()
if redFire then redFire.Enabled = false end
end)
end
end)
task.delay(DASH_DURATION + 0.5, function()
isDashing = false
humanoid.AutoRotate = true
end)
end
local function setupDashHitDetection()
if dashHitConnection then dashHitConnection:Disconnect() end
dashHitConnection = RunService.Heartbeat:Connect(function()
if not isDashing or not rootPart then return end
local rootPos = rootPart.Position
local parts = workspace:GetPartBoundsInRadius(rootPos, DASH_HITBOX_RADIUS)
for _, part in ipairs(parts) do
local hitChar = part.Parent
if hitChar and hitChar:FindFirstChild("Humanoid") and hitChar ~= character then
onHitDuringDash(hitChar)
end
end
end)
end
local function setupCharacter(char)
cleanup()
character = char
task.wait(0.3)
humanoid = character:WaitForChild("Humanoid", 5)
rootPart = character:WaitForChild("HumanoidRootPart", 5)
if not humanoid or not rootPart then return end
animator = humanoid:FindFirstChildOfClass("Animator") or Instance.new("Animator", humanoid)
local animate = character:FindFirstChild("Animate")
if animate then animate.Enabled = false end
idleTrack = makeTrack("rbxassetid://111792319821341", Enum.AnimationPriority.Action, true)
forwardTrack = makeTrack("rbxassetid://138795419712161", Enum.AnimationPriority.Action, true)
backwardTrack = makeTrack("rbxassetid://95970874156673", Enum.AnimationPriority.Action, true)
sprintTrack = makeTrack("rbxassetid://94467125495426", Enum.AnimationPriority.Action4, true)
applyWalkSpeed()
updateAnimations()
setupCharacterVisuals(character)
setupDashHitDetection()
speedLoopTask = task.spawn(function()
while character and character.Parent do
applyWalkSpeed()
task.wait(0.1)
end
end)
heartbeatConn = RunService.Heartbeat:Connect(function()
if isSprinting and sprintTrack and sprintTrack.IsPlaying then
sprintTrack:AdjustSpeed(2.5)
end
updateAnimations()
end)
end
UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
if input.KeyCode == Enum.KeyCode.X then
if not isDashing then
isSprinting = not isSprinting
tweenFOV(isSprinting and IDLE_FOV + SPRINT_FOV_BOOST or IDLE_FOV)
end
elseif input.KeyCode == Enum.KeyCode.Q then
dash()
end
applyWalkSpeed()
updateAnimations()
end)
player.CharacterAdded:Connect(setupCharacter)
player.CharacterRemoving:Connect(cleanup)
if player.Character then task.spawn(setupCharacter, player.Character) end
playIntroSequence()No comments yet for this script.



