Multiple return values convention

Some ACSUtils functions return multiple values (e.g. vector math functions). ACS doesn't support returning multiple values from a function.

ACSUtils uses a convention to fake returning multiple values from a function. The convention is as follows: there are 8 global variables with names r1 through r8. If a function returns multiple values, it actually returns no value and writes the first “returned” value to r1, the second one to r2, and so on.

Here's an example, RotateVector returns X and Y:

RotateVector(x, y, angle);
int newX = r1;
int newY = r2;

The following is also valid:

RotateVector(x, y, angle);
x = r1;
y = r2;

normalize3d returns three values:

normalize3d(x, y, z);
int newX = r1;
int newY = r2;
int newZ = r3;

You should retrieve the return values as soon as possible, or else they may get overwritten by other functions that return multiple values.Don't do this: SomeFunctionWithMultipleReturnValues(...); SomeOtherFunction(r1); int b = r2; Because SomeOtherFunction may call functions that overwrite r2! Instead, strictly follow this style: SomeFunctionWithMultipleReturnValues(...); int a = r1; int b = r2; SomeOtherFunction(a);