I believe Ter touches on this issue in this post. However I believe I've accounted for that as seen in the test code below.
var/v = 6
var/dx = (v) * sin(a)
var/dy = (v) * cos(a)
o.transform = turn(matrix(), a)
spawn()
for(var/i=1 to 100)
if(!o.loc)return
var/rx = dx - round(dx, 1)
var/ry = dy - round(dy, 1)
var/ox = dx + rx
var/oy = dy + ry
o.Move(o.loc, o.dir, o.step_x+round(ox,1), o.step_y+round(oy,1))
sleep(0.25)
o.dispose()
I appreciate any help in advance.
1) Get the angle to the target via atan2:
2) get angle to the target. You only need to do this if the target changes/moves.
var/ang = getang(src,target)
3) cache x_step and y_step values. You only need to do this when the angle changes.
4) Perform the movement:
Works fine for us: https://gfycat.com/RawWatchfulBrownbear