Créer ses propres émoticones
Apprenez à modifier les émoticônes de Pokémon de manière avancée pour un rendu unique. Créez vos propres smileys personnalisés !
La liste d'images
Elle permet de lister l'ensemble des images qui pourront être utilisées dans les émotes. Dans ce tuto, je pars du principe que vous voulez créer un tout nouveau smiley sans réutiliser les images des anciens émotes, donc ce n'est pas la peine de toucher à la liste déjà existante, on va en créer une nouvelle. Avant même de créer cette liste, je vous laisse insérer les images que vous allez utiliser. Je ne donne pas de détails là-dessus, c'est très simple (notez les offsets, on en aura besoin). Malheureusement, la palette est la même que celle du personnage, ce qui limite énormément les possibilités que nous offrent ces "émotes", mais je vais essayer de pallier ce problème.Où créer notre liste
Chaque image prendra 8 octets dans la liste, il vous faut donc trouver un espace dans la ROM avec une taille suffisante (notez l'offset auquel vous commencez la liste).À partir de maintenant, j'ai décidé d'illustrer chaque étape avec un exemple qui sera de couleur grise. Personnellement, j'ai décidé que mon "émote" contiendrait 9 images, que j'ai déjà insérées. Ma liste aura alors une taille de 9*8 = #48 octets. J'ai choisi de créer ma liste en commençant à l'offset #BF0000 pour avoir largement la place.
Le re-pointage
Avant même de créer notre animation, on va s'attaquer au re-pointage, c'est simple et ça évitera de perdre les offsets.| Version | Offset |
|---|---|
| Rouge Feu | #3C170C |
| Vert Feuille | #3C1548 |
| Rubis | #3A219C |
| Saphir | #3A1FE4 |
| Émeraude | #5556AC |
Dans mon exemple, ce sera 00 00 BF 08.
Créons notre propre liste
On va enfin s'attaquer à cette liste, rendez-vous à l'offset que vous avez choisi. Chaque image se présente sous la forme suivante : `XX XX XX 08 YY YY 00 00` XX XX XX 08 est le pointeur sur l'image. YY YY dépend de la taille de l'image (plus d’explication dans la partie sur les dimensions). Le XX XX XX ne devrait pas vous poser de problème. Il s'agit de l'offset de l'image en little-endian (inversé). Pour le YY YY, voici ce qu'il faut mettre en fonction de la taille de votre image : 1616 = 80 00 ; 3232 = 00 02; 64*64 = 00 08. Et vous reproduisez ce schéma pour chaque image. Ce qui donnera quelque chose sous la forme : `XX XX XX 08 YY YY 00 00 XX XX XX 08 YY YY 00 00 XX XX XX 08 YY YY 00 00 XX XX XX 08 YY YY 00 00 XX XX XX 08 YY YY 00 00 XX XX XX 08 YY YY 00 00 ...`Personnellement, j'avais inséré ma première image à l'offset #B00000 et la seconde à l'offset #B00200. Toutes mes images sont en 32*32. J'obtiendrai donc la liste suivante :
`00 00 B0 08 00 02 00 00 00 02 B0 08 00 02 00 00 ...` L'ordre dans lequel vous mettez les images dans la liste n'a pas d'importance, mais je vous conseille quand même de les mettre dans le même ordre que celui dans lequel elles seront affichées, ça vous simplifiera la tâche pour la suite. Et voilà, on a enfin terminé cette liste.Les animations
Mais dire au jeu où se trouvent nos images n'est pas suffisant, il faut aussi lui dire dans quel ordre afficher ces images. C'est à ça que servent les "animations".Où créer son animation
Avant toute chose, il faut choisir où insérer notre animation dans la ROM, chaque étape est codée sur 4 octets et 2 autres octets sont nécessaires pour marquer la fin de l'animation. Faites donc en sorte d'avoir assez de place (notez l'offset auquel débute votre animation).Souvenez-vous, j'avais 9 images pour composer mon "émote", mais mon animation sera plus longue car je choisis d'afficher plusieurs fois certaines images, mon animation ressemblera à ça : img1 - img2 - ... - img8 - img9 - img5. J'ai alors un total de 10 étapes. Donc il faut que je prévois un espace avec au moins 10*4+2= #2A octets disponibles. Encore une fois je prends large et je choisis de commencer à l'offset #BF1000.
Le re-pointage
Encore une fois, on va s'attaquer au re-pointage avant même de créer notre animation.| Version | Offset |
|---|---|
| Rouge Feu | #3C16EC - #3C1700 |
| Vert Feuille | #3C1528 - #3C153C |
| Rubis | #3A2188 - #3A2190 |
| Saphire | #3A1FD0 - #3A1FD8 |
| Émeraude | #555698 - #5556A0 |
Moi j'ai envie que mon animation soit appelée quand j'utilise l'instruction #raw 62, je vais donc modifier le second pointeur (offset: #3C 16 F0) en #0001BF08.
Créons notre animation
On va enfin pouvoir s'attaquer à cette animation. Chaque étape de l'animation peut être définie par 3 paramètres : l'image à afficher, sa durée, et le split à appliquer. La structure pour chaque étape de l'animation est la suivante : `XX 00 YY 00` XX est l'indice de l'image dans la liste que l'on a créée au début, d’où l'importance de ne pas mettre les images dans n'importe quel ordre. Attention, on commence à l'indice 0 et non à l'indice 1. YY correspond en fait à plusieurs informations. Pour les obtenir, il faut le mettre sous la forme binaire (je ne donnerais pas d’explication sur cette conversion, ce n'est pas le but du tuto) : `UVWWWWWW` D'abord les WWWWWW, il s'agit en fait de la durée pendant laquelle l'image doit être affichée, en frame (sachant que la gba a une fréquence de 60 image/s). Le premier bit (U) correspond au split horizontal. 0 = pas de split ; 1 = split. Le second bit (V) correspond au split vertical. 0 = pas de split ; 1 = split. Remarque : 1 - Si aucun split n'est à appliquer contentez vous de mettre le nombre de frame directement en hexa, pas besoin de passer par le binaire. 2 - Le nombre maximum de frame est #3F (63), donc si vous voulez que votre image reste affichée plus longtemps il faudra faire plusieurs étapes avec la même image à la suite.La première étape de mon animation sera la première image de la liste (donc indice 0), et sera affichée pendant 10 frames, sans split vertical ni horizontal. Elle sera donc codée comme suit :
`00 00 0A 00` Il me suffit alors de mettre le code de chaque étape à la suite et de finir par #FFFF pour avoir mon animation, on aura quelque chose sous la forme : `XX 00 YY 00 XX 00 YY 00 XX 00 YY 00 XX 00 YY 00 ... XX 00 YY 00 XX 00 YY 00 FF FF`Pour moi ce sera :
`00 00 0A 00 01 00 0A 00 ... 08 00 0A 00 09 00 10 00 04 00 CF 00 FF FF` Et voilà, notre animation est terminée. Si vous avez gardé les dimensions par défaut, vous pouvez déjà admirer votre création. Pour les autres ça continue, mais rassurez-vous, c'est presque fini.Les dimensions
Les images en 1616 c'est gentil, mais à part de simples "émotes" ça ne permet pas de faire grand chose, mais il est possible d'augmenter ces dimensions pour avoir du 3232 ou encore du 64*64. Mais attention, il y a une contrainte très importante, toutes les images doivent avoir la même dimension, sans exception.Les dimensions de l'image à afficher
| Version | Offset |
|---|---|
| Rouge Feu | #3C161F |
| Vert Feuille | #3C145B |
| Rubis | #3A215B |
| Saphir | #3A1FA3 |
| Émeraude | #55566B |
La quantité de données à mettre en mémoire
En fait, vous n'aurez ici plus rien à modifier, vous avez donc fini ce tuto. Mais j'estime qu'une explication sur ce point pouvait vous être utile pour mieux comprendre certains points (pas uniquement en rapport avec ce tuto). Le titre peut vous paraître flou, mais en fait vous avez sans le savoir déjà dit au jeu quelle quantité de données mettre en mémoire, et oui c'était dans la partie sur comment créer sa liste, je vous avais dit que YY YY dépendait des dimensions de l'image sans donner plus de détails. Et bien ce YY YY (en little ediant) correspond à la quantité de données mise en mémoire. Et plus précisément la quantité d'octet à mettre en mémoire. Par exemple pour une image en 1616 : 1616 = 256 pixels, mais comme chaque octets code 2 pixels on divise par 2, soit 256 / 2 = 128 = #40. En théorie, un nombre YY YY très grand donnerait toujours le bon résultat visuel car suffisamment de données seraient en mémoire. Mais la mémoire est limitée donc on risque d’empiéter sur d'autres données en mémoire (et c'est ce qui arrive si YY YY est trop grand). Vous pouvez essayer de faire varier YY YY et d'observer ce qui se passe en mémoire avec VBA (Tool->map) pour mieux comprendre ce que je tente d’expliquer.Quelques exemples d'utilisation
Avant de vous quitter, voici quelques exemples d'utilisation possibles de ces "émotes" offrant des possibilités scénaristes vraiment sympas : - Voir le rêve d'un personnage. - Illustrer les propos d'un personnage avec une petite animation. - Faire parler les personnages à travers de petites bulles (Comme volucité dans N/B) Une petite vidéo de ce que j'ai pu obtenir sans trop d'effort :Pour toutes questions ou suggestions, dirigez-vous vers le topic dédié sur le forum.
Par Unifag

