Avec la sortie de Pokemon XY on voit arriver un nouveau type, le type Fée. Il serait donc bien de pouvoir l'ajouter sur nos versions GBA, ou tout simplement ajouter de nouveaux types imaginés par vous-même, la limite théorique étant de 232 nouveaux types possibles, mais ça n'aurait aucun sens d'en ajouter autant. Et bien grâce à ce tuto, vous allez pouvoir le faire. Regardez-moi ce Grodoudou de type Fée :
Remarque : Les offsets donnés dans ce tuto sont valables uniquement pour rouge feu, je n'ai pas cherché les offsets pour les autres versions, à vous de les chercher, mais je ne suis même pas sûr que pour RSE le fonctionnement soit strictement le même.
Remarque : Les nombres précédés d'un '0x' sont en hexadécimal, sinon ils sont en décimal.
Une bonne maîtrise de l'hexadécimal est requise pour ce tuto. Et soyez bien vigilants, on a vite fait de se tromper lors d'un calcul ou d'oublier de repointer.
NSE/NSE2 pour ajouter l'icône du type.
N'oubliez pas de repointer, pour ça je vous fais confiance.
Remarque : La palette est la même pour tous les icônes, faites donc attention si vous la modifiez.
Remarque : Si vous êtes à cheval sur la place disponible, vous pouvez retirer l'image d'origine, elle n'a plus d'utilité.
Cette table est définie dans l'ordre des numéros des types (pour connaître les numéros des types existants c'est ici), il faut donc faire attention à l'ordre dans lequel vous ajoutez vos nouveaux types. Et comme vous pouvez le constater, il y a plus d'informations dans cette table qu'il n'y a de types, c'est parce qu'il y a les informations nécessaires pour chaque élément de l'image au-dessus, d'où l'importance de ne pas modifier la partie originale de la table pour ne pas créer de décalages. De plus, cela sous-entend que vos nouveaux types auront au minimum pour numéro 0x17 alors que les types de base vont de 0x0 à 0x11, mais ça ne posera aucun soucis.
On va maintenant ajouter notre type à la fin de cette table (donc si vous avez bien suivi, ce sera le type numéro 0x17). Les deux premiers octets seront toujours 20 0C, les deux octets suivants, une fois inversés, correspondent au nombre de blocs (carré de 8x8) avant que commence l'icône. Pour trouver ce nombre de blocs, vous pouvez soit compter comme un imbécile ou alors réfléchir un peu et obtenir le résultat par le calcul sachant qu'il y a plusieurs façons de calculer ça. Mais un exemple est toujours le bienvenu, imaginons que j'ai inséré l'image à l'offset 0x750000 et que mon icône débute à l'offset 752000, voila le calcul que je peux faire :
0x752000-0x750000 = 0x2000
0x2000/0x20 = 0x0100 il faut diviser par 0x20 (32 en décimal) car 1 bloc prend 32 octets.
Maintenant j'inverse et j'obtiens 0x0001, à la suite de ma table je rajoute donc 0x200C0001.
N'oubliez pas de repointer bien entendu, pour rappel l'ancienne table se trouvait à l'offset 0x44C3B4.
Remarque : Pour ceux qui se demandent à quoi correspond 0x200C et bien il s'agit de la taille (en octets) de l'icône, voila pourquoi il ne faut pas mettre autre chose.
Remarque : Encore une fois, ceux qui sont à cheval sur la place peuvent supprimer la table d'origine.
Chaque rapport entre types est défini sur 3 octets, le premier octet est le type du move attaquant, le deuxième octet est le type du Pokémon attaqué, et le 3éme correspond à l'efficacité (05 = Pas très efficace, et 14 = très efficace), prenons par exemple le premier rapport, il s'agit de 00 05 05 00 est le type normal, 05 est le type roche, et le dernier 05 est l'efficacité.
Les attaques de type Normal sont donc peu efficaces contre le type Roche.
Remarque : Vous pouvez mettre des efficacités personnalisées, 05 correspond à une multiplication par 0,5, 06 correspond à 0,6, 0D à 1,3, etc.
Vous avez désormais ce qu'il vous faut pour ajouter les rapports de votre nouveau type à la suite de cette table, dans mon cas je vais rajouter que les attaques de mon nouveau type (fée) sont très efficaces contre les dragons, j'ajoute donc 17 11 14. En réalité je ne vous avais pas donné la table complète pour éviter de vous embrouiller, voila la fin de la table qu'il faut rajouter à la suite de ce que vous venez d'ajouter :
Et comme toujours il ne faut pas oublier de repointer, pour rappel avant la table se trouvait à l'offset 0x24945C, et faire attention car ce pointeur est présent 9 fois, il faut donc tous les remplacer.

Remarque : Les offsets donnés dans ce tuto sont valables uniquement pour rouge feu, je n'ai pas cherché les offsets pour les autres versions, à vous de les chercher, mais je ne suis même pas sûr que pour RSE le fonctionnement soit strictement le même.
Remarque : Les nombres précédés d'un '0x' sont en hexadécimal, sinon ils sont en décimal.
Une bonne maîtrise de l'hexadécimal est requise pour ce tuto. Et soyez bien vigilants, on a vite fait de se tromper lors d'un calcul ou d'oublier de repointer.
Les outils nécessaires
Votre éditeur Hexadécimal qui sera notre principal outil.NSE/NSE2 pour ajouter l'icône du type.
Insérer l'icône du type
Avec NSE, ouvrez l'image qui se trouve à l'offset 0xE95D30 (palette à l'offset 0xE95D10, largeur conseillée 128) et à la fin de cette image, ajoutez votre nouvelle icône. Je dis bien à la fin de l'image, après "effet" donc. Moi j'obtiens ceci :
N'oubliez pas de repointer, pour ça je vous fais confiance.
Remarque : La palette est la même pour tous les icônes, faites donc attention si vous la modifiez.
Remarque : Si vous êtes à cheval sur la place disponible, vous pouvez retirer l'image d'origine, elle n'a plus d'utilité.
Agrandir la table qui indique où se trouve l'icône
Cette table est un peu différente de ce qu'on peut voir d'habitude. Pour commencer voila la table d'origine (elle se trouve à l'offset 0x44C3B4).0C 0C 00 00 20 0C 20 00 20 0C 64 00 20 0C 60 00<br />
20 0C 80 00 20 0C 48 00 20 0C 44 00 20 0C 6C 00<br />
20 0C 68 00 20 0C 88 00 20 0C A4 00 20 0C 24 00<br />
20 0C 28 00 20 0C 2C 00 20 0C 40 00 20 0C 84 00<br />
20 0C 4C 00 20 0C A0 00 20 0C 8C 00 28 0C A8 00<br />
28 0C C0 00 28 0C C8 00 28 0C E0 00 28 0C E8 00
Commencez par l'insérer dans votre rom-hack, en vous assurant qu'il y ait un peu de place libre à la suite (4 octets par nouveau type), et surtout ne modifiez pas la partie originale de la table.Cette table est définie dans l'ordre des numéros des types (pour connaître les numéros des types existants c'est ici), il faut donc faire attention à l'ordre dans lequel vous ajoutez vos nouveaux types. Et comme vous pouvez le constater, il y a plus d'informations dans cette table qu'il n'y a de types, c'est parce qu'il y a les informations nécessaires pour chaque élément de l'image au-dessus, d'où l'importance de ne pas modifier la partie originale de la table pour ne pas créer de décalages. De plus, cela sous-entend que vos nouveaux types auront au minimum pour numéro 0x17 alors que les types de base vont de 0x0 à 0x11, mais ça ne posera aucun soucis.
On va maintenant ajouter notre type à la fin de cette table (donc si vous avez bien suivi, ce sera le type numéro 0x17). Les deux premiers octets seront toujours 20 0C, les deux octets suivants, une fois inversés, correspondent au nombre de blocs (carré de 8x8) avant que commence l'icône. Pour trouver ce nombre de blocs, vous pouvez soit compter comme un imbécile ou alors réfléchir un peu et obtenir le résultat par le calcul sachant qu'il y a plusieurs façons de calculer ça. Mais un exemple est toujours le bienvenu, imaginons que j'ai inséré l'image à l'offset 0x750000 et que mon icône débute à l'offset 752000, voila le calcul que je peux faire :
0x752000-0x750000 = 0x2000
0x2000/0x20 = 0x0100 il faut diviser par 0x20 (32 en décimal) car 1 bloc prend 32 octets.
Maintenant j'inverse et j'obtiens 0x0001, à la suite de ma table je rajoute donc 0x200C0001.
N'oubliez pas de repointer bien entendu, pour rappel l'ancienne table se trouvait à l'offset 0x44C3B4.
Remarque : Pour ceux qui se demandent à quoi correspond 0x200C et bien il s'agit de la taille (en octets) de l'icône, voila pourquoi il ne faut pas mettre autre chose.
Remarque : Encore une fois, ceux qui sont à cheval sur la place peuvent supprimer la table d'origine.
Compléter la table des résistances/faiblesses
Cette table est celle qui définit les faiblesses et résistances entre les types, il faut donc la compléter pour y ajouter notre type. La voici (elle se trouve à l'offset 0x24945C) :00 05 05 00 08 05 0A 0A 05 0A 0B 05 0A 0C 14<br />
0A 0F 14 0A 06 14 0A 05 05 0A 10 05 0A 08 14<br />
0B 0A 14 0B 0B 05 0B 0C 05 0B 04 14 0B 05 14<br />
0B 10 05 0D 0B 14 0D 0D 05 0D 0C 05 0D 04 00<br />
0D 02 14 0D 10 05 0C 0A 05 0C 0B 14 0C 0C 05<br />
0C 03 05 0C 04 14 0C 02 05 0C 06 05 0C 05 14<br />
0C 10 05 0C 08 05 0F 0B 05 0F 0C 14 0F 0F 05<br />
0F 04 14 0F 02 14 0F 10 14 0F 08 05 0F 0A 05<br />
01 00 14 01 0F 14 01 03 05 01 02 05 01 0E 05<br />
01 06 05 01 05 14 01 11 14 01 08 14 03 0C 14<br />
03 03 05 03 04 05 03 05 05 03 07 05 03 08 00<br />
04 0A 14 04 0D 14 04 0C 05 04 03 14 04 02 00<br />
04 06 05 04 05 14 04 08 14 02 0D 05 02 0C 14<br />
02 01 14 02 06 14 02 05 05 02 08 05 0E 01 14<br />
0E 03 14 0E 0E 05 0E 11 00 0E 08 05 06 0A 05<br />
06 0C 14 06 01 05 06 03 05 06 02 05 06 0E 14<br />
06 07 05 06 11 14 06 08 05 05 0A 14 05 0F 14<br />
05 01 05 05 04 05 05 02 14 05 06 14 05 08 05<br />
07 00 00 07 0E 14 07 11 05 07 08 05 07 07 14<br />
10 10 14 10 08 05 11 01 05 11 0E 14 11 07 14<br />
11 11 05 11 08 05 08 0A 05 08 0B 05 08 0D 05<br />
08 0F 14 08 05 14 08 08 05
Encore une fois, elle doit être insérée là à un emplacement libre. Mais avant de la compléter, il va falloir la comprendre :Chaque rapport entre types est défini sur 3 octets, le premier octet est le type du move attaquant, le deuxième octet est le type du Pokémon attaqué, et le 3éme correspond à l'efficacité (05 = Pas très efficace, et 14 = très efficace), prenons par exemple le premier rapport, il s'agit de 00 05 05 00 est le type normal, 05 est le type roche, et le dernier 05 est l'efficacité.
Les attaques de type Normal sont donc peu efficaces contre le type Roche.
Remarque : Vous pouvez mettre des efficacités personnalisées, 05 correspond à une multiplication par 0,5, 06 correspond à 0,6, 0D à 1,3, etc.
Vous avez désormais ce qu'il vous faut pour ajouter les rapports de votre nouveau type à la suite de cette table, dans mon cas je vais rajouter que les attaques de mon nouveau type (fée) sont très efficaces contre les dragons, j'ajoute donc 17 11 14. En réalité je ne vous avais pas donné la table complète pour éviter de vous embrouiller, voila la fin de la table qu'il faut rajouter à la suite de ce que vous venez d'ajouter :
FE FE 00 00 07 00 01 07 00 FF FF 00
Le FE FE 00 indique la fin de la 1ere partie de la table, et le FF FF 00 indique la fin de la deuxième partie. Cette deuxième partis est utilisée uniquement pour les cas où un type est totalement inefficace (attaque normal contre spectre par exemple), si vous voulez ajouter ce genre de rapport, c'est donc ici qu'il faut l'ajouter.Et comme toujours il ne faut pas oublier de repointer, pour rappel avant la table se trouvait à l'offset 0x24945C, et faire attention car ce pointeur est présent 9 fois, il faut donc tous les remplacer.
Ajouter le nom
A partir de là, votre type est déjà en partie fonctionnel, vous aurez en revanche des soucis lors de l'affichage du type sous forme de texte, pour corriger cela insérer ceci (à l'origine ça se trouvait à l'offset 0x2495AC) :C8 C9 CC C7 BB C6 FF<br />
BD C9 C7 BC BB CE FF<br />
D0 C9 C6 FF 00 00 00<br />
CA C9 C3 CD C9 C8 FF<br />
CD C9 C6 FF 00 00 00<br />
CC C9 BD C2 BF FF 00<br />
C3 C8 CD BF BD CE FF<br />
CD CA BF BD CE CC FF<br />
BB BD C3 BF CC FF 00<br />
AC AC AC FF 00 00 00<br />
C0 BF CF FF 00 00 00<br />
BF BB CF FF 00 00 00<br />
CA C6 BB C8 CE BF FF<br />
BF C6 BF BD CE CC FF<br />
CA CD D3 FF 00 00 00<br />
C1 C6 BB BD BF FF 00<br />
BE CC BB C1 C9 C8 FF<br />
CE BF C8 BF BC CC FF
Pour chaque nom il y a quelques règles à respecter: Le nom de votre type doit se terminer par FF pour indiquer où il se termine, et autre chose de très important il doit absolument avoir une taille de 7 octets (FF compris, donc 6 caractères maximum), ni plus, ni moins, mais on peut mettre des 00 après le FF pour obtenir une taille de 7 octets. Par exemple pour le mot FEE qui donne C0BFBF en hexadécimal je devrai insérer :C0 BF BF FF 00 00 00
Voila une aide pour connaitre la valeur hexadécimale de chaque lettre :BB=A<br />
BC="B<br" />
BD="C<br" />
BE="D<br" />
BF="E<br" />
C0="F<br" />
C1="G<br" />
C2="H<br" />
C3="I<br" />
C4="J<br" />
C5="K<br" />
C6="L<br" />
C7="M<br" />
C8="N<br" />
C9="O<br" />
CA="P<br" />
CB="Q<br" />
CC="R<br" />
CD="S<br" />
CE="T<br" />
CF="U<br" />
D0="V<br" />
D1="W<br" />
D2="X<br" />
D3="Y<br" />
D4="Z<br" />
DB="a<br" />
DC="b<br" />
DD="c<br" />
DE="d<br" />
DF="e<br" />
E0="f<br" />
E1="g<br" />
E2="h<br" />
E3="i<br" />
E4="j<br" />
E5="k<br" />
E6="l<br" />
E7="m<br" />
E8="n<br" />
E9="o<br" />
EA="p<br" />
EB="q<br" />
EC="r<br" />
ED="s<br" />
EE="t<br" />
EF="u<br" />
F0="v<br" />
F1="w<br" />
F2="x<br" />
F3="y<br" />
F4="z</code">
On doit donc ajouter le nom de notre type, mais pas directement à la suite des autres, effectivement pour aller chercher le nom du type le jeu se base sur son numéro, hors notre type a au minimum le numéro 0x17, il faut donc l'insérer quelques octets plus loin. Si par exemple j'ai inséré l'ensemble des noms à l'offset 0x7525B8 et que mon type est le numéro 0x17 voila le calcul à faire :<br />
0x7525B8 + (0x17*0x7) = 0x752659<br />
Je vais donc insérer mon nouveaux nom à l'offset 0x752659.
Et voila, votre nouveau type est correctement inséré, par contre vous serez obligé de passer par l'hexadécimal pour définir un Pokémon ou une attaque possédant votre nouveau type.
<p style="text-align:center"><a href="/rom-pokemon/rom-hacking" target="_blank">Pour toutes questions ou suggestions, dirigez-vous vers le forum.</a></p>
<p style="text-align:right">Par <strong>Unifag</strong></p>

