Rom Hack & Fan Game

Ajouter un nouveau type

Avec la sortie de Pokemon XY on vois 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 imaginer 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 :

Un Grodoudou de type Fée sur GBA

En revanche tous les types ajoutés seront par défaut physique, si vous voulez qu'il puisse être spécial, il faudra ajouter le split phys/spec.

Remarque : Les offsets donné dans ce tuto sont valable uniquement pour rouge feu, je n'ai pas cherchez les offsets pour les autres versions, à vous de les chercher, mais je ne suis même pas sur que pour rse le fonctionnement sois strictement le même.
Remarque : Les nombres précédé d'un '0x' sont en hexadécimal, sinon il sont en décimal.
Une bonne maitrise de l'hexadécimal est requises pour ce tuto. Et soyez bien vigilent, on à vite fais de se tromper lors d'un calcul ou d'oublier de repointer.

Les outils nécessaire

Votre éditeur Hexadécimal qui sera notre principal outil.
NSE/NSE2 pour ajouter l'icone du type.

Insérer l'icone du type

Avec NSE ouvrez l'image qui se trouve à l'offset 0xE95D30 (palette à l'offset 0xE95D10, largeur conseillez 128) et à la fin de cette image ajouter votre nouvelle icon, je dis bien à la fin de l'image, après "effet" donc. Moi j’obtiens ceci :

Spritesheet des types

Il faut ensuite insérer cette image à un emplacement libre, pour cela faite file->insert->save image to et non file->save comme vous avez l'habitude de le faire.
N'oubliez pas de repointez, pour ça je vous fais confiance.

Remarque : La palette est la même pour tous les icons, faite 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'icone

Cette table est un peu différente de ce qu'on peut voir d'habitude. Pour commencez 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
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 est un peu de place libre à la suite (4 octet par nouveau type), et surtout ne modifiez pas la partie orignal de la table.
Cette table est défini dans d’ordres des numéro des type (pour connaitre les numéro des types existant 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'information dans cette table qu'il n'y a de types, c'est parce-qu'il y a les informations nécessaire pour chaque élément de l'image au dessus, d'où l'importance de ne pas modifiez la partie original de la table pour ne pas crée de décalages. De plus cela sous entend que vos nouveaux type 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 suivant, une fois inversés, correspondent au nombre de blocs (carré de 8x8) avant que commence l'icone. Pour trouvez 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çon de calculer ça. Mais un exemple est toujours le bienvenu, imaginons que j'ai insérer l'image à l'offset 0x750000 et que mon icone débute à l'offset 752000, voila le calcul que je peut 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 trouver à l'offset 0x44C3B4.

Remarque : Pour ceux qui se demande à quoi correspond 0x200C et bien il s'agit de la taille (en octets) de l'icone, 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éfini les faiblesse et résistances entrent 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
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 un doit être inséré 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, 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 attaque de type Normal son donc peu efficace contre le type Roche.

Remarque : Vous pouvez mettre des efficacité personnaliser, 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 rapport de votre nouveaux type à la suite de cette table, dans mon cas je vais rajouter que les attaques de mon nouveau type (fée) sont très efficace contre les dragons, j'ajoute donc 17 11 14. En réalité je ne vous avez pas donné la table complète pour éviter de vous embrouillez, 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é uniquement pour les cas ou 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 trouvais à 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 la 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
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 à quelque règle à 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écimal de chaque lettre :

BB=A
BC=B
BD=C
BE=D
BF=E
C0=F
C1=G
C2=H
C3=I
C4=J
C5=K
C6=L
C7=M
C8=N
C9=O
CA=P
CB=Q
CC=R
CD=S
CE=T
CF=U
D0=V
D1=W
D2=X
D3=Y
D4=Z
DB=a
DC=b
DD=c
DE=d
DF=e
E0=f
E1=g
E2=h
E3=i
E4=j
E5=k
E6=l
E7=m
E8=n
E9=o
EA=p
EB=q
EC=r
ED=s
EE=t
EF=u
F0=v
F1=w
F2=x
F3=y
F4=z

On doit donc ajouter le nom de notre type, mais pas directement à la suite des autres, effectivement pour aller cherchez le nom du type le jeu se base sur sont numéro, hors notre type à 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érer, 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

Par Loris