Beep boop deeb doob deeb deeb?
Have you tried BodyGyro?
Alternatively you could set the CFrame every frame:
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local root = character:WaitForChild("HumanoidRootPart")
local forceAngles = CFrame.new(math.rad(30), 0, 0)
local UP = Vector3.new(0, 1, 0)
game:GetService("RunService").Stepped:Connect(function()
local cf = root.CFrame
-- get the -LookVector based on how the character is rotated on the Y axis only
local back = cf.RightVector:Cross(UP)
-- reconstruct an "upright" version of the CFrame, then rotate it yourself.
root.CFrame = CFrame.fromMatrix(
cf.Position,
UP:Cross(back),
UP,
back) * forceAngles
end)
Just as a slightly simpler method maybe, isn’t there like a weld between the HumanoidRootPart and the torso/waist that you could set the C1 of?
I’m pretty sure there is, yeah.