
KeylessUniversal

--[[ Head/Waist Follow Mouse/Camera Script with Camera Tilt Effect + Handles Player Death Gracefully + Run Shake ]]
wait()
--[Pre-Funcs]:
local Ang = CFrame.Angles
local aSin = math.asin
local aTan = math.atan
--[Constants]:
local Cam = workspace.CurrentCamera
local Plr = game.Players.LocalPlayer
local Mouse = Plr:GetMouse()
--[Character Setup Function]:
local function Setup()
local Body = Plr.Character or Plr.CharacterAdded:Wait()
local Head = Body:WaitForChild("Head")
local Hum = Body:WaitForChild("Humanoid")
local Core = Body:WaitForChild("HumanoidRootPart")
local IsR6 = Hum.RigType.Value == 0
local Trso = IsR6 and Body:WaitForChild("Torso") or Body:WaitForChild("UpperTorso")
local Neck = IsR6 and Trso:WaitForChild("Neck") or Head:WaitForChild("Neck")
local Waist = not IsR6 and Trso:FindFirstChild("Waist")
return {
Body = Body, Head = Head, Hum = Hum, Core = Core,
IsR6 = IsR6, Trso = Trso, Neck = Neck, Waist = Waist,
NeckOrgnC0 = Neck.C0,
WaistOrgnC0 = Waist and Waist.C0
}
end
--[Rebind on Respawn]:
local characterData = Setup()
local function RebindOnCharacterAdded()
Plr.CharacterAdded:Connect(function(char)
char:WaitForChild("Humanoid").Died:Connect(function()
characterData = nil
end)
characterData = Setup()
end)
end
RebindOnCharacterAdded()
--[Settings]:
local MseGuide = false
local TurnCharacterToMouse = false
local HeadHorFactor = 0.5
local HeadVertFactor = 0.5
local BodyHorFactor = 0.5
local BodyVertFactor = 0.5
local UpdateSpeed = 0.5
local cameraShakeEnabled = false
local cameraTiltAmount = 8
local currentTilt = 0
--[Input Handling]:
game:GetService("UserInputService").InputBegan:Connect(function(input, gpe)
if gpe then return end
if input.KeyCode == Enum.KeyCode.T then
cameraShakeEnabled = not cameraShakeEnabled
end
end)
--[Render Loop]:
game:GetService("RunService").RenderStepped:Connect(function()
local data = characterData
if not data then return end
local Hum = data.Hum
local isFirstPerson = (Cam.Focus.Position - Cam.CFrame.Position).Magnitude < 1
if Hum and Hum.Health > 0 and not isFirstPerson then
local Head = data.Head
local Trso = data.Trso
local Neck = data.Neck
local Waist = data.Waist
local NeckOrgnC0 = data.NeckOrgnC0
local WaistOrgnC0 = data.WaistOrgnC0
local Core = data.Core
if Head and Trso and Neck then
local TrsoLV = Trso.CFrame.LookVector
local HdPos = Head.Position
local Dist, Diff
if not MseGuide then
Dist = (HdPos - Cam.CFrame.Position).Magnitude
Diff = HdPos.Y - Cam.CFrame.Position.Y
if not data.IsR6 and Waist and WaistOrgnC0 then
Neck.C0 = Neck.C0:Lerp(NeckOrgnC0 * Ang((aSin(Diff/Dist) * HeadVertFactor), -((HdPos - Cam.CFrame.Position).Unit:Cross(TrsoLV)).Y * HeadHorFactor, 0), UpdateSpeed/2)
Waist.C0 = Waist.C0:Lerp(WaistOrgnC0 * Ang((aSin(Diff/Dist) * BodyVertFactor), -((HdPos - Cam.CFrame.Position).Unit:Cross(TrsoLV)).Y * BodyHorFactor, 0), UpdateSpeed/2)
else
Neck.C0 = Neck.C0:Lerp(NeckOrgnC0 * Ang(-(aSin(Diff/Dist) * HeadVertFactor), 0, -((HdPos - Cam.CFrame.Position).Unit:Cross(TrsoLV)).Y * HeadHorFactor), UpdateSpeed/2)
end
else
local Point = Mouse.Hit.Position
Dist = (HdPos - Point).Magnitude
Diff = HdPos.Y - Point.Y
if not data.IsR6 and Waist and WaistOrgnC0 then
Neck.C0 = Neck.C0:Lerp(NeckOrgnC0 * Ang(-(aTan(Diff/Dist) * HeadVertFactor), ((HdPos - Point).Unit:Cross(TrsoLV)).Y * HeadHorFactor, 0), UpdateSpeed/2)
Waist.C0 = Waist.C0:Lerp(WaistOrgnC0 * Ang(-(aTan(Diff/Dist) * BodyVertFactor), ((HdPos - Point).Unit:Cross(TrsoLV)).Y * BodyHorFactor, 0), UpdateSpeed/2)
else
Neck.C0 = Neck.C0:Lerp(NeckOrgnC0 * Ang((aTan(Diff/Dist) * HeadVertFactor), 0, ((HdPos - Point).Unit:Cross(TrsoLV)).Y * HeadHorFactor), UpdateSpeed/2)
end
end
end
if TurnCharacterToMouse and data.Core then
Hum.AutoRotate = false
local lookPos = Vector3.new(Mouse.Hit.Position.X, data.Core.Position.Y, Mouse.Hit.Position.Z)
data.Core.CFrame = data.Core.CFrame:Lerp(CFrame.new(data.Core.Position, lookPos), UpdateSpeed/2)
else
Hum.AutoRotate = true
end
end
if data.Head then
local headLook = data.Head.CFrame.LookVector
local camLook = Cam.CFrame.LookVector
local tiltInfluence = (headLook - camLook).X
local targetTilt = cameraShakeEnabled and math.clamp(tiltInfluence * cameraTiltAmount, -cameraTiltAmount, cameraTiltAmount) or 0
currentTilt = currentTilt + (targetTilt - currentTilt) * 0.3
if data.Hum.MoveDirection.Magnitude > 0.1 and data.Hum.WalkSpeed > 16 then
local runShake = math.sin(tick() * 20) * 1.5
currentTilt = currentTilt + runShake * 0.05
end
else
currentTilt = currentTilt * 0.9
end
Cam.CFrame = Cam.CFrame * CFrame.Angles(0, 0, math.rad(currentTilt))
end)



Pretty cool :)