I've been testing my transport system again, and everything seems to be working fine for dynamic prims (single and linksets).
Avatars are behaving strangely inconsistently though. The setup is as follows:
I have a volumedetecting prim which on collision, gives the object that falls into it a push calculated to give it a horizontal velocity of exactly 10 m/s. I drop my avatar into it, wearing an object that records the first time the horizontal velocity gets above 1m/s, and tells me that horizontal velocity that it gets. This should always return 10.0 when it hits the pusher and, and with dynamic prims it does, out to 5 decimal places. With avatars it is very strangely inconsistent. This is a sample of my data:
[23:57] test pushes: 9.811794
[23:57] test pushes: 10.002684
[23:57] test pushes: 10.003022
[23:57] test pushes: 9.749023
[23:57] test pushes: 9.749105
[23:58] test pushes: 9.625697
[23:58] test pushes: 9.877037
[23:58] test pushes: 9.940375
[23:58] test pushes: 9.939623
[23:58] test pushes: 10.003778
[23:58] test pushes: 10.003645
[23:58] test pushes: 9.749612
[23:58] test pushes: 9.687874
[23:58] test pushes: 10.005015
[23:58] test pushes: 9.812495
[23:58] test pushes: 9.749736
[23:58] test pushes: 9.687205
[23:58] test pushes: 9.940044
[23:58] test pushes: 9.812558
[23:59] test pushes: 10.004038
[23:59] test pushes: 9.625619
[23:59] test pushes: 9.939420
[23:59] test pushes: 9.750255
[23:59] test pushes: 10.004878
[23:59] test pushes: 10.003636
[23:59] test pushes: 9.625620
The attached image plots some of this collected data (about 120 consecutive tests). There doesn't seem to be a local pattern, but there are very clear bands of velocities that we get, rather than random fluctuations. Quantised energy states?! I have no idea what's going on here!
These all have the avatar dropped from the same position (I'm moving there with llMoveToTarget then falling), and I'm also checking that the energy in the pusher prim isn't getting expended (it is always at 1.0 before the push and something bigger than 0.25 after). The same test done with an avatar sized prim looks like this forever:
[0:01] test velocities object: 9.999998
[0:01] test velocities object: 9.999998
[0:02] test velocities object: 9.999998
[0:02] test velocities object: 9.999998
[0:02] test velocities object: 9.999998