Okay, I think I've figured it out! It's GM's float numbers being too imprecise, essentially. I added a bit of a hack to make the track position bigger to have more decimals around, and that solved the problem.
Here's the changes you need to do:
- In obj_trackcontrol's create event, below the line that sets "global.ufactor", add something like global.uufactor = 1000/global.tracklength
- When trackcontrol creates cars, below the line "n.u = u", add the line n.uu= n.u*1000
- In player_apply_movement, remove the line that sets u and replace it with the following two lines:
- uu += lengthdir_x(argument1*global.uufactor,alpha)
u = uu/1000
- uu += lengthdir_x(argument1*global.uufactor,alpha)
You could substitute the 1000 for any number you want, I'll do that with a macro and then export an updated version of the engine file.