Bonjour,
L’appel au secours de Salomon Kane a été entendu. Je m’inscris donc pour participer.
Résumé : Je vais présenter 2 méthodes existantes pour obtenir des animations, chacune avec leurs avantages et défauts. Puis je finirais par la 3ème méthode qui devrait être idéale... sauf que je ne l’ai pas encore codé :/
Dans D2Exp.mpq, fichier data\global\excel\monstats.txt, je trouve les « Tentacle » à la ligne (Excel) 260. Class = WaterWatcherLimb, Code = TN. Les 16 colonnes de HD à S8 m’apprennent que cette animation utilise 2 Layers : TR et S1. Chose vérifiée avec
DrTester. Perso, j’utilise la dernière version : 0.22, « Nov 16 2008 ».
Je vais prendre l’exemple de l’animation « data\global\monsters\TN\COF\TNA1HTH.COF ».
Une fois ce fichier COF sélectionné dans DrTester, j’extrais directement le COF et les DCC via la commande « File / Save to Local File », et je choisi de sauvegarder les DCC associés. Ca, c'est pour merge_dcc plus tard. Dans le répertoire de DrTester, il y a maintenant un sous-répertoire « data\global\monsters\TN », qui à son tour contient dans d’autres sous-répertoires le COF et les 2 DCC.
Si dans DrTester on s’amuse à changer la couleur de fond (« Options / Background Color »), et qu'on lance l'animation (bouton "Run F") on s’aperçoit que les ondes sur l’eau utilisent de l’alpha blending, ce qui posent de gros problèmes de conversions au format BAM si j’ai bien compris. Je n’ai malheuresement pas de solution miracle à ce problème.
A noter : pour ce COF, dans DrTester, on peut voir sur la partie droite « Layer Flags » 2 éléments : 00000101 et 06010101. Ce sont 4 octets (affichés en hexadécimal) des 2 layers utilisés. Je pense que seuls les 2 premiers octets sont utiles. :
Code : Tout sélectionner
Layer HD = 00000101 ==> 00 00 ==> Aucun effet spécial
Layer S1 = 06010101 ==> 06 01 ==> Le 01 active un effet spécial, 06 est l’effet spécial que j’avais appelé « bright alpha blending » (pas terrible, mais bon).
Je ne sais pas trop comment ce "bright alpha blending" est calculé dans le moteur de Diablo II, mais en gros ici ça veut dire d’afficher le layer S1 en plusieurs niveaux de transparence, avec au passage d’une manière ou d’une autre un effet d’éclaircissement des pixels.
Extrait d'une
vielle doc sur Phrozen Keep :
Code : Tout sélectionner
00 = 75 % transparency (colormaps 561-816 in a .pl2)
01 = 50 % transparency (colormaps 305-560 in a .pl2)
02 = 25 % transparency (colormaps 49-304 in a .pl2)
03 = [strike]alpha blending[/strike] screen (colormaps 817-1072 in a .pl2)
04 = luminance (colormaps 1073-1328 in a .pl2)
06 = bright alpha blending (colormaps 1457-1712 in a .pl2)
Maintenant, si on veut obtenir un GIF directement depuis DrTester, il suffit maintenant de choisir « File / Save As », et de choisir le format Gif au cas où celui-ci n’était pas déjà sélectionné. L’avantage, c’est que c’est DrTester qui gère l’effet de transparance lui-même (en utilisant au passage la couleur de fond fixée dans DrTester). L’inconvénient, c’est qu’il ne sauvegarde qu’une seule direction (son numéro est dans le nom du fichier .gif). Pour sauvegarder toute l'animation, il faut aller de Direction en Direction et de sauvegarder autant de fois les GIF associés.
Il existe une deuxième solution, qui a le mérite d’éviter tous les problèmes d’alignement d’offset des animations entre elles, et ce quelques soient les layers. L’inconvénient par contre est qu’il n’y a pas de gestion de l’effet de transparence (pas encore en tout cas ...).
Méthode « merge_dcc ».
Recopier le répertoire « data\global\monsters\TN » depuis le dossier d’installation de DrTester, dans le répertoire « tokens » du dossier d’installation de « merge_dcc ».
Dans un premier temps, il faut connaitre les dimensions de la plus petite boîte englobante de toutes les frames de tous les layers. Il suffit de créer un « Merge_dcc.ini » qui demandera de fusioner tous les layers entre eux, sans précisier de dimensions de « box » :
Une fois « go.bat » lancé, si tout s’est bien passé, on devrait avoir ça :
Code : Tout sélectionner
MERGE_DCC Freeware v. 1.8, by Paul SIRAMY, 24 May 2007
DCC Decoder made with the precious help of Bilian BELCHEV
=========================================================
COF file = TNA1HTH
# directions = 8
# frames per direction = 20
# layers = 2
Layers list = TR S1
* TR : tokens\TN\TR\TNTRLITA1HTH.DCC (none, block 0)
* S1 : tokens\TN\S1\TNS1LITA1HTH.DCC (none, block 0)
box = (-140, -152) - (144, 30) = 285 * 183 pixels
STDERR.TXT :
============
Appuyez sur une touche pour continuer...
Les images générées ne sont pas utiles pour l'instant. Ici, ce qui est intéressant, c’est la ligne de la « box ».
Maintenant, je vais créer les frames d’une première animation, elle contiendra tous les layers du monstre qui n’ont pas d’effet spéciaux. Ici, facile : il n’y a que le layer TR. Par contre, l’astuce consiste à
forcer les dimensions de l’animation finale (la « box »), à la taille de l’animation globle (celle qui contient le TR et le S1). Merge_dcc s’occupera lui-même de placer les frames au sein de cette « box ».
Fichier « Merge_dcc » pour la première animation (que TR) :
Ce qui produit 160 frames. Les mettre dans un coin à part.
2ème fichier INI (que S1) :
Ce qui produit 160 autre frames. Les mettre dans un (autre) coin à part.
Voilà, on a 2 jeux de 160 frames : 8 directions * 20 frames chacune, de 2 layers, et TOUS les PCX peuvent se superposer entre eux au pixel près !
Et là ... je suis un peu bloqué. Si on veut faire les choses biens, il faudrait prendre toutes les paires de frames, une par une, dans un outil genre Paint Shop Pro, les placer chacune sur leur propre layer, les superposer (facile : les images ont exactement les même tailles), choisir un réglage d’affichage du layer S1 (ici un genre d’alpha blending), puis sauvegarder l’union de ces 2 frames dans une nouvelle image. Répeter le principe pour chacune des 160 frames (ouch!).
Je ne connais pas (mais ça existe peut être ?) un outil qui permette de lire plusieurs animations GIF, de les attribuer chacune à un layer, de régler une seule fois les paramètres du layer, et de sauvegarder en une nouvelle animation la combinaison de tout ça.
C’est pourquoi je pense que le plus simple, serait franchement que je mette à jour « merge_dcc » : la seule chose qui lui manque (enfin, pour gérer cette animation du tentacule en tout cas), c’est de gérer l’affichage des layers à effet spéciaux de la même façon que le fait DrTester. Et ça je pense y arriver facilement, j’ai déjà tous les éléments à ma disposition.
Il est tard, je ne ferais ça qu’à partir de demain soir (si mon boulot ne m’achève pas trop). Au pire ce week-end.
Tant que j’y serais, des propositions d’améliorations pour la future mise à jour de cet outil ?