Comment modifier le Pokémon que Timmy attrape ? (Émeraude FR)
Une très grande partie d'entre vous ont certainement déjà essayé de faire une Hack-Rom de Pokémon Emeraude. Et vous avez sûrement déjà modifié les combats contre Timmy en remplaçant son Tarsal par un Pokémon bien cheaté histoire de donner à ce gamin un peu plus de hype.
Seulement, l'illogisme reste : le premier Pokémon que vous le voyez attraper reste Tarsal. Je vais vous apprendre aujourd'hui comment modifier ce combat sur une rom FR !
Pré-requis :
- Advanced Pokémon Sprite Editor (juste pour connaître le numéro du Pokémon)
- Une calculatrice pouvant passer en mode "programmeur" (celle de Windows par exemple)
- Un éditeur hexadécimal (HxD par exemple)
- De la concentration (sans déconner ?)
La théorie :
Pour commencer, nous allons vous expliquer la procédure. On va se servir de l'ASM, c'est à dire qu'on va modifier les données du combat en passant par l'hexadécimal. La valeur hexadécimale qui va renvoyer à Tarsal se trouve à l'offset B0884. Si on décompile l'ASM à cet offset, nous obtenons ceci:
Code: [Sélectionner]
080B0884 21C4 mov r1,#0xC4
080B0886 0049 lsl r1,r1,#0x1
"Pourquoi C4 renvoie à Tarsal ?" me demanderiez-vous ? Eh bien, c'est parce que la commande lsl r1, r1, #0x1 multiplie C4 par deux. Ce qui en décimal donne 392, le numéro du fameux Tarsal dans l'ordre des Pokémon, en comptant tous les Pokémon "? ? ? ? ? ? ? ? ? ?" entre Célébi et Arcko. (visibles sur Advanced Pokémon Sprite Editor)
Nous pourrions donc nous servir de ce calcul pour remplacer Tarsal par le Pokémon de notre choix, pensez-vous ? Eh bien c'est plus compliqué que ça.
Le fait est que si la commande qui permet de multiplier par deux a été insérée, c'est pour que les Pokémon dont l'ordre est supérieur à 255 (soit FF) puissent apparaître (puisque que 256 devient 100 et a donc tout ce qui suit a trois caractère).
Cette commande nous empêche de choisir un Pokémon dont la valeur est impair, puisque celle-ci une fois divisée par deux devrait donner un nombre à virgule, or, en hexadécimal les nombres à virgule n'existent pas.
C'est pourquoi nous allons modifier cette fameuse commande afin qu'au lieu de multiplier par deux, elle va ajouter un nombre de notre choix. Vous allez voir, c'est pas si compliqué.
La pratique :
Pour l'exemple, nous allons remplacer Tarsal par Lumivole.
Tout d'abord, ouvrez votre éditeur hexadécimal et chargez votre rom. Allez à l'offset B0886.
Alors normalement, vous devriez avoir ça :
Les offsets B0886 et B0887 (sélectionnés en bleu) sont ceux que nous allons modifier pour transformer la commande de multiplication en commande d'addition.
- Si vous souhaitez remplacer Tarsal par un Pokémon de génération 1 ou 2, remplacez le 49 par 00.
- Si vous voulez le remplacer par un autre Pokémon de 3ème génération, remplacez le 49 par FF.
Dans les deux cas, remplacez le 00 de l'offset suivant (B0887) par 31.
Pour cet exemple, comme nous le remplaçons par Lumivole, nous allons avoir ceci :
Petite précision, si vous souhaitez modifier son niveau, remplacez le 05 de l'offset B0888 par le niveau de votre choix converti en hexadécimal.
La commande que nous venons de modifier (en rouge) va donc additionner FF soit 255 à notre nombre de base.
L'encadré vert correspond à tout ce que nous devons modifier et se présente sous le schéma XX21YY31.
Les "XX" correspondent à notre nombre de base et les "YY" sont le nombre à ajouter.
Evidemment, il faut remplacer la partie représentée par XX à présent. Pour cela, nous allons utiliser Advance Pokémon Sprite Editor, afin de connaître le numéro du Pokémon souhaité par ordre d'insertion.
Lancez le logiciel, charger votre rom et rendez-vous sur le Pokémon de votre choix en utilisant le menu déroulant. Son numéro d'insertion apparaît dans "Species Number".
Relevez ce numéro (ici 387) et ouvrez votre calculatrice en mode programmeur. (celle de Windows par exemple)
- Si votre Pokémon est de 1ère ou 2ème génération, cliquez sur "Déc", rentrez le nombre et cliquez sur "Hex" pour le convertir en hexadécimal.
- Si votre Pokémon est de 3ème génération, cliquez sur "Déc" rentrez le nombre, puis soustrayez-lui 255 et cliquez sur "Hex" pour convertir le résultat en hexadécimal.
Relevez votre résultat, et revenez sur l'éditeur hexadécimal.
Remplacez C4 à l'offset B0884 par ce que vous avez obtenu. (ici 84)
Dans l'encadré vert se trouve notre formule finale. 84 sera additionné à FF et ainsi Lumivole sera généré !
...
Ou pas.
À la base, le combat est programmé pour que le Tarsal attrapé par Timmy soit obligatoirement mâle. Donc le jeu se fige si vous le remplacez par un Pokémon exclusivement femelle.
Si vous vous en tapez, vous avez terminé. Si non, réglons ce problème dès maintenant.
Dans votre éditeur hexadécimal, atteignez l'offset 68037 et remplacez le 06 par 20. Et voilà !
/!\ Attention cependant à ne pas remplacer Tarsal par un Pokémon que Zigzaton est incapable d'affaiblir, tel qu'un Pokémon de type Spectre !
Par Mickey`, Unifag et Julink.
Merci à Link et Arnikum Plus.
Merci à Link et Arnikum Plus.