I know that renderstepped makes a delay, but for some reason, this script likes to pause the odd time when the players speed drops.
Character = game.Players.LocalPlayer.Character local Delta = 0.05 local Recoil = 0 local Timer = 0 local Last = Character.Torso.Position local CustomAnim = false game:GetService("RunService").RenderStepped:connect(function() local Speed = (Character.Torso.Position - Last).magnitude * Delta local Multiplier = Aiming and 0.02 or 0.05 local LastSpeed = 0 print(Speed) LastSpeed = Speed Timer = Timer + Speed local a = math.sin(Timer * 12) * Multiplier local av = Vector3.new(a * 2.5, math.abs(a * 1.5), 0) if Speed == 0 or Speed == 0.1 then print('Triggered') a = 0 av = Vector3.new(0,0,0) end --camera.CoordinateFrame = CFrame.new(camera.Focus.p) * (camera.CoordinateFrame - camera.CoordinateFrame.p) * CFrame.Angles(a/10, a/10, a/10) * CFrame.new(0, 0, (camera.Focus.p - camera.CoordinateFrame.p).magnitude) game.Workspace.Camera.Arms.Torso.Head.C1 = (CFrame.new(0, -1.5, 0) + av) * CFrame.Angles(-a/5, a/5, 0) * CFrame.new(0, 0, Recoil) Mouse.TargetFilter = workspace Character.Torso.Neck.C1 = CFrame.new() Character.Torso.Neck.C0 = CFrame.new(0, 1.5, 0) * CFrame.Angles(math.asin((Mouse.Hit.p - Mouse.Origin.p).unit.y), 0, 0) Last = Character.Torso.Position end)