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)
It'll take a little extra to let things slide along walls, though.