How to reduce sliding of cylinder parts?

Allow me to illustrate the problem with this simple video, which showcases an NPC system that I’ve been tirelessly working on.


The two sections of this video are labelled, Intended Behavior, and Unintended Behavior.

The “intended” section shows what I would like for it to do, to illustrate my goal. I got the footage for that section thanks to a bug that causes physics to be different for a minute after the game just started.
The “unintended” section shows what it does after the bugged period is over, for the rest of the game’s lifetime. Hence why I can’t just do what I did in the intended section.

The critter I made is meant to be much less slippery than it is. I’ve tried increasing Friction, FrictionWeight, and increasing or decreasing any physics variables, they didn’t work.

Surely it’s possible to make this slide less, I just don’t know how.

I’m wondering if this isn’t a physics issue but a scripting issue.

I know physics takes a few seconds to work properly when testing. For me physics seems more stiff and resistant to movement in this short period.
However in your case your worm is rising up after bouncing off objects, and generally moving past the red sphere like a car drifting.
Can you decrease the forces with your script? I think because physics is stiffer in the first part of the video that your forces might be overcompensating to make it look correct, but when the physics is normal your forces cause it to overshoot the target and bounce off Parts.

Also, what are you using to join the sections of your worm? If they are BallSocket constraints they’ll allow the cylinder Parts to rotate as well as flex. Maybe try Universal constraints, which allow flex but not rotation between the Parts.

I’ll consider that universal constraint thing. The VectorForces used for movement are static, they go on and off when necessary. If I simply reduce their strength, they continue to slip around, but now too slowly.

Do they only go on when the direction needs to change, or is it a task.wait(x) kind of timer?

In other words, I need to stop acceleration from being a factor.

I’m now experimenting with LinearVelocity and UniversalConstraint, and any new issues seem to be fixable, if not replaceable.
LinearVelocity is basically what I was already using (VectorForce), but with acceleration limits.