Animer les front et back sprites des Pokémon et des dresseurs
On sait tous que les sprites des versions GBA sont inanimés (sauf pour les fronts d'Émeraude), je me propose donc de vous apprendre à les animer pour rendre les débuts de combat un peu plus dynamiques. Suite à ce tuto, vous serez en mesure d'animer les front et back sprites des Pokémon, les sprites des dresseurs, ou encore modifier l'animation des backsprites des dresseurs (héros, Timmy, etc.). De plus, les sprites ne seront pas seulement animés en combat, mais aussi dans le menu Pokémon, et lors de l'utilisation de `showpokepic` dans un script (plutôt intéressant).
Mais avant de commencer, il y a quelques restrictions que vous devez connaître :
- Chaque Pokémon (seulement les Pokémon, pas les dresseurs) doit avoir le même nombre de sprites, ce qui induit une certaine quantité de travail.
- Si vous animez le front des Pokémon et que ceux-ci ont X sprites, alors les back devront avoir le même nombre de sprites et posséderont la même animation (ordre et durée d'affichage, pas les mêmes sprites bien entendu).
- Le combat ne peut pas démarrer tant que l'animation du Pokémon adverse n'est pas finie. En revanche, pas besoin d'attendre que l'animation du backsprite soit finie pour commencer le combat. Mais si elle n'est pas trop longue, on peut commencer le combat aussi vite que sans animation.
- L'animation est rejouée quand on sort du sac ou du menu de sélection de Pokémon.
Remarque : Toutes ces observations ont été faites sur RF/VF, il se peut que ce soit un peu différent sur RSE.
Comme vous le constatez, ce ne sont pas des contraintes gênantes en jeu, mais je me devais de vous avertir. Ces contraintes ne sont valables que pour les Pokémon. Pour ce qui est des dresseurs, le système est beaucoup plus primitif.
Un gros avantage pour les backsprites est qu'il est possible d'avoir deux parties d'animations différentes, une à l'arrivée en combat, puis l'autre quand il lance la balle.
Vous l'aurez compris, il y a de quoi se faire plaisir avec de belles animations. Et si vous n'êtes pas convaincu, rendez-vous à la fin de ce tuto pour avoir un aperçu de ce qu'il est possible de faire.
Remarque : Les nombres précédés d'un '#' sont en hexadécimal, sinon ils sont en décimal.
Les bases de l'hexadécimal sont requises pour comprendre le tuto, mais rassurez-vous, savoir que #A = 10, #B = 11, etc. devrait suffire.
Il vous suffit donc de modifier ce pointeur pour qu'il pointe vers votre nouvelle animation. Petit rappel :
Si vous avez créé votre table à l'offset #730004, vous devez donc mettre le pointeur suivant #04007308.
Chaque perso prend 8 octets, pour trouver les pointeurs de votre perso, il suffit donc de faire : "offset du tableau"+#8*#x
Voilà les valeurs de x pour rf/vf : 0 - hero, 1 - heroine, 2 - type de la TV, 3 - vieil homme, 4 - Brendan, 5 - May.
Par contre, je ne connais pas l'ordre des perso pour rse donc il faudra tester les différents pointeurs par vous-même.
Une fois que vous avez trouvé les pointeurs de votre perso, il ne reste plus qu'à les modifier, en sachant que le premier pointeur correspond à l'animation lors de l'arrivée en combat, et le deuxième pointeur correspond au moment où il lance la balle.
Remarque : Si vous utilisez les versions Rubis/Saphir ou alors Émeraude et que vous trouvez l'ordre des perso, n'hésitez pas à en faire part ici, j'éditerai le premier post en conséquent.
Pour retrouver le pointeur du sprite que vous voulez animer, il faut connaître le numéro de notre sprite. Pour trouver ce numéro, je vous conseille d'utiliser A-Trainer. Sur cette image, j'ai encadré en rouge l'endroit où se trouve le numéro en question :
Les outils nécessaires
Votre [éditeur Hexadécimal](http://mh-nexus.de/en/hxd/) qui sera notre principal outil. [UnLz-GBA](http://www.pokemon-legendary.com/downloads/unLZ-GBA.zip) pour ajouter les sprites. Les logiciels comme NSE ou Advance sprite editor ne sont pas adaptés dans le cas présent.Augmenter le nombre de sprites d'un Pokémon
La première étape pour créer/modifier une animation est d'augmenter le nombre de sprites de sorte à avoir au minimum 2 sprites dans des positions différentes pour un même Pokémon/dresseur/... Remarque : Certains seront tentés de parler de frame, mais comme j'utilise le mot frame pour autre chose plus loin dans ce tuto et que je voulais éviter la confusion, je me suis rabattu sur le mot sprite. Quel que soit l’élément que vous voulez animer, la méthode pour insérer les sprites est la même. Pour commencer, il vous faut une image avec vos sprites les uns sous les autres, vous devriez obtenir quelque chose comme ça :![]()
Créer l'animation
Maintenant que nos sprites sont insérés, on va pouvoir s'attaquer à l'animation. Avant tout, il faut trouver un espace libre dans la rom où nous allons créer notre animation, notez l'offset, on en aura besoin par la suite. Comme vous le savez, une animation est composée de plusieurs frames, dans notre cas, chaque frame est codée sur 4 octets. `XX 00 YY 00` Les deuxième et quatrième octets doivent toujours être 00. Je ne sais pas à quoi ils correspondent mais laissez-les à 00 sous peine de voir des bugs graphiques apparaître. Le premier octet (XX) correspond à l'index du sprite à afficher (de #00 à #FF). Si je reprends mon exemple précédent, voilà comment je dois numéroter chaque sprite :![]()
Repointer
Maintenant que nous avons créé notre animation, il faut changer le pointeur de l'animation pour indiquer au jeu où se trouve la nouvelle animation. Cette fois, je vais différencier chaque cas car ils sont tous différents. Il faut donc changer le pointeur correspondant à l’élément que vous avez modifié.Les Pokémon
Les Pokémon sont le cas le plus simple, en effet l'animation est commune à tous les Pokémon, et donc il n'y a qu'un seul pointeur pour l'animation de tous les Pokémon. Voilà un tableau avec l'offset pour chaque version :| Version | Offset |
|---|---|
| Rouge Feu | #22EDC8 |
| Vert Feuille | #22EDA4 |
| Rubis | #1F006C |
| Saphir | #1EFFFC |
| Émeraude | #30723C |
Dresseur: les backs
Pour les backsprites, il y a 2 pointeurs pour chaque dresseur. Pour savoir à quel offset commence la liste de pointeurs, regardez le tableau :| Version | Offset |
|---|---|
| Rouge Feu | #234350 |
| Vert Feuille | #23432C |
| Rubis | #1F4EBC |
| Saphir | #1F4E4C |
| Émeraude | #30D7FC |
Dresseur: les fronts
Cette fois, il y a 1 pointeur par sprite. Voilà l'offset de la table de pointeurs pour chaque version :| Version | Offset |
|---|---|
| Rouge Feu | #233298 |
| Vert Feuille | #233274 |
| Rubis | #1F4554 |
| Saphir | #1F44E4 |
| Émeraude | #30CD28 |
![]()
Exemple
Pour vous convaincre, voilà une petite vidéo de ce qu'il est possible de faire :Pour toutes questions ou suggestions, dirigez-vous sur le topic dédié du forum.
Par Unifag

