Hack'n'Trash : Création de Codes Action Replay (1ère partie)

Apprenez à créer vos codes avec l'équipe Triche. D'abord, les bases...

Vous nous l'avez demandé dans le premier Hack'n'Trash, le sujet qui vous fait le plus envie : la création de codes. Afin de vous offrir un contenu homogène, nous allons nous limiter aux codes Action Replay DS. Et je vais me faire l'honneur de vous initier dans cette première partie.

Si vous n'appréciez pas un minimum les mathématiques, si vous n'avez jamais utilisé de codes ou d'émulateurs, il est très probable que vous ne puissiez pas aller jusqu'au bout de cet article.

L'hexadécimal

L'hexadécimal, c'est le mot qui sort régulièrement, mais qu'est-ce que c'est au juste ? C'est un système de comptage, aujourd'hui principalement dédié à l'électronique.

En tant qu'êtres humains, nous comptons aujourd'hui en base 10, c'est-à-dire en décimal. Parce que nous avons dix doigts. Dans les temps anciens, certaines communautés comptaient de manières différentes. Je vais vous apprendre à compter en hexadécimal avec vos mains (uniquement pour les gens normalement constitués, je m'excuse auprès des autres). Avec votre main fétiche, servez-vous de votre pouce pour compter les extrémités de chaque phalange des autres doigts de votre main. Vous devriez compter 16 extrémités (l'articulation entre deux phalanges ne compte que pour 1). Voilà, vous savez compter en base 16. Compter jusqu'à 16 avec une main, avouez que c'est plutôt cool. Et si on se servait de la deuxième ? Pour optimiser le comptage, si on se sert de la deuxième main pour compter les dizaines, on peut alors compter jusqu'à 256 ! C'est ainsi que compte les appareils électroniques.

Image title

Le seul petit détail à ne pas oublier, c'est qu'en hexadécimal, on compte de 0 à F, avec les chiffres de 0 à 9 et les lettres de A à F, avec A pour 10, B pour 11, et ainsi de suite.

La mémoire vive et les adresses mémoire

Rappelez-vous, l'Action Replay sert à modifier des valeurs de la mémoire vive (RAM). Imaginez que la RAM est une très longue rue, dont les adresses commencent au numéro 0, où habitent des valeurs que l'on peut appeler des familles. Les valeurs sont stockées dans ce qu'on appelle des octets, que l'on représentera par des maisons. Et chacun de ces octets a une adresse. Un octet peut contenir une valeur comprise entre 0 et 255, ce qui donne de 00 à FF en hexadécimal, comme si chaque maison pouvait contenir jusqu'à 255 habitants (ou pas... je vous laisse imaginer la taille de la baraque).

Qu'en est-il des valeurs plus grandes que 255 ? Comme l'argent dans Pokémon ?

Eh bien sa valeur est stockée sur plusieurs octets. Tout comme vous séparez les milliers en décimal, la console sépare la valeur en plusieurs octets.

Voilà un exemple un peu plus parlant (si vous aimez les mathématiques, ça devrait être facile) :

DécimalHexadécimal
2000 0x7D0
002 000 0x07 D0
En décimal, la maison peut être inhabitée, ou contenir jusqu'à 999 habitants. Cela fait donc 1000 valeurs possibles.
La première maison (n°0) contient les unités.
La deuxième maison (n°1) contient les milliers.
En hexadécimal, la maison peut être inhabitée, ou contenir jusqu'à 255 habitants. Cela fait donc 256 valeurs possibles.
La première maison (n°0) contient les hexa-unités.
La deuxième maison (n°1) contient les hexa-centaines.
002×1000^1 + 000×1000^00x07×256^1 + 0xD0×256^0

La notation 0x7D0 indique que c'est une valeur hexadécimal égale à 7D0. La lettre x à ne pas confondre avec le symbole de multiplication ×.
L'accent circonflexe représente ici la notation Exposant (ou Puissance pour les intimes).

Pour résumer ce tableau, dites-vous que pour faire la somme des habitants des maisons, il faut additionner le nombre d'habitants de chaque maison, multiplié par le nombre de possibilités, lui-même multiplié par le nombre de possibilités autant de fois qu'on peut trouver de maisons avant.

Pour votre information, une DS peut compter jusqu'à 4 294 967 295, c'est-à-dire FF FF FF FF.

Je vais finir par vous perdre avant le plus important. Peut-être qu'en passant au concret, vous assimilerez ça plus facilement...

La matériel requis

Pour l'exemple qui va suivre, je vais me servir de DeSmuME, un émulateur DS très puissant, mais légèrement gourmand. Si vous avez un PC qui date d'avant 2012, je ne peux pas vous assurer que ça fonctionnera convenablement. La version de cet émulateur que je vais utiliser est la plus récente, et est disponible dans le paquet WinDS Pro.

Et bien sûr, la ROM du jeu pour lequel vous souhaitez un code. Pour ma part, je vais me servir de Pokémon Link!.

Création de notre premier code

Les types de codes

Première chose, il faut savoir qu'un code a une certaine structure, qui dépend de son type. Dans cette initiation, nous allons créer un code d'affectation. Ce type de code est le plus simple à créer, il permet de remplacer une valeur par une autre dans la RAM, sans contrainte particulière. Il existe trois codes de ce genre que voici :

0XXXXXXX YYYYYYYY
Ce code remplace la valeur des 4 octets à partir de l'adresse mémoire XXXXXXX par YYYYYYYY.
1XXXXXXX YYYYYYYY
Ce code remplace la valeur des 2 octets à partir de l'adresse mémoire XXXXXXX par YYYY.
2XXXXXXX YYYYYYYY
Ce code remplace la valeur de l'octet à l'adresse mémoire XXXXXXX par YY.

Vous pourrez retrouver la totalité des types de codes sur GameHacking.org.

Pour savoir lequel de ces codes vous allez créer, vous devez connaître votre jeu par cœur et connaître la valeur maximale de celle que vous voulez changer. Si la valeur ne dépasse pas les 255, vous utiliserez le code de type 2 ; si votre valeur ne dépasse pas les 65535, vous utiliserez le code de type 1 ; et pour le reste, le code de type 0.

Lancez une partie de votre jeu avec DeSmuME, allez sur l'écran où la valeur est affichée pour la connaître. Ici, je vais regarder mon Score dans le mode Sans Fin. Mettez en pause votre jeu (avec le bouton Play/Pause dans la barre d'outils), et ouvrez l'outil RAM Search depuis le menu Tools.

Image title

Beaucoup d'informations sont affichées là. Le principe de création de code consiste à comparer une ancienne valeur avec la nouvelle pour trouver l'adresse mémoire où se trouve la fameuse valeur. Nous avons donc tout un panel d'options pour nous aider à trouver ce qu'on cherche le plus rapidement possible.

Le Score maximum dans ce jeu est 99 999 999. On a donc une valeur supérieure à 65535, ce qui signifie qu'elle tient sur 4 octets. Je vais cocher 4 bytes dans les options Data Size. Byte qui signifie Octet en français.
Pour faciliter la recherche de la valeur, nous allons afficher et chercher la valeur directement en hexadécimal. Donc je vais cocher Hexadecimal dans les options Data Type / Display.
Nous cherchons une valeur précise que nous connaissons, et qui n'a pas encore changé. Je vais donc cocher l'option Equal To dans les options Comparison Operator. Pour les mêmes raisons, je vais cocher Specific Value dans les options Compare To / By.
Il ne me reste plus qu'à 
entrer mon Score dans la zone de texte à côté de Specific Value, et cliquer sur Search en haut à droite pour rechercher toutes les valeurs à 0 pouvant tenir sur 4 octets.

Image title

Le nombre de possibilities dans le titre de la fenêtre devrait diminuer. Vous avez donc dans le tableau, uniquement les adresses mémoires pour lesquelles la valeur est à 0, et est composée de 4 octets. Maintenant, il faut procéder à une comparaison. Pour cela, vous allez devoir modifier la valeur en jouant un peu. Je vais donc faire Play pour relancer le jeu où je me suis arrêté, et augmenter mon Score, et refaire Pause. Quand c'est fait, j'ai deux possibilités :
- comparer la nouvelle valeur à l'ancienne pour trouver toutes les adresses mémoires auxquelles les valeurs ont augmenté ;
- rechercher directement la nouvelle valeur parce que je la connais.
La deuxième a plus de chances de me donner un résultat intéressant. Je vais donc entrer mon nouveau Score, qui est de 50, dans le champ Specific Value et cliquer sur Search. 
Attention ! Nous recherchons des valeurs hexadécimales ! Il faut donc convertir 50 en hexadécimal avant de continuer. Vous pouvez convertir facilement du décimal en hexadécimal avec le mode Programmeur de la Calculatrice Windows.

Image title

Par chance, le résultat de ma recherche me donne très peu de possibilités. Je suis donc très près du but. Avec 4 possibilités, j'ai meilleur temps d'essayer 4 codes plutôt que de continuer mes recherches. Par sécurité, je vais faire un savestate pour relancer le jeu où je me suis arrêté si ça plante à cause d'un code. S'il vous reste trop de possibilités à tester, continuez de modifier la valeur jusqu'à affiner les possibilités au nombre de 5 ou 6.

Connaissant bien ce jeu, je sais à quoi peuvent correspondre certaines adresses mémoires. L'une d'entre elle est le record du mode Sans Fin, une autre est le Score affiché à l'écran, une autre la valeur en mémoire de mon Score. C'est cette dernière qu'il faut modifier pour être sûr que la partie prenne en compte sa modification. En ne modifiant que l'affichage, mon vrai Score ne sera pas modifié. C'est comme les fleuristes, ils changent les graines pour des roses rouges, ils obtiennent des roses rouges ; ils trempent les roses rouges dans un colorant noir, ce seront toujours des roses rouges.

Bien, j'ai une adresse mémoire dans la colonne Adress des possibilités. J'ai dit qu'il me fallait un code de type 0. Et j'aimerais un Score de 3000, que je vais convertir en hexadécimal (BB8). Je remplace donc XXXXXXX par une adresse de mon choix (dans Adress, la longueur de l'adresse est de 8 caractères, supprimez le premier 0 à gauche et remplacez-le par le type du code), et YYYYYYYY par 00000BB8. Il est impératif de remplir le vide d'une valeur par des 0. La longueur d'un code est invariable. Voilà le résultat :

0220A97C 00000BB8

DeSmuME vous facilite encore plus la tâche. Cliquez sur la ligne d'une possibilité et cliquez sur le bouton Add Cheat. Il générera un code, avec la valeur de votre choix (que vous pouvez inscrire en décimal). N'oubliez pas une petite description pour le retrouver. Cliquez sur Add.

Image title

Le code est activé. Reprenez votre partie. Si le jeu plante ou se bloque, alors vous vous êtes trompés. Dans le menu Tools/Cheats, allez dans List. Supprimez le code que vous venez de créer et chargez le savestate de tout à l'heure et refaites Pause. Recommencez l'opération pour les autres adresses.

Pour ma part, cette adresse ne semble pas la bonne. J'ai donc testé les autres. Et je suis arrivé à la conclusion que la bonne adresse était 022101C4. Mon code final est donc le suivant :

022101C4 00000BB8

Avec ce code, mon Score est de 3000 et le restera tant que le code sera activé. D'ailleurs si je Reset les résultats de RAM Search et cherche à nouveau mon Score, je devrais trouver au minimum deux adresses, mon Score véritable, et celui affiché à l'écran.

Image title

Ajouter des touches d'activation

Un code fixe n'est jamais pratique quand il s'agit de scoring. Parfois même, ce genre de codes bloquent votre jeu parce qu'il n'accepte pas que la valeur soit fixée. Dans ces cas-là, il faut trouver un moyen d'activer le code à un certain moment pour modifier la valeur sans pour autant la bloquer. Et la méthode la plus utilisée est celle des touches d'activation.

Les touches que vous pressez pendant votre partie passent aussi dans la RAM. Leurs valeurs sont déjà connues, ne manque plus qu'un moyen d'utiliser notre code à la pression des touches de notre choix. Et là intervient notre maître à tous, le grand M@T, qui nous a fait une page qui vous permettra d'entourer votre code avec celui des touches.

Image title

Cochez les touches de votre choix, le code sera automatiquement modifié. Puis remplacez (code) par votre code. Voilà, c'est fini. Maintenant, lorsque vous presserez les touches que vous aurez choisies, la valeur sera modifiée, et pourra évoluer à n'importe quel moment. Vous aurez donc la possibilité de la remettre à votre valeur fétiche à tout moment. Attention toutefois à ne pas mettre des valeurs trop proches du maximum, certains jeux ne gèrent pas le dépassement du maximum et planteront ou afficheront des valeurs corrompues.

Conclusion

Vous savez maintenant créer un code tout à fait banal, mais suffisant dans la plupart des jeux. Dans les grandes lignes, il faut chercher une première fois la valeur, la modifier, la rechercher en la comparant à l'ancienne (à plusieurs reprises pour trouver un minimum de correspondance) et tester les codes.

J'espère que vous êtes satisfaits de ce tutoriel. Et maintenant, quel serait le prochain sujet du Hack'n'Trash ? À vous de me le dire dans les commentaires !

Le petit MegaRobert

Adresse mémoire : c'est un emplacement de la RAM dans lequel est stocké une valeur. Pour la DS, sa taille varie entre 1, 2 et 4 octets.

ROM : copie conforme d'un jeu original disponible sur cartouche. En parallèle, nous appelons les copies de jeux sur disque des ISOs.

Savestate : c'est une sauvegarde de l'état de votre jeu à un moment précis. À la différence des sauvegardes que vous faites dans le jeu manuellement, et seulement quand vous y êtes autorisé dans le jeu. Le but est de pouvoir revenir en arrière. Pratique pour les tests de codes, ou encore le Tool Assisted Speedrun.

Scoring : on utilise ce terme lorsque la progression dans le jeu se fait au travers du score du joueur.

Par PokemonTrash
  • Stay détermined 29/10/2022 à 15:57
    Vous parler de quoi ?
  • JesSTI 20/07/2019 à 12:01
    Merci pour le tuto :-)
  • Iasou 03/01/2019 à 16:23
    La dernière version de Desmume est disponible ici: desmume*org/download/ (2015, article paru en 2014)
  • Pseudonyme 16/07/2018 à 20:59
    Votre générateur de touches qui activent les codes ne marche pas.
  • fla 30/04/2018 à 19:02
    j'y arrive pas
  • YotA 22/12/2014 à 22:40
    [quote=Asia81]Perso, ca sera la cr?ation de pok?mon, mon vote pour le prochain. Je peut m?me aider si tu veux aborder une partie sur PKHeX[/quote]De m?me, je vote pour la cr?ation de Pok?mon.
  • Megadrifter 22/12/2014 à 20:32
    Et si les surprises ne te plaisent pas, je te propose de compter les votes dans les commentaires pour deviner ;)
  • Megadrifter 22/12/2014 à 20:30
    [quote=LalalaKirby]Un bon gros bug sans mat?riel,c'est possible?
    [/quote]Oui, c'est possible. Mais ?a n'est pas toujours profitable, surtout si tu joues sur cartouche.

    [quote=pikachu]quand est-ce qu'on sait c'est quand que vous choisissez le sujet du prochain machin ?[/quote]Machin, il a un nom. Et pour te r?pondre, nous arr?tons les votes le dernier jour du mois. Mais nous n'annoncerons pas le sujet. Vous faire une surprise est un peu plus sympatoche, non ?
  • pikachu 22/12/2014 à 17:02
    quand est-ce qu'on sait c'est quand que vous choisissez le sujet du prochain machin ?
  • Asia81 21/12/2014 à 23:12
    Perso, ca sera la cr?ation de pok?mon, mon vote pour le prochain. Je peut m?me aider si tu veux aborder une partie sur PKHeX
  • NYMPHALIOKTAMER 21/12/2014 à 21:06
    Je suis d'accord pour le sujet sur la cr?ation de Pok?mon.
  • LalalaKirby 21/12/2014 à 20:36
    Un bon gros bug sans mat?riel,c'est possible?
  • Bluesaphir 21/12/2014 à 20:33
    Laissez tomber,j'suis que au CM2,j'ai m?me pas tout lu...^^
  • M?ga-Mew 21/12/2014 à 18:26
    Beau Boulot ! (c'est moins chaud ? faire avec la dstwo) :)
  • frigiel 21/12/2014 à 14:08
    Par Siphano le 20/12/14 ? 19:08
    Il faudrait que je fasse une vid?o sur les hack avec toi megadrifte

    Je peux te faire du plagiat ?
  • Brybry 20/12/2014 à 19:13
    Sujet sur la cr?ation de pok?mon mais qui passe legit
  • Siphano 20/12/2014 à 19:08
    Il faudrait que je fasse une vid?o sur les hack avec toi megadrifter
  • Un passant ordinaire 20/12/2014 à 18:14
    J'aime bien ta fa?on d'expliquer, c'est assez clair er compr?hensible, joli travail !

    Prochain sujet: Le hack sans mat?riel (les glitchs), ce serait assez bien de les expliquer et aussi peut ?tre savoir comment les trouver
  • Kami 20/12/2014 à 18:09
    Merci
  • Hremeraude 20/12/2014 à 17:58
    Facile en fait, je testerais un code de rebattle un jour
  • Mangacharles, Empereur des Balignons 20/12/2014 à 17:56
    Pok?monTrash, ou comment r?viser ses cours.

    @Marouloued, Megadrifter a raison, et de toutes fa?ons, cela reviendrait ? modifier le jeu dans une grande partie, pour un seul utilisateur de surcro?t.

    @Zelpling42, si tu te sens de taille ? hacker le syst?me de d?fense de la Pk?Bank, bon courage ? toi ^^ Sinon, ton Canarticho ne passera jamais les fronti?res de ses bo?tes.
  • Megadrifter 20/12/2014 à 17:38
    [quote=Marouloued]vous arriv? bien a d?cortiqu? des cartouche pour en extraire des donn? comme avoir un m?ga lati@s alors qu'on peu meme pas ?chang? les ajouts entre ROSA et XY, sa doi pas ?tre hor de port?[/quote]C'est hors-sujet, mais je vais te r?pondre une derni?re fois en r?p?tant ce que je t'ai d?j? dit : ce n'est pas pr?vu, que ce soit hors de port?e ou non.
  • zelpling42 20/12/2014 à 17:34
    sujet pour le prochain article ...je sais comment cr?er un pokemon avec 652123 points dans chaque stats et qu'il puisse passer ? la pok?banque (je propose canartichaud car il p?se trop)^^
  • Marouloued 20/12/2014 à 17:05
    vous arriv? bien a d?cortiqu? des cartouche pour en extraire des donn? comme avoir un m?ga lati@s alors qu'on peu meme pas ?chang? les ajouts entre ROSA et XY, sa doi pas ?tre hor de port?
  • Lumenis 20/12/2014 à 17:03
    Magnifique, super article. C'est cool de ENFIN voir des gens qui parlent de triche et de hack en toute libert?, et surtout D'EXPLIQUER tout bien comme il faut. Mon moi de 12 ans te remercie infiniment.
  • Megadrifter 20/12/2014 à 16:54
    @Yoann : Je te laisse lire ce tweet dans ce cas, si tu as d?j? perdu espoir.
    https://twitter.com/Bond697/status/545795426251968512
  • Sonnyp 20/12/2014 à 16:41
    bon bah go la 2?me partie o/ ah oui elle est pas encore l? :x
  • Yoann 20/12/2014 à 16:22
    Pok?check est ferm? suite ? une mise en demeure de Nintendo... Il ne r?ouvrira donc pas.
    De plus, il est impossible d'utiliser un fake GTS avec la 6G puisque le protocole de communication entre la 3DS et le serveur de Nintendo est du HTTP/SSL (ou HTTPS), crypt? et s?curis?, et non plus du simple HTTP comme avec la 5G ou la 6G 1.0. Alors ? moins d'avoir le certificat et la cl? SSL priv?e du serveur de Nintendo, vous pouvez aller vous gratter.
  • Megadrifter 20/12/2014 à 16:12
    Ici-m?me, dans les commentaires, comme la derni?re fois.
  • Marouloued 20/12/2014 à 15:48
    ou sa svp ?
  • Megadrifter 20/12/2014 à 15:45
    N'oubliez pas de choisir un sujet pour le prochain article ! Merci, ?a fait plaisir
  • Japan event 20/12/2014 à 15:14
    GG Pokemontrash c utile pour instruire les autres
  • FreezePost 20/12/2014 à 14:44
    Ah, ?a m'aide beaucoup pour l'action replay :D
  • Megadrifter 20/12/2014 à 14:23
    Il n'est pas pr?vu que nous fassions notre propre Pok?Check non plus.
  • Megadrifter 20/12/2014 à 14:15
    Bond697 a tweet? r?cemment qu'il avait envoy? plusieurs emails au cr?ateur de Pok?Check, Xfr, mais il ne r?pond pas. On sait seulement qu'ils ont tout ce qu'il faut pour le faire fonctionner sur les jeux 3DS, mais nous n'avons aucune id?e de quand il sera remis en service.
  • Marouloued 20/12/2014 à 14:09
    oh ?h vous mont? pas sur tes gran chevau hein
    es-ce que vous cont? faire un system comme pokechek ou pas ? paske ces bien de parl? de triche etc mais si ces pas l?git et qu'on peu pas les utilis? sans qu'ils se retrouv a pollu? la GTS, je taccuse pas d'etre la cause d'accord, je te ve pas de mal et tout.
    bon, j'ai pas vu le truc de vote paske je li pas forcemen tout l? article de vos journaliste.
  • mio mio 20/12/2014 à 13:19
    ah enfin un cours un peu plus clair sur l'hexad?cimal m?me si j'ai encore du mal ? comprendre XD

    ce serait bien de reprendre aussi les articles sur le rom-hacking avec advance map, il ?tait sympa celui-l?... mais avec des versions plus r?centes, genre heart gold :/
  • Megadrifter 20/12/2014 à 13:17
    Au passage, je parle bien de cr?er des codes. Si vraiment tu voulais rager ? propos des Pok?mon hack?s, tu aurais pu attendre l'article sur la cr?ation de Pok?mon avec des ?diteurs de sauvegardes. L?, tes commentaires auraient ?t? dans le bon contexte. De plus, le jeu en ligne sur DS n'est officiellement plus possible.
  • Megadrifter 20/12/2014 à 13:15
    C'est ?crit dans l'introduction, les gens ont vot? dans les commentaires du pr?c?dent num?ro de Hack'n'Trash, et la majorit? a vot? pour la cr?ation de codes. Oui, Pok?check, c'est plus facile, je suis d'accord, mais c'est ferm? pour l'instant. Si la GTS est infest?e de merde, et si les gens ne sont pas assez intelligents pour se retenir d'utiliser les codes en ligne, je n'y suis pour rien.
    Si tu ne veux plus voir d'articles de ce genre, pose ton vote sur un autre sujet, avec un peu de chance, d'autres voteront comme toi.
  • Marouloued 20/12/2014 à 13:06
    vive l'?pok de pokechek eu au moin il fourniss? quelque chose de correct, la tu doi tout faire toi meme, ces abus?
  • Marouloued 20/12/2014 à 13:05
    nou on veu juste cliker pour avoir le pokemon k'on veu, pourquoi tu nous esplique tout sa, ou alor tu veu que la gts soi infester de merde ?
  • Megadrifter 20/12/2014 à 12:46
    Tu ne peux pas faire ?a avec des codes. Il faut directement s'attaquer au ROM-Hacking pour ajouter n'importe quel ?l?ment de gameplay ? Pok?mon.
  • Fan de Riri 20/12/2014 à 12:44
    Si je veut cr?? un nouveaux code qui permettrait de cr?? une nouvelle nature la nature ?go?ste qui mettrais un boost de 10 % dans toutes les stars comment je ferais ?
  • Aire Ayquaza 20/12/2014 à 12:33
    Merci sa va m'?tre utile les gars ;)
  • ne me lit surtout pas 20/12/2014 à 12:10
    Oh my gosh