This problem is in most cases trivial, solved with CFrame*CFrame.Angles(x,y,z)
However, this solution proves to be inadequate for performing rolls and tilts beyond 90 degrees with an aircraft: The direction of rotation will be briefly reversed, causing a jolt in the manoeuvre and possibly preventing it entirely.
This bug occurs as a result of storing angles above 180 degrees as negatives: It means that every 180 degrees of a turn will have a sign switch, which will cause an unexpected result with the maths.
Anyone know how I can solve this? Unfortunately, when the angles are stored in a CFrame, I can’t do anything about them being negative; they’re converted to the buggy signed format when the CFrame is created.
It turns out that what I was encountering was a bug with BodyGyro, CFrames are fine.