• modifié le 14 septembre 2016

    Icewind Dale II, avec 307 animations, contient beaucoup plus de créatures qu'Icewind Dale (225). Comme lui, il reprend bon nombre d'animations des Baldur's Gate I et II (qui n'en avait que 126) :toutes celles des PJ, des civils, certains animaux; mais aussi de Planescape Torment (qui sont d'ailleurs vraiment excellentes !).

    Pour assurer une continuité, et éviter sans doute de s'emmêler les pinceaux, les développeurs ont conservé les mêmes références aux mêmes animations au travers des différents jeux, dans les fichiers .IDS et les fichiers .BAM.
    Par exemple l'Ours noir est à l'adresse 0x7200 BEAR_BLACK et les fichiers .bam qui lui sont associés s'appelent MBERG1, MBERG1E, MBERG2, MBERG2E. Comme IWD2 est sorti après BG2, toutes les références des anims de BG2 existaient déjà, et divers fichiers d'IWD2 indiquent que les développeurs avaient intégré leur références dans le jeu, dans l'optique peut-être de les utiliser, ou simplement pour éviter d'utiliser des références existant déjà. Pourtant, si l'on parcourt les fichiers .bam, on se rend vite compte que toutes n'ont pas été utilisées. Impossible d'avoir les anims d'Elminster ou de Volo, des animaux sympa comme les élans, les daims ou les lapins, etc.
    Comme ces références sont "connues" du moteur du jeu, il peut suffire de copier les fichiers .bam correspondant aux anims que l'on veut rajouter dans le dossier override pour qu'elles puissent être utilisées par le jeu. Encore faut-il les connaître, et pouvoir les manipuler aisément (et qu'elles fonctionnent, car toutes ne semblent pas opérationnelles). C'est pourquoi il est préférable d'avoir recours à deux fichiers particulièrement utiles, ANIMATE.SRC et ANIMATE.IDS, et de modifier ce second fichier afin de pouvoir les utiliser dans des fichiers .CRE ou des scripts.

    ANIMATE.ids & ANIMATE.src

    Deux fichiers tiennent lieu d'index, et permettent de connaître les références et d'appeler facilement les animations des créatures du jeu, via un alias (c.a.d un nom associé à un chiffre, et plus facile à retenir qu'elle) : ANIMATE.ids et ANIMATE.src.
    Ce fonctionnement est un peu différent de BG2 qui utilise deux fichiers .ids pour indexer les animations, et offre la possibilité d'ajouter de nouvelles animations au jeu : ANIMATE.ids et ANISND.ids.

    • Le fichier animate.ids indique l'adresse des animations qui existent dans le jeu, et leur associe un nom qui permet de les appeler facilement dans des fichiers .CRE ou des scripts.
    • Le fichier animate.src est une simple liste de toutes celles connues par le moteur du jeu. Il nous renseigne sur les références des fichiers .bam qui sont invariablement associées à certaines adresses.
      Malheureusement, toutes les références listées ne sont pas utilisables. Un certain nombre ne peuvent être appelées, et font planter le jeu si l'on cherche à les utiliser (voir en fin de page)

    Quand on se penche sur ce fichier ANIMATE.SRC (consultation sous NearInfinity, puis exportation pour une utilisation plus souple - le fichier s'ouvre avec un simple éditeur de texte), on constate qu'il liste la quasi totalité des anims de BG2 (seulement une quinzaine ne sont pas listés comme les variations de couleur des Dragons) ainsi que la totalité de celles d'IWD et les nouvelles d'IWD2 lui-même.
    Parmis les références et les fichiers .BAM auxquels elle renvoient, on se rend compte qu'un certain nombre n'ont jamais été utilisées par le jeu (fichiers .bam inexistants, aucune référence dans des fichiers .CRE, des dialogues ou des scripts). Au total, une quarantaine d'animation dont une vingtaine de BG2 et une vingtaine d'IWD1.

    Chaque animation est listée selon une syntaxe qui reprend celle des jeux dont elle provient :

    // CGAMEANIMATIONTYPE_BEAR_BLACK
    0x7200=MBERG1
        pour les anims issues des Baldur's Gate

    // Barbarian 3
    0xF798=MBA3WK
        pour les anims issues d'Icewind Dale et créées pour IWD1/IWD2

    À la différence de BG2 où l'on doit créer des entrées dans le fichier anisnd.ids pour pouvoir ensuite en ajouter dans animate.ids, le fichier animate.src nous prémâche donc le travail ! Les références étant connues, il suffit :

    1. d'ajouter celles que l'on souhaite au fichier ANIMATE.ids
    2. de récupérer les fichiers .bam qui leur sont associés tels quels et de les copier dans le dossier OVERRIDE d'Icewind Dale 2

    Ajout des références au fichier ANIMATE.ids

    Le fichier ANIMATE.ids, comme la plupart des fichiers .ids, est un outil de modding dans le sens où le moteur du jeu n'a pas besoin de lui pour tourner (on peut marquer n'importe quoi dans ce fichier sans que ça ait la moindre conséquence sur les fichiers existants et le fonctionnement du jeu).
    En revanche lors de la création ou la modification de fichiers existants, les fichiers .ids servent à associer une adresse (par exemple 0x6403) à un nom (SKELETON), plus facile à retenir. Si dans un fichier .CRE on souhaite appeler l'animation du Squelette, on pourra le faire en indiquant sa référence en hexadécimal ou tout simplement son nom. Le moteur du jeu trouvera la première via le second, grâce à la "table de concordance" que représente le fichier ANIMATE.ids.

    Supposons que l'on veuille ajouter Drizzt et Volo. On va d'abord rechercher leurs références dans le fichier animate.src, et l'on obtient :

    // CGAMEANIMATIONTYPE_VOLO
    0x2100=UVOLG1

    // CGAMEANIMATIONTYPE_DRIZZT
    0x6400=UDRZ1G1

    • La première ligne indique, après l'expression CGAMEANIMATIONTYPE_,  le nom sous lequel l'animation est appelée par convention. Dans la mesure du possible, et dans l'optique du modding où d'autres personne peuvent être amenées à travailler avec les mêmes fichiers, autant respecter cette convention.

    • La seconde ligne contient l'adresse à laquelle l'animation qui lui correspond est connue dans le jeu (le moteur du jeu ne connait que celle-là : à une adresse donnée correspond une référence d'animation, et aucune des deux ne peut être changée)

    Ouvrons maintenant le fichier animate.ids
    Si l'on est familier avec celui de BG2, on remarque que le classement des références varie entre BG2 et IWD : il est fait selon l'adresse pour les anims de BG2 puis selon le nom pour IWD2. Ce classement est pratique car il permet de trouver les références d'une animation de manière assez rapide. Du point de vue du fontionnement du jeu, peu importe où l'on écrit une référence, seule la syntaxe [adresse] [nom] et son exactitude comptent.

    Pour garder la logique du fichier, et éviter de perdre son temps à chercher une référence par la suite, autant ajouter nos deux références à la place qu'elles ont dans le fichier .ids de BG2, en recopiant les références d'adresse et de nom que l'on a notées précédemment :

    0x2100 VOLO
    0x4000 STATIC_NOBLE_MAN_CHAIR
    0x4002 STATIC_NOBLE_MAN_MATTE
    0x4010 STATIC_NOBLE_WOMAN_CHAIR
    ...
    0x6312 THIEF_FEMALE_DWARF
    0x6313 THIEF_FEMALE_HALFLING
    0x6400 DRIZZT
    0x6402 MONK
    0x6403 SKELETON

    Modification optionnelle : Un fichier .ids commence par indiquer le nombre de références qu'il contient (307 dans le fichier original). Comme nous venons d'en ajouter deux, il convient de modifier ce chiffre (ainsi on saura du premier coup d'oeil dans quelle mesure ce fichier a été modifié). Nous aurons donc désormais :

    309
    0x2100 VOLO
    0x4000 STATIC_NOBLE_MAN_CHAIR
    0x4002 STATIC_NOBLE_MAN_MATTE
    ...

    Il ne reste plus qu'a récupérer les fichiers .bam dans Baldur's Gate 2, en se basant sur le nom que nous a donné le fichier .src : UVOLG1 et UDRZ1G1. Le plus simple est d'utiliser NearInfinity pour ce travail, puisqu'il liste entre autres tous les fichiers .bam d'un jeu et permet de les extraire.
    L'animation se composant de plusieurs fichiers .bam, il faudra récupérer tous ceux dont la racine du nom est UVOL et UDRZ, puis les copier dans le dossier OVERRIDE d'IWD2.

    attention

    Il reste aussi à récupérer/ajouter les sons associés à la créature et à modifier le fichier sounds.ini en conséquences... mais ceci fait l'objet d'un autre article !

     

    Peut-on ajouter de nouvelles animations de créatures à Icewind Dale 2 ?

    Les références des animations de créatures que le jeu connaît sont codées dans le fichier .exe du jeu, ce qui voudrait dire modifier ce fichier, et ne peut être fait que par un programmeur (ce qui a été fait pour le moteur de BG2, grace au mod "Infinity Animations" d'Erephine, mais qui n'existe pas pour l'heure pour Icewind dale I et II)
    Au niveau du modding, à défaut d'ajouter, on se contentera de connaître ces références, de savoir à quoi elles sont associées et de remplacer les fichiers qu'elles appellent.

    C'est en utilisant NearInfinity et ses fonctions de recherches que l'on peut arriver à savoir quelle animation est associée à un fichier .cre et plus rarement des fichiers .bcs ou .dlg
    ... ce qui nous réserve certaines surprises :

    1. un certain nombre de références sont manquantes dans le jeu (leurs fichiers .bam ne sont pas présents dans le jeu). Les animations appelées par ces références étant manquantes, on peut mettre celles de son choix, sous le nom connu par la référence, en prenant garde qu'elles soient de la même structure que celle qui était appelée (c'est ce que nous venons de voir dans cet article)

    Deux sources de références nous indiquent les animations que le jeu connait:
    - le fichier ANIMATE.IDS liste toutes les références des animations utilisées par le jeu, telles qu'on les trouvent dans des fichiers .CRE ou .BCS... et pourtant toutes ne le sont pas ! Il manque purement et simplement les fichiers .bam d'une bonne vingtaine, qui proviennent toutes d'IWD1. On peut bien entendu récupérer ces fichiers et les copier dans le dossier OVERRIDE, mais rien n'empêche d'en mettre de nouvelles, en respectant comme toujours leur structure (A1-WK, G1-G26)

    Listes des animation manquantes, listées dans le fichier animate.ids, avec le nom du fichier .bam sous lequel elles doivent être appelées et son type :

           

    Ref. Décimal Refs. Hexa Nom
    Fichier .bam Type
    60168 0xEB08 Animated Plate MANI [A1-WK]
    60184 0xEB18 Animated Plate 2 MAN2 [A1-WK]
    60200 0xEB28 Animated Plate 3 MAN3 [A1-WK]
    60401 0xEBF1 Arundel MARU [A1-WK]
    63384 0xF798 Barbarian Warrior 3 MBA3 [A1-WK]
    59249 0xE771 Barbarian Shaman 1 MBA4 [A1-WK]
    59265 0xE781 Barbarian Shaman 2 MBA5 [A1-WK]
    59308 0xE7AC Barbarian, Icasaracht MBAI [A1-WK]
    60217 0xEB39 Belhifet MBE1 [A1-WK]
    60233 0xEB49 Belhifet, Priest MBE2 [A1-WK]
    32516 0x7F04 Golem, Iron_BG2 (audio non-modifiable) MIGO [G1-G26]
    60265 0xEB69 Lich, White MLIC [A1-WK]
    32548 0x7F24 Pirate - (audio non-modifiable)
    NPIR [G1-G26]
    32554 0x7F2A Sailor (Marin) - (audio non-modifiable)
    NSAI [G1-G26]
    60241 0xEB51 Seer (voyante d'HoW)
    MSEE [A1-WK]
    59672 0xE918 Shadow, Buff MSH2 [A1-WK]
    60337 0xEBB1 Shrieker (criard) MSHR [A1-WK]
    59385 0xE7F9 Umber Hulk, Vodyanoi MUM2 [A1-WK]
    57938 0xE252 Water Weird (Élémental d'Eau) MWWE [A1-WK]
    58201 0xE359 Wight 2 MWI2 [A1-WK]
    58217 0xE369 Wight 3
    MWI3 [A1-WK]


     

    - le fichier ANIMATE.SRC liste toutes les références des animations connues par le jeu. Là encore, un grand nombre d'animation, en plus de celles précedemment indiquées, n'ont pas été utilisées par le jeu. Leurs références n'apparaissent dans aucun fichier du jeu, et les développeurs ne les ont donc pas intégrées au fichier ANIMATE.IDS.
    Il s'agit en quelques sorte de "fossiles de programmation", le moteur d'IWD2 étant construit par-dessus celui des Baldur's Gate, dont certains peuvent être activés et d'autres non.
    Leur utilisation peut poser problème : certaines font planter le jeu, d'autres ne peuvent pas être sonorisées (on a beau associer un son à leur réf., il n'est pas joué), d'autres enfin marchent parfaitement !

    Liste de celles qui marchent parfaitement :

    // CGAMEANIMATIONTYPE_SIRINE - Sirène
    0x2000=MSIRG1 (fausses couleurs)

    // CGAMEANIMATIONTYPE_VOLO - Volo
    0x2100=UVOLG1

    // CGAMEANIMATIONTYPE_OGRE_MAGE - Ogre-Mage
    0x2200=MOGMG1 (fausses couleurs)

    // CGAMEANIMATIONTYPE_DRIZZT - Drizzt 
    0x6400=UDRZ1G1 (fausses couleurs)

    // CGAMEANIMATIONTYPE_SAREVOK - Sarevok
    0x6404=USAR1G1

    // CGAMEANIMATIONTYPE_OGRILLON - Ogrillon
    0x7001=MOGNG1

    // CGAMEANIMATIONTYPE_BASILISK - Basilic
    0x7100=MBASG1

    // CGAMEANIMATIONTYPE_ELEMENTAL_BG2 - Élémental de Feu BG2
    0x7310=MFIEG11

    // CGAMEANIMATIONTYPE_GIBBERLING - Grouilleux
    0x7800=MGIBG1

    // CGAMEANIMATIONTYPE_KOBOLD_XVART - Xvart
    0x7C00=MXVTG1 (fausses couleurs)

    // CGAMEANIMATIONTYPE_KOBOLD_TASLOI - Tasloï
    0x7C01=MTASG1 

    // CGAMEANIMATIONTYPE_ZOMBIE - Zombie
    0x7D00=MZOMG1 (fausses couleurs)

    // CGAMEANIMATIONTYPE_TROLL - Troll
    0x7F00=MTROG11

    // CGAMEANIMATIONTYPE_KOBOLD - Kobold
    0x8200=MKOBG1 (fausses couleurs)

    // CGAMEANIMATIONTYPE_EAGLE - Aigle
    0xD000=AEAGG1 (1 bam statique)

    // CGAMEANIMATIONTYPE_SEAGULL - Goéland
    0xD100=AGULG1 (1 bam statique)

    // CGAMEANIMATIONTYPE_VULTURE - Vautour
    0xD200=AVULG1 (1 bam statique)

      Liste des références qui posent problème (plantage ou non affichage dans le jeu) :

    0x3000 ANKHEG
    0x6401 ELMINSTER

    0x7311 ELEMENTAL_FIRE_SMALL
    0x7703 GHOUL_SHADOW
    0x7F09 SAHUAGIN
    0x7F0C KUOTAI
    0x7F0D LICH
    0x7F0E DEMILICH
    0x7F0F TROLL_SMALL
    0x7F12 VAMPIRE
    0x7F14 GITHYANKI
    0x7F15 BEHOLDER_SMALL
    0x7F16 MOOSE
    0x7F17 RABBIT
    0x7F19 DANCING_SWORD
    0x7F20 GROUNDHOG
    0x7F21 PHEASANT
    0x7F22 VAMPIRE_FEMALE
    0x7F23 SAHAUGIN_LARGE
    0x7F28 KUO-TOA_LARGE
    0x7F2C AMISH_SOLDIER
    0x7F2D WYVERN_FAMILIAR
    0x7F30 BODHI
    0x7F31 ELLESIME
    0x7F35 MIST_CREATURE
    0x7F36 SHADOW_THIEF
    0x7F37 JON_IRENICUS

    Le fait qu'une adresse pose problème empêche nullement de récupérer l'animation qui lui est associée par défaut; il faudra juste l'associer à une autre adresse appellant une animation de même type, et attribuer aux fichiers .bam les noms qui y correspondent.
    Je n'ai par exemple pas pu réutiliser les anims d'Elminster aux références qui lui sont attribuées ( 0x6401 ELMINSTER) : l'animation n'apparaissait pas dans le jeu ! (d'autres font purement et simplement planter le jeu)

    [ Globalement, c'est surtout avec des anims de type G1-G26 que ça bloque. La solution consiste à convertir ces animations en animations de type A1-WK. J'indique la procédure à cette page -> ]

    Après plusieurs tests, j'ai réussi à afficher les .bam d'Elminster en utilisant l'adresse des anims de Sarevok (0x6404 dont l'animation, par chance, ne me plait pas des masses...) J'ai donc dû entrer comme référence dans le fichier animate.ids 0x6404 ELMINSTER et surtout renommer les fichiers .bam de l'anim d'Elminster sous le nom de celle de Sarevok (USAR1A1, USAR1A3, USAR1A5, USAR1G1, USARW2, et leurs pendants xxxxxxE)


    2. d'autres sont inutilisées, au sens où les fichiers .bam existent, mais aucune créature et aucun script ne les utilise.
    Leur modification est à priori possible, sans crainte de répercussions dans le jeu, mais n'a pas été totalement vérifiée.
    Dans ce cas, il sufit, pour remplacer les fichiers .bam, de copier dans le dossier OVERRIDE les nouvelles animations ayant le nom de celle que l'on veut remplacer, en prenant les même précautions que précédemment vis à vis de leur structure (A1-WK, G1, etc...)

    Liste des références du fichier ANIMATE.IDS inutilisées par le jeu :

    53248   0xD000 BIRD, EAGLE (Aigle)  - AEAG [G1]
    53760   0xD200 BIRD, VULTURE (Vautour) - AVUL [G1]
    58120   0xE308 Ghoul - MGH2 [A1-WK]
    58136   0xE318 Ghoul 2  - MGH3 [A1-WK]
    58249   0xE389 Mummy  - MMUM [A1-WK]
    32562   0x7F32 Slayer - MSLY [G11]
    58441   0xE449 Svirfneblin armé d'une hache - MSVI [A1-WK] 


    1 commentaire