@ Walaber, I'm using your FPS as an example to work from. I'd love to chat to you about it. Infact, I'll put my physics code below, if you have the time, any chance you could browse over it and see if you can see anything drastically wrong? If not, don't worry, just trying to save the wall from my head.
'### setup code ###
NDB_NewtonCreate
Sphere = NDB_NewtonCreateSphere( 2.5, 6.0, 2.5 )
NPlayer = NDB_NewtonCreateBody( Sphere )
NDB_SetVector 0.0, -50.0, 0.0
NDB_SetStandardGravity
NDB_NewtonBodySetMatrix NPlayer
NDB_SetVector 6.0, 8.0, 6.0
NDB_CalculateMIBoxSolid NPlayer_Mass#
NDB_NewtonBodySetMassMatrix NPlayer, Player_Mass#
NDB_NewtonBodySetAutoFreeze NPlayer, 0
NDB_BodySetGravity NPlayer, 1
NDB_SetVector 0.0, 1.0, 0.0
UpVector = NDB_NewtonConstraintCreateUpVector( NPlayer )
Default = NDB_NewtonMaterialGetDefaultGroupID()
PlayerID = NDB_NewtonMaterialCreateGroupID()
NDB_NewtonMaterialSetDefaultFriction Default, PlayerID, 0.01, 0.01
NDB_NewtonMaterialSetDefaultElasticity Default, PlayerID, 0.01
`after setting the materials, we need to apply the Player material to the Player rigid body.
NDB_NewtonBodySetMaterialGroupID NPlayer, PlayerID
I=101
Col = NDB_NewtonCreateTreeCollision( I )
`Step 3- make the rigid body from the collision data
Room = NDB_NewtonCreateBody( Col )
`Step 4- finally, attach the object to the Rigid Body
NDB_BodySetDBProData Room, I
NDB_NewtonBodySetDestructorCallback Room
NDB_NewtonReleaseCollision Col
`NDB_NewtonCreateTreeCollisionFromSerialization("levels\mi6\floorcol.nds")
makecrates()
## main loop ##
ime# = NDB_GetElapsedTimeInSec()
` Here's the big command that updates the Physics system.
` Objects are moved and positioned automatically.
` the if GO=1 part is just a variable check so we can pause and unpause the system.
NDB_NewtonUpdate time#
NDB_BodyGetPosition NPlayer
NDB_NewtonBodyGetVelocity NPlayer
CurrentVel_X# = NDB_GetVector_X()
CurrentVel_Y# = NDB_GetVector_Y()
CurrentVel_Z# = NDB_GetVector_Z()
GoalVel_X# = MoveX# * (Speed# *2)
GoalVel_Z# = MoveZ# * (Speed# *2)
AccelX# = 0.3 * ((GoalVel_X# - CurrentVel_X#) / time#)
AccelZ# = 0.3 * ((GoalVel_Z# - CurrentVel_Z#) / time#)
if AccelX# > 200.0 then AccelX# = 200.0
if AccelX# < -200.0 then AccelX# = -200.0
if AccelZ# > 200.0 then AccelZ# = 200.0
if AccelZ# < -200.0 then AccelZ# = -200.0
NDB_BodyGetPosition NPlayer
`set temp vector 2 to force direction
NDB_SetVector 2, AccelX#, 0.0, AccelZ#
NDB_BodyAddForceGlobal NPlayer
problem is, the crates fall through the floor so I cant even get to them in time to test player-crate interaction. If anyone else has any ideas, do let me know.
@ Vash, you have an interesting idea there mate, I don't quite know how to set it up. A quick intersection would tell me if the object is obscured, but if the object is larger than the object obscuring it then it would look very odd indeed. But there's food for thought there, and we'll have to chat more about it online

.