Articles > On passe en version 0.1.12 !

On passe en version 0.1.12 !

On passe en version 0.1.12 !'s image

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 :


L'introduction d'un système de réapparition :


Avant cette modification, la mort en jeu entrainait la déconnexion du joueur. Ce n'était évidemment pas un comportement logique. J'ai donc mis en place un système de point de sauvegarde qui permet de réapparaitre au dernier point sauvegardé. Ces points sont reconnaissables par les effets de particules qui émanent de ces derniers.
C'était une fonctionnalité basique et nécessaire mais le passage à un système ECS m'a permis de le gérer d'une façon beaucoup plus élégante que je n'aurais pu le faire avant.

L'amélioration du système réseau sur plusieurs points :


J'ai commencé par alléger la tailles des paquets reçu/émis (on passe d'environ 250 à 70  octets par paquet) et même si il y a toujours une marge d'amélioration possible, je suis plutôt satisfait du résultat actuel.

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.

Autres modifications notables :

  • L'introduction d'un nouveau "monstre": l'abeille.
  • L'introduction d'effets de particules (spawn, consommables, dégats).
  • L'introduction d'un système d’interaction (pour enregistrer un point de sauvegarde par ex).
  • Le passage de l'arc en arme (il était considéré comme un sort avant).
  • L'apparition d'un nouveau sort : les griffes électriques (Faites moi penser à embaucher un game designer pour tous les noms dans le jeu :$).


Voilà c'est tout pour le moment et je trouve que c'est déjà pas mal.




Published on: 02/04/2018 in News