•  dernière édition : 09.05.2014

    L'objet de cet article est d'indiquer la procédure pour convertir des animations de type G1-G26, fréquentes dans Baldur's Gate, vers le format A1-WK propre à Icewind Dale.
    Quand on cherche à ajouter des animations à IWD2, on se rend compte que la plupart des emplacements disponibles le sont pour des animations de type A1-WK (voir l'article "Ajouter des animations à IWD2"). De plus ce format est plus standardisé avec toujours le même nombre de séquences, peu nombreuses, faciles à contrôler et modifier. Il dispose en revanche de moins d'angles de vues d'où une perte de qualité à ce niveau, et des animations aux déplacements plus saccadés lorsqu'elles changent de direction.

    Outils requis :
    Bamworkshop 1
    DLTCEP

    Généralités sur les fichiers .bam

    Un fichier .bam est une animation qui peut regrouper différents mouvements déclinés sous différents points de vue.
    Chaque point de vue de chaque mouvement est représenté par une séquence, qui appelle un certain nombre d'images (ou frames). Les différentes images, qui peuvent être très nombreuses (plusieurs centaines) selon la richesse des mouvements représentés, utilisent toutes une seule et même palette de couleur, limitée à 256, et intégrée dans le fichier .bam. Certain types de fichiers .bam (et notamment certaines animations comme celles en fausses couleurs) ont des palettes pré-définies que le moteur du jeu manipule : si on les modifie par méconnaissance ou par erreur, c'est le why assuré.
    Dans le cas qui nous préoccupe, on ne touchera pas à la palette des couleurs, mais seulement aux séquences et au frames.


    Chaque fichier xxxx.bam fonctionne de pair avec un fichier xxxxE.bam qui traite la symétrie de l'image. À eux deux ces fichiers forment l'ensemble des points de vue d'un même mouvement.


    Fonctionnement des séquences et des frames

    Les séquences fonctionnent comme un index, une liste de lecture, qui appelle une suite de frames, selon leur numéro. Elles ne contiennent donc rien, et aucune image n'est intégrée à elles. Leur suppression n'a auncun effet sur les frames. L'intérêt de ce mode de fonctionnement est de pouvoir appeller la même image plusieurs fois, ou pour plusieurs séquences différentes, sans multiplier par autant de fois le poids de l'animation. On peut donc manipuler les séquences, leur nombre, leur organisation sans crainte d'endommager les images d'un fichier .bam (au pire il ne sera pas lu).
    Les séquences d'une même animation ont toutes le même nombre de frames.
    Un fichier .bam de type A1-WK ne contient que 5 séquences, qui correspondent à 5 angles de vue d'un même mouvement. On symbolise ces angles de vues par des points cardinaux (N, S, NO, etc..)

    Les frames sont les images à proprement parler qui constituent les différents moments des mouvements d'une animation, vus sous différents angles. Leur taille peut varier dans une même animation, mais elle ne peut dépasser 255x255 px.
    Un fichier .bam peut contenir de nombreuses frames (600 est un chiffre fréquent,on peut dépasser le millier...surtout avec les animations mal optimisées !) dont des frames qui ne sont pas jouées, puisqu'on ne voit que celles qui sont appellées par les séquences.
    Dans Bamworkshop, quand on supprime une frame dans la fenêtre "Frame" on ne fait qu'enlever sa référence dans l'index de la séquence. L'image en tant que telle n'est pas effacée. Il faut se rendre dans la fenêtre "Manage frames" pour supprimer ou importer des images.

    Pour les animations de type A1-WK, les 5 séquences d'une attitude donnée, c'est à dire d'un même fichier .bam et de sa symétrie, doivent avoir rigoureusement le même nombre de frames, autrement le moteur du jeu risque de planter au chargement. En revanche, les différentes attitudes, représentées via les fichiers xxxxA1.bam, xxxxCA.bam, xxxxWK.bam etc., peuvent avoir un nombre de frames non identique.
    De même pour les animations de type BG1/BG2 où les différents mouvements sont soit réunis dans un même fichier .bam, soit répartis sur plusieurs fichiers : les séquences qui traitent d'un même mouvement, sous ses différents points de vue, doivent impérativement avoir le même nombre de frames, et ce nombre doit se répercuter dans les fichiers xxxxxE.bam qui gèrent la symétrie.

    Différence de structure des fichiers .bam de type G1-G26 et A1-WK

    Les animations de type G1-G26 sont différentes de celles d'IWD2. Outre les noms et les mouvements auxquels ils sont associés, la plus grosse différence tient surtout à leur structure, par le nombre et l'organisation de leurs séquences.

    Les animations d'IWD ont seulement 5 séquences correspondant à 5 angles de vue (S,SO,O,NO,N) par fichier .bam. Chaque fichier .bam est indépendant et illustre un mouvement (marche, chute ,attaque...)

    Les animations de type G1-G26 disposent de plus d'angles de vue (9); mais chaque fichier fonctionne comme une partie d'un ensemble recomposé par le moteur du jeu, dont il garde la structure globale. Dans chaque fichier est donc prévue la place des différents mouvements des autres fichiers, 6 pour les mouvements G1-G15, 7 pour les mouvements G2-G26. On se retrouve avec des fichiers ayant 9x6=54 et 9x7=63 séquences, alors que seules 9 séquences sont "fonctionnelles", toutes les autres séquences sont laissées "vides" :

    Séquences G1 G11 G12 G13 G14 G15
    [1 à 9] vide Marche vide vide vide vide
    [10 - 18] debout vide vide vide vide vide
    [19 - 27] vide vide passif vide vide vide
    [28 - 36] vide vide vide blessé blessé  = G13 vide
    [37 - 45] vide vide vide vide blessé & tombe vide
    [46 - 54] vide vide vide vide à terre = G15 à terre

     

     

     

     

     

     

     

     

     

     

    Séquences
    G2 G21 G22 G23 G24 G25 G26
    [1 à 9] ATT.1 vide vide vide vide vide vide
    [10 - 18] vide ATT.2 vide vide vide vide vide
    [19 - 27] vide vide ATT.3 vide vide vide vide
    [28 - 36] vide vide vide ATT.4 vide vide vide
    [37 - 45] vide vide vide vide ATT.5 vide vide
    [46 - 54] vide vide vide vide vide Sort vide
    [56 - 63] vide vide vide vide vide vide Sort

      

     N.B. par "vide", j'entends une séquence qui ne contient aucune attitude représentée par une suite de frames et qui n'est pas affichée dans le jeu; par opposition aux séquences où une attitude précise est représentée. Mais il est important que chaque séquence, même "vide" contienne au moins une frame (n'importe laquelle puisqu'elle ne sera pas affichée), faute de quoi le jeu peut planter.

    Sur cette structure générale se greffent un certain nombre de cas particuliers, gérés par le moteur du jeu. Par exemple les séquences d'animation G1 -debout peuvent se trouver dans les séquences [19-27], dans ce cas, les séquences d'animation G12- passif se retouveront dans les séquences [10-18].
    Lorsque les mêmes séquences sont utilisées par deux fichiers .bam ou plus, ces séquences sont identiques. On le retrouve souvent par exemple dans les animations de combat, G2-G26, où le même mouvement d'attaque se retrouve dans les fichiers G2, G21, G22, qui sont alors identiques.

    Cette rapide analyse de la structure des fichiers G1-G26 montre qu'il est nécessaire de modifier complètement ces fichiers pour en faire des animations de type A1-WK.

    Différences de noms et de mouvement associé :

    Baldur's Gate
    Animations G1-G26
    Icewind Dale 1 et 2
    Animations A1-WK
    xxxxG1.bam [Debout, passif]
    xxxxG11.bam [marchant]
    xxxxG12.bam [debout, passif 2]
    xxxxG13.bam [blessé]
    xxxxG14.bam [chute et mort]
    xxxxG15.bam [allongé]
    xxxxG2.bam [attaque1]
    xxxxG21.bam [attaque2]
    xxxxG22.bam [attaque3]
    xxxxG23.bam [attaque4]
    xxxxG24.bam [attaque5]
    xxxxG25.bam [Invocation sort]
    xxxxG26.bam [lancement sort]
    xxxA1.bam: [attaque1] = G2
    xxxxA2.bam: [attaque2] = G21
    xxxxA3.bam: [attaque3] = G22
    xxxxA4.bam: [attaque4] = G24
    xxxxCA.bam: [lancement sort] = G26
    xxxxDE.bam: [mourant, tombant] = G14
    xxxxGH.bam: [blessé] = G13
    xxxxGU.bam: [se relevant] absent, à créer !
    xxxxSC.bam: [sur ses gardes] = absent, à créer !
    xxxxSD.bam: [Debout, passif] = G1
    xxxxSL.bam: [dormant] = G15
    xxxxSP.bam: [Invocation] = G25
    xxxxTW.bam: [mort] = G15
    xxxxWK.bam: [marchant] = G11

    À cela s'ajoute pour chaque fichier, sa symétrie :
    xxxxA1e.bam, xxxxA2e,.. xxxxWKe.bam

    Mais revenons à nos moutons...

    0. Préparation des fichiers, renommage

    Le premier travail consiste à renommer les fichier xxxxG1 à xxxxG26
    On aura donc :

    xxxxG1.bam    -> xxxxSD.bam
    xxxxG11    -> xxxxWK
    xxxxG12    -> xxxxSC
    xxxxG13    -> xxxxGH
    xxxxG14    -> xxxxDE et xxxxGU
    xxxxG15    -> xxxxSL et xxxxTW
    xxxxG2      -> xxxxA1 - A4
    xxxxG21    -> xxxxA1 - A4
    xxxxG22    -> xxxxA1 - A4
    xxxxG23    -> xxxxA1 - A4
    xxxxG24    -> xxxxA1 - A4
    xxxxG25    -> xxxxSP
    xxxxG26    -> xxxxCA

    Toutefois, on aura rarement l'occasion d'avoir cet éventail complet, car de nombreuses animations de créatures sont reprises dans plusieurs références, ou sont tout simplement inexistantes. Ce qui ne pose pas de problème dans le jeu : il n'est pas nécessaire que toutes les animations d'une créature existent, et l'on n'encourt pas de risque de plantage si le jeu demande une animation qui est absente pour un type d'action donné. L'action ne sera pas affichée, tout simplement. En consultant les animations des différentes créatures, on constate :

    Pour l'attaque, la grande majorité des animations se limitent à un ou deux mouvements différents, A1 A2, ou A1 A4. Quelques unes seulement en ont 3, et aucune n'en a 4. Mais ça reste possible si on le souhaite. Inversement, de nombreuses animations de BG reprennent le même mouvement d'attaque pour G2, G21,G22,G23,G24.

    Si l'on veut entrer dans les détails, ont peut créer des animations spécifiques à un type d'arme. Il faudra alors décliner une animation de l'arme seule, correctement synchronisée avec le corps, pour toutes les attitudes. L'animation a une syntaxe typique, basée sur le type d'arme : xxxxAA1, xxxxAA2 pour une hache (Axe); xxxxSA1,xxxxSWK, pour une épée (Sword), ce qui allonge considérablement le travail et n'est pris en charge par le jeu que pour de très rares animations !


    xxxxSC n'est souvent qu'une copie de xxxxSD pour les monstres ou les animaux.
    xxxxCA et xxxxSP ne sont utiles que pour des créatures faisant appel à la magie
    xxxxTW se résume à une frame, que l'on récupère dans xxxxDE
    xxxxGU peut se créer rapidement par inversion de l'animation de chute récupèrée dans xxxxDE

    Ce qui ramène souvent à 6 le nombre de mouvements indispensables.

    Dans le même ordre d'idée, on constate aussi que certaines animations de BG (notamment les animaux ou les monstres "basiques") se résument à peu de mouvements différents et comportent de nombreuses copies.
    Par exemple, l'Élan (AMOO) :

    amooG1 = comportement passif
    amooG11 = animal en marche
    amooG12 = amooG1
    amooG13 = inclus dans amooG14
    amooG14 = animal blessé, tombant, allongé et mort
    amooG15 = inclus dans amooG14

    amooG2 = fragment de G1
    amooG21 = amooG2
    amooG22 = amooG2
    amooG23 = amooG2
    amooG24 = amooG2
    amooG25 = amooG2
    amooG26 = amooG2

    Au final, on n'a que 3 fichiers .bam sur 12 de nécessaires pour créer notre animation !
    Et l'on pourra s'épargner de créer A2, A3, A4, SC, CA, SP, TW ce qui ramène notre animation à 7 fichiers. En revanche certains mouvements doivent être bien étudiés car il reposent sur des séries de réptition de frames, complexes à reproduire, et peuvent prendre du temps.

    Il est donc très utile de prendre d'abord le temps de visualiser les différents fichiers .bam d'une animation (dans Near Infinity par exemple), avant de se lancer à corps perdu dans son édition ou au contraire de se décourager face au travail à faire. C'est parfois plus simple qu'il n'y paraît.

     

    1. Modification des bam existants :
    Le plus gros travail consiste à éditer chaque fichier .bam, et supprimer les séquences en trop.

    Pour supprimer les séquences vides, le mieux est d'utiliser BamWorkshop 1

    (DLTCEP n'est pas très fiable à ce niveau, et Bamworkshop 2 est à proscrire : le programme essaie de corriger automatiquement l'index quand on supprime des frames, mais hélas il s'emmêle vite les pinceaux, et l'affichage des frames part complètement en live : utilisation à proscrire si on ne veut pas perdre du temps ! L'affichage des séquences/frames n'est pas non plus bien actualisé lorsqu'on fait des modifications, ce qui peut encore amener des erreurs. Bref, si Bamworkshop 2 est excellent pour la gestion/modification des palettes, il n'est pas du tout approprié pour ce type de boulot)


    - Lancer Bamworshop premier du nom et ouvrir le fichier .bam à modifier
    - Dans la fenêtre "Séquences", cliquer sur chaque séquence, et supprimer toutes les séquences vides, les orientations en trop, et les séquences redondantes. Bref il ne doit rester que 5 séquences [0 - 4] correspondant aux orientations :

    0 : Sud
    1 : Sud-Ouest
    2 : Ouest
    3 : Nord-Ouest
    4 : Nord

    Pour supprimer une séquence, le plus simple est de faire un clic droit sur la séquence concernée, puis de choisir "Delete sequence" (et répondre par l'affirmative à la question "Are you sure..." oui, on est sure)
    Cette phase de travail étant particulièrement casse-bonbons, il vaut mieux sauvegarder une fois qu'elle est terminée !

    À ce stade, on peut très bien s'arrêter là et passer à l'étape 3. Le fichier .bam que l'on aura conservera toutes les vieilles frames de l'ancienne version, et ne sera pas vraiment optimisé ni facile à retravailler, mais il fonctionnera parfaitement. D'ailleurs, dans certains cas où les séquences se comportent à la manière d'une partition musicale, avec de nombreuses répétitions, et crescendo/decrescendo de frames, il vaut mieux en rester là.

    L'étape suivante va supprimer définitivement de nombreux frames, pour ne garder que ceux qui sont utilisés pour la nouvelle animation. Cela permet d'avoir une animation plus légère, et clairement organisée. En revanche, il va falloir recréer entièrement les 5 séquences; ce qui peut prendre très peu (à peine 1 ou 2 minutes) ou beaucoup de temps (1 heure)

    2. Optimisation du fichier .bam
    Le fait de supprimer des séquences n'ayant aucune incidence sur les frames, on se retrouve avec un fichier bam comprenant de nombreuses frames dont moins d'un tiers sont réellement utilisées. Si l'on veut ne garder que les frames utiles au nouveau format, il va falloir supprimer les autres. Bamwokshop ayant ses limites, le fait de supprimer des frames va nous obliger à recréer entièrement les 5 séquences, ce qui peut prendre un temps très variable.
    Avant de se lancer dans cette procédure, il vaut mieux consulter l'organistion des séquences qui représentent un mouvement.

    •  Si le mouvement est traduit par une simple suite de frames (1,2,3,4,5..), cela ne prendra pas plus que 2 trois minutes.
    •  Si l'on rencontre une suite de répétitions (par ex. 1,1,2,2,3,3,4,4,5,5..) ça va déjà être plus long.
    •  Si l'on est face à un mouvement complexe, représenté par une longue suite d'images, ressemblant à une parition musicale (par ex. 1,1,2,2,3,3,3,3,2,2,1,1,2,2,3,3,3,3,4,4,5,5,5,4,4,3,3,2,2,2,2,3,3,4,5,6,7,7,7...) ça peut vraiment, vraiment, prendre du temps sous Bamworkshop 1 (en revanche cela peut se faire très vite sous DLTCEP qui permet d'ajouter des frames de façon ultra-rapide)

    Ces précautions prises...

    Suppression de frames
    Dans un premier temps, il faut repérer les n° des frames qui sont utilisés par les séquences qui restent, en cliquant sur chaque séquence, puis en cliquant sur Frame, pour voir les références des frames qui lui sont associées (il suffit de les noter sur un bout de papier)


    Par  ex : bamworskhop - manage0: 0-16; 1: 156-172; 2: 312-328; 3: 468-484; 4 : 624-640

    On va alors utiliser un outil très pratique dans BamWorkshop, la gestion de Frames, que l'on appelle depuis
    -> Edit > Manage frames
    Ou plus simplement en cliquant sur "Manage"

    Toutes les frames sont alors affichées.
    - Sélectionner celles qui sont inutiles, puis cliquer sur "Delete" (la combinaison Shift+clic fonctionne bien, mais pour des lignes entières). Pour y voir clair parmis ces séquences, rien n'empêche de garder une ou plusieurs frames vides entre les animations de deux séquences différentes (pour plus de lisibilité, je termine toujours une ligne d'anim avec des frame vides)

    Bamworkshop - Manage frames


    Maintenant que l'on a gardé seulement les frames qui nous intéressent, les séquences d'origine ne nous servent plus à rien, et par surcroit elles poseraient des problèmes puisque leur index est devenu erroné. Par ex. les frames n°164-173 sont devenues n°10-19. Or la séquence 1 continue à "appeler" les frames 164-173. Comme elles ne correspondent à rien, l'animation n'afficherait rien.
    C'est ce problème qu'à essayé de résoudre Bamworkshop 2...sans y parvenir !!! Le programme tente de reconstruire l'index lorsqu'on supprimer des images ou des séquences, mais il s'emmêle vite les pinceaux dans les références et l'animation devient inutilisable.

    Création de séquences et ajout de frames
    - Supprimer toutes les séquences 0 à 4 et en créer 5 nouvelles (clic droit dans la fenêtre Sequence -> Add sequence)
    - Associer les frames à chaque séquence (clic droit dans la fenêtre Frame -> Add Frame et sélectionner les frame à associer à une séquence donnée). Les différentes séquences doivent impérativement avoir le même nombre de frames (autrement le jeu a de forte chances de planter au lancement)

    bamworkshop  - ajouter des frames

    Cette opération faite, le fichier ne contient finalement que les 5 nouvelles séquences, et les frames qui sont appelées sont correctement ordonnées : on peut enregistrer son fichier .bam, et voir s'il est bien lu par Near Infinity ou DLTCEP (le plus simple est de le copier dans le dossier override)

    Il ne reste plus qu'à faire pareil pour les autres fichiers .bam !

    3. Création des bam ___e
    (cette phase de travail est identique à celle décrite dans l'article sur la conversion des animations de PST)

    La particularité des anims de type A1-WK par rapport aux animations G1-G26, est de gérer la symétrie (elle se résume à trois points de vues NE,E,SE) dans un fichier à part, de même nom, auquel est ajouté le suffixe "e" : xxxxA1e, xxxxA2e,... xxxxWKe. Ce fichier contient 8 séquences : 5 vides, et les 3 qui viennent d'être indiquées.
    On pourrait les créer manuellement, mais il se trouve que DLTCEP offre la possibilité de faire automatiquement cette procédure.

    • Ouvrir un fichier .bam sous DLTCEP ("Load external BAM")
    • Dans l'onglet "Tools", choisir "Create mirror frames", et DLTCEP crée automatiquement le bon nombre de frames (8) avec les 5 premières vides et les trois dernières en miroir.
    • Enregistrer (Save Bam As) (...DLTCEP nous prépare le nom de fichier en ajoutant le suffixe E au fichier que l'on vient d'ouvrir, du travail de pro !)

    Après avoir répété l'opération pour chacun des 13 fichiers, on dispose maintenant des 26 fichiers .bam propres aux animations de type A1-WK.

    Conversion des animations de Baldur's Gate pour IWD2




    votre commentaire