De quoi s'agit-il ?


Le mod Infinity Animations modifie le moteur du jeu Baldur's Gate II : ToB de façon à ce qu'il dispose d'animations supplémentaires de créatures et de personnages (appelées « slots d'animation » dans ce document [NdT : « emplacements » ou « index »]). Il fonctionne ainsi comme une base de données centralisée, utilisable par quiconque souhaite ajouter de nouvelles animations de créature dans le jeu sans être confronté à des problèmes de conflits et d'incompatibilité avec d'autres mods.

Ce document est destiné aux moddeurs qui souhaitent rendre leur mod compatible avec Infinity Animations. Il fonctionne comme un tutoriel et s'efforce de vous guider à travers chaque étape nécessaire pour accomplir ces tâches.


Infinity Animations : Note pour les moddeurs > De quoi s'agit-il ?HAUT DE PAGE

Fichier ANIMATE.ids


Dans un monde parfait, Infinity Animations devrait être installé très tôt comme un pack correctif qui fonctionnerait comme une base de données centralisée, utilisable pour ajouter de nouvelles animations de créature dans le ou les utiliser dans un mod. Malheureusement, comme il a été conçu après la première génération de mega-mods qui écrasaient les fichiers du jeu, notamment pour résoudre les conflits de slots d'animation et rétablir les animations de base que les mega-mods avaient modifiées, il doit être installé après ces mega-mods, au moins jusqu'à ce que leurs auteurs les mettent à jour pour tirer parti de toutes les possibilités offertes par Infinity Animations...

En attendant ce jour merveilleux, voici la méthode idéale pour vous assurer que les nouvelles animations que vous allez utiliser ou installer ne provoquent aucun problème d'incompatibilité avec les autres mods.


La première chose à faire est de s'assurer que l'on dispose du bon fichier ANIMATE.ids. Et malheureusement, ce n'est pas aussi simple que ça en a l'air. 🙁


En effet, de nombreux mods modifient, ou pire encore, écrasent le fichier ANIMATE.ids existant. Résultat des courses : une ombre des roches peut se retrouver avec une animation de cyclope ou de gobelin. Ça fait plutôt désordre, vous ne trouvez pas ?

Un autre effet pervers des modifications successives du fichier ANIMATE.ids est l'empilement d'animations identiques répertoriées avec un nom ou/et un index différent. Non seulement, ces nouvelles entrées sont redondantes et inutiles, mais elles peuvent provoquer de graves dysfonctionnements dans l'installation de mods qui utilisent la commande IDS_OF_SYMBOL (animate ~animation name~) pour assurer leur compatibilité aussi bien avec les jeux classiques que EE.

C'est pourquoi vous devez respectivement suivre les instructions suivantes pour utiliser des animations non présentes dans le jeu de base :

1. Installez le composant principal d'Infinity Animations avant votre mod. Ce dernier harmonise le fichier ANIMATE.ids pour le rendre utilisable par tous les mods et tous les jeux.

2. N'écrasez jamais le fichier ANIMATE.ids.

3. Privilégiez la procédure décrite dans les chapitres suivants pour ajouter vos nouvelles animations.

⚠️ N'oubliez pas que ces consignes s'appliquent aussi au fichier ANISND.ids.


Infinity Animations : Note pour les moddeurs > Fichier ANIMATE.idsHAUT DE PAGE

Déclarer et ajouter un slot d'animation (jeu classique)


Si vous souhaitez ajouter vos propres animations dans le jeu, veuillez prendre le temps de lire et de suivre les directives décrites dans le paragraphe Ajouter un slot d'animation de la documentation de l'outil IA Reference Picker. La procédure est très simple et ne devrait durer que quelques minutes. Si tous le monde - vous y compris(e) - les respecte, les enregistrements de nouveaux slots ne nécessiteront aucune action de modération, ni demande d'approbation.

Si vous avez lu et compris ces directives et si vous estimez que votre demande d'enregistrement est admissible, passez au chapitre suivant.


Infinity Animations : Note pour les moddeurs > Déclarer et ajouter un slot d'animation (jeu classique)HAUT DE PAGE

Ajouter un slot d'animation dans les jeux EE


Ajouter un slot d'animation dans les jeux EE est un peu plus facile que le faire dans un jeu classique. Et surtout, il ne nécessite pas d'installer Infinity Animations. 😉


⚠️ Si votre mod est aussi destiné à être installé dans un jeu classique, commencez par enregistrer votre animation à l'aide l'utilitaire IA Reference Picker comme indiqué dans la section précédente.




1. Choisissez le type de slot d'animation que vous souhaitez déclarer

À ce stade, vous devriez connaître avec certitude le type de format de votre animation. En cas de doute, consultez le tableau des types d'animation.

Une fois vos fichiers bam réalisés, passez à l'étape suivante.




2. Installer votre slot dans le jeu

Le plus simple est d'utiliser la procédure développée pour installer Infinity Animations dans un jeu EE. Pour cela, vous aurez besoin des librairies de fonctions suivantes :

INCLUDE ~%MOD_FOLDER%/lib/a7_functions.tpa~
INCLUDE ~%MOD_FOLDER%/lib/gw_functions_ee.tpa~

avec :

  • a7_functions.tpa : Ajout automatique de slots d'animations de créatures dans BG2EE. Merci à Argent77 pour sa procédure !
  • gw_functions_ee.tpa : liste de macros et de fonctions gérant l'installation des slots d'animation dans les jeux EE.
  • gw_ee_compat_arrays.tph : listes de tables utilisées pour ajouter et installer de nouvelles animations de créature (slots, fichiers bam, wav...).

Comment ça marche ?

Le principe est simple : la fonction GW_FIND_FREE_ANIM_SLOT recherche le premier slot d'animation disponible selon le format de l'animation traitée, défini dans la table "GW_anim_slots_ee".

  ► Fonction GW_FIND_FREE_ANIM_SLOT (définie dans la librairie gw_functions_ee.tpa) et table GW_anim_slots_ee (définie dans la librairie gw_ee_compat_arrays.tph) :

/* ================================================================================================================================================ *
 *  FUNCTION GW_FIND_FREE_ANIM_SLOT : LOOKS for the first available animation slot matching a given animation type.                                 *
 *                                    RECHERCHE le premier slot d'animation disponible selon le format de l'animation.                              *
 * ------------------------------------------------------------------------------------------------------------------------------------------------ *
 *  Returns the first available creature animation slot in the range matching its type defined by %GWFormatAnim%.                                   *
 *  Original function courtesy of Argent77 - Modified by Gwendolyne to make Infinity Animations installation compatible with EE games.              *
 * ------------------------------------------------------------------------------------------------------------------------------------------------ *
 *  INT_VAR GWSlotFound  = Used internally to stop the function when a slot is found (DON'T MODIFY IT!).                                            *
 *  STR_VAR GWFormatAnim = A slots range defined in GW_anim_slots_ee array (built in gw_ee_compat_arrays.tph).                                      *
 *                         Each slots range is defined with the lowest and highest available creature animation slots matching its animation type.  *
 *                         The array also defines how many slots to skip after each iteration, starting from the lowest one.                        *
 *  RET slot             = Free animation slot found. Returns -1 if none found.                                                                     *
 * ================================================================================================================================================ */

DEFINE_ACTION_FUNCTION ~GW_FIND_FREE_ANIM_SLOT~
    INT_VAR GWSlotFound  = 0
    STR_VAR GWFormatAnim = ""
    RET     slot
BEGIN

    ACTION_IF ("%GWFormatAnim%" STR_CMP "") BEGIN

        ACTION_PHP_EACH GW_anim_slots_ee AS slots => GW_slot BEGIN

            ACTION_IF (GWSlotFound = 0) BEGIN

                ACTION_IF ("%slots_0%" STR_EQ "%GWFormatAnim%") OR ("%GW_slot%" STR_EQ "%GWFormatAnim%") BEGIN

                    OUTER_SET GW_slotMin = %slots_1%
                    OUTER_SET GW_slotMax = %slots_4%
                    ACTION_IF (%slots_3% > 0) BEGIN
                        OUTER_SET GW_iter = (GW_slotMax - GW_slotMin) / %slots_3%
                        // Looping through iterations between GW_slotMin and GW_slotMax
                        OUTER_FOR (i = 0 ; i <= GW_iter ; ++i) BEGIN
                            ACTION_IF (GWSlotFound = 0) BEGIN
                                OUTER_SET slotMin = GW_slotMin + (i * %slots_3%)
                                OUTER_SET slotMax = slotMin + %slots_2%
                                LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin slotMax RET slot END
                                ACTION_IF ("%slot%" >= 0) BEGIN
                                    OUTER_SET GWSlotFound = 1
                                END
                            END
                        END // of Looping through iterations between GW_slotMin and GW_slotMax
                    END ELSE BEGIN
                        ACTION_IF (GWSlotFound = 0) BEGIN
                            LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = GW_slotMin slotMax = GW_slotMax RET slot END
                            ACTION_IF ("%slot%" >= 0) BEGIN
                                OUTER_SET GWSlotFound = 1
                            END
                        END
                    END

                END // ACTION_IF ("%slots_0%" STR_EQ "%GWFormatAnim%") OR ("%GW_slot%" STR_EQ "%GWFormatAnim%")

            END     // of ACTION_IF (GWSlotFound = 0)

        END         // of ACTION_PHP_EACH

    END             // of ACTION_IF ("%GWFormatAnim%" STR_CMP "")

END                 // of DEFINE_ACTION_FUNCTION

/* =========================================================================================== *
 *  ARRAY GW_anim_slots_ee : DEFINES available slots ranges matching each animation type.      *
 * ------------------------------------------------------------------------------------------- *
 *  Used by function GW_FIND_FREE_ANIM_SLOT to install new animation slots in EE games.        *
 * ------------------------------------------------------------------------------------------- *
 *  1st value = animation type.                                                                *
 *  2nd value = lowest available creature animation slot for this animation type.              *
 *  3rd value = how many slots to search inside each step.                                     *
 *  4th value = how many slots to skip after each iteration, starting from the lowest one.     *
 *  5th value = highest available creature animation slot for this animation type.             *
 *  6th value = specific range to customize where to install new slots.                        *
 * ------------------------------------------------------------------------------------------- *
 *  Use: to install a BG1 SIMPLE MONSTER animation, you can                                    *
 *   - Either choose the general 1st value label: BG1SM.                                       *
 *   - Or choose a specific range: 1SM7100 will look for the first free available slot from    *
 *     0x7110 to 0x7200, reading 2 slots every 0x10 step (0x7110, 0x7111, 0x7120, 0x7121...).  *
 * =========================================================================================== */ 



Si un slot est trouvé, on le convertit en valeur hexadécimale (fonction TO_HEX_NUMBER) pour l'insérer dans le fichier ANIMATE.ids. Enfin, on assigne cette variable à l'array $GWNewIni(~%GWNewAnim%~) que l'on utilisera pour lui attribuer un fichier .ini.




Quoi de mieux qu'un exemple pour retranscrire ce code dans l'installateur tp2 ? 😉

/* --------------------------------------------------------- *
 *  BGII SPLIT (EE: monster, split_bams=1): 0x7300 - 0x7f00  *
 * --------------------------------------------------------- */

ACTION_FOR_EACH GWNewAnim IN ~DAO~ ~DAO_LEGS~ ~EFREETI_LEGS~ ~JANNI~ ~JANNI_LEGS~ ~MARID~ ~MARID_LEGS~ BEGIN
    SILENT
    LAF ~GW_FIND_FREE_ANIM_SLOT~ STR_VAR GWFormatAnim = BG2SPLIT RET slot END
    ACTION_IF (slot < 0) BEGIN
        WARN @1141  // ~!!!  ATTENTION !!! : il n'existe aucun emplacement (slot) disponible pour ajouter l'animation %GWNewAnim%. !!!~
    END ELSE BEGIN
        LAF ~TO_HEX_NUMBER~ INT_VAR value = slot minDigits = 4 RET hexNumber END
        APPEND ~animate.ids~ ~0x%hexNumber% %GWNewAnim%~ UNLESS ~%GWNewAnim%~
        OUTER_SPRINT $GWNewIni(~%GWNewAnim%~) EVAL "%hexNumber%"
        CLEAR_IDS_MAP
    END
END

/* -------------------------------------------- *
 *  IWD (EE monster_icewind): 0xe000 --> 0xefff *
 * -------------------------------------------- */

ACTION_FOR_EACH GWNewAnim IN ~BOVINE_AXE_THING~ BEGIN
    SILENT
    // 1. D'abord, on essaie de l'installer le plus près possible de 0xe070 MINOTAUR
    LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0xe070 slotMax = 0xe080 RET slot END
    // 2. Si ce n'est possible, on l'installe dans le premier slot disponible
    ACTION_IF (slot < 0) BEGIN
       LAF ~GW_FIND_FREE_ANIM_SLOT~ STR_VAR GWFormatAnim = IWD RET slot END
        ACTION_IF (slot < 0) BEGIN
        WARN @1141  // ~!!!  ATTENTION !!! : il n'existe aucun emplacement (slot) disponible pour ajouter l'animation %GWNewAnim%. !!!~
        END
    END
    ACTION_IF (slot > 0) BEGIN
         LAF ~TO_HEX_NUMBER~ INT_VAR value = slot minDigits = 4 RET hexNumber END
        APPEND ~animate.ids~ ~0x%hexNumber% %GWNewAnim%~ UNLESS ~%GWNewAnim%~
        OUTER_SPRINT $GWNewIni(~%GWNewAnim%~) EVAL "%hexNumber%"
        CLEAR_IDS_MAP
    END
END

ACTION_FOR_EACH GWNewAnim IN ~MARILITH_DARK~ BEGIN
    SILENT
    // 1. D'abord, on essaie de l'installer le plus près possible de 0xe090 MARILITH
    LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0xe090 slotMax = 0xe0a0 RET slot END
    // 2. Si ce n'est possible, on l'installe dans le premier slot disponible
    ACTION_IF (slot < 0) BEGIN
        LAF ~GW_FIND_FREE_ANIM_SLOT~ STR_VAR GWFormatAnim = IWD RET slot END
        ACTION_IF (slot < 0) BEGIN
            WARN @1141
        END
    END
    ACTION_IF (slot > 0) BEGIN
        LAF ~TO_HEX_NUMBER~ INT_VAR value = slot minDigits = 4 RET hexNumber END
        APPEND ~animate.ids~ ~0x%hexNumber% %GWNewAnim%~ UNLESS ~%GWNewAnim%~
        OUTER_SPRINT $GWNewIni(~%GWNewAnim%~) EVAL "%hexNumber%"
        CLEAR_IDS_MAP
    END
END

ACTION_FOR_EACH GWNewAnim IN ~BEETLE_BOMBARDIER_NWN~ BEGIN
    SILENT
    // 1. D'abord, on essaie de l'installer le plus près possible de 0xe220 BEETLE_BOMBARDIER
    LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0xe220 slotMax = 0xe230 RET slot END
    // 2. Si ce n'est possible, on l'installe dans le premier slot disponible
    ACTION_IF (slot < 0) BEGIN
        LAF ~GW_FIND_FREE_ANIM_SLOT~ STR_VAR GWFormatAnim = IWD RET slot END
        ACTION_IF (slot < 0) BEGIN
            WARN @1141
        END
    END
    ACTION_IF (slot > 0) BEGIN
        LAF ~TO_HEX_NUMBER~ INT_VAR value = slot minDigits = 4 RET hexNumber END
        APPEND ~animate.ids~ ~0x%hexNumber% %GWNewAnim%~ UNLESS ~%GWNewAnim%~
        OUTER_SPRINT $GWNewIni(~%GWNewAnim%~) EVAL "%hexNumber%"
        CLEAR_IDS_MAP
    END
END 




Si vous ne savez pas paramétrer le fichier .INI définissant les paramètres d'affichage de votre animation, veuillez consulter le chapitre suivant. Sinon, il ne vous reste plus qu'à installer les fichiers relatifs à vos animations, comme indiqué dans ce chapitre.


Infinity Animations : Note pour les moddeurs > Ajouter un slot d'animation dans les jeux EEHAUT DE PAGE

Description des fichiers .ini


Tous les paramètres et les réglages permettant au moteur du jeu d'afficher les animations dans le jeu sont définies dans des fichiers .INI (un par slot d'animation) dont les noms correspondent à l'index du slot d'animation (par exemple 1100.ini pour le slot 0x1100).

  ► 1100.ini :

// MTAN tanarri

[general]
animation_type=1000
move_scale=8
ellipse=32
color_blood=47
color_chunks=255
sound_freq=8
personal_space=5
cast_frame=4

[monster_quadrant]
caster=1
extend_direction=1
extend_direction_test=9
false_color=0
path_smooth=0
quadrants=4
resref=MTAN

[sounds]
attack=tanar04,blank,blank
attack_frame=0,0,0
awake=
awake_frame=0
cast=
cast_frame=0
conjure=
conjure_frame=0
damage=tanar06
damage_frame=0
die=tanar07a
die_frame=0
head_turn=
head_turn_frame=0
ready=
ready_frame=0
shoot=
shoot_frame=0
twitch=
twitch_frame=0
walk=
walk_frame=0
attack_slash=tanar03,blank,blank
attack_slash_frame=0,0,0
attack_backslash=tanar03,blank,blank
attack_backslash_frame=0,0,0
attack_jab=tanar04,blank,blank
attack_jab_frame=0,0,0
emerge=
emerge_frame=0
hide=
hide_frame=0
sleep=
sleep_frame=0
battle_cry=tanar01a,tanar02a
battle_cry_frame=0,0
selection=tanar01a
selection_frame=0
fall=fal_03b
fall_frame=0 



Chaque fichier .INI comporte trois sections, décrites dans les paragraphes suivants : [general], [animation] et [sounds].




[general]Paramètres généraux de l'animation


Cette section énumère tous les paramètres globaux nécessaires pour afficher l'animation, indépendamment de son type. Cependant, si la plupart sont disponibles pour tous les types d'animation, certains ne fonctionnent avec quelques types.


Variable Description Valeurs possibles
animation_type Comme son intitulé l'indique, il s'agit du type d'animation qui sera affiché par le moteur du jeu.

Vous trouverez ci-dessous leur correspondance avec les termes utilisés par Infinity Animations dans les jeux classiques :
  • 1000 = BGI MONSTER LONG 4 PARTS sans directions miroir, BGII SPLIT 4 PARTS (slots de la série 0x13nn).
  • 1100 = BGI MONSTER LONG 4 PARTS avec directions miroir.
  • 1200 = DRAGON 9 PARTS.
  • 2000 = BGI SIMPLE CASTER BOW, BGI SIMPLE CASTER SWORD et BGI SIMPLE CASTER.
  • 3000 = ANKHEG.
  • 5000 = CHARACTER BGII.
  • 6000 = CHARACTER BGII et CHARACTER BGI.
  • 7000 = BG1 SIMPLE MONSTER, BGII SPLIT et BGII UNSPLIT EXT.
  • 8000 = BGI SIMP. MONST (avec palette permettant de d'affecter les couleurs de la créature).
  • 9000 = BGI MONSTER LONG (avec palette permettant de d'affecter les couleurs de la créature).
  • a000 = BGI MONSTER LONG
  • e000 = IWD.
nombre (4 chiffres)

0000 = effect
1000 = monster_quadrant, multi_new
2000 = monster_layered
3000 = monster_ankheg
4000 = town_static
5000 = character
6000 = character, character_old
7000 = monster_old, monster
8000 = monster_layered
9000 = monster_large
a000 = monster_large16
b000 = ambient_static
c000 = ambient
d000 = flying
e000 = monster_icewind
move_scale Vitesse de déplacement de base de l'animation. La vitesse par défaut des créatures humanoïdes est 9.
Note : PST:EE utilise un nombre avec une virgule flottante.
Nombre ou Virgule flottante
ellipse Rayon du cercle de sélection de la créature selection. La valeur par défaut des créatures humanoïdes est 16. Nombre
color_blood Sans commentaires... 😉
Cependant, comme cette couleur utilise la partie gauche du gradient de chaque index de la couleur de palette disponible, il est quasiment impossible de les différencier dans le jeu. C'est pourquoi il est conseillé d'utiliser les plages 45-60 et 115-150 pour obtenir un rendu optimal.
Nombre compris entre 0 et 255
color_chunks Index du gradient de couleur lorsque l'animation explose.
Il détermine aussi si l'animation peut ou pas " exploser " (utilisé par exemple par l'effet EFFECT_EXPLODINGDEATH).
Nombre compris entre 0 et 255

0 = Oui [par défaut]
255 = Non (comme les trolls)
sound_freq Fréquence de lecture du jeu de sons (détermine le délai entre chaque son). Le réglage de la plupart des animations est inférieur à 10. Nombre compris entre 0 et 255
sound_death Fichier sonore joué quand la créature meurt.
Note : ne semble pas utilisé.
Chaîne alphanumérique
personal_space Contrôle la manière sont les créatures interagissent avec les contraintes de leur environnement et peuvent franchir des portes ou des passages étroits. Il est mesuré en unités utilisées par les search maps.
La plupart des créatures ont une valeur de 3 (humanoïdes), les dragons (créatures de type colossal) de 13.
Nombre compris entre 0 et 255
cast_frame Détermine le délai (compté en images du fichier bam de l'animation) avant de jouer l'animation de lancement de sort. Nombre
brightest Mode de fusion (transmis directement au moteur de rendu).

1. Si brightest=1 et multiply_blend=0, le mode de fusion suivant est activé
  • srcFactor = GL_ONE_MINUS_DST_COLOR
  • destFactor = GL_ONE
2. Si brightest=1 et multiply_blend=1, le mode de fusion suivant est activé
  • srcFactor = GL_SRC_COLOR
  • destFactor = GL_ONE
Boolean:

0 = Non [par défaut]
1 = Oui
multiply_blend Mode de fusion produit (transmis directement au moteur de rendu). 1. Si multiply_blend=1 et brightest=0, le mode de fusion suivant est activé
  • srcFactor = GL_DST_COLOR
  • destFactor = GL_ONE
2. Si multiply_blend=1 et brightest=1, le mode de fusion suivant est activé
  • srcFactor = GL_SRC_COLOR
  • destFactor = GL_ONE
Note : souvent utilisé en conjonction avec des fichiers bam permettant d'ajouter un effet glow_layer.
Booléen :

0 = Non [par défaut]
1 = Oui
light_source Détermine si certains effets de teinte (par exemple, l'éclairage environnemental comme nuit/jour, climat ou ombres) affectent ou pas l'animation de la créature. Booléen :

0 = Non [par défaut]
1 = Oui
new_palette Il s'agit d'un fichier BMP qui modifie la palette des couleurs des fichiers .BAM de l'animation.
Par exemple, la palette du fichier MWLF_WI.BMP écrase les couleurs des fichiers MWLF bam pour afficher l'animation du loup des glaces.
Chaîne alphanumérique
height_offset Utilisé pour calculer le haut de la boîte de délimitation d'affichage de certains effets, comme la barre de santé, les éclaboussures de sang, etc.
Note : semble utilisé seulement dans BG:EE et SoD...
Nombre
combat_round_0
combat_round_1
combat_round_2
combat_round_3
combat_round_4
Une pseudo-image (fichier BMP) qui définit un schéma d'attaque (comment les séquences d'animations d'attaques sont activées pendant un round de combat). Chaîne alphanumérique
glow_layer Il s'agit du préfixe des fichiers BAM utilisés comme calque supplémentaire d'arrière-plan pour les animations qui scintillent (comme les solaires, les devas et les planétaires).

Note : Cette option est actuellement définie dans la mauvaise section INI. Pour être efficace, elle devrait être déplacée dans la section [monster] des animations de type 7000.
De plus, il semble qu'elle n'a pas été entièrement implémentée et ne semble pas être appliquée aux animations d'armes. Et elle ne fonctionne pas correctement avec les animation de type unsplit (split_bams=0).
Chaîne alphanumérique
walk_sound La série de fichiers son utilisée pour jouer les sons de déplacement de la créature. Chaîne alphanumérique




[Specific animation]Paramètres spécifiques à chaque type d'animation


This section lists all settings related to the animation type. Replace Specific animation in square brackets with the animation type name matching the animation_type variable.


.
Variable Description Valeurs possibles
armor_max_code

(uniquement pour les animations character et character_old)
Niveau d'armure maximum dont un personnage peut s'équiper.

Il est fondamentalement fixé à 4 pour tous les personnages, sauf pour le moine (1).
1 = Aucune armure
2 = Cuir / Besantine
3 = Cote de mailles / Robe
4 = Armure de plate
caster

(uniquement pour les animations monster_layered et monster_quadrant)
Détermine si les séquences A2/A3 sont (aussi) utilisées comme séquences CA/SP (remplacées par les overlays d'armes) ou pas.
monster_quadrant : détermine si la séquence A3 est utilisée comme CA.
Booléen :

0 = Non [par défaut]
1 = Oui
can_lie_down Détermine si l'animation dispose ou pas de séquences d'images montrant la créature tombant au sol quand elle meurt ou est inconsciente (Réglage utilisé par les animations Death et Sleep).
Note : En fait, ne semble pas relié à l'affichage de l'animations.
Note de Bubb : "When a creature is being created and normally 'gets up' (like in summons), determines whether it immediately assigns to its self-reporting list, or LIST_BACK (when can_lie_down=1). I didn't see a direct link to animation sequences, but maybe I missed some connection."
Booléen :

0 = Non [par défaut]
1 = Oui
detected_by_infravision Détermine si la créature se teinte de rouge quand elle est détectée.
Par exemple, les créatures mort-vivantes ne sont pas détectées par l'infravision.
Booléen :

0 = Non [par défaut]
1 = Oui
double_blit Effect inconnu : probablement un paramètre de performance utilisé dans les jeux classiques.

Note : Ce paramètre n'est apparemment pas utilisé par les jeux EE (il n'apparaît que pour l'animation 0x6400 drizzt), et devrait probablement être toujours réglé à 0.
Booléen :

0 = Non [par défaut]
1 = Oui
mirror Détermine si les directions « Est » doivent être générées ou pas.

Note : Ce paramètre n'est apparemment pas utilisé par les jeux EE (il n'apparaît que pour l'animation 0x3001 neothelid), et devrait probablement être toujours réglé à 0 (les directions « Est » sont inclues dans les fichiers xxxE BAM).
Booléen :

0 = Non [par défaut]
1 = Oui
extend_direction

(uniquement pour les animations monster_quadrant et monster_ankheg)
Détermine si les fichiers BAM de l'animation nécessitent ou pas des directions « Est ».
Par défaut ("Non"), le moteur du jeu les génère automatiquement. Sinon, les directions « Est » sont disponibles dans les fichiers xxxxE BAM.

Animation de type monster_ankheg : Nombre de directions disponibles par séquence (par exemple 5 pour les ankhegs).
Booléen :

0 = Non [par défaut]
1 = Oui
extend_direction_test

(uniquement pour les animations monster_quadrant)
Nombre de directions nécessaires pour chaque série de fichiers BAM si les directions « Est » doivent être générées par le moteur.
Note de Bubb : "When sprite mirroring is enabled / direction is being extended, determines how many valid directions the base vidcell holds."
9 (quand spécifié) ou 8 (neothelid)
false_color Détermine si l'animation applique ou pas les couleurs définies dans les fichiers de la créature. Booléen :

0 = Non [par défaut]
1 = Oui
invulnerable Détermine si une créature est in-tuable par défaut (par exemple les animations d'enfant). Booléen :

0 = Non [par défaut]
1 = Oui
list_type

(uniquement pour les animations ambient)
Variable utilisée en interne par le moteur pour appliquer certains effets à la créature.
2 signifie "flying" (comme les chauve-souris): non détecté par infravision, WK transformé en SC, de nombreuses immunités ou propriétés sont codées en dur (comme polymorph, pathfinding, etc.).
Nombre [0,1,2]
path_smooth Détermine comment la Recherche d'itinéraire (" pathfinding ") est calculée.

Notez que le réglage path_smooth=1 manque de documentation (nous supposons qu'il utilise probablement autant d'angles que de directions disponibles).
Booléen :

0 = utilise seulement des angles de 45° (S, SW, W, NW, N,...)
1 = utilise des angles arbitraires
quadrants Nombre de segments dans lesquels les fichiers BAM ont été découpés. Nombre
equip_helmet

(uniquement pour les animations character et character_old)
Détermine si les animations de casques sont affichées ou pas. Booléen :

0 = Non [par défaut]
1 = Oui
height_code

(uniquement pour les animations character et character_old)
Préfixe des fichiers BAM d'animation d'armes utilisées pour équiper le personnage ("WQL", "WQM", "WQN", "WQS", "WPL", "WPM" ou "WPS").
Option de repli si les variables height_code_helmet ou height_code_shield ne sont pas définies.
Chaîne alphanumérique
height_code_helmet

(uniquement pour les animations character et character_old)
Même principe que la variable précédente, mais pour les animations de casques. Chaîne alphanumérique
height_code_shield

(uniquement pour les animations character)
Même principe que la variable précédente, mais pour les animations de boucliers.
Note : il semble que la série WQH n'existe pas...
Chaîne alphanumérique
resref Préfixe des fichiers BAM de l'animation de base (MDEM, MTRO...).
Note pour les animations de type character : ce réglage peut être remplacé pour les animations disposant de sprites spécifiques à chaque classe (resref_armor_base et resref_armor_specific).
Chaîne alphanumérique
shadow

(uniquement pour les animations effect et character_old)
  • effect : le nom d'un fichier BAM d'ombres.
  • character_old : modifie le fichier d'ombre par défaut "CSHD" par un autre. Les animations Drizzt et Sarevok utilisent des animations d'ombre codées en dur (respectivement " CSHD " et " SSHD ").
Chaîne alphanumérique
split_bams Détermine si les fichiers BAM sont scindés ou pas.

Note : le réglage split_bams=0 implique que les animations sont regroupées dans des fichiers BAM avec les suffixes G1-G2.
Booléen :

0 = Non [par défaut]
1 = Oui (les animations sont réparties dans plusieurs fichiers)
translucent Détermine si l'animation est rendue ou pas avec un effet de semi-transparence. Booléen :

0 = Non [par défaut]
1 = Oui
resref_weapon1

(uniquement pour les animations monster_layered et monster_layered_spell)
Détermine quel suffixe des fichiers BAM utiliser pour afficher les animations d'armes à une main. Deux caractères (MS, S1, SS)
resref_weapon2

(uniquement pour les animationsmonster_layered et monster_layered_spell)
Détermine quel suffixe des fichiers BAM utiliser pour afficher les animations d'armes à deux mains. Deux caractères (BW, HB)
dual_attack

(uniquement pour les animations monster_layered_spell)
La séquence d'animation SEQ_SHOOT se transforme en SEQ_READY, et A3 a une chance d'utiliser A1. Booléen :

0 = Non [par défaut]
1 = Oui
weapon_left_handk

(uniquement pour les animations monster_icewind animations)
Bien que relativement répandue, cette variable ne semple pas utilisée (ou implémentée ?) dans les jeux EE. Boolean:

0 = No [default]
1 = Yes
resref_paperdoll Préfixe du ficher BAM qui affiche le paperdoll de la créature dans l'écran d'inventaire (CHMC, CHMF...).
Nomenclature : [resref_paperdoll][armor_level]INV.BAM
Chaîne alphanumérique
resref_armor_base

(uniquement pour les animations character et character_old)
Il s'agit du 4ème caractère qui remplace le dernier caractère du préfixe des fichiers BAM de l'animation de base pour les animations de personnages communes.

En général, il s'agit de "B" pour les clercs et les guerriers, "M" pour les moines, "T" pour les voleurs et "W" pour les mages.
Un seul caractère
resref_armor_specific

(uniquement pour les animations character et character_old)
Il s'agit du 4ème caractère qui remplace le dernier caractère du préfixe des fichiers BAM de l'animation de base pour les animations de personnages disposant de classes spécifiques.
Utilisé quand le niveau de l'armure équipée est égal au niveau d'armure maximum dont un personnage peut s'équiper.
En règle général, c'est le même caractère utilisé par la variable resref_armor_base, saufs pour les clercs et les guerriers qui partagent la même valeur de variable resref.
Ils utilisent les mêmes fichiers d'animation lorsqu'ils sont équipés d'armures plus légères que l'armure de plate, et des animations différentes quand ils portent une plate.
Ainsi, un prêtre et un guerrier humains utiliseront le même préfixe d'animation CHMB pour les trois premiers niveaux d'armure (sans armure, cuir et cotte de mailles), mais lorsqu'ils s'équiperont d'une plate, le clerc utilisera les fichiers CHMC et le guerrier les fichiers CHMF.
En général, il s'agit de "C" pour les clercs, "F" pour les guerriers, "M" pour les moines, "T" pour les voleurs et "W" pour les mages.
Un seul caractère
hide_weapons

(uniquement pour les animations character_old)
Utilisé par les animations ne disposant pas de variable height_code ; c'est-à-dire dont les animations d'armes sont déjà intégrées dans leurs fichiers BAM basiques. [0x6400 UDRZ drizzt, 0x6401 UELM elminster et 0x6404 USAR sarevok]

0 : affiche les animations d'armes séparées - 1 : n'affiche pas les animations d'armes
Booléen :

0 = Non [par défaut]
1 = Oui
palette1

(uniquement pour les animations monster et monster_multi)
Il s'agit d'un fichier BMP contenant une palette de couleurs qui remplace celles des séries de fichiers BAM xxxxG1 (unsplit) ou xxxxG1x (split).
Note : généralement identique à la variable new_palette.
Chaîne alphanumérique
palette2

(uniquement pour les animations monster et monster_multi)
Il s'agit d'un fichier BMP contenant une palette de couleurs qui remplace celles des séries de fichiers BAM xxxxG2 (unsplit) ou xxxxG2x (split).
Note : son intitulé suit généralement la même structure que celle de palette1. Par exemple; si MPAL_CL1 est le fichier palette1, alors palette2 est MPAL_CL2.
Chaîne alphanumérique
palette3

(uniquement pour les animations monster_multi animations)
Il s'agit d'un fichier BMP contenant une palette de couleurs qui remplace celles des séries de fichiers BAM xxxxG3 (unsplit) ou xxxxG3x (split).

Cependant, un bug dans son implémentation dans le moteur a rendu cette variable caduque. En conséquence, le moteur du jeu utilise comme palette la valeur de la variable new_palette (section [general]) + le nombre du groupe d'animation (par exemple, la valeur resref "MDR1_GR" du dragon vert implique que son animation utilisera les fichiers MDR1_GR1, MDR1_GR2, MDR1_GR3, MDR1_GR4 et MDR1_GR5).
Chaîne alphanumérique
palette4

(uniquement pour les animations monster_multi animations)
Il s'agit d'un fichier BMP contenant une palette de couleurs qui remplace celles des séries de fichiers BAM xxxxG4 (unsplit) ou xxxxG4x (split).

Cependant, un bug dans son implémentation dans le moteur a rendu cette variable caduque. En conséquence, le moteur du jeu utilise comme palette la valeur de la variable new_palette (section [general]) + le nombre du groupe d'animation (par exemple, la valeur resref "MDR1_GR" du dragon vert implique que son animation utilisera les fichiers MDR1_GR1, MDR1_GR2, MDR1_GR3, MDR1_GR4 et MDR1_GR5).
Chaîne alphanumérique
palette5

(uniquement pour les animations monster_multi animations)
Il s'agit d'un fichier BMP contenant une palette de couleurs qui remplace celles des séries de fichiers BAM xxxxG5 (unsplit) ou xxxxG5x (split).

Cependant, un bug dans son implémentation dans le moteur a rendu cette variable caduque. En conséquence, le moteur du jeu utilise comme palette la valeur de la variable new_palette (section [general]) + le nombre du groupe d'animation (par exemple, la valeur resref "MDR1_GR" du dragon vert implique que son animation utilisera les fichiers MDR1_GR1, MDR1_GR2, MDR1_GR3, MDR1_GR4 et MDR1_GR5).
Chaîne alphanumérique
palletized

(uniquement pour les animations effect)
Semble de pas avoir été implémenté. Booléen :

0 = Non [par défaut]
1 = Oui
alt_palette

(uniquement pour les animations effect)
Semble spécifier une palette de substitution pour l'animation d'effet. Chaîne alphanumérique
random_render

(uniquement pour les animations effect)
Détermine si le moteur choisit d'afficher ou pas un cycle aléatoire de l'animation lorsqu'elle est est lancée. Booléen :

0 = Non [par défaut]
1 = Oui
delta_z

(uniquement pour les animations effect)
Détermine à quelle vitesse certains effets codés en dur se déplacent sur l'axe z (virtuel). Integer




[sounds]Paramétrage des fichiers son


Contrairement aux jeux classiques, les jeux EE ne stockent pas les fichiers son assignés à une animation donnée dans un fichier .2DA, mais dans un fichier .INI.

⚠️ Veuillez noter que les fichiers .2DA d'animation présents dans les jeux EE ne sont pas utilisés par le moteur EE et sont donc inutiles.


Pour vous simplifier la vie, vous pouvez utiliser l'un des modèles existants (par exemple 1100.INI) que vous modifierez :

[sounds]
attack=tanar04,blank,blank
attack_frame=0,0,0
awake=
awake_frame=0
cast=
cast_frame=0
conjure=
conjure_frame=0
damage=tanar06
damage_frame=0
die=tanar07a
die_frame=0
head_turn=
head_turn_frame=0
ready=
ready_frame=0
shoot=
shoot_frame=0
twitch=
twitch_frame=0
walk=
walk_frame=0
attack_slash=tanar03,blank,blank
attack_slash_frame=0,0,0
attack_backslash=tanar03,blank,blank
attack_backslash_frame=0,0,0
attack_jab=tanar04,blank,blank
attack_jab_frame=0,0,0
emerge=
emerge_frame=0
hide=
hide_frame=0
sleep=
sleep_frame=0
battle_cry=tanar01a,tanar02a
battle_cry_frame=0,0
selection=tanar01a
selection_frame=0
fall=fal_03b
fall_frame=0 




Il ne vous reste plus qu'à installer les fichiers relatifs à vos animations.


Infinity Animations : Note pour les moddeurs > Description des fichiers .iniHAUT DE PAGE

Installer les animations dans le jeu


1. Copier les nouvelles animations dans le jeu

Pour ce faire, nous vous conseillons de placer les fichiers .bam dans un répertoire distinct, par exemple 📁 bam/cre, dans lequel vous créez un sous-répertoire par animation, que vous copiez dans le répertoire 📁 override :

ACTION_FOR_EACH animation IN ~animation1~ ~animation2~ ~animation3~ ... BEGIN

    ACTION_BASH_FOR ~%MOD_FOLDER%/bam/cre/%animation%~ ~^.+\.bam$~ BEGIN

        // On ne copie que les fichiers nécessaires.
        ACTION_IF NOT FILE_EXISTS_IN_GAME ~%BASH_FOR_FILE%~ BEGIN
            ACTION_TO_LOWER %BASH_FOR_FILE%
            COPY_LARGE ~%BASH_FOR_FILESPEC%~ ~override/%BASH_FOR_FILE%~
        END

    END

END 




2. Installer les fichiers .2da (pour les jeux classiques) ou .ini gérant les variables et les sons des animations de créature (jeux EE)

Si vous voulez que votre mod puisse être installé aussi bien sur un jeu classique que sur une version EE, nous vous conseillons de placer les fichiers .2da et .ini dans deux répertoire distincts, par exemple 📁 2da/cre et 📁 ini.

⚠️ Note pour les jeux EE : Puisque l'identifiant du slot d'animation est inconnu avant son installation, et peut dépendre des autres animations installées par d'autres mods avant le vôtre, voici une petite astuce qui permet d'installer facilement les fichiers .ini. Attribuez au fichier .ini de votre animation le nom de l'animation enregistré dans le fichier ANIMATE.IDS. Par exemple dao.ini, dao_legs.ini, animation1.ini, animation2.ini... 😉




Puis, copiez les fichiers .2da dans le répertoire override (jeu classique) :

COPY ~%MOD_FOLDER%/2da/cre~ ~override~ 




Quant aux fichiers .ini (jeux EE), servez-vous du code développé pour Infinity Animations qui utilise la valeur hexadécimale définie dans la procédure d'installation de l'animation dans le fichier animate.ids pour copier automatiquement le fichier .ini correspondant avec le bon intitulé [$GWNewIni(~%GWNewAnim%~)].

ACTION_BASH_FOR ~%MOD_FOLDER%/ini~ ~^.+\.ini$~ BEGIN

    OUTER_SPRINT inifile EVAL "%BASH_FOR_RES%"
    ACTION_TO_UPPER inifile

    // Attribue à chaque nouveau fichier .ini la valeur définie dans le fichier animate.ids
    ACTION_IF VARIABLE_IS_SET $GWNewIni(~%inifile%~) BEGIN
        SILENT
        OUTER_SPRINT GW_nv_ini $GWNewIni(~%inifile%~)
        COPY ~%BASH_FOR_FILESPEC%~ ~override/%GW_nv_ini%.ini~
        PRINT @1121  // ~  ==> fichier ini de l'animation %inifile% installe : 0x%GW_nv_ini%.ini~
    END ELSE BEGIN
        PRINT @1122  // ~  ==> fichier ini de l'animation %inifile% pas installe.~
    END

END 




Félicitations, vous venez de déclarer, d'enregistrer et d'installer une nouvelle animation de créature ! 🥂


Cerise sur le gâteau, vous trouverez dans le répertoire 📁 documentation/mymod un canevas de mod résumant l'ensemble de la procédure, et que vous pourrez intégrer dans votre code. 😝


Infinity Animations : Note pour les moddeurs > Installer les animations dans le jeuHAUT DE PAGE

Utiliser les nouveaux slots d'animation


👎 Ancienne méthode : à oublier !

Maintenant que votre nouvelle animation est installée, il ne vous reste plus qu'à l'utiliser. Pour cela, il faut l'assigner à un fichier .CRE, c'est-à-dire saisir la valeur du slot d'animation dans l'index de son champ animation (0x28).

Pour illustrer ce propos, créons un aigle à tête blanche comme animal compagnon pour un rôdeur. Avant la parution des jeux en édition améliorée, c'était très simple, il suffisait d'installer la créature comme ceci :

COPY ~%MOD_FOLDER%/cre/mycre.cre~ ~override~
    WRITE_LONG 0x28 0x535D  // Animation ID (GW_BALD_EAGLE)
BUT_ONLY 

Et voilà !


Enfin... Presque...

Pourquoi ? Parce que, comme nous l'avons vu, les nouvelles animations n'occupent pas les mêmes slots dans les jeux classiques et dans les jeux EE. Ce code produirait inévitablement un CTD dans un jeu EE. 😖

Pour installer cette créature dans un jeu EE, il aurait fallu utiliser le code suivant :

COPY ~%MOD_FOLDER%/cre/mycre.cre~ ~override~
    WRITE_LONG 0x28 0xE001  // Animation ID (GW_BALD_EAGLE)
BUT_ONLY 


Et ici encore, ce code ne fonctionnerait que sur votre installation : Si un autre joueur avait installé un mod ajoutant une nouvelle animation de type IWD avant la vôtre, votre animation d'aigle aurait été installée dans le slot 0xE002 et votre créature serait dotée de l'animation 0xE001 de l'autre mod. 😩


Alors comment faire pour assurer une compatibilité parfaite ? C'est très simple ! 😛




👍 Nouvelle méthode : 100 % sûre et compatible jeux classiques et EE

Utiliser la commande WeiDU IDS_OF_SYMBOL qui va rechercher automatiquement l'index d'un slot d'animation dans le fichier ANIMATE.IDS.

En plus, elle a l'avantage de ne pas nécessiter l'usage de conditions IF GAME_IS ~~ BEGIN.


Ainsi, le code suivant attribuera au fichier mycre.cre le slot d'animation 0x535D dans un jeu classique et le slot défini par la fonction GW_FIND_FREE_ANIM_SLOT dans un jeu EE :

COPY ~%MOD_FOLDER%/cre/mycre.cre~ ~override~
    WRITE_LONG 0x28 IDS_OF_SYMBOL (animate ~GW_BALD_EAGLE~)  // Animation ID (GW_BALD_EAGLE) : original 0x535D - EE 0xE001
BUT_ONLY 

C'est la méthode la plus simple et la plus pratique utilisée par le mod Infinity Animations pour être installé facilement sur tous les types de jeux de la série BG.


Infinity Animations : Note pour les moddeurs > Utiliser les nouveaux slots d'animationHAUT DE PAGE

Mettre à jour les anciens mods


Comme indiqué dans le readme du mod, dans un monde parfait, Infinity Animations devrait être installé comme un pack correctif qui fonctionnerait comme une base de données centralisée, utilisable par quiconque souhaite ajouter de nouvelles animations de créature dans le jeu sans être confronté à des problèmes de conflits et d'incompatibilité avec d'autres mods.

Malheureusement, comme il a été conçu après la première génération de mega-mods qui écrasaient les fichiers du jeu, notamment pour résoudre les conflits de slots d'animation et rétablir les animations de base que les mega-mods avaient modifiées, il doit être installé après ces mega-mods, au moins jusqu'à ce que leurs auteurs les mettent à jour pour tirer parti de toutes les possibilités offertes par Infinity Animations...

En attendant le jour merveilleux où Infinity Animations pourra se consacrer à sa vocation première et ne pas devoir résoudre les problèmes de compatibilité entre mods, voici quelques petits conseils pour adapter votre mod à la nouvelle version d'IA. Rassurez-vous, ce n'est pas très compliqué si vous n'êtes pas l'auteur d'un mega-mod !




Évitez les mauvaises pratiques

Tout d'abord, un état des lieux des mauvaises pratiques qu'Infinity Animations s'efforce de corriger s'impose. Elles devraient être définitivement proscrites pour assurer la meilleure compatibilité possible entre mods.

Les points suivants sont à proscrire si vous ne voulez pas subir les foudres des autres moddeurs, et des joueurs qui ne se gêneront pas pour vous signaler que votre mod ruine leur installation :

  • 1. N'installez pas Infinity Animations s'il n'est pas détecté.
    Certains mods installent par défaut les mods dont ils besoin pour fonctionner. Si cela ne pose pas de problème avec TobEx, ça peut s'avérer problématique avec des mods comme Infinity Animations qui va de nouveau être activement maintenu. Il suffit de lire la littérature sur la difficulté de faire cohabiter 1PP v4.2.0 avec Item et Spell Revisions qui installent par des défaut des éléments de 1PP v3 pour en être définitivement convaincu.

  • 2. N'utilisez aucune procédure de « biffing ». [NdT : archivage des données]
    Cette pratique était courante au début des années 2000, car elle permettait de contourner les petites capacités des disques durs et d'éviter les temps de latence du jeu. Elle n'est plus nécessaire aujourd'hui, car il suffit d'installer le mod Generalized Biffing après tous les autres mods pour améliorer les performances du jeu. De plus, archiver les fichiers d'un mod au format bif peut, dans certains cas, provoquer des dysfonctionnements. Alors évitez de le faire !

  • 3. Ne remplacez jamais les slots d'animation existants par les vôtres.
    Résultat des courses : une ombre des roches peut se retrouver avec une animation de cyclope ou de gobelin. Ça fait plutôt désordre, vous ne trouvez pas ?

  • 4. N'écrasez jamais le fichier ANIMATE.ids.
    Et surtout, NE DUPLIQUEZ PAS des animations identiques répertoriées avec un nom ou/et un index différent.



1.Assurez-vous qu'Infinity Animations est bien installé.


Cela permet :

  • d'assurer la compatibilité de votre mod avec tous les jeux en uniformisant leurs slots des animations.
  • d'installer des créatures utilisant des animations manquantes dans les jeux EE sans avoir à vérifier que leurs fichiers .bam, .ini et .wav sont bien présents.
  • d'éviter de surcharger votre mod avec des dizaines (voire des centaines) de fichiers .bam inutiles.
  • de profiter de toutes les animations originales, propres à Infinity Animations et partagées par des moddeurs, sans avoir à les installer.

Il suffit d'insérer dans votre tp2 la ligne suivante comme pré-requis d'installation de votre mod :

REQUIRE_PREDICATE MOD_IS_INSTALLED ~infinityanimations.tp2~ (ID_OF_LABEL ~infinityanimations.tp2~ ~infinity_animations_main~) @ nn
avec
@nn   = Ce mod necessite l'installation prealable du composant principal d'Infinity Animations.~ 

Note : ce code est beaucoup plus robuste que celui qui était généralement utilisé auparavant, soit MOD_IS_INSTALLED ~infinityanimations.tp2~ ~0~.




2.Simplifiez l'installation du mod.


Profitez de la mise à jour de votre mod pour en simplifier la procédure d'installation.




2.a. Supprimez les procédures de « biffing ».

Cela concerne presque exclusivement les mega-mods. La procédure est en cours pour la plupart des mods publiés sur SHS afin de les rendre compatibles avec la nouvelle version de Infinity Animations.




2.b. Supprimez toute duplication de slot d'animation.

Non seulement, empiler des slots d'animation identiques répertoriés avec un nom ou/et un index différent est inutile, mais cela peut provoquer de graves dysfonctionnements dans l'installation de mods qui utilisent la commande IDS_OF_SYMBOL (animate ~animation name~) pour assurer leur compatibilité aussi bien avec les jeux classiques que EE.

C'est la raison pour laquelle il faut supprimer du tp2 toutes les duplications inutiles de slots, comme celles des mods suivants, pris au hasard :

BP mod
APPEND ~animate.ids~ ~0xE010 IC_ETTIN~             UNLESS ~0xE010~
APPEND ~animate.ids~ ~0xE040 IC_HISTACHII~         UNLESS ~0xE040~
APPEND ~animate.ids~ ~0xE060 IC_LICH~              UNLESS ~0xE060~
APPEND ~animate.ids~ ~0xE090 IC_MERILITH~          UNLESS ~0xE090~
APPEND ~animate.ids~ ~0xE0A0 IC_ICE_TROLL~         UNLESS ~0xE0A0~
APPEND ~animate.ids~ ~0xE0C0 IC_SNOW_TROLL~        UNLESS ~0xE0C0~
APPEND ~animate.ids~ ~0xE0D0 IC_UMBERHULK~         UNLESS ~0xE0D0~
APPEND ~animate.ids~ ~0xE0E0 IC_CORNUGONSKI~       UNLESS ~0xE0E0~
APPEND ~animate.ids~ ~0xE0F0 IC_ICE_GOLEM~         UNLESS ~0xE0F0~
APPEND ~animate.ids~ ~0xE0F1 IC_GLAB~              UNLESS ~0xE0F1~
APPEND ~animate.ids~ ~0xE0F2 IC_WAILING_VIRGIN~    UNLESS ~0xE0F2~
APPEND ~animate.ids~ ~0xE200 IC_BEETLE_COPPER~     UNLESS ~0xE200~
APPEND ~animate.ids~ ~0xE210 IC_BEETLE_FIRE~       UNLESS ~0xE210~
APPEND ~animate.ids~ ~0xE220 IC_BEETLE_BLACK~      UNLESS ~0xE220~
APPEND ~animate.ids~ ~0xE230 IC_BEETLE_RHINOCEROS~ UNLESS ~0xE230~
APPEND ~animate.ids~ ~0xE300 IC_GHOST~             UNLESS ~0xE300~
APPEND ~animate.ids~ ~0xE310 IC_GHOUL~             UNLESS ~0xE310~
APPEND ~animate.ids~ ~0xE320 IC_GHAST~             UNLESS ~0xE320~
APPEND ~animate.ids~ ~0xE510 IC_LIZARDMAN2~        UNLESS ~0xE510~
APPEND ~animate.ids~ ~0xEA10 IC_SHADE~             UNLESS ~0xEA10~
APPEND ~animate.ids~ ~0xEA20 IC_SHADE2~            UNLESS ~0xEA20~
APPEND ~animate.ids~ ~0xEE00 IC_ZOMBIE~            UNLESS ~0xEE00~
APPEND ~animate.ids~ ~0xEE10 IC_ZOMBIE2~           UNLESS ~0xEE10~

Drizzt Saga mod
APPEND ~ANIMATE.IDS~ ~0xE0E0 IC_CORNUGONSKI~

Hanna NPC mod
APPEND ~ANIMATE.IDS~ ~0xE060 IC_LICH~

Improved Anvil mod
APPEND ~animate.ids~ ~0xE0F0 IC_ICE_GOLEM~ UNLESS ~\bIC_ICE_GOLEM\b~

Knight Kits mod
APPEND ~ANIMATE.IDS~ ~0xE040 IC_HISTACHII~ UNLESS ~0xE040 IC_HISTACHII~

TDD mod
APPEND ~ANIMATE.IDS~ ~0xE250 IC_GOLEM_IRON~  UNLESS ~0xE250~
APPEND ~ANIMATE.IDS~ ~0xE24F IC_GIANT_FROST~ UNLESS ~0xE24F~
APPEND ~ANIMATE.IDS~ ~0xE000 IC_CYCLOPS~     UNLESS ~0xE000~ 

Pour illustrer ce propos, voici tous les slots d'animation dupliqués du fichier animate.ids installé par le Big World Fixpack qui regroupe tous les slots créés par une mega-installation :

  ► Fichier animate.ids du Big World Fixpack :

...
0x1300 DEMIGORGON
0x1300 DEMOGORGON
...
0x7701 REVEANT
0x7701 REVENANT
...
0x7F09 SAHAUGIN
0x7F09 SAHUAGIN
...
0x7F23 SAHAUGIN_LARGE
0x7F23 SAHUAGIN_LARGE
...
0x7F2C AMISH_SOLDIER
0x7F2C AMNISH_SOLDIER
...
0x7F3A HULA_WIZARD
0x7F3A IRENICUS_ROBED
...
0x7F3F YAGA-SHURA
0x7F3F GIANT_YAGA-SHURA
...
0xE010 IC_ETTIN
0xE010 ETTIN
...
0xE050 IC_LICHBLACK
0xE050 LICH_BLACK
0xE060 IC_LICH
0xE060 LICH_WHITE
0xE070 IC_MINOTAUR
0xE070 MINOTAUR
0xE080 IC_MUMMY
0xE080 MUMMY
0xE090 IC_MERILITH
0xE090 MARILITH
0xE0A0 IC_ICE_TROLL
0xE0A0 ICE_TROLL
0xE0A0 TROLL_ICE
0xE0B0 IC_TROLL1
0xE0B0 TROLL_BLUE
0xE0C0 IC_SNOW_TROLL
0xE0C0 SNOW_TROLL
0xE0C0 TROLL_SNOW
0xE0D0 IC_UMBERHULK
0xE0D0 UMBER_HULK_ELDER
0xE0D0 UMBERHULK_IWD
0xE0E0 CORNUGON
0xE0E0 IC_CORNUGONSKI
0xE0F0 IC_ICE_GOLEM
0xE0F0 ICE_GOLEM
0xE0F0 GOLEM_ICE
0xE0F1 IC_GLAB
0xE0F1 GLABREZU
0xE0F2 IC_WAILING_VIRGIN
0xE0F2 WAILING_VIRGIN
0xE200 BEETLE
0xE200 BEETLE_BORING
0xE200 BEETLE_COPPER
0xE200 IC_BEETLE_COPPER
0xE210 BEETLE_FIRE
0xE210 IC_BEETLE_FIRE
0xE220 BEETLE_BLACK
0xE220 BEETLE_BOMBARDIER
0xE220 IC_BEETLE_BLACK
0xE230 BEETLE_RHINOCEROS
0xE230 IC_BEETLE_RHINOCEROS
...
0xE300 GHOST
0xE300 GHOST_IWD
0xE300 IC_GHOST
0xE310 GHOUL_GREATER
0xE310 GHOUL_IWD
0xE310 IC_GHOUL
0xE320 GHAST_GREATER
0xE320 GHAST_IWD
0xE320 IC_GHAST
0xE400 GOBLIN_AXE
0xE400 IC_GOBLIN_AXE
0xE410 GOBLIN_BOW
0xE410 IC_GOBLIN_BOW
0xE420 GOBLIN_ELITE_AXE
0xE420 GOBLINELITE_AXE 
0xE420 IC_GOBLINELITE_AXE
0xE430 GOBLIN_ELITE_BOW
0xE430 GOBLINELITE_BOW
0xE430 IC_GOBLINELITE_BOW
...
0xE500 LIZARDMAN_BROWN
0xE500 IC_LIZARDCASTER1
0xE500 LIZARD_MAN_ELITE
0xE510 LIZARD_MAN
0xE510 IC_LIZARDMAN2
0xE510 LIZARDMAN_GREEN
0xE520 LIZARD_KING
0xE520 LIZARD_MAN_KING
0xE520 IC_LIZARDCASTER3
0xE600 MYCONID
0xE600 IC_MYCONID
0xE600 MYCONID_RED
0xE610 MYCONID2
0xE610 IC_MYCONID2
0xE610 MYCONID_BLUE
0xE700 OROG
0xE700 OROG1
0xE700 IC_OROG1
0xE710 OROG2
0xE710 IC_OROG2
0xE710 OROG_ELITE
0xE720 OROG3
0xE720 IC_OROG3
0xE720 OROG_CHIEFTAIN
0xE800 ORC_MELEE
0xE800 ORC_MELEE1
0xE800 IC_ORC_MELEE1
0xE810 ORC_RANGE
0xE810 ORC_RANGE2
0xE810 IC_ORC_RANGE2
0xE820 ORC_MELEE3
0xE820 IC_ORC_MELEE3
0xE820 ORC_ELITE_MELEE
0xE830 ORC_RANGE4
0xE830 IC_ORC_RANGE4
0xE830 ORC_ELITE_RANGE
0xE840 ORC_SHAMAN
0xE840 IC_ORC_SHAMAN
0xE900 SALAMANDER
0xE900 IC_SALAMANDER
0xE900 SALAMANDER_FIRE
0xE910 SALAMANDER2
0xE910 IC_SALAMANDER2
0xE910 SALAMANDER_FROST
0xEA00 SHROOM
0xEA00 IC_SHROOM
0xEA00 SHRIEKER
0xEA10 IC_SHADE
0xEA10 GHOST_SHADOW
0xEA10 SHADOW_SMALL
0xEA10 SHADOW_SMALL_IWD
0xEA20 GHOST_SHADE
0xEA20 IC_SHADE2
0xEA20 SHADOW_LARGE
0xEA20 SHADOW_LARGE_IWD
0xEB00 SKELETON0
0xEB00 IC_SKELETON0
0xEB00 SKELETON_MONSTER
0xEB10 SKELETONA 
0xEB10 IC_SKELETONA
0xEB10 SKELETON_WARRIOR
0xEB20 SKELETONB
0xEB20 IC_SKELETONB
0xEB20 SKELETON_FIEND
0xEC00 WIGHT
0xEC00 WIGHT_GRAY
0xEC00 IC_WIGHT
0xEC10 WIGHT_GREEN
0xEC10 WIGHT_LESSER
0xEC10 IC_WIGHT2
0xEC20 WIGHT_GREATER
0xEC20 WIGHT_YELLOW
0xEC20 IC_WIGHT3
0xED00 YUAN-TI
0xED00 YUANTI
0xED00 IC_YUANTI
0xED10 YUANTI2
0xED10 IC_YUANTI2
0xED10 YUAN-TI_ELITE
0xED20 YUANTI3
0xED20 IC_YUANTI3
0xED20 YUAN-TI_PRIEST
0xEE00 ZOMBIE_LESSER
0xEE00 ZOMBIE_YELLOW
0xEE00 ZOMBIE_YELLOW_IWD
0xEE00 IC_ZOMBIE
0xEE10 ZOMBIE_BLUE
0xEE10 ZOMBIE_BLUE_IWD
0xEE10 ZOMBIE_GREATER
0xEE10 IC_ZOMBIE2
0xEF10 ELEMENTAL_WATER
0xEF10 WATER_WEIRD
0xEF10 IC_WATER_WIERD126 


For heureusement, le composant principal d'Infinity Animations nettoie désormais ce fichier et permet d'installer les mods suivants sur une base saine. Mais bon sang, que ce fut pénible de coder un correctif à cette régression... 😡
Alors, soyez sympa et ne corrompez pas ce fichier avec des ajouts et des duplications de slots inutiles.




2.c. N'installez que les fichiers .bam et son nécessaires.

À partir de la version 6.0.0, Infinity Animations installe automatiquement les nouvelles animations ainsi que les animations manquantes (notamment dans les jeux EE), à moins que les joueurs aient modifié le fichier infinityanimations-config-default.ini.

Par ailleurs, Infinity Animations installe désormais automatiquement les fichiers son des créatures dans la langue du jeu, lorsqu'existe une version locale.

En théorie, il n'est donc plus nécessaire de fournir ces fichiers dans votre mod.

Si toutefois vous souhaitez conserver par précaution la procédure d'installation de ces fichiers au cas où ils n'existeraient pas dans un jeu classique, n'hésitez pas à utiliser les librairies de fonctions décrites ci-dessous.




3.Utilisez les librairies de fonctions d'IA.


Pour assurer la compatibilité la plus parfaite possible avec les jeux classiques et EE, Infinity Animations dispose de nombreuses librairies de fonctions et de macros qui permettent d'installer ses composants selon les spécificités des jeux. Par exemple, les fichiers son du scarabée bombardier utilisent des préfixes différents dans les jeux classiques (t-bmb) et dans les jeux EE (mbbm) ; la harpie a des slots différents dans IA (0x5269) et dans les jeux EE (0xe252). De plus, ses préfixes de fichiers bam diffèrent aussi : 3BS dans IA et MHAR dans EE.

N'hésitez donc pas à les utiliser ou à vous en inspirer pour installer vos animations.

INCLUDE ~%MOD_FOLDER%/lib/a7_functions.tpa~
INCLUDE ~%MOD_FOLDER%/lib/ps_recursive_copy.tpa~
INCLUDE ~%MOD_FOLDER%/lib/gw_functions_ee.tpa~

avec :

  • a7_functions.tpa : Ajout automatique de slots d'animation de créature dans BG2EE. Merci à Argent77 pour sa procédure !
  • ps_recursive_copy.tpa : Librairie de fonctions développées par Sam pour rechercher de manière récursive des fichiers dans un répertoire parent, puis les copier dans un autre répertoire. Adaptée et modifiée par Gwendolyne pour identifier les éventuels fichiers son localisés et installer tous les fichiers nécessaires (animations et sons) des répertoires 📁 archives/subfolders dans le répertoire 📁 override (fonctions gw_find_sounds_folder, gw_update_sound_clips, gw_update_content, macros gw_install_archives et gw_install_modders_content).
  • gw_functions_ee.tpa : liste de macros et de fonctions gérant l'installation des slots d'animation dans les jeux EE.
  • gw_ee_compat_arrays.tph : listes de tables utilisées pour ajouter et installer de nouvelles animations de créature (slots, fichier bam, wav...).



Pour toute question ou demande d'assistance, veuillez consulter le forum du mod.


Infinity Animations : Note pour les moddeurs > Mettre à jour les anciens modsHAUT DE PAGE

Historique des versions


Version 6.0.0  (nn mars 2021)
  • Modification des noms de code des animations pour les rendre compatibles avec les code pages non occidentaux (suppression de la procédure automatique de changement de code page dans le patch de l'exécutable) et correction des doublons de slots d'animation de dragon (XDR3, XDR6). 😉
  • Ajout de la compatibilité avec les jeux EE: adaptation du code pour une meilleure compatibilité du mod, avec notamment l'harmonisation des noms des animations.
  • Réécriture de l'utilitaire IA Reference Picker (supporte désormais les traductions) et mise à jour de sa documentation.
  • Ajout de la traduction française (Gwendolyne).
  • Téléversement du mod dans le compte GitHub officiel de Spellhold Studios.


Version Beta 5  (12 mai 2010)
  • Modification du patch de l'exécutable afin qu'il modifie le code page et redémarre l'ordinateur s'il détecte un code page non occidental.
  • Mise à jour du patch de l'exécutable pour qu'il reconnaisse les avatars de voleur de BG1.
  • Clonage des fichiers d'attribution de sons existants [NdT : fichiers 2da] pour créer ceux qui manquent.
  • Ajout des autres fichiers d'attribution de sons manquants dans le répertoire 📁 /content.
  • Ajout des sons manquants du minotaure et de l'esprit des eaux.
  • Suppression de l'empilage des mêmes animations dans le fichier chitin.key, qui posait problème.
  • Affectation aux créatures de leurs jeux de sons lorsque c'est approprié (mise à jour importante).
  • Correction d'un dysfonctionnement mineur de la commande READ_BYTE dans les patches de créatures.
  • Ajout d'un contrôle interdisant l'installation des sous-composants si le composant principal n'est pas installé (pour empêcher des crashes).
  • Ajout des sorcières de la nuit [NdT : ou guenaudes nocturnes selon les traductions] dans le composant « Démons différenciés ».
  • Ajout de l'animation de la reine goule au composant « Morts-vivants différenciés ».
  • Ajout de l'animation Ellesime avec des cheveux blancs au composant « Plus d'animations d'IWD2 ».
  • Ajout de l'animation créature des lagons au composant « Plus d'animations d'IWD2 ».
  • Déplacement du traitement des tieffelins des composants « cambions » et « alu-démons » dans le composant « Plus d'animations de PS:T ».
  • Correction du petit bogue qui faisait apparaître les combattants squelettes sous la forme de verbeegs.
  • Ajout de l'animation d'Amel au composant « Plus d'animations de NWN » (si NTotSC est installé).
  • Ajout du composant « Correction des animations des humanoïdes ».
  • Ajout du composant « Avatars de Moinesse pour IA ».
  • Ajout du composant « Plus d'animations de PS:T ».
  • Ajout du composant « Animations de personnages de BG1 dans les parties sauvegardées ».
  • Ajout du composant « Correction des animations dans les parties sauvegardées ».
  • Traification manuelle de ce foutu mod pour faciliter le travail des traducteurs (de rien, WeiDU ! 😝).


Version Beta 4  (7 février 2010)
  • Ajout du composant « Animations de personnages de BG1 pour les PNJs ».
  • Ajout du composant « Animations de personnages de BG1 pour les PJs exportés ».
  • Modification de la procédure de modification des démons.


Version Beta 3  (1er février 2010)
  • Correction des bugs d'animations _LOW qui causaient des crashs de zones au chargement.
  • Correction des scripts et des dialogues qui métamorphosent en créatures utilisant des animations _LOW.
  • Correction d'un dysfonctionnement du code qui empêchait l'installation de composants optionnels.
  • Ajout de l'option d'installation des sons dans le composant « Animations de svirfneblins ».
  • Ajout du composant « Correction des références des créatures dans les cartes ».
  • Ajout des fichiers révisés d'attribution de sons des salamandres (slots MSAL et MSA2).
  • Amélioration de la compatibilité avec aTweaks.
  • Amélioration des procédures de modification de créatures pour les démons et les orques chamans.


Version Beta 2  (23 janvier 2010)
  • Ajout de la prise en charge des systèmes non ANSI par la procédure d'installation.


Version WeiDU Beta 1  (11 janvier 2010)
  • Première sortie en version WeiDU.
  • Toutes les créatures du jeu et des mods affectées par IA sont modifiées.
  • Ajout des composants optionnels.


Version r.10010043
  • Correction d'un bogue affectant les slots d'animation d'Icewind Dale dans Baldur's Gate II.


Mise à jour de la version r.09102252
  • Mise à jour de la documentation et du Reference Picker.
  • Ajout d'une feuille de style alternative. 😉


Version r.09102252
  • Sortie initiale.


Infinity Animations : Note pour les moddeurs > Version Changelog (core component only)HAUT DE PAGE