In the last month I have been struggling with an issue, movement synchronization of a leap of an AI agent in a MMO. I know some theory and basic movement was not a problem with interpolation and stuff, the difficult part is implementing a leap move.

My current setup has a server and multiple clients connecting to it. The movement of the AI agent and its behaviour is computed on the server, the AI client receives position updates and interpolates between the current position and the position received from the server.

When the server decides that an AI has to attack, it sends an attack command to clients and, to make the thing more realistic, the clients stops their agents as soon as they receive the message and start an attack animation.

The important part now: during this attack animation, the agent quickly (0.6 s approx) translates (the translation is not in the animation) toward the targeted player. The client of that player then sends the landing position to the server which does some validation and hit checks and then resumes its behaviour computation sending new attack commands or position updates to clients.

This creates a very pleasing effect on the client of the player being attacked but may cause weird translations (due to the error in the position of the agents and the players) on other clients.

I tried predicting the "landing position" on the server but it's always somehow too wrong as it depends a lot on the target direction from the agent, and small changes in both the agent position and target position often lead to big errors.

Having a good look and feel of the leap on the client is imperative.

My questions are:

  • is there a better way to handle this in my case?
  • is there a good practice to follow in this that I am completely disregarding?
  • \$\begingroup\$ At the moment, my solution has been to have the client sending its own landing position (and sticking with it) and the server checking if it's too wrong or something. \$\endgroup\$
    – Alakanu
    Sep 6, 2017 at 17:31


You must log in to answer this question.

Browse other questions tagged .