Horizon funèbre
D’abord époustouflés par les superbes graphismes de Horizon Zero Dawn sur PC quand on pousse les manettes à fond, les joueurs ont rapidement déchanté en constatant de nombreux crashs et bugs sur cette version du classique PS4.
Sur Reddit, un développeur anonyme a cherché à farfouiller le code afin de comprendre pourquoi son jeu plantait toutes les “5 minutes”, et ses conclusions sont sans appel : le portage PC de Horizon Zero Dawn est une version debug. Un build debug, par opposition à un build release, est réservé aux développeurs afin de corriger les bugs du code jusqu’à arriver à un build release, destiné à être présenté au client.
Selon le développeur, son investigation montre un code “pas vraiment… prometteur”.
Il inclut une photo d’écran d’une ligne de code sur laquelle le jeu a planté et explique :
Ce que signifie cette portion de code, c’est que l’ordinateur essaie d’écrire la valeur de droite pour l’adresse mémoire de gauche. Le problème, c’est que la mémoire spécifiée n’existe pas. Le programme essaie d’accéder directement à l’adresse 0. Ceci fera TOUJOURS planter le jeu, et c’est aussi un énorme NON.
Je n’ai aucune idée de comment c’est arrivé. Le fait que le programme ait un 0 écrit en dur pour adresse mémoire montre clairement à quel point ce portage a été mal codé. Aucun code bien réalisé (ou simplement moyen, franchement) n’essaierait d’accéder à 0 en tant qu’adresse mémoire. Ça pourrait être un bug du compilateur, mais j’en doute fortement.
Suite à ce post initial, le développeur a continué sa petite enquête et a trouvé pas moins de 166 lignes de cette même instruction conduisant le jeu à crash irrémédiablement.
Elles sont principalement utiliser dans la gestion mémoire et dans certaines fonctions debug non retirées (pour une raison obscure).
Il explique avoir tué ces instructions et observé des plantages moins fréquents.
On est loin d’un véritable correctif et je ne peux pas corriger les problèmes graphiques, mais au moins le jeu plante toutes les 30 minutes au lieu de 5 maintenant.