A continuation to
this thread, which is old and less informed so I am starting a new one.
As many users probably agree, player and entity movement is one of Minetest's remaining weak spots. Other players always appear laggy and their movement irrational, no matter how fast your connection to the server is. Mob movement is also not so good... even in singleplayer at times. The set_animation function can also get out of sync from movement packages, allowing players and mobs to play the stand animation while still walking or vice-versa.
Someone clarified me what it is I'm actually looking at here, and I think I got a better understanding of it. Apparently the type of movement networking I imagine to be an improvement means one of two things: Either switching player / entity networking to TCP, or implementing a better message management system on top of UDP.
Sticking with UDP means implementing our own stream system; The server keeps sending movement packages to clients like it does currently. However, clients don't immediately apply them. They wait for a number of packages to arrive (5, 10, etc) and only after it's stacked enough of them, it starts going through the list and applying the changes visually. This means reducing the sensation of lag, at the cost of a delay. Therefore, considering this idea depends whether it's acceptable for clients to always see players moving some 0.x seconds later than they really are.
The second option is changing the system to use TCP. That's pretty much the native way of sending a constant stream of information, whereas UDP is more common for when you want to send something just once. But whether this is a good idea or not is discussable; Having Minetest use both UDP and TCP might be tricky and a lot of work, plus it could require multiple ports which is bad. Also, if a movement package is lost, player movement will stop being notified entirely... since the nature of TCP is to make sure all packages arrive in order, which has its good sides here.
Short version is, TCP is reliable but can be slower, whereas UDP is unreliable but faster. Most articles I'm reading seem to advice against using TCP for multiplayer games, because it means slower updates. Still, we have to think for ourselves. Minecraft for instance is said to use TCP only, and movement there works so well that you don't even feel other players are across a network! Wouldn't we want the same? Some articles useful to the debate:
http://1024monkeys.wordpress.com/2014/0 ... dp-vs-tcp/http://gafferongames.com/networking-for ... dp-vs-tcp/Personally, if someone is willing to do this effort, I'd suggest allowing both methods. Let Minetest network everything via either UDP or TCP, the choice present in a minetest.conf setting. TCP would even make sure that the effects of server-side Lua functions are applied in order to all clients! If not, stick with UDP, but at least have player / entity movement handled as a stream and teach the client to buffer packages in order to reduce perceived lag. No one should care if they see other players 0.1 seconds later as long as they see them moving properly. What is everyone's take on this, and what can / should be done at this stage?