Modifier le Pokémon de l'introduction
Attention, ce tutoriel est valable pour la version Rouge Feu FR uniquement.
Dans ce tutoriel, nous allons voir comment changer le Pokémon que nous montre le Prof. Chen quand il nous fait son discours au début du jeu.
A l'offset 0x1310B0 est stocké un pointeur vers un second pointeur qui redirige sur la palette.
Par contre, il faudra ajouter "1D 00" à la suite du second pointeur vers votre palette.
J'imagine que c'est assez clair, vous n'avez besoin de rien de plus, au pire lisez le tuto.
Matériel
- Un éditeur hexadécimal (HxD pour ma part) - De l'offset du sprite à afficher ainsi que celui de sa palette (Unlz-GBA sera votre meilleur ami) - De quoi écrire, ça peut servirModification du sprite
Attaquons les choses plus sérieuses, mais avant de commencer un petit backup de la rom ne devrait pas faire de mal.Tout d'abord, nous allons chercher l'offset du sprite que l'on veut afficher ainsi que l'offset de sa palette, j'utilise unLZ pour les trouver mais vous pouvez utiliser n'importe quoi d'autre tant que vous les récupérez.
![]()
Sprite : 0xD8B358 - Palette : 0xD8B644
Vous pouvez maintenant fermer unLZ, on n'en aura plus besoin. (Sauf si vous voulez l'utiliser pour vous souvenir de vos offsets...) On va maintenant sortir notre éditeur hexadécimal pour modifier le sprite, avant cela, il va tout de même y avoir une paire de manipulation à faire. Ouvrez votre rom pour obtenir quelque chose de similaire, quelques éléments devraient différer si vous utilisez un autre éditeur mais à quelque chose près c'est pareil.

- A gauche (en bleu), vous avez les offsets de chaque lignes.
- En haut se trouve le numéro de chaque colonne.
- En bas à gauche (en noir), il y a l'offset qui correspond à la position de mon curseur.
- En plein milieux (entouré en vert), il y a le contenu de la rom écrit en hexadécimal.
- A droite, il y a l'équivalent des valeurs hexa du milieu mais en codage AINSI (ce codage peut changer mais ce n'est pas important). Pour afficher le sprite, le jeu va d'abord charger en mémoire un premier pointeur, qui pointe vers un second pointeur, qui lui contient l'offset du sprite. (Si vous ne savez pas ce qu'est un pointeur (en programmation) et bien c'est une variable qui contient un offset, voyez ça comme un papier où est marqué l'adresse d'une personne.)
Bref, on va commencer par chercher notre premier pointeur, il est à l'offset 0x1310AC.
Pour atteindre directement l'adresse voulue, on peut utiliser le raccourci Ctrl+G, mais si vous voulez, vous pouvez descendre à la main...
Veillez bien à ce que hex soit coché, sinon il faudra entrer l'offset en décimal.

Ce pointeur-là va pointer vers un second pointeur, qui lui contient l'offset du sprite du Nidoran montré habituellement par le Prof, et c'est lui qu'on va changer afin de le faire pointer vers le pointeur qui indique l'offset du sprite d'évoli mais pour sa, il va falloir trouver un pointeur qui indique l'adresse d'Évoli. On va déjà récupérer l'adresse de son sprite qu'on a noté auparavant et on va rechercher un pointeur vers celle-ci (avec la combinaison Ctrl+F, sa marche mieux que la recherche avec les yeux).
On va rechercher le pointeur vers l'offset du sprite, on le marque en "à l'envers" et y ajoute "08"
Ce qui me donne "58 B3 D8 08", on précise que le type est une valeur en hexa et qu'il faut chercher dans toutes les directions à partir de l'emplacement du curseur.


Modification de la palette
On peut passer à la palette (sauf si la palette de votre Pokémon est le même que nidoran, mais j'en doute)Pour appliquer la palette au sprite choisi, le jeu va d'abord charger en mémoire un premier pointeur, qui pointe vers un second pointeur, qui lui contient l'offset de la palette. (Une impression de déjà vu non ? C'est normal, c'est un peu le même principe que pour le sprite, tellement que j'ai copié-collé la phrase que j'ai utilisé un peu plus haut et changé trois mots)
Cependant, il y a quelque chose de plus cette fois-ci, pour afficher la palette, le jeu va vérifier que le second pointeur pointe vers une palette qui appartient à un nidoran femelle. On va donc devoir lui faire croire que c'est le cas. Pour stocker notre second pointeur il va nous falloir un peu de place sur la ROM, plus précisément 6 octets. Vous pouvez utiliser directement l'éditeur hexadécimal, il vous faudra chercher une suite de 12 chiffres hecadécimaux "F" dans la rom. (Ctrl+F : FF FF FF FF FF FF) Une fois qu'on a trouvé de la place on va y mettre le pointeur suivi de "1D 00" (qui correspondent au numéro de Nidoran(f))
Donc pour moi, j'ai 6 octets de libres à l'offset 0xD0 et je vais y rentrer : 44 B6 D8 08 1D 00 Le tutoriel ne s'arrête pas là, il faut encore modifier notre premier pointeur afin qu'il pointe vers le second, celui-ci est stocké à l'offset 0x1310B0 Vous avez juste à lui indiquer l'emplacement de votre second pointeur (à l'offset 0xD0 pour moi), je remplace donc l'ancien pointeur (00 18 23 08) par le mien D0 00 00 08. Et voilà, vous pouvez sauvegarder et admirer le résultat ! Allez, un dernier screen pour la route, avec notre second pointeur modifié et le résultat.

Et Merci à Baitot qui m'a aidé pour réaliser la fin de ce tutoriel
Pour des détails supplémentaires ou poser des questions, dirigez-vous sur le topic dédié du forum.
Par Gadoin

