Pour les besoins de cet article, je suppose que nous parlons des dispositifs GameShark/GameGenie "classiques", qui se situent entre la cartouche et le matériel. Je crois que les dispositifs plus modernes suivent un principe similaire, mais sont beaucoup plus avancés. La réponse de Jacques à cette question explique en détail 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 codées dans un certain nombre de puces de mémoire morte (ROM), sur une carte de circuit imprimé, que l'on appelle la cartouche. Comme ces puces ROM contiennent le jeu, nous utilisons parfois les termes "programme de jeu" et "ROM" de manière interchangeable.
Le programme/ROM du jeu indique essentiellement au système comment le jeu se déroule. Par exemple, si l'on appuie sur A dans Super Mario Brothers, un son est émis, le sprite de Mario change (il lève la main) et son sprite se déplace vers le haut pendant un temps donné, puis il redescend 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 la manière dont d'autres événements sont pris en compte - par exemple ce qui se passe lorsque Mario perd une vie. La mémoire contient une valeur à laquelle on accède pour savoir combien de vies il reste à Mario, et ce nombre est diminué d'une unité.
Parcheando pour le plaisir et le profit !
Le fonctionnement de ces appareils est le suivant : ils sont assis entre la console et la ROM. (Dans la plupart des cas, lorsque la console demande à la ROM ce qu'elle doit faire ensuite, le dispositif de triche transmet simplement cette demande à la ROM, qui répond et le jeu se déroule normalement.
Lorsque vous entrez un "code de triche" dans l'appareil de triche, cependant. remplace (ou " correctifs "pour utiliser un terme technique courant) l'instruction de la ROM avec l'instruction que vous spécifiez. De cette façon, vous pouvez modifier la façon dont le jeu se déroule.
Par exemple, si vous vouliez des vies infinies, vous devriez patcher la ROM de sorte que lorsque le jeu modifie la valeur de la zone de mémoire "vies", il saute l'instruction "soustraire 1". Si vous vouliez simplement que Mario commence avec plus de vies, il vous suffirait d'aller dans la zone de mémoire où les vies de Mario sont initialisées, et de faire en sorte qu'au lieu de fixer la valeur initiale à 3, vous la fixiez à 4, ou 10, ou 100.
Le résultat final est qu'un minuscule changement, parfois d'un ou deux octets, dans le programme du jeu change radicalement la façon dont le jeu fonctionne. Soudain, Mario ne perd jamais de vies, les objets ne sont jamais consommés, tuer une seule bête vous donne 10 fois plus d'expérience, ou vous commencez le jeu avec l'arme ultime, etc.
Ces appareils ont une capacité limitée à stocker des codes, et certaines tricheries nécessitent que vous touchiez plusieurs endroits de la mémoire - plus la tricherie est complexe, ou plus il y a d'endroits à toucher, plus vous aurez besoin de codes pour modifier le programme comme vous le souhaitez. Si vous en aviez un avec un espace de code suffisamment grand, il serait théoriquement possible de changer complètement le jeu ! Cependant, comme ces appareils perdent leur mémoire lorsqu'ils ne sont plus alimentés, il faudrait réécrire la ROM depuis le début à chaque fois que vous jouez, ce qui serait... fastidieux, pour ne pas dire plus.
Codage du code
Dans le cas le plus simple, les codes eux-mêmes sont généralement composés de deux parties. La première partie est l'adresse ROM à modifier, et la seconde est la valeur à définir. Ces valeurs sont des valeurs binaires ou hexadécimales, et sont généralement codées dans un format "facile à lire" pour que les humains puissent entrer facilement dans le système.
Les codes plus complexes avaient une troisième partie, qui était une valeur de "comparaison" - le code ne changeait la valeur dans la ROM que si la valeur existante du programme ROM correspondait. Cela permettait à certains codes de fonctionner sur plusieurs versions d'une ROM, ou sur des cartouches suffisamment complexes pour nécessiter un changement de banque (ce qui est un tout autre sujet...).
Le format GameGenie original du NES encode 16 bits d'adresse et 8 bits de valeur de remplacement au format hexadécimal, qui est ensuite brouillé et encodé en 6 lettres. Si une valeur de "comparaison" est également requise, il s'agit d'une autre valeur de 8 bits qui génère 2 lettres supplémentaires, pour un total de 8. Ce guide par Benzene de Digital Emutations, explique le format de brouillage et comment décoder un code NES GameGenie.
Trouver des codes
Je ne sais pas exactement comment les personnes qui ont fabriqué les premiers dispositifs GameGenie ont procédé pour déterminer les codes qu'ils ont utilisés, mais l'idée de base est de trouver la partie spécifique du code ROM que vous souhaitez modifier. Cela peut être fait sur une version de débogage de la console, ce qui permet à un développeur de voir les instructions pendant qu'elles sont exécutées. Demandez au jeu de faire ce que vous voulez changer, puis regardez quelle partie de la ROM est demandée par la console. Changez ensuite la valeur qui est lue, et voilà, la triche est créée.
On peut aussi extraire les données de la ROM et les examiner pour déterminer comment elles fonctionnent. En relisant la 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 s'agit de déterminer quelle instruction est la clé du comportement du jeu et de la modifier de manière à changer ce comportement. Ce processus peut être fastidieux, mais il devient plus facile avec la pratique, les connaissances et les compétences.
L'un ou l'autre de ces processus serait probablement difficile, voire impossible, pour l'utilisateur à domicile à l'époque des premiers dispositifs GameGenie, bien que vous puissiez être en mesure de déterminer le modèle d'une tricherie donnée à partir d'un code existant. Par exemple, si le GameGenie était livré avec un code donnant 6 vies à Mario, une personne pourrait probablement trouver comment changer la valeur de "6" en "7" ou un autre nombre arbitraire. Le travail difficile est dans trouver l'emplacement à patcher, et non le patch lui-même, dans ces cas.
L'effet d'émulation
À l'ère de l'émulation, la génération de code est plus facile, mais aussi quelque peu différente. Les émulateurs ne sont pas limités à Parcheando 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 les règles du jeu ROM - Par exemple, en sautant la commande "soustraire 1 aux vies", l'émulateur peut modifier le comportement du jeu. état - par exemple, permettant à l'utilisateur de dire simplement "Je veux 10 vies. Maintenant" ou "Je veux que mon inventaire contienne 99 élixirs". Cette visualisation et cette modification en temps réel de l'état du jeu rendent les hacks de jeu beaucoup, beaucoup plus faciles et les hackers de jeu beaucoup plus puissants.
Où est mon Game Genie Xbox 360 ?
Les appareils de jeu modernes disposent de toutes sortes de programmes de protection contre la copie qui vérifient et valident la ROM, afin d'empêcher le piratage et de garantir une expérience multijoueur "équitable", entre autres choses. Cela rend la création de dispositifs similaires au GameGenie "classique" très difficile et/ou illégale dans certains cas.
51 votes
Je me suis posé cette question depuis environ une éternité.
7 votes
Je sais que je ne devrais pas être surpris par les excellentes réponses que cette question a reçues, étant donné la profondeur des membres de notre communauté... Mais wow.