Beep boop deep doop

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.