You can use Egomoose’s gravity controller, which does this out of the box (just remove the local script it uses to change the gravity direction):
You might also be able to calculate the difference in rotation of the HRP between each frame then apply that to the Camera.CFrame right after the character controller does using some code like this:
local RunService = game:GetService("RunService")
local function afterCamera(delta)
-- Code in here will run after the default Roblox camera script
-- Change the camera.CFrame's rotation by the difference in the HRP rotation
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value + 1, beforeCamera)
I have tried changing the camera’s cframe to match rotations, but this most likely results in the camera not being moveable which I don’t want to happen
I spent some hours going through Egomoose’s wall stick controller code and after understanding it I deleted everything except the stuff that messed with the camera to get the effect I want.