So I've found, as illustrated below, the in-built walk and step functions count touching the target loc as arriving. As you can see illustrated below
Code:
var/target = locate(mob.x+2, mob.y+2, mob.z)
walk_to(mob, target)
I expected the mob to end up perfectly within the boundary of 3,3.
Now on investigating the vars, I'm assuming this happens because as soon as the mob overlaps multiple tiles, it has multiple entries in it's loc var. one of these will be the target loc.
The question I have is, is there a simple workaround for ensuring step and walk move to the middle of the tile, or do I have to build my own step/walk functions using step_x and step_y to perform this?
A very rough rundown of what you need to do in the first scenario is simply walk_to until the desired tile is within your 'locs', and then create a custom centering proc that moves you until your step_x and step_y are equal to zero, but you're still on that loc.
Good luck.