OK... I posted this on another thread....
Personally I use a pivot to deal with forces I find it much easier to move things around etc. This way you don't need to worry about a whole load of stuff and it just works!
EG:
Graphics3D 640,480
PlayerPhysicsPivot = CreatePivot()
Player = CreateCube()
Middle = CreatePivot()
Camera = CreateCamera()
PositionEntity camera,0,50,0
PointEntity camera,middle
; amount of force to apply to entity
Force# = 0.2
Repeat
If KeyDown(200) Then TranslateEntity PlayerPhysicsPivot,0,0,Force#
If KeyDown(208) Then TranslateEntity PlayerPhysicsPivot,0,0,-Force#
If KeyDown(203) Then TranslateEntity PlayerPhysicsPivot,-Force#,0,0
If KeyDown(205) Then TranslateEntity PlayerPhysicsPivot,Force#,0,0
; Drag, the 0.1 is how much drag, the higher the figure the more drag (from 0 to 1)
PointEntity PlayerPhysicsPivot,Middle
MoveEntity PlayerPhysicsPivot,0,0,EntityDistance(PlayerPhysicsPivot,Middle)*0.1
TranslateEntity Player,EntityX(PlayerPhysicsPivot),EntityY(PlayerPhysicsPivot),EntityZ(PlayerPhysicsPivot)
RenderWorld
Flip
Until KeyHit(1)
This has the added bonus that if you want to apply wind for example you just move all the physics pivots in the wind direction.
Same Example with a wind pivot:
Graphics3D 640,480
PlayerPhysicsPivot = CreatePivot()
Player = CreateCube()
Middle = CreatePivot()
Camera = CreateCamera()
; Add a wind pivot
Wind = CreatePivot()
TurnEntity Wind,0,Rand(359),0
MoveEntity Wind,0,0,Rnd(0,.1)
PositionEntity camera,0,50,0
PointEntity camera,middle
; amount of force to apply to entity
Force# = 0.2
Repeat
If KeyDown(200) Then TranslateEntity PlayerPhysicsPivot,0,0,Force#
If KeyDown(208) Then TranslateEntity PlayerPhysicsPivot,0,0,-Force#
If KeyDown(203) Then TranslateEntity PlayerPhysicsPivot,-Force#,0,0
If KeyDown(205) Then TranslateEntity PlayerPhysicsPivot,Force#,0,0
; Add wind force
TranslateEntity PlayerPhysicsPivot,EntityX(wind),EntityY(wind),EntityZ(wind)
; Drag, the 0.1 is how much drag, the higher the figure the more drag (from 0 to 1)
PointEntity PlayerPhysicsPivot,Middle
MoveEntity PlayerPhysicsPivot,0,0,EntityDistance(PlayerPhysicsPivot,Middle)*0.1
TranslateEntity Player,EntityX(PlayerPhysicsPivot),EntityY(PlayerPhysicsPivot),EntityZ(PlayerPhysicsPivot)
RenderWorld
Flip
Until KeyHit(1)
So where I've got the wind example above, you'd have your object coming from the side being handled by it's own physics pivot, then when the object collide you just get the positions of the physics pivots and just move your player physics pivot say half the xyz components of the other physics pivot, job done, your guy will automatically move/get shoved etc without doing anything more than moving a pivot.
So that's my cheat physics solutions to pretty much everything!