ODE Middleware

Great to know! I hope it stays that way ;D.

Friction is not used in the KCC at all, IIRC (haven’t taken a look into that code in a while). Only velocity is, but that’s for dynamic and kinematic objects, not for static environment.

On a side note, it’s good to hear that the friction is working correctly ;D.

I can’t really tell what’s happening. I’m not sure if I can imagine the situation right. If you explained the case in more detail and told me how to reproduce it (or provided a small example, because it might be related to the map setup), that could help.

A couple of questions that come to my mind.

Is the ground horizontal, or is there a slide? Maybe stairs?
When exactly does it happen?
Is the ground using an ODE solid or a trimesh?
Is the slide immediate (over one frame), or does it take place over some time?

Also, is there another surface beneath the one you’re standing on? I remember I had a lot of problems with the code misinterpreting collisions with multiple “layers” of objects, especially when trimeshes were used. Maybe you have found a situation I haven’t bumped into.

Are you sure this isn’t the case of input locking? I mean, you strafe, release the button, but the character keeps moving?

Also, what happens when it reaches the edge? If it reaches a wall, does it tunnel through it, or does it stop on it? If it reaches an actual edge of something, does it fall?

EDIT:

Something came to my mind. The KCC takes the linear velocity of the ground into account, in order to work with moving platforms. The code should prevent this in case of static objects, but it you’ve modified it, or if I did something wrong somewhere, it might happen that the ground acts like a “conveyor belt” despite being a static object.

Make sure it actually is a static object (no offence, I know I do such mistakes so it’s good to point at it ;D).

You could also comment out all of the code responsible for the moving platform functionality in the KCC. In the default release, that’s lines 460 to 467 in kcc.py. This could help eliminate one possible cause.