As
outlined on the forum it is not possible to call use Move() to move a movable atom without knowing what turf is the destination of the movement. This doesn't make sense in games using non-atomic movement. If all that a developer want to do is move the object by an arbitrary number of pixels, it is not known whether or not this will result in the object crossing into a new tile.
I suggest that when step_x or step_y are supplied to Move(), that NewLoc should be treated as an optional argument:
Move(Dir=some_dir, step_x=3)
Alternately, there should be a proc that can be used like Move(), but without specifying a new location.
Note: The step() and walk() procs are insufficient. They cannot be called without changing the mob's direction to that of the movement. This is only possible with Move().
Edit: Also, step cannot replicate all the behavior of Move(). In Move, it is possible to specify different values for step_x and step_y. Using step() or walk(), you can only move at 45 degree angles.
In my platformer from the impromptu ZYNCKO contest, I call step() twice: once for each component of velocity along world axes. There also seems to be a bizarre problem with calling step() on a decimal that's less than 1. I'm guessing it floors the input. This causes a whole plethora of problems when you've implemented air resistance.