Well it would be along the lines of this (assuming IX_StartAngle is in degrees and not radians by default)
XVel = IX_Speed * Cos(bj_DEGTORAD * IX_StartAngle)
YVel = IX_Speed * Sin(bj_DEGTORAD * IX_StartAngle)
That would give you a constant increment for the x and y values instead of having to constantly recalulate polar offset (and remove the need to store IX_Angle[]
you may however then want to store IX_X[] and IX_Y[] for each unit (this would initially be the co-ordinates of IX_Point2
Then in the loop instead of setting Point2 to point1 with offset, you set
IX_X[] = IX_X[] + IX_Speed
IX_Y[] = IX_Y[] + IX_Speed
then set IX_Point2 to to loc(IX_X[], IX_Y[]), validate the location and if that's true SetUnitX(u, IX_X[]) & SetUnitY(u, IX_Y[])
It's a lot of work naturally which is why I left it as a suggestion and it may appear like "more" but in the long run would be much faster (polar offset 32 times per second is very slow in comparison to performing two additions 32 times per second) - working with co-ordinates saves a lot of processing and removes most of the need for locations at all (since most GUI functions which use locations have custom script equivalents that can take co-ordinates instead removing the need for the location and the removal line that it would need)