Comment fonctionnent les codes GameShark?

Cela m'a toujours boggled. Évidemment, GameShark et Game Genie n'ont jamais eu accès à l'accès pour placer leurs propres tricheurs dans chaque jeu . Je ne pense pas que les développeurs leur ont donné le code source pour se répandre pour les codes. Et je ne pense pas que le processus de développement original de ces jeux ait inclus l'inscription de ces codes eux-mêmes. Donc, en quoi consiste vraiment un code GameShark ou Game Genie?

Les deux prennent généralement la forme d'une chaîne hexadécimale relativement courte (ou multiple si c'est le cas), de sorte que mon intuition me dit qu'ils utilisent le même principe. Mais ne sont-ils que des adresses de mémoire pour flip un peu? Ou le verrouiller? Ou XOR une série de bits avec quelque chose? Quel est le code, et qu'est-ce qu'il fait?

Comment ça marche

Lorsque GameShark (et d'autres produits améliorant les jeux / homebrew) est chargé par la console, l'amplificateur est ce qui lance le jeu réel. Ce faisant, il laisse un gestionnaire de code dans la RAM du système et " accroche " la programmation du jeu.

Les emplacements spécifiques dans la programmation d'un jeu qui s'effectuent à peu près à chaque image (comme la lecture des données du contrôleur) sont l'endroit où les «crochets» seront placés. (Parce que les SDK sont utilisés, cela permet de trouver des crochets qui fonctionnent dans tous les jeux pour un système beaucoup plus facile)

Ce que l'hameçon fait en fait, redirige le flux de programmation vers le gestionnaire de code, l'amplificateur laissé derrière. Une fois que le gestionnaire de code est terminé, il renvoie le flux de programmation au point de détournement.

Si vous connaissez le « Code maître » de GameShark, c'est ce qui crée le crochet. (Autres amplificateurs – comme Gecko OS pour Wii – n'ont pas besoin de codes maître car l'amplificateur lui-même dispose d'une poignée de crochets basés sur SDK qu'il peut "trouver" dans le jeu pendant qu'il charge.)

Structure des codes

Maintenant, un code lui-même est divisé en trois parties:

  1. Le CodeType (c'est USUALLY le premier octet du code – les 2 premiers caractères Hex). CodeTypes sont spécifiques à l'amplificateur.
  2. L' adresse en ram que le CodeType utilisera.
  3. La valeur que le code-type utilisera à l'adresse spécifiée.

Les codesTypes les plus courants sont les suivants:

  1. RAM Writes (les options typiques sont 8bit, 16bit ou 32bit)
    Avec RAM Write, CodeHandler prend la valeur et la place à l'adresse. (Changer quoi qu'il en soit, comme mettre votre santé à 100!)

  2. Conditions conditionnelles (les options typiques sont>, <, =,! =)
    Avec Conditionals, le CodeHander lit la valeur à l'adresse du code et la compare à la valeur dans le code. Si la comparaison retourne vraie, alors CodeHander exécutera la ligne suivante dans le code. (Combien de lignes il exécute-t-il dépend de l'amplificateur et est souvent une option dans le codéype lui-même!)

Il y a beaucoup d'informations sur lesquelles nous pourrions plonger, mais cela devrait vous donner une bonne base pour la compréhension. =)

Source: Game hacker depuis 1999, fondateur de http://GeckoCodes.org

Pour ce faire, je suppose que nous parlons des appareils GameShark / GameGenie «classiques», qui se trouvent entre la cartouche et le matériel. Je pense que les dispositifs plus modernes suivent un principe similaire, mais sont beaucoup plus avancés. La réponse de James à cette question présente quelques détails sur l'approche plus «moderne» de ce problème.

Qu'y a-t-il dans une ROM? Eh bien … le jeu, essentiellement.

Dans un système de jeu vidéo, les données du jeu sont encodées dans plusieurs puces de mémoire morte (ROM), sur une carte de circuit, que nous appelons la cartouche. Étant donné que ces puces ROM contiennent le jeu, parfois nous utilisons les termes «programme de jeu» et «ROM» de manière interchangeable.

Le programme / ROM du jeu indique essentiellement au système comment le jeu est joué. Par exemple, en appuyant sur A dans Super Mario Brothers, un son est joué, le sprite de Mario change (il met la main vers le haut) et son sprite se déplace vers le haut pendant un certain temps, puis il descend vers le sol. Toutes ces informations sur la façon de répondre à une pression sur un bouton sont encodées dans la ROM.

La mécanique du jeu comprend également comment d'autres événements sont considérés – comme ce qui se passe lorsque Mario perd une vie. Il y a une valeur dans la mémoire à laquelle on accède pour voir combien de vie Mario a, et ce nombre est diminué de un.

Patching for Fun and Profit!

La façon dont ces appareils fonctionnent est qu'ils s'assoient entre la console et la ROM. (Littéralement – c'est la raison pour laquelle ils s'attachent à la cartouche de la façon dont ils le font.) Dans la plupart des cas, lorsque la console demande à la ROM ce qu'il faut faire ensuite, le tricheur transmet simplement cette requête à la ROM, la ROM répond et Le jeu joue normalement.

Cependant, lorsque vous entrez un «code de triche» dans le tricheur, il remplace (ou « patchs » par un terme technique commun) les instructions de la ROM avec les instructions que vous avez spécifiées. De cette façon, vous pouvez changer la façon dont le jeu joue.

Par exemple, si vous vouliez des vies infinies, vous souhaitez réparer la ROM afin que lorsque le jeu modifie la valeur de la zone de "vie" de la mémoire, elle saute sur l'instruction "soustraction 1". Si vous vouliez juste que Mario commence avec plus de vies, tout ce que vous devriez faire est d'aller dans le domaine de la mémoire où les vies de Mario sont initialisées et de le faire pour que, au lieu de définir la valeur initiale à 3, vous l'établissez à 4 , Ou 10, ou 100 à la place.

Le résultat final est qu'une modification minuscule, parfois une ou deux octets dans le programme du jeu modifie radicalement la façon dont le jeu fonctionne. Soudain, Mario ne perd jamais de vie, ou les objets ne sont jamais consommés, ou la mort d'une seule bête vous donne 10 fois l'expérience, ou vous commencez le jeu avec l'arme ultime, etc.

Ces périphériques ont une capacité limitée à stocker des codes, et certaines astuces exigent que vous corrigez plusieurs emplacements dans la mémoire – plus la triche, ou plus de lieux qu'il faudrait toucher, contient plus de codes dont vous auriez besoin pour changer le programme Comme vous le souhaitez. Si vous aviez un avec un espace de code assez grand, il serait théoriquement possible de changer complètement le jeu! Cependant, étant donné que ces périphériques ont perdu leur mémoire lorsque la puissance a été supprimée, vous devriez essentiellement réécrire la ROM à partir de zéro chaque fois que vous avez joué, ce qui serait … fastidieux, pour le moins.

Codage de code

Dans le cas le plus simple, les codes eux-mêmes sont généralement de 2 parties. La première partie est l'adresse ROM à changer et la seconde est la valeur à définir. Ces valeurs sont des valeurs binaires ou hexadécimales, et sont généralement encodées dans un format «facile à lire» pour que les humains puissent entrer dans le système facilement.

Les codes plus complexes avaient une troisième partie, qui était une valeur "compare": le code ne changerait que la valeur dans la ROM si la valeur existante du programme ROM correspondait. Cela a permis à certains codes de fonctionner sur plusieurs versions d'une ROM, ou sur des cartouches suffisamment complexes pour nécessiter une validation bancaire (ce qui est un autre sujet …)

Le format original NES GameGenie code pour 16 bits d'adresse et 8 bits de valeur de remplacement en format hexagonal, qui est ensuite brouillé et codé en 6 lettres. Si une valeur "comparer" est également requise, il s'agit d'une autre valeur de 8 bits qui génère 2 lettres de plus, pour un total de 8. Ce guide , par Benzene of Digital Emutations, explique le format de brouillage et la façon dont vous pouvez décoder un NES GameGenie code.

Trouver des codes

Je ne sais pas exactement comment les personnes qui ont créé les premiers appareils GameGenie ont décidé de déterminer les codes qu'ils utilisaient, mais l'idée de base est de trouver la partie spécifique du code ROM que vous souhaitez modifier. Cela pourrait se faire sur une version de débogage de la console, ce qui permet au développeur de voir les instructions telles qu'elles s'exécutent. Demandez au jeu de faire tout ce que vous voulez changer, puis regardez quelle partie de la ROM est demandée par la console. Ensuite, modifiez la valeur lue, et voila, la triche est créée.

Cela pourrait également être fait en extrayant les données de la ROM et en l'examinant pour déterminer comment cela fonctionne. En lisant le ROM, vous pouvez voir les instructions qui sont exécutées et dans quel ordre. Après avoir analysé le programme stocké dans la ROM, (un processus appelé " ingénierie inverse "), il est important de déterminer quelle instruction est la clé du comportement du jeu et de le modifier afin que vous modifiez ce comportement. Ce processus peut être fastidieux, mais il devient plus facile avec la pratique, la connaissance et les compétences.

L'un ou l'autre de ces processus serait probablement difficile à considérer impossible pour l'utilisateur domestique au moment des premiers appareils GameGenie, bien que vous puissiez déterminer le modèle d'une triche donnée compte tenu d'un code existant. Par exemple, si GameGenie livré avec un code qui a donné à Mario 6 vit, une personne pourrait probablement comprendre comment changer la valeur de "6" à "7" ou un autre nombre arbitraire. Le travail acharné consiste à trouver l'emplacement pour réparer, et non le patch lui-même, dans ces cas.

L'effet d'émulation

À l'âge de l'émulation, la génération de code est plus facile, mais aussi un peu différente. Les émulateurs ne se limitent pas à la correction des emplacements ROM: ils peuvent examiner la valeur actuelle des variables du jeu en temps réel. Cela rend possible toutes sortes de choses intéressantes.

Au lieu de simplement changer la ROM du jeu – par exemple, en ignorant la commande "soustraire 1 de la vie", l'émulateur peut changer l' état du jeu, par exemple, permettant à l'utilisateur de dire "Je veux 10 vies. Maintenant". Ou "Je souhaite que mon inventaire contienne 99 élixirs". Cette visualisation en temps réel et l'édition de l'état du jeu rendent les hacks de jeu beaucoup plus faciles et les pirates de jeux sont beaucoup plus puissants.

Où est ma Xbox 360 Game Genie?

Les appareils de jeux modernes disposent de toutes sortes de programmes de protection contre la copie qui vérifient et valident la ROM, afin de prévenir le piratage et d'assurer une expérience de jeu multijoueur "équitable" entre autres. Cela rend la création de dispositifs similaires à la GameGenie "classique" très difficile et / ou illégale dans certains cas.

Je crois qu'un code GameShark comporte deux parties:

  1. L'adresse mémoire à modifier, et
  2. La valeur à placer dans cette adresse

En changeant les valeurs dans ces adresses, vous obtenez une triche.

Les codes n'ont pas été placés dans le jeu. Après le lancement du jeu, avec une méthode assez simple, vous pouvez créer vos propres codes pour un jeu si vous avez un périphérique qui peut accéder à la RAM de la console, aka, un dispositif de triche. Ces codes sont ensuite publiés.