219 votes

Comment fonctionnent les codes GameShark ?

Cela m'a toujours dérouté. Évidemment GameShark et Game Genie n'ont jamais eu un accès interne pour placer leurs propres triches dans chaque jeu . Je ne pense pas que les développeurs leur aient donné le code source pour qu'ils y cherchent des codes. Et je ne pense pas que le processus de développement original pour ces jeux ait inclus le placement de n'importe lequel de ces codes eux-mêmes. Alors, qu'est-ce qu'un code GameShark ou Game Genie, vraiment ?

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

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.

197voto

James0x57 Points 1944

Comment cela fonctionne

Quand GameShark (et d'autres produits d'amélioration de jeu/homebrew) est chargé par la console, l'améliorateur est ce qui lance le jeu réel. En faisant cela, il laisse derrière lui un Gestionnaire de code dans la RAM du système et " crochets " la programmation du jeu.

Les emplacements spécifiques dans la programmation d'un jeu qui sont exécutés à peu près à chaque image (comme la lecture des données du contrôleur) sont les endroits où les "hooks" seront placés. (grâce à l'utilisation de SDK, il est beaucoup plus facile de trouver des hooks qui fonctionnent dans tous les jeux d'un système).

Ce que le hook fait en fait, c'est rediriger le flux de programmation vers le gestionnaire de code que l'enhancer a laissé derrière lui. Une fois que le gestionnaire de code a fini de s'exécuter, il renvoie le flux de programmation au point de détournement.

Si vous êtes familier avec le programme de GameShark " Code maître "C'est ce qui crée l'accroche. (D'autres optimiseurs, comme Gecko OS pour Wii, n'ont pas besoin de codes maîtres car l'optimiseur lui-même possède une poignée de crochets basés sur le SDK qu'il peut "trouver" dans le jeu pendant son chargement).

Structure des codes

Maintenant, un code lui-même est séparé en TROIS parties :

  1. El CodeType (il s'agit généralement du premier octet du code - les deux premiers caractères hexadécimaux). Les CodeTypes sont spécifiques à l'exhausteur.
  2. El adresse en ram que le CodeType utilisera.
  3. El valeur le codetype sera utilisé à l'adresse spécifiée.

Les CodeTypes les plus courants sont :

  1. Écritures en RAM (les options typiques sont 8bit, 16bit, ou 32bit)
    Avec RAM Write, le CodeHandler prendra la valeur et la placera à l'adresse. (en changeant ce qui était là, comme mettre votre santé à 100 !)

  2. Conditionnels (les options typiques sont >, <, =, !=)
    Avec les conditionnels, le CodeHander lit la valeur à l'adresse du code et la compare à la valeur du code. Si la comparaison donne un résultat vrai, alors le CodeHander exécute la ligne suivante du code. (le nombre de lignes qu'il exécute dépend de l'enhancer et est souvent une option dans le codetype lui-même).

Il y a beaucoup d'autres informations que nous pourrions approfondir, mais cela devrait vous donner une bonne base de compréhension. =)

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

3 votes

Bonjour, et bienvenue à l'Arqade ! Merci pour cette excellente réponse. Elle explique tout ce que je me demandais.

0 votes

Comme les temps (et la technologie) ont changé depuis le bon vieux temps :) J'ai utilisé des appareils sur ma GBA et ma DS qui adoptaient cette approche de "résident mémoire". Il y avait généralement un bouton sur lequel vous pouviez appuyer dans le jeu pour accéder aux crochets du dispositif (afin d'activer/désactiver les triches, par exemple).

2 votes

QAtash : Merci et pas de problème ! Heureux d'aider. =) @agent86 Les dispositifs pour GBA et DS (GameShark, CodeBreaker, ActionReplay) fonctionnent aussi exactement comme ça. Les CodeTypes "conditionnels" vérifient si un bouton est enfoncé dans le jeu, ce qui peut entraîner une écriture en RAM. Comme le gestionnaire de code est exécuté à peu près à chaque image, les conditions (vérification de l'appui sur les boutons - "Button Conditionals") seront également vérifiées "en direct" pendant que vous jouez !

84voto

agent86 Points 117964

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.

0 votes

C'est génial. Merci de l'avoir décomposé pour qu'un non-informaticien comme moi puisse le comprendre !

0 votes

Les instructions réelles ont été corrigées ? J'ai toujours supposé que ce n'était que des variables en mémoire qui étaient modifiées - intéressant !

0 votes

@BlueRaja-DannyPflughoeft, les modèles plus récents (et les émulateurs) sont capables d'éditer les variables en mémoire (comme le souligne James0x57) mais je crois savoir que le GameGenie "classique" n'en était pas capable.

20voto

Vinay S Shenoy Points 1316

Je crois qu'un code GameShark a deux parties :

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

En modifiant les valeurs de ces adresses, vous obtenez une tricherie.

Les codes n'ont pas été placés dans le jeu. Après la sortie du jeu, il est possible, par une méthode assez simple, de créer ses propres codes pour un jeu si l'on dispose d'un appareil capable d'accéder à la mémoire vive de la console, c'est-à-dire d'un dispositif de triche. Ces codes sont ensuite publiés.

4 votes

Il semble que ce soit probablement juste, mais avez-vous des sources pour cette information ?

1 votes

Je n'ai pas vraiment de source officielle. Mais j'ai créé mes propres triches pour certains jeux (en utilisant des émulateurs car je n'ai pas de dispositif de triche). La méthode d'essai et d'erreur utilisée pour les faire suggère que c'est ainsi qu'ils fonctionnent.

1 votes

Cette réponse est correcte, mais cette question mérite vraiment une meilleure réponse que celle-ci. Comment les emplacements et les valeurs exactes de la mémoire ont-ils été codés ? Comment les créateurs de la triche ont-ils trouvé ces emplacements de mémoire ? Comment exactement le dispositif GameShark/GameGenie permettait-il de modifier les emplacements mémoire dans la console ?

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X