ID:1302093
 
Just a tiny little thing, figured I'd post it because why not.

This is for when you want to move a certain amount of pixels one way, and a different amount another way, rather than the default directions (So you can achieve better angles with this and what-not).

atom/movable/proc
// provide a negative px to go west, positive to go east. negative py to go south, positive to go north
_step(px, py)
var x = 0
if(px > 0) x = EAST
if(px < 0) x = WEST
var y = 0
if(py > 0) y = NORTH
if(py < 0) y = SOUTH
step(src, x, px)
step(src, y, py)
Actually, the precise method is:
Move(loc, dir, step_x + dx, step_y + dy)

It'll take a little extra to let things slide along walls, though.
Yes, but let me ask, do you have to find what location you're going to each time? I mean like do you have to determine for yourself whether you are changing tiles or not?
In response to Albro1
It is as it's written...
Move(src.loc, src.dir, src.step_x + dx, src.step_y + dy)

// Credit: Lummox JR
atom/movable/proc/PixelMove(dx, dy)
var/d = 0
if(dx) d |= (dx>0) ? EAST : WEST
if(dy) d |= (dy>0) ? NORTH : SOUTH
if(abs(dx) >= abs(dy)*2) d &= 3
else if(abs(dy) >= abs(dx)*2) d &= 12
Move(loc, d, step_x+dx, step_y+dy)