You transform any relative location by the transports world matrix.
In the Windows binary, the world matrix for gameobjects is located at +0x1D0 (not a pointer), and is a standard 4x4 matrix. Virtual function 52 in CGObject_C gets the world matrix for any object (note that transports can also be units, it's not only gameobjects!).
Transforming can be done with:
Code:
public static void Transform(ref Vector3 v, ref Matrix m, out Vector3 result)
{
float x = v.X * m.M11 + v.Y * m.M21 + v.Z * m.M31 + m.M41;
float y = v.X * m.M12 + v.Y * m.M22 + v.Z * m.M32 + m.M42;
float z = v.X * m.M13 + v.Y * m.M23 + v.Z * m.M33 + m.M43;
result.X = x;
result.Y = y;
result.Z = z;
}