Ajouter un nouveau type
Ajoutez vos propres types à Pokémon Rouge Feu !
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 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](http://www.pokecommunity.com/showthread.php?t=205687)/[NSE2](http://www.pokecommunity.com/showthread.php?t=253701) 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é.
20 0C 80 00 20 0C 48 00 20 0C 44 00 20 0C 6C 00
20 0C 68 00 20 0C 88 00 20 0C A4 00 20 0C 24 00
20 0C 28 00 20 0C 2C 00 20 0C 40 00 20 0C 84 00
20 0C 4C 00 20 0C A0 00 20 0C 8C 00 28 0C A8 00
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](http://bulbapedia.bulbagarden.net/wiki/Type_chart_data_structure_in_Generation_III)), 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.
0A 0F 14 0A 06 14 0A 05 05 0A 10 05 0A 08 14
0B 0A 14 0B 0B 05 0B 0C 05 0B 04 14 0B 05 14
0B 10 05 0D 0B 14 0D 0D 05 0D 0C 05 0D 04 00
0D 02 14 0D 10 05 0C 0A 05 0C 0B 14 0C 0C 05
0C 03 05 0C 04 14 0C 02 05 0C 06 05 0C 05 14
0C 10 05 0C 08 05 0F 0B 05 0F 0C 14 0F 0F 05
0F 04 14 0F 02 14 0F 10 14 0F 08 05 0F 0A 05
01 00 14 01 0F 14 01 03 05 01 02 05 01 0E 05
01 06 05 01 05 14 01 11 14 01 08 14 03 0C 14
03 03 05 03 04 05 03 05 05 03 07 05 03 08 00
04 0A 14 04 0D 14 04 0C 05 04 03 14 04 02 00
04 06 05 04 05 14 04 08 14 02 0D 05 02 0C 14
02 01 14 02 06 14 02 05 05 02 08 05 0E 01 14
0E 03 14 0E 0E 05 0E 11 00 0E 08 05 06 0A 05
06 0C 14 06 01 05 06 03 05 06 02 05 06 0E 14
06 07 05 06 11 14 06 08 05 05 0A 14 05 0F 14
05 01 05 05 04 05 05 02 14 05 06 14 05 08 05
07 00 00 07 0E 14 07 11 05 07 08 05 07 07 14
10 10 14 10 08 05 11 01 05 11 0E 14 11 07 14
11 11 05 11 08 05 08 0A 05 08 0B 05 08 0D 05
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.
BD C9 C7 BC BB CE FF
D0 C9 C6 FF 00 00 00
CA C9 C3 CD C9 C8 FF
CD C9 C6 FF 00 00 00
CC C9 BD C2 BF FF 00
C3 C8 CD BF BD CE FF
CD CA BF BD CE CC FF
BB BD C3 BF CC FF 00
AC AC AC FF 00 00 00
C0 BF CF FF 00 00 00
BF BB CF FF 00 00 00
CA C6 BB C8 CE BF FF
BF C6 BF BD CE CC FF
CA CD D3 FF 00 00 00
C1 C6 BB BD BF FF 00
BE CC BB C1 C9 C8 FF
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
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 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 :
0x7525B8 + (0x17*0x7) = 0x752659
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.

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](http://mh-nexus.de/en/hxd/) qui sera notre principal outil.[NSE](http://www.pokecommunity.com/showthread.php?t=205687)/[NSE2](http://www.pokecommunity.com/showthread.php?t=253701) 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 0020 0C 80 00 20 0C 48 00 20 0C 44 00 20 0C 6C 00
20 0C 68 00 20 0C 88 00 20 0C A4 00 20 0C 24 00
20 0C 28 00 20 0C 2C 00 20 0C 40 00 20 0C 84 00
20 0C 4C 00 20 0C A0 00 20 0C 8C 00 28 0C A8 00
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](http://bulbapedia.bulbagarden.net/wiki/Type_chart_data_structure_in_Generation_III)), 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 140A 0F 14 0A 06 14 0A 05 05 0A 10 05 0A 08 14
0B 0A 14 0B 0B 05 0B 0C 05 0B 04 14 0B 05 14
0B 10 05 0D 0B 14 0D 0D 05 0D 0C 05 0D 04 00
0D 02 14 0D 10 05 0C 0A 05 0C 0B 14 0C 0C 05
0C 03 05 0C 04 14 0C 02 05 0C 06 05 0C 05 14
0C 10 05 0C 08 05 0F 0B 05 0F 0C 14 0F 0F 05
0F 04 14 0F 02 14 0F 10 14 0F 08 05 0F 0A 05
01 00 14 01 0F 14 01 03 05 01 02 05 01 0E 05
01 06 05 01 05 14 01 11 14 01 08 14 03 0C 14
03 03 05 03 04 05 03 05 05 03 07 05 03 08 00
04 0A 14 04 0D 14 04 0C 05 04 03 14 04 02 00
04 06 05 04 05 14 04 08 14 02 0D 05 02 0C 14
02 01 14 02 06 14 02 05 05 02 08 05 0E 01 14
0E 03 14 0E 0E 05 0E 11 00 0E 08 05 06 0A 05
06 0C 14 06 01 05 06 03 05 06 02 05 06 0E 14
06 07 05 06 11 14 06 08 05 05 0A 14 05 0F 14
05 01 05 05 04 05 05 02 14 05 06 14 05 08 05
07 00 00 07 0E 14 07 11 05 07 08 05 07 07 14
10 10 14 10 08 05 11 01 05 11 0E 14 11 07 14
11 11 05 11 08 05 08 0A 05 08 0B 05 08 0D 05
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 FFBD C9 C7 BC BB CE FF
D0 C9 C6 FF 00 00 00
CA C9 C3 CD C9 C8 FF
CD C9 C6 FF 00 00 00
CC C9 BD C2 BF FF 00
C3 C8 CD BF BD CE FF
CD CA BF BD CE CC FF
BB BD C3 BF CC FF 00
AC AC AC FF 00 00 00
C0 BF CF FF 00 00 00
BF BB CF FF 00 00 00
CA C6 BB C8 CE BF FF
BF C6 BF BD CE CC FF
CA CD D3 FF 00 00 00
C1 C6 BB BD BF FF 00
BE CC BB C1 C9 C8 FF
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
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 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 :
0x7525B8 + (0x17*0x7) = 0x752659
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.
Pour toutes questions ou suggestions, dirigez-vous vers le forum.
Par Unifag

