I propose a minor overhaul to how the system works by adding a new argument to atom/movable/Move(): flags.
movement flags would be as follows:
MOVE_FORCE = 1 //forces the movement to succeed. Does not call Enter()/Exit()/Cross()/or Uncross(). Only Entered()/Exited()/Crossed()/Uncrossed() are called. If null is supplied as the loc, the mob will move to null space and Exited()/Uncrossed() will be called on all objects no longer being overlapped. MOVE_TEST = 2 //checks whether this movement can happen, but does not actually move the mob. MOVE_GLIDE = 4 //forces this movement to animate a glide regardless of the distance moved so long as the move is on the same z-layer. MOVE_SLIDE = 8 //forces this movement to be a slide regardless of the step size. MOVE_INSTANT = 16 //this movement will not glide regardless of the distance moved. MOVE_TELEPORT = 32 //Do not break this movement up into multiple smaller movements if the step distance is greater than the step size. Only test the endpoints of the movement and do not call testing or notifier functions for anything in between.
It's currently much harder than it should be to use BYOND's movement system. With a few tweaks, lots of feature gap just closes right up.
hell, toss out gliding and just animate() pixelxy