Ok, i still have the same problem, if not worse :s

I have now got a Player Class (based upon the SDLCharacterController Demo from Sascha), however it doesnt seem to work as plan, it does'nt call the forceback procedures or the jumps feedback function..

I have the ellipse hovering above the terrain without any movement of any kind:


(Note: The screenshot is rendered using the geometry from Newton.)

the code is as follows:
Code:
const
 PlayerSpeed = 10;
 PlayerMass = 25;
 PlayerJumpForce = 5000;

procedure playerApplyForceCallback(const Body: PNewtonBody); cdecl;
var
  Mass,Ixx,Iyy,Izz,Length: Single;
  Force,Velocity,GoalVelocity,Accel: TVector3f;
  UserData: Pointer;
begin
  Accel := Vector3fMake(0,0,0);
  Time  := SDL_GetTicks-Time;
  UserData := NewtonBodyGetUserData(Body);
  If UserData = Nil Then Exit;

  With TMTPlayer(UserData) Do
  Begin
    NewtonBodyGetMassMatrix(Body, @Mass, @Ixx, @Iyy, @Izz);
    Force := Vector3fMake(0, -9.8 * Mass, 0);
    NewtonBodyAddForce(Body, @Force[0]);

    NewtonBodyGetMatrix(Body, @Matrix[0,0]);

    Length   := Sqrt(Sqr(Movement[0])+Sqr(Movement[2]));
    If Length = 0 Then Length := 1;
    Movement := Vector3fMake(Movement[0]/Length, Movement[1], Movement[2]/Length);

    NewtonBodyGetVelocity(Body, @Velocity[0]);

    GoalVelocity := Vector3fMake(Movement[0]*PlayerSpeed, 0, Movement[2]*PlayerSpeed);

    If Run Then
       GoalVelocity := Vector3fMake(GoalVelocity[0]*3, GoalVelocity[1]*3, GoalVelocity[2]*3);

    If Time = 0 Then Time := 1;
    Accel[0] := 0.3*((GoalVelocity[0]-Velocity[0])/(Time/10))*100;
    Accel[2] := 0.3*((GoalVelocity[2]-Velocity[2])/(Time/10))*100;

    If Accel[0] > 200 Then Accel[0] := 200;
    If Accel&#91;0&#93; <200> 200 Then Accel&#91;2&#93; &#58;= 200;
    If Accel&#91;2&#93; < -200 Then Accel&#91;2&#93; &#58;= -200;

    NewtonBodyAddForce&#40;Body, @Accel&#91;0&#93;&#41;;

    NewtonBodyAddForce&#40;Body, @ExternalForce&#91;0&#93;&#41;;
    If &#40;ExternalForce&#91;0&#93; <> 0&#41; or &#40;ExternalForce&#91;1&#93; <> 0&#41; or &#40;ExternalForce&#91;2&#93; <> 0&#41; then
    ExternalForce &#58;= Vector3fMake&#40;0, 0, 0&#41;;
  End;
  Time &#58;= SDL_GetTicks;
end;

function playerRayCastFilter&#40;const Body&#58; PNewtonBody; const hitNormal&#58; PFloat; collisionID&#58; NewtonImport.Int; userData&#58; Pointer; intersectParam&#58; Float &#41;&#58; Float; cdecl;
begin
  Result &#58;= IntersectParam;
  If Body = Player.nBody Then Exit;
  Distance &#58;= IntersectParam;
end;

constructor TMTPlayer.Create&#40;const Pos,Rot&#58; Geometry.TVector3f&#41;;
const
  UpDir&#58; Geometry.TVector3f = &#40;0, 1, 0&#41;;
var
 Collider&#58; PNewtonCollision;
 StartMatrix&#58; Geometry.TMatrix4f;
begin
  Size &#58;= Vector3fMake&#40;1.5, 3.5, 1.5&#41;;
  Collider &#58;= NewtonCreateSphere&#40;nWorld, Size&#91;0&#93;, Size&#91;1&#93;, Size&#91;2&#93;, Nil&#41;;
  nBody &#58;= NewtonCreateBody&#40;nWorld, Collider&#41;;

  StartMatrix &#58;= IdentityHmgMatrix;
  StartMatrix&#91;3&#93;&#91;0&#93; &#58;= Pos&#91;0&#93;;
  StartMatrix&#91;3&#93;&#91;1&#93; &#58;= Pos&#91;1&#93;;
  StartMatrix&#91;3&#93;&#91;2&#93; &#58;= Pos&#91;2&#93;;
  NewtonBodySetMatrix&#40;nBody, @StartMatrix&#91;0, 0&#93;&#41;;
  NewtonBodySetMassMatrix&#40;nBody, 12, 1/5*PlayerMass*&#40;Sqr&#40;Size&#91;1&#93;&#41;+Sqr&#40;Size&#91;0&#93;&#41;&#41;, 1/5*PlayerMass*&#40;Sqr&#40;Size&#91;2&#93;&#41;+Sqr&#40;Size&#91;0&#93;&#41;&#41;, 1/5*PlayerMass*&#40;Sqr&#40;Size&#91;2&#93;&#41;+Sqr&#40;Size&#91;1&#93;&#41;&#41;&#41;;
  NewtonConstraintCreateUpVector&#40;nWorld, @UpDir&#91;0&#93;, nBody&#41;;
  NewtonBodySetForceAndTorqueCallBack&#40;nBody, playerApplyForceCallback&#41;;

  NewtonReleaseCollision&#40;nWorld, Collider&#41;;

  NewtonBodySetAutoFreeze&#40;nBody, 0&#41;;
  NewtonWorldUnfreezeBody&#40;nWorld, nBody&#41;;

  NewtonBodySetUserData&#40;nBody, Self&#41;;
  NewtonBodySetMaterialGroupID&#40;nBody, Material.PlayerID&#41;;
end;

destructor TMTPlayer.Destroy;
begin
  NewtonDestroyBody&#40;nWorld, nBody&#41;;
  inherited Destroy;
end;

procedure TMTPlayer.Jump;
var
  P1,P2&#58; TVector3f;
begin
  P1 &#58;= Vector3fMake&#40;Matrix&#91;3, 0&#93;, Matrix&#91;3, 1&#93;, Matrix&#91;3, 2&#93;&#41;;
  P2 &#58;= Vector3fMake&#40;Matrix&#91;3, 0&#93;, Matrix&#91;3, 1&#93;-Size&#91;1&#93;*1.1, Matrix&#91;3, 2&#93;&#41;;
  Distance &#58;= 1.1;
  NewtonWorldRayCast&#40;nWorld, @P1&#91;0&#93;, @P2&#91;0&#93;, @playerRayCastFilter, @Self, Nil&#41;;
  If Distance <1> 3600 Then Rotation&#91;1&#93; &#58;= Rotation&#91;1&#93;-360;
      If Rotation&#91;1&#93; <0> 80 Then Rotation&#91;0&#93; &#58;= 80;
      If Rotation&#91;0&#93; < -80 Then Rotation&#91;0&#93; &#58;= -80;
    End;
  End;

  Run &#58;= &#40;&#40;xkLShift In Keys&#41; Or &#40;xkRShift In Keys&#41;&#41;;
end;
I have gone through the code and cant work out what im missing..

Thanks