Ok, for question A, you would probably need to find a way of keeping the velocity of the veichle and lowering the fall velocity, I don’t have any idea of how you would do taht but try and you will find a way probably, for the second I was once Abel to create something. That worked, the script only works once tho, and it simply resets the car Z/X axis, if you want I can give it to you and maybe you are able to fix it becaus I see you are a Programmer
(This is Pseudocode and Pseudobuild? so bare with me)
You can put a part above the car, and when the part above the car touches the ground for a certain amount of time, the car will flip; e.g. using angular velocity to turn the car right side up.
Really you don’t need that,first because if the car touches a part that is over the car the car will flip in an endless loop, and becaus an easier way of doing thsi is with angles, something like if angle = 150 then flip end, and because .Touched sometimes doesn’t fire
Fire a ray from the car aiming to the ground, to constantly check if its touching the ground or not, if the car is not touching ground then, enable a MoverConstraint to apply force to the car, to keep it moving forward mainly, another one to keep its orientation and letting player change the orientation too, and if you wish a third one to reduce the speed at which is falling.
Im not very used to MoverConstraints, I prefer BodyMovers (but, kinda deprecated) but you could give them a try too.
The raycast check will be useful to check if car its landed in the wrong position too.