TUTO + Logiciel (Tileset Creator) [GBA] Créer un nouveau tileset tout entier !

Pages: [1] 2 3

Mickey`

  • Membre
  • 2746 posts
02 juin 2011, 19:14
Vous avez déjà était embêté(e) par un manque de place dans un tileset ? Un manque d'originalité au niveau des couleurs du fait que le nombre de palettes par tileset est limité ?
Et bah, c'est aujourd'hui votre jour de chance, on va remédier à ce problème, nous allons créer un tout nouveau tileset !
Je vais prendre Rubis FR pour le tuto. Dans rubis, quand vous créez une nouvelle carte, que vous voulez modifier le numéro du tileset à utiliser... ça va jusqu'à 57 ! Et bah avec ce tuto et le logiciel, on va en ajouter :)



Le logiciel : RF/VF (FR) Tileset Creator

J'en suis l'auteur. Voici une description du logiciel et un lien de téléchargement :



Il remplace en un clic tout le tuto ! Il vous faut simplement lui donner l'offset de base.
Il est donc très simple d'utilisation et ne nécessite aucune connaissance.



Les avantages :

Ne prend que quelques secondes pour créer le tileset
Ne nécessite aucune connaissance en hexadécimal comme il le fallait au paravant
Possibilité de créer (ou non) une back-up à chaque chargement d'une ROM
Détail des pointeurs et des offsets (en cas de modification personnelle et manuelle)

Les inconvénients :

Compatible seulement avec Rouge Feu (FR) et Vert Feuille (FR)
Si l'offset est mauvais ou pas assez grand, il se peut que des données soient effacées

Prochainement :

Je prévois en effet une version 2.1.1 d'ici peu. Elle contiendra :

Compatible avec Rouge Feu (FR) / Vert Feuille (FR) / Rubis (FR) / Saphir (FR) / et peut-être leurs versions anglaises
Mémorisation du choix de création de back-up ou non
Vérification préalable pour ne pas écraser d'autres données
Possibilité de vider ou de totalement supprimer un tileset existant

Téléchargement :

Le logiciel est téléchargeable en cliquant ici



Testez, et dites-moi ;)



Le tutoriel :

On va pas se le cacher, ça serait trop bien pour que ce soit simple. C'est coton, surtout pour moi à expliquer. Vous devrez peut-être vous y reprendre à deux ou trois fois pour certains, mais c'est pas grave :)
Je vais expliquer un max, pour que ce soit plus simple.

Je vous conseille vivement de faire une back-up avant d'essayer le tuto, il se peut que des choses non désirées apparaissent ! x)


Trêve de blabla, commençons !



Vous aurez besoin de :
_ Advance Map
_ Un éditeur hexadécimal
_ Un bloc note, un bout de papier, enfin quelque chose pour prendre des notes, important, à moins que vous ayez un mémoire extraordinaire (ouais, prenez le bloc note ;D)
_ Une calculette qui fais décimal/hexadécimal (celle de Windows par défaut le fait normalement).
_ Votre cerveau, va falloir un peu réfléchir !
_ Tileset vide



Avant de commencer, vous devez vous renseigner un peu sur votre version. Pas grand chose, seulement sa langue. C'est très important, sinon vous pouvez pas réussir le tuto. ;)

1. Recherche d'un offset

Aller, on commence en rigolant. Recherchez un offset avec FSF ou avec Hexeditor (ou un autre éditeur hexadécimal), perso je vais faire avec Hexeditor, c'est plus sûr. Vous avez besoin de 660 octets. Je vais utiliser l'offset 78ED80. On le note. On l'appellera "Offset de départ".

Je vous mets pas d'images, je pense que cette étape est assez simple :)

2. Calcul de l'offset du Tileset Header

Avant tout, voici quelques listes, qui vont vous servir juste après.

Rubis :
Spoiler
AXVD = 2924DC
AXVE = 286CF4
AXVJ = 25F15C
AXVF = 28D958
AXVS = 28A28C
AXVI = 2871E4

Saphir :
Spoiler
AXPD = 292470
AXPE = 286C84
AXPJ = 25F0EC
AXPF = 28D8E8
AXPS = 28A21C
AXPI = 287174

Emeraude :
Spoiler
LEPB = 3F1434
EEBP = 3DF704
BPEJ = 3B7B24
BPEF = 3E45F0
BPES = 3E2D60
BPEI = 3DC448

Rouge Feu :
Spoiler
BPRD = 2D49B8
BPRE = 2D4A94
BPRJ = 298B44
BPRF = 2CEEE4
BPRS = 2D025C
BPRI = 2CDB74

Vert feuille :
Spoiler
BPGD = 2D4998
BPGE = 2D4A74
BPGJ = 298B24
BPGF = 2CEEC4
LDPE = 2D023C
BPGI = 2CDB54


Vous êtes bon en maths ? Non ? La calculette est là :) *OUF*
Il faut calculer l'offset correct pour A-Map puisse "gérer" correctement le tileset.
Cet offset est appelé "Offset tileset entête", mais comme c'est pas beau, je l'appellerai "Offset tileset header"
Pour cela, nous allons tout d'abord calculer le numéro du tileset. (ça ne sera pas 58, dans mon exemple). Voici la formule :

Offset de départ - Tileset 0 = XXXXXX

XXXXXX / 18 = YYYYY ~~> AAAAAA

Mais tu nous apprends l'alphabet Mickey` ou quoi ? x(
Non, non ! :)

Explications de la formule :
_ Offset de départ, c'est l'offset qu'on a calculé dans l'étape 1 (c'est pour ça que je l'ai appelé... Offset de départ ! ;D).
_ Tileset 0 : Mais c'est quoi ? En fait, ce nombre correspond à un des nombres hexadécimaux présents dans les listes ci-dessus. Comment le trouver ? Simple, vous allez tout d'abord dans la liste de votre version, puis vous regarder les lettres devant le nombre. J'utilise une version française, je prends donc AXVF.
_ Cette soustraction donne un nombre, toujours en hexa, appelé "XXXXXX".
_ On divise ensuite ce nombre par 18.
_ On obtient un nombre "YYYYY".
_ On convertit ce nombre hexadécimal en nombre décimal, on obtient le nombre décimal "AAAAAA".

Dans mon exemple, j'obtiens ceci :

78ED80 - 28D958 = 501428

501428 / 18 = 3562C ~~> 218668

Le numéro du tileset est donc 218668 dans mon cas. On le note.

Maintenant que nous avons notre numéro du tileset, il faut calculer le bon offset (tileset header) dont je vous ai parlé tout à l'heure. Voici la formule :

Numéro du tileset * 24 = XXXXXX

XXXXXX + Tileset 0 en décimal = YYYYYYY ~~> AAAAAA

Quelques expliquations :
_ Numéro du tileset, c'est ce que nous venons de calculer.
_ On multiplie ce nombre par 24.
_ On obtient un nombre "XXXXXX".
_ On ajoute à ce nombre le Tileset 0 (souvenez-vous des listes ;)) en décimal !.
_ On obtient un nombre "YYYYYYY".
_ On convertit ce nombre décimal en nombre hexadécimal, on obtient donc le nombre "AAAAAA"

À noter, vous pouvez également faire ce calcul, en hexadécimal. Vous n'aurez pas la conversion à faire tout à la fin, mais vous en aurez au début. Le résultat est le même.

Dans mon exemple, je vais obtenir ceci :

218668 * 24 = 5248032

5248032 + 2677080 (= $28D958) = 7925112 ~~> 78ED78

(Pour Emeraude, il faut ajouter 8 au résultat !)

J'obtiens donc 78ED78.

On note ce nouvel offset : L'offset du tileset header : 78ED78.

3. Insertion des données de l'image du tileset.

Bien, après ce passage difficile de calculs, on rentre dans quelque chose de plus simple. ;)

Nous allons insérer un tileset vide. Pour cela, ouvrez Hexéditor, ouvrez votre ROM.
Cliquez sur "Rechercher", puis "Aller à l'offset...". Allez à l'offset du tileset header. (Moi, 78ED78).
On va sauter 24 octets pour la place du tileset header. On calcule :
78ED78 + 24 (= 18 en hexa) = 78ED90. On note cet offset. Cet offset, on l'appelle pointer vers l'image du tileset.

Téléchargez le  Tileset vide (fourni au début du tuto). Ouvrez le à côté dans Hexéditor, et copiez les 80 octets (les 5 lignes).
Retournez sur l'onglet de votre ROM. Sélectionnez 80 octets (5 lignes donc) à partir de l'offset où l'on était (moi, 78ED90).

Spoiler

4. Insertion des données de la palette du tileset.

Bien, on note l'offset où l'on est après avoir insérer le tileset vide :
78ED90 + 80 (=50) = 78EDE0. Cet offset, on l'appelle pointeur vers les données de palette.

Nous allons insérer les données de la palette. Une palette est composée de 16*16 couleurs. Une couleur vaut 2 octets.
16 * 16 * 2 = 512
Nous allons donc simplement sauter 512 octets pour insérer la palette vide.

78EDE0 + 512 (=200) = 78EFE0.

Spoiler

5. Insertion des données de blocs.

Nous notons l'offset où l'on se trouve : 78EFE0. Cet offset, on l'appelle pointeur vers les données de blocs.

Nous allons insérer donc les données de blocs.
Un tile vaut 2 octets, un bloc en contient 8 (4 dessus, 4 dessous). 2 * 8 = 16. Un bloc vaut donc 16 octets. Nous allons insérer 4 blocs vides. 16 * 4 = 64.
Pour insérer les données de blocs vides, nous insérer "des zéros" sur les 64 octets.

Spoiler

6. Insertion des données de comportement.

Après avoir insérer ces 64 octets :
78EFE0 + 64 (=40) = 78F020. On note cet offset, cet offset, on l'appellera pointeur vers les données de comportement.

Nous allons donc insérer les données de comportement pour les 4 blocs insérés plus haut.
Dans Rubis/Saphir/Emeraude, pour un bloc, il faut 2 octets.
Dans Rouge Feu/Vert Feuille, pour un bloc, il faut 4 octets.

J'utilise Rubis, donc 2 octets par blocs.
4 * 2 = 8.
Comme pour la palette, j'insère ces 8 octets en insérant "des zéros".

Spoiler

7. Calcul de la valeur du tileset header.

Bien, maintenant, nous avons tout préparé, on va donc insérer le tileset header lui-même.

Mais nous devons d'abord "reconstituer" la valeur du tileset header.
Voilà sa composition :
01010000XXXXXX08YYYYYY08AAAAAA0800000000BBBBBB08

Bon ok, ça veut rien dire, je sais, enfin je vais expliquer :)
01 : Nous avons inséré une image de tileset  compressée, bref ça change pas.
01 : Nous avons inséré un tileset pour une partie 2 (il ne faudra donnc pas le mettre en partie 1).
0000 : Ca ne change pas.
XXXXXX08 : Pointeur vers l'image du tileset.
YYYYYY08 : Pointeur vers les données de la palette.
AAAAAA08 : Pointeur vers les données de blocs.
00000000 : Animations. Nous n'en avons pas, ce qu'explique les zéros.
BBBBBB08 : Pointeur vers les données de comportement.

Si vous vous souvenez, j'avais parlé de ces pointeurs pendant le tuto. Chaque pointeur a donc un offset spécifique. Mais dans la valeur du tileset header, il ne s'écrit pas de la même façon (bah oui, pourquoi faire simple quand on peut faire difficile :°)).

Disons qu'un offset est composé comme ceci :
XXYYZZ
On décompose les trois parties mises en évidence :
XX YY ZZ
Et on inverse leur place :
ZZ YY XX
Ensuite, on les rassemble :
ZZYYXX
Enfin, on rajoute "08" à la fin du nouveau nombre :
ZZYYXX08

Voilà, on a notre offset ! Dans mon cas, voilà ce que je vais obtenir pour chaque offset :

Pointeur vers l'image du tileset :
78ED90 > 78 ED 90 > 90 ED 78 > 90ED78 > 90ED7808

Pointeur vers les données de la palette :
78EDE0 > 78 ED E0 > E0 ED 78 > E0ED78 > E0ED7808

Pointeur vers les données de blocs :
78EFE0 > 78 EF E0 > E0 EF 78 > E0EF78 > E0EF7808

Pointeur vers les données de comportement :
78F020 > 78 F0 20 > 20 F0 78 > 20F078 > 20F07808

Une fois que nous avons calculé tout ça, on peut enfin écrire la valeur entière !
J'obtiens ceci (attention !) :

0101000090ED7808E0ED7808E0EF78080000000020F07808

Quand vous avez fini ça, vous pouvez décompresser un peu : vous avez fait 95% du boulot, et 100% du truc chiant. Le reste, ça va paraître beaucoup plus simple ;)

8. Insertion du tileset header.

Maintenant que nous avons enfin calculé notre valeur, nous pouvons insérer notre tileset header.
Pour ça, allez tout d'abord à l'offset du tileset header calculé tout à l'heure.
Dans mon cas, c'était 78ED78.
Sélectionnez les 24 octets entre cet offset et le tileset vide (si vous avez plus ou moins, revoyez vos calculs depuis le début ! Et aussi, cherchez une corde pour vous pendre, à moins que vous soyez à l'aise dans le domaine, va falloir tout recommencer ! :-X). Une fois que vous avez sélectionné, copiez/collez à cet endroit précis la valeur du tileset calculée dans l'étape précédente. Ca doit rentrer exactement ! ;)

Spoiler

9. Utiliser le tileset créé.

Allez allez, courage, c'est presque fini !
Maintenant, le moment que vous attendez, parce que c'est bien beau d'insérer des chiffres et des chiffres, mais ça ne nous aide pas trop tout ça ! On va enfin voir le nouveau tileset !

Sauvegardez d'abord votre ROM dans Hexéditor. Une fois fait, vous pouvez fermer le logiciel.

Ouvrez ensuite Advance Map. Chargez votre ROM.
Allez dans l'onglet Entête. Puis, allez en bas, à l'endroit du choix du tileset, plus précisément "Tilesets utilisés". Dans "Tileset 2", inscrivez votre tileset number (oui, vous savez, ce qu'on a calculé tout au début !). J'inscris donc, pour moi, 218668.
Cliquez sur "Changer de Tileset". Cliquez sur une autre map, puis revenez sur celle où vous avez changé le tileset : SURPRISE ! Le tileset a bien été changé ! Vous pouvez voir qu'il y a 4 blocs dans votre tileset. Vous pouvez biensûr agrandir ce nombre.

Spoiler
   

Si vous voulez utiliser le tileset créé pour faire vos map, et ce pour n'importe quel tileset créé, vous devez entrer le tileset number à l'emplacement du choix du tileset (ouais, c'est grand comme nombre =X).




OUUUFF ! On a fini ! C'a pas dû être simple à comprendre, en tout cas, c'était plus que coton à expliquer T.T

J'espère que ce tuto vous aidera pour que puissiez créer des tiles sans limites ! 8)

Je suis ouvert à toutes questions, que ce soit ici où par MP, j'essaierai de vous aider :)

Tuto rédigé par Mickey`



Bientôt : Ajout d'une partie pour créer un tileset pour une partie 1 !
« Modifié: 13 avril 2012, 23:19 par Mickey` »

Theris

  • Membre
  • 3361 posts
02 juin 2011, 19:30
Merci pour le tuto, je l'ai ajouté à la bibliothèque.

Ksilee

  • Membre
  • 1275 posts
02 juin 2011, 19:42
Donc tu as fait comme ça :orly:

Mickey`

  • Membre
  • 2746 posts
03 juin 2011, 12:16
Merci Theris.

Ouais, j'ai fais comme ça, mais j'ai bienn galérer pour comprendre xD

Bupo

  • Membre
  • 467 posts
03 juin 2011, 14:00
Ce tuto aidera plus d'un...
Si tu savais combient il recherché !!!

Sainior

  • Membre
  • 6362 posts
04 juin 2011, 11:35
EXCELLENT TUTORIEL.

C'est explicite, compréhensible, vraiment très bien expliqué. Chapeau :tibia:

T@gekiss

  • Membre
  • 2889 posts
04 juin 2011, 12:57
Je need ce tuto sur le mini-site, j'aurais pas mieux expliqué. Vraiment, chapeau bas.

Mickey`

  • Membre
  • 2746 posts
04 juin 2011, 13:13
Merci beaucoup à vous tous ^^

Sainior

  • Membre
  • 6362 posts
05 juin 2011, 13:06
Je viens de tester, ça marche à la PERFECTION. Merci Mickey 8)

Mickey`

  • Membre
  • 2746 posts
05 juin 2011, 14:44
Ha bah temps mieux :D

Merci d'avoir testé ;)

soprano401

  • Membre
  • 76 posts
07 juin 2011, 00:02
Bravo respect !  :haulas:

Mickey`

  • Membre
  • 2746 posts

Layton'

  • Membre
  • 1349 posts
01 juillet 2011, 18:31
Je suis entrain de le faire mais je trouve pas dans Emeraude les tiles ils vont jusqu'à combien

Mickey`

  • Membre
  • 2746 posts
01 juillet 2011, 19:01
Pas besoin de savoir combien il y a de tilesets dans une version pour en rajouter...

Mickey`

  • Membre
  • 2746 posts
10 février 2012, 23:29
Je Up le topic ! Oui ! :o

Pour présenter mon logiciel : RF/VF (FR) Tileset Creator !



Il remplace en un clic tout le tuto ! Il vous faut simplement lui donner l'offset de base.
Il est donc très simple d'utilisation et ne nécessite aucune connaissance.



Les avantages :

Ne prend que quelques secondes pour créer le tileset
Ne nécessite aucune connaissance en hexadécimal comme il le fallait au paravant
Possibilité de créer (ou non) une back-up à chaque chargement d'une ROM
Détail des pointeurs et des offsets (en cas de modification personnelle et manuelle)

Les inconvénients :

Compatible seulement avec Rouge Feu (FR) et Vert Feuille (FR)
Si l'offset est mauvais ou pas assez grand, il se peut que des données soient effacées

Prochainement :

Je prévois en effet une version 2.1.1 d'ici peu. Elle contiendra :

Compatible avec Rouge Feu (FR) / Vert Feuille (FR) / Rubis (FR) / Saphir (FR) / et peut-être leurs versions anglaises
Mémorisation du choix de création de back-up ou non
Vérification préalable pour ne pas écraser d'autres données
Possibilité de vider ou de totalement supprimer un tileset existant

Téléchargement :

Le logiciel est téléchargeable en cliquant ici (Lien FileServe)



Testez, et dites-moi ;)

Sainior

  • Membre
  • 6362 posts
10 février 2012, 23:32
Tes recherches ont fini par payer, à ce que je vois. Excellent, vraiment, je suis épaté, je testerai si je trouve le temps.

Flower//

  • Invité
10 février 2012, 23:33
Tu aurais pu créer un nouveau topic. ;)
Sinon GG, vraiment, tu l'as codé en VB non ?

Mickey`

  • Membre
  • 2746 posts
10 février 2012, 23:42
Merci :D Ha ça c'est la faute à yago si y a pas de nouveaux topics ! *sifflotte*
Si il faut j'en ferai un ;)

Oui c'est codé en VB :)

mat1554

  • Membre
  • 8 posts
11 février 2012, 13:47
Hey Hey :P Faudrait bien que je le test moi aussi ah bien y pensé :P J'ai donné coup main pour la biblio mais j'ai pas encore tester xD

Sainior

  • Membre
  • 6362 posts
11 février 2012, 14:31
Au passage, présente ton log sur Pokécommunity, avec un peu de chance, Link le remarquera et fera sa promo sur Pokémon Legendary.

Mickey`

  • Membre
  • 2746 posts
11 février 2012, 15:12
Le truc c'est que mon log est pour les versions FR seulement pour le moment... Donc sur Pokecommunity ça va pas leur être super utile :s

Pour Link je pense lui en parler directement ^^

yago58

  • Invité
11 février 2012, 15:27
J'ajoute le lien dans la bibliothèque, merci Mickey' pour ton partage.

The New Azerty

  • Membre
  • 2597 posts

Mickey`

  • Membre
  • 2746 posts
12 février 2012, 18:06
Merci !

Mon ordi a planté totalement, y a de très grandes chances que j'ai perdu toutes les données sauvegardées dessus, donc la source du logiciel également ! :s

Par conséquent, je ne prévois pas la version 2.1.1 pour bientôt.

yago58

  • Invité
12 février 2012, 18:08
La vache, tu sais pourquoi ou comment il a planté ?

Flower//

  • Invité
12 février 2012, 19:57
Tu devrais mettre à jour ton premier post en y ajoutant le logiciel !
Et toutes mes condoléances pour ton code source. :'(

Arnik

  • Membre
  • 1812 posts
12 février 2012, 20:17
J'espèrais tant la nouvelle version.... :'(

Mickey`

  • Membre
  • 2746 posts
12 février 2012, 20:31
Aucune idée de pourquoi c'est arrivé, il a planté d'un coup sous mes yeux, et son état n'a fait qu'empirer.

Enfin bref, j'ai peut-être trouvé une solution pour tout récupérer des mes DD, mais rien de sûr, donc pour le moment je ne peux pas garantir une date de sortie de la version 2.1.1.

Si j'arrive à récupérer le code source, tout dépendra du temps de réparation. Encore désolé d'avoir parlé d'une nouvelle version dans le vent ! :s

Ps: Quelqu'un a-t-il testé le log ?

Ps2: MAJ du premier post.

yago58

  • Invité
12 février 2012, 20:33
Tu veux que je delete l'autre post ?

Mickey`

  • Membre
  • 2746 posts
12 février 2012, 20:36
Non non ça va, merci, je ne prévois pas la version 2.1.1 pour bientôt mais elle sortira un jour ou l'autre quand j'aurais de nouveau mon PC ;)

Pages: [1] 2 3    En haut ↑