Cas spéciaux et astuces.

Pages: [1]

Unifag

  • Membre
  • 883 posts
13 mai 2013, 19:45
Ce sujet n'a pas pour vocation d'être un tuto, car pour moi un tuto à pour but d’être assez général pour que chacun l'adapte à sa situation. Il faut voir sa plutôt comme une explication d'un cas précis. Il est d'ailleurs possible que j'ajoute d'autres explication du genre si je trouve d'autre cas spéciaux. D'ailleurs si vous avez vous aussi une explication à donner sur quelque-chose n'hésitez pas à la poster ici, j'éditerais le premier post en conséquent, sa permettra de regrouper ce genre d’explication qui selon moi ne mérite pas un sujet à elle seul (mais ne vont pas non plus d'en aide en tous genre ou blabla des hackeurs).

La boite de texte en combat

Spoiler
Cette explication porte sur la modification de la boite de texte où s'affiche "Pickachu utilise tonnerre" en combat, car celle-ci ne peut pas être modifier comme n'importe quelle graphisme, mais ce n'est pas non plus très difficile. Et c'est d'ailleurs pour sa que très peu de hack-rom la modifie (aucune à ma connaissance mais ça à déjà du être fais).

Voila la boite de dialogue en question:
Spoiler
Remarque: Je vous conseille d'ouvrir votre rom avec un éditeur hexadécimal et de jeter un œil à l'image, et à ce qui se trouve juste après. L'image commence à l'offset #D00000 et se termine à l'offset #D004D4. Vous devriez aussi regarder à quoi elle ressemble avec NSE.

            Le problème de cette image

Le cas de cette boite de dialogue est un peu spécial puisqu'on ne peut pas repointer l'image. La raison est simple, en général il y à au moins 1 pointeur pour chaque élément(l'image,  la palette, etc) . Mais ici le pointeur est le même pour plusieurs données, donc pour aller cherchez la palette (et d'autres données qui se situe après la palette) le jeu se rend à l'offset indiqué par le pointeur et ajoute #4D4 (la taille de l'image), il faut donc toujours que la palette + les donnée suivante se trouve #4D4 octets après le pointeur, ce qui veut dire qu'on ne peut pas modifié la taille de l'image (sa taille, en octets, pas ses dimensions).
En plus de ça l'image est compressée, donc quand on la modifie il faudrait faire en sorte qu'elle ne prenne pas plus de place qu'avant, chose impossible avec les outils à notre disposition (je ne sais pas exactement pourquoi mais même sans modifié l'image elle prend trop de place une fois compressé par NSE/UnLzGBA, l'algorithme de compression ne doit pas être suffisamment optimisé).

            La solution

Mais en trichant un peu il est possible de modifier cette boite de dialogue. Si vous n'aviez pas remarquer il y à une série d'octets qui se répète (FF F0 01 ...), cela correspond à tout les pixels transparent que l'on peut voir avec NSE (enfin sur NSE ils apparaissent de la première couleur de la palette). L'astuce consiste à faire comme si on en avais pas besoin dans leurs intégralité car il n'ont à première vus pas de réel utilité à part remplir l'image.

Remarque: Si jamais c'est pixels que j'ai qualifié de bouche-troue avait vraiment une utilité il est possible que cela provoque des bug, mais pour le moment je n'en est pas remarqué.
Je vais bientôt recommencer une partie sur Rouge Feu, et j'en profiterais pour faire toute l'aventure avec cette modification, ce qui me permettra de vérifier que cette solution est viable et ne provoque aucun bug, auquel cas je vous en ferais part.


            La pratique

Pour commencer prenez 2 exemplaires de votre rom, un que j’appellerai "temporaire" et l'autre "final".
Ouvrez donc la rom "temporaire" avec NSE et rendez vous à l'offset #D00000.

Remarque: La palette se trouve à l'offset #D004DD. Mais ce n'est pas la peine de l'ouvrir avec NSE puisqu'elle à une forme spécial (avec des 00 tous les 8 octets, allez voir ici pour plus d'informations).
Pour modifier votre image et palette vous pouvez faire votre nouvelle palette à la place de celle du héro (celle chargé par défaut) dans la rom "temporaire", ça vous facilitera la tache, vous serez ensuite obligé de modifier manuellement la palette dans la rom "final".
Autre détaille important sur la palette, certaines couleurs de la palette servent à des éléments bien précis et il faut les prendre en compte: #1: texte, #6: ombre du texte.
Mais dite vous bien que tous les éléments qui apparaisse dans NSE utilise la même palette, il faut donc faire celle-ci en conséquent.


Débrouillez vous avec NSE pour modifié l'image et obtenir le résultât recherché, ce n'est pas la peine de toucher au tiles qui sont au milieu, ceux du haut suffisent. Moi j’obtiens sa:
Spoiler
Une fois que c'est fais, on va passer en mode avancé (Options->Advanced Mode). Et au moment de sauvegarder décochez la case "Auto-abort if data is too big". Ne changez pas l'offset, sa ne servirais à rien.

Remarque: Il est possible que le logiciel mette du temps à sauvegarder, vous donnant l'impression qu'il bug, mais ne vous inquiétez pas, c'est normal. Il arrive parfois qu'il bug réellement, mais si vous ouvrez votre rom avec un éditeur hexadécimal vous verrez que les modifications ont été appliqué.

A partir de la plus besoin de NSE, fermer le et ouvrez vos deux roms, "temporaire" et "final", avec votre éditeur hexadécimal.

Dans votre rom "temporaire", rendez vous à l'offset #D00000 et sélectionnez #4D4 octets (donc de #D00000 à #D004D4), puis copiez les.
Rendez vous maintenant à l'offset #D00000 de votre rom clean et faite coller.

C'est terminée, vous pouvez admirez le résultat. Voici ce que j'ai pu obtenir:
Spoiler

Utiliser trois frames pour chaque pokeball

Spoiler
Cette fois je vais vous donner une petite astuce pour pouvoir utiliser 3 frames pour chaque pokéball. La plus part pokéballs utilise une image commune pour la 3eme frame, ce qui rend la modification assez délicate car il faut faire attention à ce que cette image commune soit en accord avec toute les balls qui l'utilise. Mais nous on voudrai que chaque balls puissent avoir 3 frames qui leur sont unique.

            La frame commune
Dans un premier temps je vais vous expliquer le problème un peu plus clairement, car je comprend que vous ne voyait pas de quoi je parle.
Pour çà j'ai coller toute les balls à la suite:
Spoiler
On remarque que certaines on une frame de plus que les autres, et bien c'est parce-que les autres utilisent une image commune pour la dernière frame. Et donc c'est la palette qui varie en fonction du type de ball. Voila cette image commune:
Spoiler
Cette méthode permet certes d'économiser un peu de place mais ça nous limite quand même beaucoup pour nos modifications.

Remarque: Même si l'objectif n'est pas de vous apprendre à modifier les images mais juste de vous expliquer comment exploiter 3 frames unique pour chaque balls je vous donne quelque offsets qui peuvent vous servir (rouge feu fr uniquement):
La table de pointeur des images: #25A9BC jusqu'à #25AA1C.
La table de pointeur des palettes: #25AA1C jusqu'à #25AA7C.

            La solution
Je ne vais pas vous expliquer pourquoi la solution fonctionne car trop peu d'entre vous serez capable de comprendre le pourquoi, donc contenter vous d'appliquer ce qui suis.

Pour commencer, rendez-vous à l'offset correspondant à votre version avec votre éditeur héxadécimal. Et remplacez le #062C par #14E0.
C'est terminer, vous pouvez utilisé les 3 frames propre à chaque balls. Simple n'est-ce pas.

Remarque: Pour les plus minutieux vous pouvez remplacer les offsets de #04BFFE jusqu'à #4C0028 par des #FF car le jeu n'en à plus besoin, vous gagnerez un peu de place.


Ce qui veulent comprendre comment ça fonctionne sachez que ce que vous venez de remplacer par des #FF permettait au jeu de vérifier quelle type de balls c'était puis de charger l'image commune si besoin. L'instruction E0 étant un branch simple en ASM il permet de sauter le chargement de l'image commune quelle que soit le type de balls. Jeter un œil avec le dé-assembleur pour mieux comprendre.

En bonus voila un petit pack que je vous est fait avec les balls des versions DPP/HGSS adapter en 16*16 et prêt à être insérer avec NSE (palette comprise). Le lien

Remarque: J'ai aussi essayer d'agrandi la taille des balls (32*32 au lieu de 16*16) mais je n'ai pas réussi à obtenir un résultat correct (la 2éme et 3éme frames ne s'afficher pas correctement). Mais si j'y arrive je l'ajouterais ici.


Quelques offsets

Spoiler
Je note souvent les offsets des images que je modifie, donc voila une petite liste sans grande prétention et qui est amené à évoluer.
Citer
Menus start:
   Pokemon (gestion equipe):
      cases/fond/sortir:
         img: E82700 (compressée)
         raw: E82AB0
         pal: E82A10
         pal: E829E7
         pal (sélection): vers E82A67
      pokeball:
         img: E82BE8 (compressée)
         pal: E82E7C
      objet/lettre:
         img: 4539B0
         pal: 4539F0
Pokedex:
   Fleche orange:
      img:
      pal: 45900c
   Pokéball liste:
      img: E95D30 (128*16)
      pal: E95CF0
Combat:
   Barre Hp/Xp:
      img: D11BC4
      pal (Hp): D11BA4
      pal (Xp): D11B84
   Cadre Hp/Xp/Lvl/...:
      img (Joueur 1vs1): D1F340 (compressée)
      img (Joueur 2vs2): D1F794 (compressée)
      img (Ennemi 1vs1): D1F604 (compressée)
      img (Ennemi 2vs2): D1F928 (compressée)
      img (?): D1FABC (compressée)
      pal: D11B84
   Barre nombre pokemon dresseur:
      img: E7BB04 (compressée)
      pal: D11B84
   PokeBalls capture:
      table img: 25A9BC - 25AA1C (compressée)
      table pal: 25AA1C - 25AA7C
Menus - General
   Cadre boite dialogue n (0-9):
      img: 4686A4 + 120*n
      pal: 469244 + 20*n
   Cadre boite dialogue commune:
      img: 41769C
      pal: 469724
   Fleche pour indiqué qu'il y à encore du texte:
      img: 1E4558 (128*16)
Menus - Sac
   Objets:
      table img+pal: 3CE114 - 3CECD4
« Modifié: 27 mai 2013, 21:30 par Unifag »

Megadrifter

  • Membre
  • 6425 posts
13 mai 2013, 20:27
Un article technique qui vaut le coup d'être lu. Clair, Net et Précis. C'est ce que j'appelle du très bon boulot.

Groud

  • Invité
14 mai 2013, 10:26
Excellent mec, bravo !

hremeraude

  • Membre
  • 11385 posts
14 mai 2013, 17:12
J'avoue pas mal :)

Baitot

  • Membre
  • 491 posts
14 mai 2013, 17:56
Merci de nous faire partager tes connaissances !
Excellent sujet, facile à comprendre.

PS:
Mais en trichant un peu il est possible de modifier cette boite de dialogue.
C'est la seul chose que j'arrive à faire  ;D

EDIT: Sinon, je viens de voir ce tuto ;) (en anglais). :  http://www.pokecommunity.com/archive/index.php/t-103626.html
« Modifié: 14 mai 2013, 18:20 par Baitot »

Unifag

  • Membre
  • 883 posts
14 mai 2013, 18:25
EDIT: Sinon, je viens de voir ce tuto ;) (en anglais). :  http://www.pokecommunity.com/archive/index.php/t-103626.html

Ce n'est pas du tout la même chose, le tuto que tu montre traite des boites de dialogue normal, qui sont facilement modifiable avec NSE. En plus il ne montre que comment changer la palette, rien d'exceptionnelle. Alors que ce que j’explique n'est valable que pour la zone de texte en combat.

Baitot

  • Membre
  • 491 posts
14 mai 2013, 18:49
Oui, je sais que ce n'est pas complètement la même chose mais c'est pour ceux qui désire changer la palette des boîtes de dialogues normal
car l'idée se rejoint un peu sauf dans le lien que je cite comment changer les boîtes de texte banals.

Unifag

  • Membre
  • 883 posts
27 mai 2013, 21:29
Mise à jour du premier post avec un petit truc que j'ai fais récemment sur les balls.

Pages: [1]    En haut ↑