[Gba - Tuto] Ajouter de nouveaux types

Pages: [1]

Unifag

  • Membre
  • 883 posts
31 juillet 2013, 15:17
Ajouter de nouveaux types

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 tous simplement ajouter de nouveaux types imaginer par vous même, la limite théorique étant de 232 nouveaux type possible, mais ça n'aurais 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:
Spoiler
En revanche tous les types ajouter seront par défaut physique, si vous voulez qu'il puissent être spécial il faudra ajouter le split phys/spec. (j'avais adapté le patch US pour ce split mais je ne suis pas sur qu'il fonctionne à 100%, donc pour le moment je vous conseil de faire sans, je referais un autre patch plus tard).

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 principale outil.
NSE/NSE2 pour ajouter l'icon du type.

Insérer l'icon 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:
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'icon
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 le-quelle vous ajoutez vos nouveaux types. Et comme vous pouvez le constater il y à plus d'information dans cette table qu'il n'y à de types, c'est parce-qu'il y à 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 premier octet seront toujours 20 0C, les deux octets suivant, une fois inverser, correspondent au nombre de blocs (carré de 8x8) avant que commence l'icon. 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 à 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 icon 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 repointé bien entendu, pour rappel l'ancienne table se trouver à l'offset 0x44C3B4.

Remarque: Pour ce qui se demande à quoi correspond 0x200C et bien il s'agit de la taille (en octets) de l'icon, voila pourquoi il ne faut pas mettre autre chose.
Remarque: Encore une fois ceux qui sont à cheval sur la place peuvent supprimé la table d'origine.

Compléter la table des résistances/faiblesse

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 dois insérer la à 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 00Le 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 corrigé cela insérer ceci (à l'origine ça se trouvais à 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 devrait insérer:
C0 BF BF FF 00 00 00Voila 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 quelque octets plus loin. Si par exemple j'ai insérer 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 passé par l'hexadécimal pour définir un pokémon ou une attaque possédant votre nouveau type.
« Modifié: 31 juillet 2013, 16:42 par Unifag »

Megadrifter

  • Membre
  • 6425 posts
31 juillet 2013, 15:22
Encore une fois de l'excellent travail. Dès qu'on a un site R-H, je le code pour l'ajouter aux autres.

hremeraude

  • Membre
  • 11394 posts
31 juillet 2013, 16:11
Devoir passer par l'hexa pour rendre une attaque de ce type je trouve ça dommage mais bon x)
J'essayerais de voir pour emeraude de mon côté, mais le principe n'est pas du tout le même, sur RSE c'est une image visible par Unlz-GBA et rien que de trouver la bonne palette c'est la mission xD, mais je pense qu'il faut juste augmenter la taille de l'image de base et mettre le type après il faut voir :d

Unifag

  • Membre
  • 883 posts
31 juillet 2013, 16:19
Il est possible de coder de nouveaux outils pour qu'ils fonctionnent avec autant de types que possible mais c'est pas moi qui vais m'amuser à refaire ça dans l'immédiat.
Si trouver la palette est un obstacle pour toi tu sais que j'ai fais un tuto la dessus?
Et je peut pas m'avancer sur les différences entres rse et rf/vf pour les types, j'ai absolument par regarder. Ce qui est sur c'est qu'il faudra déplacé et complété plusieurs tables comme je l'ai fais la (pour la table des res le principe doit être le même), la difficulté pour toi étant de trouver ces tables. Après est-ce que le jeu fais des vérification pour savoir si le numéro du type est correct je ne sais pas, pour rf/vf ce n'était pas le cas mais pour rse aucune idée. En tous cas bonne chance pour tes recherches.

hremeraude

  • Membre
  • 11394 posts
31 juillet 2013, 16:23
Ouais je sais qu'il y a un tuto je regarderais quand j'aurais le temps, mais en théorie si je prend l'image, que je l’agrandi et que je rajoute l'image du type fée par exemple ça pourrait fonctionner non ?
Bon après faut coder mais voilà
« Modifié: 31 juillet 2013, 16:29 par hremeraude »

Unifag

  • Membre
  • 883 posts
31 juillet 2013, 16:33
Peut être, peut être pas. Je le redit mais ça dépend de si le jeu fais une vérification pour savoir si c'est un type valide, et aussi si il se contente de multiplier le numéro du type par 0xC20 (taille d'un icon en octets) ou alors si il se sert d'une table (comme pour rf/vf) pour savoir où se trouve exactement l'icon. Mais de toutes façon rajouter simplement l'image est insuffisant, il te faudra aussi déplacé et complété la table des résistances et les noms.

hremeraude

  • Membre
  • 11394 posts
31 juillet 2013, 16:35
Oui, ça je sais ^^
Quand j'aurais le temps je regarderais et je dirais le résultat, ça va assez vite de savoir si le jeu se sert d'une table ou pas ^^

yago58

  • Invité
31 juillet 2013, 16:38
Juste pour le titre  c'est "[tuto GBA]...."

Sinon gg comme d'hab', toujours aussi excellent Uni'

Unifag

  • Membre
  • 883 posts
31 juillet 2013, 16:42
Si ça déclenche des bug d'affichage ou alors que c'est un trucs tous moche qui se charge à la place c'est surement qu'il y à une table, si c'est l'icon d'un autre type qui se charge alors c'est qu'il y à une vérification pour savoir si le type est valide. Donc oui ça se sais vite, le plus compliqué pour toi va être de retrouver cette table si elle existe (perso je suis passé par l'asm pour comprendre comment c'était chargé), mais vu la disposition des icons sur l'image il y a peut de chance qu'il y est une table tkt.

Et pour toi yago j'ai rajouter tuto  ;D

hremeraude

  • Membre
  • 11394 posts
31 juillet 2013, 18:04
l'asm dépasse mes compétences x)

Gory

  • Membre
  • 10 posts
04 août 2013, 12:49
J'imagine que ce tuto n'est pas pour les débutants comme moi , rien qu'au début quand tu parles d'insérer le sprite , comment fais tu ? j'ai été dans file ouvrir un sprite et j'ai essayé de mettre mon type mais ils me disent que l'image est non indexées ou qu'il y a un problème avec l'alpha

Unifag

  • Membre
  • 883 posts
04 août 2013, 13:06
En effet il faut avoir déjà une certaine expérience, le minimum étant de savoir insérer un sprite et de savoir travaillé avec des valeurs héxadécimal (notamment les pointeurs).
Je crois pas qu'il y est de tuto pour apprendre à insérer un sprite (il y à bien un tuto pour le sprite des pokémon mais c'est différent), mais c'est en pratiquant que tu découvrira petit à petit les fonctionnalité que propose les différent logiciels et comment les exploité. Pour le moment il est clair que tu n'a pas le niveau pour insérer un nouveau type mais si tu t'attaque à des choses plus simple je suis sur qu'au bout d'un moment tu sera capable de comprendre ce tuto.
Si c'est les modifications graphique qui t’intéresse commence par modifié les sprites des pokémons, puis la map ou l'écran titre pour comprendre le principe des tileMap, etc Si tu t’intéresse plus aux scénario commence par apprendre à faire des scripts simple, puis tu complexifie la chose petit à petit, etc Bref tu ma compris je te conseil d'y aller progressivement, même si ton but pour le moment était d'ajouter un nouveau type il faut passé par les débuts, il y à pas de miracle.

Gory

  • Membre
  • 10 posts
04 août 2013, 13:08
Je le pensais aussi , merci pour ces conseils :)

MikaZ

  • Membre
  • 367 posts
08 juin 2017, 23:15
J'ajoute que les types des Pokémon sont défini juste après leurs stats ( dans un éditeur Héxadécimales ), il suffit juste de connaitre leurs statistiques de base de les convertir en Hexadécimal et de les chercher dans la rom ( attention l'ordre des statistiques est codé comme ceci PV/ATK/DEF/VIT/ATKSPE/DEFSPE)... une fois trouver les deux nombres qui suivent la zone surligner en bleu sont les types du Pokémon
« Modifié: 09 juin 2017, 08:31 par MikaZ »

yago58

  • Invité
09 juin 2017, 00:26
Déjà l'ordre que tu donnes est faux c'est pv/atk/def/vit/atkspe/defspe, de plus connaitre les valeurs hexa des type est essentielle.

MikaZ

  • Membre
  • 367 posts
09 juin 2017, 08:38
Normal: 00
Combat: 01
Vol: 02
Poison: 03
Sol: 04
Roche: 05
Insecte: 06
Spectre: 07
Acier: 08
???: 09
Feu: 0A
Eau: 0B
Plante: 0C
Electrik: 0D
Psy: 0E
Glace: 0F
Dragon:10
Ténèbres: 11

Vos types: 17 et plus

Mini Tuto pour éviter de galérer en hexadécimal  ;D

Besoin de :

- YAPE
- La ROM modifiée

Si vous ouvrez la ROM dans YAPE comme ça YAPE va afficher un message d'erreur , voici comment procéder.

La 1ère étape est de faire comprendre au logiciel qu'il n'y a pas seulement 17 types.
Si vous avez ajouter 1 type il y en aura 23 (car le type que l'on ajoute a pour valeur hexa 17 qui donne 23 en décimal)

Aller dans le dossier de YAPE et go ici : /data/common/romdata.ini
Ouvrez le .ini  et modifiez le nombre de la ligne MaxTypeVal par 23

C'est cool mais le type n’apparaît dans la liste déroulante quand on choisit un type pour un Pokémon
Go dans /data/fr/commonvals.ini
Dans la table des types, ajoutez à la fin "0x17 = Fee"(sans les guillemets)

Faites de même pour la version anglaise (le fichier est ici : /data/en-us/commonvals.ini)
PS: Le tpye Fée en anglais c'est Fairy au cas où...

Voilà j'espère que ça va aider et que y aura pas de problème, moi y a pas de soucis sur YAPE ça marche nikel.
« Modifié: 09 juin 2017, 09:50 par MikaZ »

PlacardD

  • Membre
  • 9 posts
19 novembre 2017, 21:15
Bonjour :)
Malgré quelques heures de recherche je ne parvins pas à trouver les offsets correspondants sur Vert Feuille, est-ce que quelqu'un pourrait me les donner où me donner une méthode qui me permettrait de trouver ces offsets de moi même ?
Merci d'avance ^^

EDIT : J'ai trouvé... j'avais oublié le Ctrl+F...
« Modifié: 20 novembre 2017, 09:29 par PlacardD »

Komivi

  • Membre
  • 8 posts
04 juillet 2018, 21:48
Bonsoir, je cherche l'offset de l'image de la table des icônes de types pour pokémon émeraude, pour les modifier, et possible celui de la palette qui va avec. Merci beaucoup

yushi56

  • Membre
  • 298 posts
05 juillet 2018, 05:23
Bonsoir, je cherche l'offset de l'image de la table des icônes de types pour pokémon émeraude, pour les modifier, et possible celui de la palette qui va avec. Merci beaucoup
http://www.pokemontrash.com/jeux-pokemon/trouver-offset-image-palette-gba.php
Tu trouveras surement ta réponse avec ce tuto

Komivi

  • Membre
  • 8 posts
08 juillet 2018, 23:27
Merci beaucoup !

Pages: [1]    En haut ↑