Comment 2XKO gère le jeu en ligne
Salut tout le monde ! Je suis Tony Cannon, Senior Principal Software Engineer pour 2XKO. Dans cet article, nous vous dévoilons ce que nous faisons afin de créer la meilleure expérience de jeu en ligne possible.
Nous avons beaucoup de points techniques à aborder, alors voici le résumé si vous en avez besoin :
- Nous voulons vraiment que le jeu en ligne soit sûr avec le moins de lags possible. Nous utilisons de nombreux systèmes différents pour y parvenir, notamment une architecture client-serveur, un rollback netcode et ce que nous appelons le mode Fair Play.
- Nous prenons l'anti-triche au sérieux. Cela signifie que nous utilisons Riot Vanguard, qui aidera à garantir que vos adversaires sont bien de véritables humains et n'utilisent pas de scripts.
-
Nous utilisons de nombreux nouveaux outils pour faire fonctionner les systèmes qui gravitent autour du jeu.
- Nous utilisons ce que nous appelons le « serveur de validation de partie » pour créer une copie de chaque partie dans le cloud, qui est utilisée pour l'anti-triche, l'évaluation du niveau et le mode Spectateur.
- Le matchmaking peut désormais rechercher des parties entre différents lobbys, ce qui vous permettra de trouver un adversaire rapidement, même si votre lobby n'est pas très fréquenté.
Très bien. Entrons dans le vif du sujet.
Priorité sur le jeu en ligne
Dès le tout début du développement de 2XKO, nous avons accordé une grande importance au jeu en ligne. Notre toute première priorité lors de la création de la technologie de base a été d'intégrer GGPO et de déplacer tous les playtests en ligne. Même si le jeu était alors en peer-to-peer, nous avons conçu et exploité un proxy de paquets dans le centre de données de Riot à Las Vegas, afin que tous les playtests quotidiens se déroulent sur l'Internet réel. Il était très important d'intégrer ça dans la phase de design. Les mouvements, combos, animations et effets de chaque personnage ont été conçus et testés en priorité pour le jeu en ligne, afin de garantir que l'expérience en ligne soit aussi satisfaisante qu'en local.
Architecture client-serveur
Au fur et à mesure du développement, nous sommes passés d'une architecture peer-to-peer à une architecture client-serveur, un changement motivé à la fois par les besoins des parties à quatre joueurs et par la volonté d'offrir des performances plus constantes et un meilleur potentiel d'évolution. Dans une partie à quatre joueurs, le trafic que chaque joueur envoie et reçoit sur le client-serveur est environ du tiers de ce qu'il enverrait et recevrait dans une topologie peer-to-peer, ce qui réduit les besoins en bande passante, diminue le risque de perte de paquets et contribue à garantir des performances plus fluides, même sur des connexions moins fiables. Et il y a d'autres raisons pour lesquelles nous utilisons l'architecture client-serveur.
Protection de la vie privée et de l'adresse IP
Tout d'abord, et c'est le plus important : en utilisant une architecture client-serveur, nous ne communiquons jamais votre adresse IP aux autres joueurs dans le jeu. C'est l'un des plus grands dangers du peer-to-peer. Rien qu'en affrontant un autre joueur, vous lui offrez une opportunité d'inonder votre réseau de paquets, ce qui peut vous forcer à vous déconnecter et à subir une défaite. Pire encore, exposer l'adresse IP d'un joueur lui fait courir le risque que ses données personnelles soient divulguées. La sécurité des joueurs est une priorité pour nous, et passer à une architecture client-serveur est la manière la plus efficace de protéger votre adresse IP.
Autorité de temps et de commandes
Le serveur joue un autre rôle très important dans le système : il fait office d'autorité pour les commandes, l'état et le temps. En tant que développeur, une fois que vous avez mis en place le rollback, le principal facteur influençant la qualité de votre netcode est la robustesse de votre algorithme qui équilibre le « rift ». Cela signifie simplement qu'on veut s'assurer que les joueurs se partagent la charge du rollback. Si je vois un rollback de trois images, vous devriez voir la même chose. Si vous avez des rollbacks de cinq frames alors que votre adversaire n'a qu'un rollback d'une frame, il est probable que le rift ne soit pas équilibré.

Sans trop entrer dans les détails, équilibrer le rift signifie synchroniser les horloges de jeu de chaque joueur dans la partie. C'est déjà difficile à réaliser dans une partie en peer-to-peer à deux joueurs. Alors comment s'assurer que les deux joueurs ont accès aux mêmes informations ? (Moment geek : en fait, c'est en lien avec le problème des deux généraux, et c'est probablement impossible, mais je m'égare…) Dans une partie à quatre joueurs, c'est une vraie prise de tête !
C'est de ça qu'il est question quand on dit que le serveur sert d'autorité de temps. En ayant une autorité centrale qui suit l'horloge de tous les joueurs dans la partie, nous pouvons équilibrer le rift pour tout le monde de manière bien plus efficace.
Mode Fair Play
Nous travaillons sur une nouvelle fonctionnalité visant à améliorer l'expérience en ligne de 2XKO, appelée mode Fair Play. Nous avons déjà tous joué des parties contre des joueurs qui utilisent leur Wi-Fi, ou un réseau cellulaire, ou encore un ordinateur un peu en deçà de la configuration minimale. Et que se passe-t-il ? Le jeu pause, ou plante, ou pire encore : vous subissez d'énormes rollbacks où votre personnage se téléporte dans tous les sens. Dans un jeu en peer-to-peer, c'est littéralement le mieux qu'on puisse espérer. Si toutes les commandes de tous les joueurs ne sont pas reçues de manière ponctuelle, même un rollback ne pourra pas régler le problème. Et ce problème est encore pire avec des personnes de mauvaise foi. Un joueur malveillant peut ajouter un lag-switch à sa manette pour provoquer une perte de paquets à la demande, ou simplement cliquer sur la barre Windows d'un PC pour interrompre le ralentissement de la partie. Les deux provoqueront un important pic de latence pour vous, vous faisant interrompre votre combo au pire moment.
Lorsque le mode Fair Play est activé, le serveur de jeu 2XKO accorde aux commandes de chaque joueur un court délai pour arriver. Et s'il y a un retard, la dernière commande du joueur est répliquée et la partie continue. C'est un sujet très important. Cela signifie que, peu importe ce que votre adversaire fait à son réseau, votre expérience de jeu ne devrait pas en être affectée. S'il utilise un lag-switch ou que la qualité de sa connexion au Wi-Fi chute, vous ne vous en rendrez probablement même pas compte. Cela dit, c'est une arme à double tranchant. Si votre connexion réseau subit une interruption pendant quelques instants, vous pourriez soudainement encaisser un gros combo de l'équipe adverse.
Le mode Fair Play est actuellement en phase expérimentale, et il faudra de nombreux ajustements pour l'optimiser parfaitement. Nous voulons nous assurer qu'il sanctionne les tricheurs qui tentent de prendre l'avantage grâce à la perte de paquets, sans causer accidentellement de problèmes pour les autres. Nous vous informerons dès que ce système sera entièrement mis en place afin de recueillir vos commentaires sur votre expérience.
Infrastructure et protection globales
Bien entendu, toutes ces améliorations du réseau n'auraient aucune importance sans une infrastructure mondiale solide pour les soutenir. Cela signifie que nous allons exploiter toute la puissance de l'infrastructure réseau de Riot pour permettre à tout ça de fonctionner. Le trafic réseau de 2XKO transitera par l'infrastructure Riot Direct afin de garantir que vos paquets atteignent le serveur avec un minimum de latence. Les serveurs eux-mêmes sont protégés par le service DDoS généralisé, et les personnes malveillantes ne devraient donc pas être en mesure de saboter la grande finale d'un tournoi que vous organisez dans votre lobby privé. Nous utilisons la plateforme provisoire de jeu de Riot pour déployer des serveurs dans le monde entier et garantir des parties à faible latence pour tous les joueurs dans nos régions de lancement. Notre but est de proposer des serveurs à proximité de tous les joueurs dans le monde, mais il se peut que cela nous prenne un certain temps avant d'y arriver. Nous vous remercions de votre patience pendant que nous mettons tout ça en place.
Anti-triche Riot Vanguard
Et puisque l'équité de la compétition en ligne repose également sur l'intégrité, nous associons un réseau performant à une protection anti-triche tout aussi robuste. Pour l'anti-triche, nous utiliserons Vanguard afin de compliquer considérablement la tâche des utilisateurs de scripts et des bots. Vanguard s'est révélé extrêmement efficace en réduisant le nombre de bots dans League de plus de 99 %. Cela contribuera grandement à garantir que vos adversaires sont bien des humains, qui n'utilisent aucune triche comme des scripts d'autoparade ou de whiff punish. Cela dit, préserver l'intégrité compétitive n'est pas un problème que l'on résout une fois pour toutes, puis que l'on oublie : c'est un effort constant. C'est un point que nous continuerons de surveiller et auquel nous adapterons notre approche si nécessaire.
Correction du délai des commandes et rythme des frames
Nous régulons également nos sous-systèmes relatifs au délai des commandes et au rythme des frames afin de garantir que les sensations de jeu de 2XKO restent aussi constantes que possible, que vous jouiez en ligne ou hors ligne, sur PC ou sur console.
Correction du délai des commandes
Notre première astuce est d'ajouter un délai fixe de trois frames à toutes les commandes. Il s'agit d'une technique courante utilisée dans les jeux de combat pour minimiser la durée du rollback. Dans 2XKO, nous appliquons ce délai aussi bien en ligne qu'en jeu local. Cela signifie que le timing de vos combos et la mémoire musculaire développée lors de vos entraînements hors ligne devraient s'appliquer directement au jeu en ligne. Nous avons décidé que le délai serait de trois frames il y a bien des années. Tout, du timing d'un whiff punish à l'attaque la plus rapide du jeu, a été conçu et testé en partant du principe qu'il y a trois frames de délai pour les commandes à tous les niveaux, afin que le jeu reste agréable à jouer quel que soit le délai.
Rythme des frames
La deuxième astuce consiste à investir autant que possible dans le rythme des frames. Le rythme des frames, aussi appelé « frame pacing », est la vitesse et la consistance avec laquelle on simule, génère et affiche une frame. Avec un rythme de frames irrégulier, vous pouvez remarquer de nombreuses saccades dans l'animation ou constater que vos enchaînements à une frame ne se réalisent parfois tout simplement pas, même si vous avez la certitude d'avoir parfaitement respecté le timing. Nous avons concentré nos efforts sur la gestion du rythme des frames afin de minimiser à la fois le délai des commandes et les différences entre console et PC. Pour l'instant, le délai entre le moment où vous appuyez sur un bouton et celui où vous voyez le résultat à l'écran est quasiment identique sur PC, PS5 et Xbox. Encore une fois, cela signifie que 2XKO est supposé offrir la même expérience, que vous jouiez en local, en ligne, sur votre PC à la maison ou sur une console lors d'un événement en direct.

Serveur de validation de partie (SVP)
J'ai parlé plus haut du fait que le serveur de jeu faisait autorité en matière d'état, mais je n'ai pas expliqué précisément ce que cela signifiait. L'avantage principal concerne l'anti-triche et la lutte contre le smurf. Chaque partie classée de 2XKO dispose d'une copie se déroulant sur le serveur. Ainsi, dans une partie en 2v2, une cinquième instance de la partie se déroule en temps réel dans le cloud. Nous l'appelons le serveur de validation de partie, ou le SVP.
Et les avantages que nous fournit ce serveur sont plutôt considérables. Tout d'abord, le simple fait de disposer d'un serveur nous permet d'identifier précisément la personne à sanctionner si quelqu'un rage-quit la partie ou débranche sa connexion Internet. Le SVP nous permet d'aller encore plus loin : si la copie de la partie d'un joueur diffère de celle des autres en raison d'une altération, nous pouvons identifier ce joueur en comparant sa somme de contrôle de l'état de jeu à celle du SVP, ce qui permet de contrer une autre méthode visant à forcer une égalité en modifiant intentionnellement votre état de jeu.
Le SVP fournit également les résultats des parties à notre centre de données. Par exemple, nous transmettons des statistiques détaillées de chaque partie aux services de classement centralisés de Riot. Le service de classement transmet nos statistiques de fin de partie à l'algorithme TrueSkill 2 de Microsoft afin de déterminer efficacement votre niveau de compétence en seulement quelques parties. Cela signifie des conséquences moins dramatiques lors de parties déséquilibrées, et nous espérons que cela réduira considérablement l'utilisation de smurfs.
Lobby et mode Spectateur
Au-delà du gameplay, nous avons consacré énormément d'efforts aux systèmes autour du jeu, dont le plus important est notre système de lobby. Les jeux de combat sont plus agréables lorsqu'ils sont joués avec un groupe d'amis à la maison, ou lors d'un tournoi ou d'une rencontre. Les lobbys de 2XKO ont pour but de répliquer ces interactions sociales en ligne.
Matchs en cours
Une de mes fonctions favorites est la possibilité d'assister à une partie en cours. Regarder d'autres joueurs en action est probablement une des parties les plus importantes du jeu hors ligne. C'est un excellent moyen d'apprendre de nouvelles techniques pour votre champion, de découvrir les outils utilisés par d'autres joueurs, ou tout simplement d'encourager vos amis et de soutenir quiconque pourrait battre l'adversaire qui vous a éliminé du tournoi. Ce sont des sensations vraiment incroyables que nous voulions offrir en ligne.
Lorsqu'un joueur dans un lobby 2XKO s'approche suffisamment d'une borne où une partie est en cours, un écran s'affiche au-dessus de sa tête, et en quelques secondes seulement, vous voyez où en est exactement la partie. Qu'ils soient à la sélection des champions, qu'ils viennent de commencer une partie ou qu'ils soient en train de lutter dans le dernier round pour décrocher le coup final qui déterminera le vainqueur, vous pouvez voir exactement ce que voient les joueurs, quasiment en temps réel. Et ce sans longs délais de synchronisation ou de lecture, afin que vous puissiez plonger directement au cœur de l'action comme si vous y étiez depuis le début.
Le mode Spectateur vu depuis le serveur
Faire fonctionner le mode Spectateur a demandé pas mal de tests. Les jeux de combat qui utilisent le rollback, comme 2XKO, sont entièrement déterministes, ce qui signifie que vous pouvez toujours rejouer l'état de la partie si vous disposez des commandes qui ont été utilisées. Donc, si quelqu'un s'approche d'une borne et assiste au match dès le premier round, nous lui transmettons les commandes dans l'ordre et tout fonctionne parfaitement. Mais que faire si on est déjà au milieu de la partie ? Eh bien, il est toujours possible de transmettre à chaque spectateur toutes les commandes réalisées en leur permettant d'avancer rapidement à travers la partie pour arriver au moment présent, mais ça prend du temps. D'ailleurs, c'est exactement comme ça que fonctionnaient les lobbys de 2XKO avant l'Alpha Lab 1. C'était fonctionnel, mais pas vraiment optimal. Le fait de devoir attendre entre 5 et 20 secondes pour que l'écran soit à jour a fait perdre aux joueurs l'envie d'utiliser cette fonctionnalité.
Par contre, une fois que le SVP a été mis en place, nous avons eu l'occasion de faire quelque chose de plus efficace. Rappelez-vous, le SVP est le système qui valide l'état de la partie en temps réel sur le serveur. Lorsqu'un joueur commence à regarder une partie déjà en cours, nous ne lui envoyons pas toutes les commandes réalisées jusque-là. Au lieu de ça, nous demandons au SVP de fournir un aperçu du jeu à ce moment précis et commençons à envoyer les commandes utilisées à partir de là. Un aperçu est un état de sauvegarde qui n'occupe pas trop de mémoire et qui ne concerne que les parties déterministes du système. Ça ne pèse qu'environ 50 Ko, ce qui permet aux joueurs de le recevoir très rapidement. Au lieu d'avoir à avancer rapidement à travers trois minutes d'action, nous chargeons simplement la sauvegarde de 50 Ko et le joueur est instantanément à jour. On dirait de la magie ! Enfin, je trouve.
Nous n'aurions absolument pas pu développer cette fonctionnalité sans la simulation du jeu sur le serveur. Dans les versions prototypes du mode Spectateur, nous prenions l'aperçu depuis la vue du premier joueur ayant rejoint la partie et l'envoyions au spectateur, ce qui causait toutes sortes de problèmes. Tout d'abord, réaliser ces aperçus et les compresser est plutôt coûteux. Sur les machines moins performantes, cela provoquait une chute de FPS pour le joueur à chaque fois qu'une personne commençait à le regarder. Et ça, c'était inacceptable. Imaginez un peu rater votre coup car quelqu'un commence à vous regarder au mauvais moment. De plus, cela posait des problèmes de sécurité. Nous ne voulions pas ouvrir une faille exploitable par des personnes malveillantes, leur permettant de créer un aperçu contenant une attaque par dépassement de tampon ou tout autre moyen de compromettre la machine d'un autre joueur. Tous ces problèmes sont évités en déplaçant l'ensemble de la source des données du mode Spectateur vers une source fiable sur le serveur.
Matchmaking inter-lobbys
La dernière chose dont je voulais parler est le matchmaking entre différents lobbys. Les lobbys de 2XKO disposent de plusieurs façons pour trouver un match : vous pouvez défier directement d'autres joueurs, vous installer à une borne et attendre qu'une personne vienne s'asseoir à côté de vous, poser votre pièce pour être « le suivant » comme à la belle époque des salles d'arcade, ou simplement demander au système de matchmaking de vous trouver un adversaire.
Cela fonctionne généralement bien lorsque le lobby est complet, mais il existe quelques cas particuliers. Que se passe-t-il si tous les autres membres de votre lobby passent un bon moment et que vous êtes la seule personne à chercher une partie ?
Dans l'Alpha Lab 1, il y avait de nombreux avantages à jouer dans un lobby, comme les classements, les séries de victoires et la possibilité de regarder une partie en s'en approchant, mais cela pouvait parfois se faire au détriment du temps de recherche de partie dans des cas particuliers comme celui-ci. En fait, pour les joueurs qui souhaitaient uniquement trouver un match en ligne le plus rapidement possible, une option telle que « Trouver un match » depuis le menu principal aurait pu leur en proposer un plus rapidement, simplement parce qu'elle aurait recherché dans l'ensemble de la base de joueurs plutôt que seulement parmi les joueurs du lobby actuel.
Lors de la bêta fermée, nous avons modifié le système de matchmaking afin qu'il recherche des matchs dans tous les lobbys en ligne, et non plus uniquement dans celui où vous vous trouvez actuellement. Si un match est trouvé dans votre lobby actuel, nous réservons un match à une borne du lobby et y envoyons les joueurs pour jouer. Si un match est trouvé avec un joueur dans un autre lobby, l'expérience reste globalement la même. Chaque joueur, dans son propre lobby, obtiendra une place à une borne pour jouer, et nous afficherons une représentation holographique de son adversaire qui prendra place à la borne. Lorsque la partie est terminée, les deux joueurs retournent dans leurs lobbys d'origine. Ne vous inquiétez pas, votre série de victoires restera intacte.
Puisque tous les joueurs de tous les lobbys à l'échelle du serveur sont placés dans le même système de matchmaking inter-lobbys, trouver une partie depuis un lobby devrait être tout aussi rapide que depuis le menu principal dans un système sans lobby. Le système de matchmaking est ajusté pour vous offrir la meilleure partie possible dans un délai raisonnable. Si c'est une période de forte affluence et que de nombreuses personnes sont en ligne, vous pouvez vous attendre à obtenir une partie équilibrée après seulement quelques secondes d'attente. S'il est 3h du matin et qu'il n'y a tout simplement pas beaucoup de personnes contre qui vous pouvez jouer, nous essaierons tout de même de vous trouver un match rapidement. Il se peut simplement que l'écart de niveau soit plus important que pendant les heures d'affluence. Ce type d'expérience de file d'attente plus lente en dehors des heures d'affluence n'est pas propre à 2XKO ; c'est simplement ainsi que fonctionne le matchmaking dans tout jeu en ligne lorsque la base de joueurs est plus réduite. Le degré de priorité accordé au temps d'attente par rapport à l'écart de niveau est ajustable, et nous serions ravis d'avoir votre retour sur la façon dont cette expérience fonctionne pour vous. Nous souhaitons peaufiner cela entièrement au cours de l'accès anticipé.
Coup d'œil sur l'avenir
Nous avons couvert beaucoup de points dans cet article, alors félicitations si vous avez lu jusqu'ici. Nous sommes convaincus que le jeu en ligne ne devrait pas être synonyme de moins bonne qualité pour un jeu de combat. Chaque fonctionnalité que nous avons développée, de la validation serveur et l'ajustement du rollback au mode Spectateur en instantané et au matchmaking inter-lobbys, est conçue pour rendre le jeu en ligne aussi équitable, rapide et amusant que hors ligne. Cela dit, nous continuons les tests et ajustements, et nous sommes à l'écoute de vos retours alors que nous nous aventurons vers l'accès anticipé et au-delà. Faites-nous savoir ce que vous en pensez, et continuez à nous envoyer vos rapports de bugs et suggestions !
Merci de votre attention,
Tony Cannon