Abstracted movement

It’s now in a module, meaning it can get as messy as it wants, and can
be used anywhere.