Ces derniers mois, à cause des projets de fin d'études et de ma recherche de stage, je n'avais pas beaucoup de temps pour bosser sur MultiQuest.
Cependant maintenant les cours sont finis et j'ai débuté mon stage du coup j'ai plus de temps chez moi pour améliorer le jeu. Voilà donc la nouvelle version avec son lot de nouveautés :
Côté client j'ai introduit un système de prédiction/réconciliation. Si ces termes ne vous sont pas familiers, sachez que c'est une avancé majeure. La grande majorité des jeux en temps réel utilisent ce genre d'algorithmes pour permettre une plus grande immersion. Je ne vais pas trop rentrer dans les détails mais en gros, comme le serveur est celui qui à le dernier mot sur ce qu'il se passe en jeu et à cause de la latence omniprésente sur internet, si après avoir pressé la touche "Aller vers l'avant" le client attends une confirmation du serveur avant d'afficher sa nouvelle position, alors le jeu donne une impression d'être lent, de lagguer et cette impression est inacceptable pour les joueurs. Cependant si c'est le client qui calcule ses déplacement tout seul, il y aura forcément un désynchronisation avec le serveur à un moment donné.
Jusqu'à présent j'attendais la confirmation du serveur pour mettre à jour la position et les actions du joueur. Avec une connexion rapide (~20ms ping) cela ne se remarquait presque pas parce que j’envoyais énormément de de paquet (environ 50 à la seconde) cependant ça devenait problématique dès qu'il y avait un peu plus de latence car le jeu semblait "laguer" à chaque déplacement.
C'est à ça que sert la prédiction couplé à la réconciliation avoir le meilleur des deux mondes : pouvoir calculer localement sa position et corriger ses erreurs de prédiction avec ce que nous envoie le serveur. Cela peut sembler simple dit comme ça mais côté technique, il y a pas mal de boulot car lorsqu'on reçoit une update du serveur, à cause de la latence elle est dans le passé tandis que nous sommes dans le présent.
Pour plus de détails sur le fonctionnement de l'algorithme vous pouvez jeter un œil aux supers articles de Gabriel Gambetta et Gaffer on Games sur le sujet.
Quoi qu'il en soit, désormais, à l’exception de la création des projectiles, toutes les
actions sont directement effectués coté client et une fois qu'on reçoit
les informations du serveur, le client ajuste sa position avec les
données reçues. Cela m'a aussi permis de réduire la consommation de bande passante en passant de 50 à 30 paquets par seconde.
Voilà c'est tout pour le moment et je trouve que c'est déjà pas mal.