Aujourd’hui, dans la nouvelle « créer des jeux vidéo, c’est difficile »: le voyage de Respawn pour traquer un bogue qui a causé des mois de problèmes audio dans Apex Legends. Des grenades qui n’explosent pas, des armes à feu qui ne tirent pas, des dégâts sans source et des mois d’enquête angoissante, le tout apparemment causé par une seule ligne de code ajoutée dans la mise à jour de la saison 16 d’Apex Legends.
Comme indiqué dans un article détaillé sur Reddit (s’ouvre dans un nouvel onglet) par Amy Thiessen, responsable de la communauté Respawn, les problèmes ont commencé au début de la saison 16 en février. Le studio avait commencé à recevoir des rapports de « nades disparues » dans Apex. Respawn a rapidement déterminé que les grenades ne « disparaissaient » pas exactement, mais elles ne parvenaient parfois pas à exploser malgré les dégâts infligés aux joueurs.
« Cela ne s’était pas produit lors de nos tests de jeu de la saison 16, n’a pas pu être reproduit en interne après les rapports initiaux et était très difficile à cerner à l’aide de vidéos de gameplay en direct car la cause première n’était pas toujours indiquée dans le POV du joueur », indique le message.
Respawn a mieux géré le problème après avoir reçu des rapports similaires concernant des effets sonores de pistolet manquants et des effets de particules. « Après une enquête préliminaire, le principal suspect s’est avéré être le système utilisé par nos serveurs pour envoyer des commandes ‘start’/’stop’ pour divers effets (par exemple, certains sons, systèmes de particules, impacts physiques, traceurs de balles, explosions). »
Mise à jour de l’équipe de développement : mise à jour audio de r/apexlegends
Essentiellement, quelque chose se passait pendant un match qui pouvait surcharger la limite du serveur pour les effets sonores ou les particules, entraînant la suppression de certains sons et effets.
« A partir de là, la théorie était que quelque chose pouvait inonder cette limitation du moteur, demandant des milliers d’effets à chaque seconde ! » dit le poste. « Mais s’agissait-il d’un problème systémique ou pouvait-il s’agir d’une seule entité agissant ? Chaque mise à jour de saison comprend des milliers de modifications apportées aux actifs, au code, au script et aux niveaux. Ce qui signifiait trouver une aiguille dans une botte de foin. »
Respawn s’est tourné vers les métriques pour aider à résoudre le problème, mais rien dans la télémétrie n’indiquait un problème clair. Cela a suggéré à Respawn que ce bogue était une situation unique que leurs systèmes n’avaient pas vue auparavant.
« Cela nous a laissé avec un problème complexe dont nous savions qu’il avait un impact sur notre communauté, mais qui était difficile à reproduire malgré des rapports détaillés, avait un minimum de pistes en interne et il n’y avait aucune métrique pour prouver définitivement que cette limite était atteinte. »
Où allez-vous à partir de là? Respawn a décidé de tester sa théorie des effets surchargés en cassant intentionnellement les serveurs d’Apex Legends. L’équipe a lancé une version de test et a engendré 50 personnages qui ont tous tiré des armes à feu en même temps et ont utilisé à l’infini des capacités pour pousser la charge des effets du serveur par-dessus bord. Cela a fonctionné – l’équipe a finalement pu reproduire des baisses audio similaires aux rapports de bogues, mais la façon dont cela arrivait aux joueurs réels restait un mystère.
« Cela nous a donné la preuve que FX serait abandonné, mais uniquement avec des cas de test totalement irréalistes. Divers aspects des performances de notre serveur ont été étudiés, mais rien de définitif n’a été trouvé. »
Respawn a gardé un œil attentif sur la question alors que la saison 16 faisait rage. L’équipe a finalement remarqué que les rapports audio abandonnés avaient tendance à provenir d’un jeu de haut niveau. Cela leur a donné l’idée de déployer une mise à jour du serveur qui permet à Respawn de suivre de nouvelles métriques dans un plus petit sous-ensemble de correspondances, ce qui a instantanément conduit à une percée.
« Alors que la mise à jour du serveur était en cours de finalisation, nous l’avons trouvée. Une seule ligne de code a été identifiée comme étant la cause première du problème. La nouvelle arme de la saison 16. »
Cette arme est le Nemesis, le tout nouveau fusil d’assaut à rafale d’énergie d’Apex. Le Nemesis a un mécanisme unique où infliger des dégâts va « charger » le pistolet et le faire tirer plus vite (comme démontré (s’ouvre dans un nouvel onglet) par YouTuber Dazs ci-dessus). Cet effet de charge est représenté visuellement sur le pistolet par un arc électrique à l’intérieur du canon. Respawn dit qu’une ligne de code destinée à dire à cet effet de « s’arrêter » alors que l’arme n’était pas chargée ou dans son étui se répétait en fait indéfiniment pour tous les joueurs détenant un Nemesis dans leur inventaire.
« Cela signifie que chaque joueur avec un Nemesis non chargé créerait un effet de » particule d’arrêt « sur le serveur à chaque image, et cette ligne de code était appelée même lorsque l’arme était dans son étui. »
Curieusement, cela explique également pourquoi les chutes audio se produisaient plus souvent dans le jeu de haut niveau. « 14 clients avec un Nemesis fonctionnant à 180 ips suffiraient à provoquer l’abandon de FX. » Pour une fois, ce sont les meilleurs joueurs PC qui avaient un désavantage.
Respawn dit que cela explique également pourquoi ses tests internes n’ont pas rencontré le bogue.
« Les versions utilisées pour les tests n’avaient peut-être pas assez de Nemesis en jeu, avaient une corrélation plus rare avec les FX manquants ou n’avaient pas assez de clients à ce fps – quelque chose que nous devons garder à l’esprit et améliorer pour les tests futurs. »
Un correctif déployé la semaine dernière a finalement éliminé le bogue pour de bon. Et voilà, un bogue audio indiscret avec une cause profonde compliquée qui, à long terme, aidera Respawn à détecter des bogues similaires avant qu’ils n’atteignent les joueurs. Respawn a conclu le post avec un aparté sur les tests, rappelant aux joueurs qu' »une minute de joueurs jouant à Apex équivaut à 10 testeurs jouant au jeu pendant un an ! »