collisions and horizontal/diagonal moves seem to work properly