Resetting camera when rotating with fromOrientation

Hello all,

I am implementing a rudimentary camera shaking script as follows.

	RelativeStrength = math.clamp(1, 0, RelativeStrength + Strength)

	if RelativeStrength > 0 then
		local rX = Rnd:NextNumber(-1, 1) * RelativeStrength / 10
		local rY = Rnd:NextNumber(-1, 1) * RelativeStrength / 10
		local rZ = Rnd:NextNumber(-1, 1) * RelativeStrength / 10
		workspace.CurrentCamera.CFrame = workspace.CurrentCamera.CFrame * CFrame.fromOrientation(rX, rY, rZ)
	RelativeStrength *= 0.975

The idea is that whenever the server fires ShakePlayerCamera with the Strength the parameter, the camera begins to shake, quickly losing its shake intensity until it is no longer shaking. I am using MaximumADHD’s Realism module, so the camera easily resets whenever the player is out and about.

The issue arises whenever I lock the camera to a specific CFrame (for example, think hiding in a locker and setting the camera’s CFrame to look out the locker holes) and then attempt to shake the camera. When I shake the camera then, as predicted, the camera shakes but does not reset to its original position, instead staying at an angle.

I could solve this by storing the CFrame of the locked position and just set the camera’s CFrame to a rotated version of that, but I feel like there is a better alternative. Is there a function or method that doesn’t involve me having to pull the CFrame from an extraneous source in order to keep the CFrame consistent?