What i would do (may not be the best way) would be something like (in Psuedo Code):
Get the Object's Y Angle
Compare that to one of the six predefined angles you have set for the movement.
Rotate it to the closest angle, then move the object.
The six predefined angles would be something like:
0/360
______
300 / \ 60
/ \
\ /
240 \______/ 120
180
And What you'd do is get the object's Y Angle, say it was 80, and you would compare that with the other angles you already have ( ie 0, 60, 120, 180, and 240 ) which would mean that the object, since it is facing closer to 60, would then be rotated to 60 rather than 80.
To do that, you'd have something like:
Function _hex_grid(unit)
obj_a_y# = Object Angle Y(unit)
rem the following If Function checks to see if the angle is closer to 0 than 60 and rotates it acordingly.
rem the "30" is used because it is exactly half way inbetween the two angles.
rem the ExitFunction command is used, so that if the angle is adjusted, the other If's are not executed,
rem therefore, saveing some computer resources each loop.
If obj_a_y# =< 60
If obj_a_y# < 30 Then YRotate Object unit,0 : ExitFunction
Else
If obj_a_y# >= 30 Then Yrotate Object unit,60 : ExitFunction
EndIf
rem checks to see if the angle is closer to 60 than 120.
If obj_a_y# > 60 And ojb_a_y# <= 120
If obj_a_y# < 90 Then YRotate Object unit,60 : ExitFunction
Else
If obj_a_y# >= 90 Then Yrotate Object unit,120 : ExitFunction
EndIf
rem checks to see if the angle is closer to 120 than 180.
If obj_a_y# > 120 And ojb_a_y# <= 180
If obj_a_y# < 150 Then YRotate Object unit,120 : ExitFunction
Else
If obj_a_y# >= 150 Then Yrotate Object unit,180 : ExitFunction
EndIf
rem checks to see if the angle is closer to 180 than 240.
If obj_a_y# > 180 And ojb_a_y# <= 240
If obj_a_y# < 210 Then YRotate Object unit,180 : ExitFunction
Else
If obj_a_y# >= 210 Then Yrotate Object unit,240 : ExitFunction
EndIf
rem checks to see if the angle is closer to 120 than 180.
If obj_a_y# > 240 And ojb_a_y# <= 300
If obj_a_y# < 270 Then YRotate Object unit,240 : ExitFunction
Else
If obj_a_y# >= 270 Then Yrotate Object unit,300 : ExitFunction
EndIf
rem checks to see if the angle is closer to 300 than 0/360.
If obj_a_y# > 300
If obj_a_y# < 330 Then YRotate Object unit,300 : ExitFunction
Else
If obj_a_y# >= 330 Then Yrotate Object unit,0 : ExitFunction
EndIf
EndFunction
Once you've rotated the unit, you then need to move that unit, so in your loop, you may have:
Do
Point Object 1,200,10,200 : rem this would be where you want the unit to move to.
_hex_grid(1)
Move Object 1,5
Sync
Loop
In that code, if you follow the loop, what it does, is it first points the unit at its destination, then, the hex grid function is called (passing in the unit number), the unit is rotated acordingly, so that it is abiding by the rules of the hexagonal rotation system (ie the function).
Then the object is moved by 5 world units.
The loop is done again, the object is pointed back at it's destination point, and the new hexagonal angle is worked out from the function, and the unit is moved 5 world units again...
That's all there is to it.
If you don't understand anything, just say, and ill explain it a bit more for you.
Hope I Helped...

Team EOD :: Programmer/Logical Engineer/All-Round Nice Guy