@guess
One thing you can do is program your game or physics demo to run at a certain FPS on your machine. You then create an adjustment variable that represents a percentage of your desired fps to the actual fps. Use this percentage to apply to positioning, rotation, etc of your objects. This will keep everything moving and rotating at relative distances but will be smoother the closer the actual fps is to your desired fps and more choppy the slower the actual fps is. Because it is a percentage, the movements should be pretty much the same visually.
In the following 2 examples, I have a cube that is supposed to rotate 2 units per refresh. I want the sync rate to be 60 FPS ideally. In example one, everything is fine, and the factor (adjment#) ends up being a little less than 1 because the actual fps runs at about 62. So the speed of rotation is 1.9something units per refresh.
srate#=60
sync on
sync rate srate#
autocam off
make object cube 1,25
position camera 0,0,-60
sync
for n=1 to 100
rem bring fps up to whereever it will be
sync
next n
do
fps#=screen fps()*1.0
if fps#=0 then fps#=1
adjment#=srate#/fps#
speed#=2*adjment#
turn object left 1,speed#
text 0,0,"Speed adjustment factor = "+str$(adjment#)
text 0,20,"Actual FPS = "+str$(fps#)
text 0,40,"Cube Rotation Speed "+str$(speed#)
sync
loop
Now in example 2, I add about 1000 spheres just to eat up FPS. On my machine, the actual fps drops down to about 30 but the ideal is still 60 so the cube's rotation gets calculated at about 4 units per refresh. When running this example, give it a minute to create all of the spheres.
You'll notice that the rotation of the cube appears at about the same except it's just a little more jagged because it rotates a little faster to compensate for the reduction in fps:
srate#=60
sync on
sync rate srate#
autocam off
make object cube 1,25
for obj=100 to 1000
make object sphere obj,1
next obj
position camera 0,0,-60
sync
for n=1 to 100
rem bring fps up to whereever it will be
sync
next n
do
fps#=screen fps()*1.0
if fps#=0 then fps#=1
adjment#=srate#/fps#
speed#=2*adjment#
turn object left 1,speed#
text 0,0,"Speed adjustment factor = "+str$(adjment#)
text 0,20,"Actual FPS = "+str$(fps#)
text 0,40,"Cube Rotation Speed "+str$(speed#)
sync
loop
If you use the adjustment# variables on all objects in terms of their speed and/or rotation, your game should run at the same speed on every machine. The higher the machine's fps, the smoother it will be. The lower, the more jagged it will be.
Enjoy your day.