Shiftlock Slowly Turning

There is this game called ‘Grave/Digger’ and a mechanic called ‘Charge’, when you charge and aim with shiftlock or first person, your character doesn’t immediately looks at the center of the screen, instead it makes the character slowly point towards the center of the screen.
looks like the player is ‘Drifting’ or something
i tried messing with the PlayerModule and other things but none can help me at all, can someone help me?
With other Perks in game, you can make the turn be faster

1 Like

AlignOrientation or BodyGyro can accomplish this.

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local camera = workspace.CurrentCamera

_G.slowturn = function() end -- Disabled by default

local enabled = false
local humanoid
local root
local align

local function update()
	if not humanoid or not root or not align then
		return
	end

	local locked = UserInputService.MouseBehavior == Enum.MouseBehavior.LockCenter

	if enabled and locked then
		humanoid.AutoRotate = false
		align.Enabled = true

		local look = camera.CFrame.LookVector
		local flatLook = Vector3.new(look.X, 0, look.Z)

		if flatLook.Magnitude > 0.001 then
			align.CFrame = CFrame.lookAt(Vector3.zero, flatLook.Unit)
		end
	else
		align.Enabled = false
		humanoid.AutoRotate = true
	end
end

local function setupCharacter(character)
	humanoid = character:WaitForChild("Humanoid")
	root = character:WaitForChild("HumanoidRootPart")

	local attachment = root:FindFirstChild("TurnAttachment")
	if not attachment then
		attachment = Instance.new("Attachment")
		attachment.Name = "TurnAttachment"
		attachment.Parent = root
	end

	align = root:FindFirstChild("SmoothTurn")
	if not align then
		align = Instance.new("AlignOrientation")
		align.Name = "SmoothTurn"
		align.Attachment0 = attachment
		align.Mode = Enum.OrientationAlignmentMode.OneAttachment
		align.RigidityEnabled = false
		align.Responsiveness = 8 -- Lower = slower turning
		align.MaxTorque = math.huge
		align.Enabled = false
		align.Parent = root
	end

	update()
end

_G.slowturn = function(state)
	enabled = state == true
	update()
end

RunService.RenderStepped:Connect(update)

if player.Character then
	setupCharacter(player.Character)
end

player.CharacterAdded:Connect(setupCharacter)

You have to put this in StarterPlayerScripts, and it can be enabled or disabled by calling _G.slowturn(true/false) in other LocalScripts.
You can also modify it to accept a “speed” parameter so you can adjust its speed by doing _G.slowturn(true, 16).

2 Likes

thanks twin i didnt knew it was that easy lol :heart_with_ribbon: