I do not know what could that be, make a test repro.
the only this that can make something like that is if a contact of manipulated and make penetration the body in callback and the repulsive velocity penalty try to pus the penetration out. but the engine can't do that contact are all in global space.
It look like the player produce bad velocity and it is transfered to the object. Take a look in your player controller and try to find any place where the velocity is apply or modified. Surely something wrong happen with the vel somewhere.
If the velocity restitution from the player is over the gravity value and mass it can float on air no ? I'm not so sure why it seen to stay locked at this floating value, Maybe a wrong callback assignment. Edited: Maybe retake a look around the callback ApplyForceAndTorque and how it is assigned to the objects. Maybe i'm wrong, but it look like when the player is in collision with the object the object is assigned to a other callback. And it look like the old callback is not reassigned correctly after the collision with the player. It is just what it look like for me, sorry if it don't help.
I'm not sure which newton you used previously, but i think since newton 2 force and torque callback is called for each frame regardless of body sleep and this is correct. I think this was changed during transition from 1.8 or some really old version. This way you don't have to wake up bodies anymore.
The bug itself looks like definetly a related to character controller, probably something to do with how you apply force on objects under characters that is not reset properly.
that function was changed to this NewtonConvexCollisionCalculateBuoyancyVolume which does not assume anythong it onle compute the volume and center of mass of the part under the plane. the user can use it any way they want. buoyancy is one effect.
the body move up because when you jump on it you are calling NewtonBodySetMatrix and it keep doing even after you step out. you have somethong wrong on the logic but the question is why you expecity call set matrix on a body that is suppost to move by gravity.
newton_d.dll!dgBody::SetMatrix(const dgMatrix & matrix) Line 219 C++ newton_d.dll!dgBody::SetMatrixResetSleep(const dgMatrix & matrix) Line 234 C++ newton_d.dll!dgDynamicBody::SetMatrixResetSleep(const dgMatrix & matrix) Line 186 C++ > newton_d.dll!NewtonBodySetMatrix(const NewtonBody * const bodyPtr, const float * const matrixPtr) Line 4843 C++ MyGame.debug.exe!00ba0964() Unknown [Frames below may be incorrect and/or missing, no symbols loaded for MyGame.debug.exe]
It is the box yes, because the function set matrix Is not called by the engine update, is called by the user, and in the test is called whe the player come in contact with the box. The box is body I'd 4, you can verify by calling the function get body is.