Grâce à l'incroyable pépin dans Ocarina of Time, il a été possible d'ajouter des modèles de Star Fox 64

image

Au cours des années d'écriture d'articles sur les jeux, j'ai parlé de nombreux problèmes incroyables , de codes inconnus depuis longtemps , de trucs pour l'exécution de code arbitraire et de recherches de contenu profondément caché dans des jeux et équipements classiques. Mais rien ne pouvait me préparer à cette vidéo Twitch dans laquelle une flotte d'Arwing volante de Star Fox 64 envahit le monde d' Ocarina of Time pour attaquer Link.

Vous vous attendez à voir une telle scène uniquement dans un dessin animé créé par un fan ou un piratage ROM que Nintendo aime retirer d'Internet . Mais la chose la plus étonnante à propos de cette vidéo est qu'elle montre une version non modifiée de la ROM originale Ocarina of Time japonaise utilisant la console standard et les contrôleurs N64.

Toute la matinée, j'ai compris comment c'était même possible. Pour expliquer cela, vous devrez approfondir le cœur des instructions du langage machine de Nintendo 64, la gestion de la mémoire d' Ocarina of Time et le processus de développement du jeu au milieu des années 90 lui-même. Si vous êtes aussi curieux que moi, rejoignez-nous.

Liens obsolètes et nouveau code


Ce passage étonnant a commencé avec la découverte d'un problème majeur en octobre de l'année dernière: le joueur Glitches0and0stuff utilisant des émulateurs et une étude minutieuse des zones de mémoire de Nintendo 64 a découvert un moyen de manipuler des liens obsolètes dans Ocarina of Time .

En fait, le problème est que le joueur ramasse l'élément, puis astuces le jeu pour le décharger directement des mains de Link lorsqu'il franchit le seuil d'un nouvel emplacement de chargement (par exemple, la pièce suivante). À ce stade, le jeu libère la zone de mémoire occupée par cet objet afin qu'il puisse être utilisé pour d'autres objets dans le jeu lors de leur chargement. Mais en même temps, le jeu pense que Link tient quelque chose , il continue donc de mettre à jour le pointeur vers le "lien obsolète" dans la mémoire libérée, en écrivant des données représentant la position et l'angle d'un objet inexistant. Avec une manipulation prudente, ce pointeur peut ensuite être utilisé pour «corrompre» les données de l'objet nouvellement chargé avec des valeurs arbitraires.


Les chasseurs spatiaux ne peuvent pas comparer avec Link.


Arwing de Star Fox 64 peut subir des dégâts et tirer sur Link car ils sont toujours dans le jeu.


La visée avec le bouton Z permet de viser facilement un boomerang au bas de l'Arwing.


Le lien contient un objet "vide" - la préparation du problème est effectuée avec l'exécution de code arbitraire.


La partie la plus importante de la technique consiste à geler la caméra à la position de glitch.


Un dispositif permettant de maintenir les boutons / positions nécessaires du joystick analogique du contrôleur 3 pour accéder directement aux titres.


Après dix minutes de saisie du nom de fichier, le code Arwing est prêt à être téléchargé

Initialement, cette astuce a été utilisée pour simplement «gâcher» le jeu, par exemple, pour charger de nouveaux objets dans des coffres au trésor ou pour changer la position d'autres objets à l'intérieur de la pièce (comme expliqué en détail ici ). Cependant, après un certain temps, les joueurs ont découvert que la même méthode peut être utilisée pour modifier des codes de saut d'assembleur individuels , indiquant au jeu où il doit rechercher la prochaine instruction lors de l'exécution de certains événements de jeu.

Après avoir inséré le code souhaité de cette manière, vous pouvez forcer le jeu à aller dans la zone de mémoire contenant les dernières valeurs de rotation connues pour les frondes X et Y. Si ces valeurs sont spécifiées exactement, elles seront interprétées comme un autre code de saut, qui exécute une transition vers la zone mémoire où le nom du fichier actuel est stocké. Ensuite, ce nom de fichier sera interprété comme un code machine N64 normal, afin que le joueur puisse se déplacer rapidement à n'importe quel endroit du jeu dont il a besoin (bien sûr, s'il convertit correctement les caractères binaires du nom de fichier en opcodes correspondants ).


Explication de glitch avec un lien obsolète qui était à l'origine utilisé pour remplacer les objets dans les coffres.

Le premier exemple sérieux d'utilisation de cette manipulation avec des codes de transition a été de charger la cinématique du jeu avec des légendes . Ainsi, le joueur a établi un nouveau record du monde pour le speedran du jeu dans la catégorie "Any%" . Pour ce faire rapidement dans la zone initiale du jeu, vous devez utiliser d'autres problèmes, y compris le problème de caméra «marcher pendant la conversation» , qui vous permet de charger et de décharger des pierres au moment et à l'endroit parfaits. Pour cela, vous devez également maintenir certains boutons et positions du joystick analogique des contrôleurs connectés aux premier et troisième ports Nintendo 64 afin que leurs signaux soient interprétés comme un code de localisation de la cinématique avec des légendes.

Déverrouiller Arwing


La méthode décrite ci-dessus est assez bonne si vous voulez simplement aller à la cinématique. Mais il a une sérieuse limitation: le système de fichiers Ocarina of Time est limité à huit caractères, c'est-à-dire que le nom de fichier ne peut être converti qu'en quelques instructions de code machine. Heureusement, ces deux emplacements d'instructions peuvent également être utilisés pour éliminer pratiquement la limite de caractères.

Cela se fait d'une manière extrêmement confuse, décrite en détail dans ce Pastebin et cette vidéo . Il suffit de dire qu'il utilise trois fois la méthode décrite ci-dessus, ce qui élimine les vérifications importantes de l'indicateur de position du nom de fichier, puis définit ce pointeur sur une valeur de position négative.


Explication détaillée de l'exécution de code arbitraire dans Ocarina of Time

En conséquence, les joueurs ont la possibilité d'entrer un code de plusieurs centaines de caractères, ce qui leur permet de précharger des séquences d'instructions machine beaucoup plus complexes pour mettre en œuvre la méthode de transition de code décrite ci-dessus. Mais ce n'est pas encore suffisant pour encoder les graphiques, les animations et la logique de gameplay nécessaires pour attaquer Arwing. Heureusement, Nintendo nous a beaucoup aidés en cachant commodément tout ce code Arwing au fond de toutes les cartouches Ocarina of Time .

Pourquoi? Le personnage et graphiste Satoru Takizawa a déclaré à Iwata Asks dans une interview en 2011 que c'était juste un moyen de réutiliser le code pour déplacer l'un des ennemis de Zelda :

Volvagia est un dragon, donc il se tortille et se déplace par vagues. Je viens de remettre au boss programmeur Kazuaki Morita des pièces du modèle dragon, et il l'a immédiatement mis en mouvement. Il restait un mystère pour moi comment il avait réussi ... alors je n'ai pas pu résister à ne pas lui demander. Il a répondu que c'était la même chose que la programmation pour Star Fox 64 . Il y a une scène dans ce jeu dans laquelle un autre combattant se bloque sur la queue d'Arwing, et les mouvements de vol du combattant sont exactement les mêmes que ceux de Volvagia. J'étais étonné, c'était un vrai miracle pour moi.



Vidéo de 2007 montrant Arwing survolant la forêt de Kokiri (codes GameShark et émulateur utilisés).

Après avoir copié les animations nécessaires à Volvagia, Morita semble avoir laissé le bloc entier de code Arwing dans les données de poubelle du jeu. Il y a de nombreuses années, les chercheurs de données en ont pris connaissance. Et depuis plus d'une décennie, les joueurs savent comment accéder à ces parties cachées du code en utilisant des dispositifs de triche comme GameShark , qui changent les valeurs en mémoire pour remplacer les ennemis par Arwing.

Mais grâce aux astuces de manipulation de la mémoire décrites dans l'article, un dispositif de triche externe n'est plus nécessaire. Le 23 janvier, le joueur ZFG1 l'a prouvé une fois pour toutes en chargeant Arwing à l'aide de la ROM Zelda non modifiée et de la console standard Nintendo 64 dans un flux Twitch. Le résultat a été un jeu dans lequel toutes les portes ont été remplacées par Arwing, volant autour de Ling, l'attaquant avec des tirs dommageables de blasters, et même tombant au sol lorsqu'il est renversé.

La préparation pour l'enregistrement de ce clip a pris plus d'une heure , au cours de laquelle trois cycles d'exécution de code arbitraire ont été créés et en 10 minutes, le nom du fichier pour le chargement d'Arwing a été soigneusement entré. Mais en même temps, ce clip était l'aboutissement de mois et d'années de travail d'une communauté obsédée par le désir de bien comprendre et maîtriser le jeu classique et ses pépins.

En plus de la valeur de divertissement, le clip "Arwings in Zelda" a prouvé que la communauté, un groupe de spécialistes en informatique, avec suffisamment de temps et d'efforts, peut faire des choses incroyables avec du matériel et des logiciels de jeu classiques.

Source: https://habr.com/ru/post/fr485908/


All Articles