Movement

One of the hardest problems with many multiplayer games is to get movement to be responsive and smooth, and reasonably well synchronized between different clients.

Some kind of client side prediction is needed for smooth movement. So when a player gives a movement command to a character he controls, the character can start moving immediately on his client. Paths and navigation goals and such can also make it easier for the client to determine how an object moves, without getting input from the server all the time. When the server sends movement updates, the client side position of objects are adjusted if they differ too much from the servers impression of the position.

Some types of movement: Collision and obstacles need to be tested for in movement code. In navigation tasks, there also needs to be a way for the game to plan a route from one position to another in the world. Sometimes path planning may involve things like unlocking doors, or selecting between alternative routes with different cost in time / money / items / potential risk / probability of being available, etc, as well as with constraints in things like size, weight, and access rights.
 * Move forward with some speed / force
 * Move to any direction relative to the forward direction with some speed / force.
 * Turn towards direction
 * Follow other person / object
 * Walk Along a road or other clear track
 * Walk along route - a movement path is specified, and the character follows it
 * Formation movement - occupy a suitable slot in a (possibly) moving formation. Could be used for a marching squad, or flocking birds, or characters seated around a table.
 * Move to location (lets server handle navigation and routing)

Even the other kinds of movement should probably try to avoid simple obstacles.