getPosASL/setPosASL uses the land contact of the object, which changes according to orientation, so technically it's still a relative position, not absolute, which nullifies the point of using ASL format.
This will cause weird and unexpected movement. Let's say you want to move the object in a straight line:
start = getPosASL player vectorAdd [0,0,10]; end = start vectorAdd [0,1000,0]; spd = 5; duration = 1000 / spd; heli allowDamage false; timer = 0; onEachFrame { if (isGamePaused) exitWith {}; if (timer > duration) exitWith {onEachFrame ""}; timer = timer + diag_deltaTime * accTime; _dir = [0,1,0]; _up = [sin (500 * timer), 0, cos ( 500 * timer)]; heli setVelocityTransformation [start, end, [0,spd,0], [0,spd,0], _dir, _dir, _up, _up, timer / duration]; }
This is what you get:
It's not a straight line....
Would it be possible to add an additional optional bool parameter to make it use positionWorld instead?
object setVelocityTransformation [fromPosASL, toPosASL, fromVelocity, toVelocity, fromVectorDir, toVectorDir, fromVectorUp, toVectorUp, interval, useWorld = false]
useWorld: Uses the world version of ASL format.