[WeiDU] Installer facilement les slots d'animation des créatures selon le jeu moddé
Posté : sam. 01 avr. 2017, 21:37
Pour rendre son mod compatible à la fois avec les versions classiques et Enhanced, il faut modifier un certain nombre de paramètres. Parmi ceux-ci, il en est un qui est assez pénible, le champ qui attribue un slot d'animation à une créature.
En effet, selon que l'on utilise BG2, BG2 et Infinity Animations ou BG2EE, BGEE, SoD ou IWDEE, les valeurs de ce champ peuvent changer. Ce n'est pas très compliqué à gérer si on installe peu de créatures et si ces dernières utilisent des slots d'animation classiques, mais pour peu qu'on installe des dizaines de créatures dont certaines utilisent des animations non vanilla, ça peut vite devenir pénible de devoir coder ça, ou tout simplement de devoir créer des fichiers cre spécifiques à chaque jeu.
Si certains ne semblent pas convaincus, voici un petit tableau illustrant mon propos.
Vous constaterez que même pour des animations plutôt classiques, la valeur du champ animation peut changer, mais aussi le nom des fichiers bam utilisés. De plus, les jeux Enhanced ne disposent pas forcément de tous les fichiers BAM ou ini nécessaires. La raison invoquée étant l'allègement du poids de téléchargement des jeux.
C'est la raison pour laquelle je me suis amusé à automatiser tout ça.
Le principe est simple :
1. J'ai comparé les fichiers ANIMATE.IDS, ANISND.IDS et les fichiers ini (pour les versions Enhanced) des jeux et j'en ai produit un tableau comparatif. Puis j'ai attribué un nom générique (CODE COMPARATIF) pour chaque animation. J'en ai profité pour ajouter mes nouvelles animations déjà enregistrées sur SHS. En voici un extrait :
2. Je charge ce tableau avant d'installer mes créatures.
3. Lorsque j'installe un fichier .CRE, je lance une fonction qui va directement détecter l'existence et la valeur du slot correspondant à CODE COMPARATIF dans le fichier ANIMATE.IDS.
3b. Pendant que j'y suis, je vérifie l'existence dans le jeu de tous les fichiers BAM, BMP (palettes) et INI nécessaires pour afficher l'animation.
4. La fonction écrit directement la valeur du champ animation dans le fichier CRE en fonction du jeu.
5. Si le code de l'animation n'existe pas, pour éviter de planter la procédure, je lui attribue la valeur 0.
5b. Si un des fichiers nécessaires n'est pas présent, il est répertorié dans le fichier GWDiamant_missing_anim.txt dans le répertoire du jeu afin de pouvoir gérer son installation.
Notes :
En effet, selon que l'on utilise BG2, BG2 et Infinity Animations ou BG2EE, BGEE, SoD ou IWDEE, les valeurs de ce champ peuvent changer. Ce n'est pas très compliqué à gérer si on installe peu de créatures et si ces dernières utilisent des slots d'animation classiques, mais pour peu qu'on installe des dizaines de créatures dont certaines utilisent des animations non vanilla, ça peut vite devenir pénible de devoir coder ça, ou tout simplement de devoir créer des fichiers cre spécifiques à chaque jeu.
Si certains ne semblent pas convaincus, voici un petit tableau illustrant mon propos.
BGII - ToB |
INFINITY ANIMATIONS |
BG2EE |
SoD |
BGEE |
IWDEE |
||||||||||||
Code |
Animation |
Bam |
Code |
Animation |
Bam |
Code |
Animation |
Bam |
Code |
Animation |
Bam |
Code |
Animation |
Bam |
Code |
Animation |
Bam |
0x1200 | DRAGON_RED | MDR1 | 0x1200 | DRAGON_RED | MDR1 | 0x1200 | DRAGON_RED | MDR1 | 0x1200 | DRAGON_RED | MDR1 | 0x1200 | DRAGON_RED | MDR1 | 0x1200 | DRAGON_RED | MDR1 |
0x5100 | FIGHTER_MALE_HUMAN_LOW | CHMB | 0x6420 | L_FIGHTER_MALE_HUMAN | XHMF | 0x5100 | FIGHTER_MALE_HUMAN_LOW | CHMB | 0x5100 | FIGHTER_MALE_HUMAN_LOW | CHMB | 0x5100 | FIGHTER_MALE_HUMAN_LOW | CHMB | 0x5100 | FIGHTER_MALE_HUMAN_LOW | CHMB |
0x7f40 | GOLEM_MINI | MGLM | 0x7f40 | GOLEM_MINI | MGLM | 0x7f40 | GOLEM_MINI | MGLM | 0x7f40 | GOLEM_MINI | MGLM | ||||||
0x5c01 | FIRE_GIANT_2 | µJX | 0x7f47 | GIANT_FIRE_2 | MFI2 | 0x7f47 | GIANT_FIRE_2 | MFI2 | 0x7f47 | GIANT_FIRE_2 | MFI2 | 0x7f47 | GIANT_FIRE_2 | MFI2 | |||
0xe0c0 | TROLL_SNOW | MTSN | 0xe0c0 | TROLL_SNOW | MTSN | 0xe0c0 | TROLL_SNOW | MTSN | 0xe0c0 | TROLL_SNOW | MTSN | 0xe0c0 | TROLL_SNOW | MTSN | |||
0x5032 | BEBILITH_NWN | µBY | |||||||||||||||
0x5fc5 | UNICORN_WHITE | ØCX | GW_UNICORN_WHITE | GWU1 | GW_UNICORN_WHITE | GWU1 | GW_UNICORN_WHITE | GWU1 | GW_UNICORN_WHITE | GWU1 |
C'est la raison pour laquelle je me suis amusé à automatiser tout ça.
Le principe est simple :
1. J'ai comparé les fichiers ANIMATE.IDS, ANISND.IDS et les fichiers ini (pour les versions Enhanced) des jeux et j'en ai produit un tableau comparatif. Puis j'ai attribué un nom générique (CODE COMPARATIF) pour chaque animation. J'en ai profité pour ajouter mes nouvelles animations déjà enregistrées sur SHS. En voici un extrait :
Code : Tout sélectionner
/* | Infinity Animations | BG2EE | SoD | BGEE | IWDEE |
FORMAT | ANIMATE.IDS (IA) BAM | ANIMATE.IDS (BG2EE) BAM | ANIMATE.IDS (SoD) BAM | ANIMATE.IDS (BGEE) BAM | ANIMATE.IDS (IWDEE) BAM | => CODE COMPARATIF
-- 0 ----------- 1 --------------------- 2 ------------ 3 --------------------- 4 ------------- 5 --------------------- 6 ------------- 7 --------------------- 8 ------------- 9 --------------------- 10 -------------------------- */
BG1_ML4, WYVERN_BIG, MWYV, WYVERN_BIG, MWYV, WYVERN_BIG, MWYV, WYVERN_BIG, MWYV, WYVERN_BIG, MWYV => WYVERN_BIG
BG1_ML4, WYVERN_WHITE_BIG, 1AC, WYVERN_WHITE_BIG, MWYV_WH, WYVERN_WHITE_BIG, MWYV_WH, WYVERN_WHITE_BIG, MWYV_WH, WYVERN_WHITE_BIG, MWYV_WH => WYVERN_BIG_WH
2. Je charge ce tableau avant d'installer mes créatures.
3. Lorsque j'installe un fichier .CRE, je lance une fonction qui va directement détecter l'existence et la valeur du slot correspondant à CODE COMPARATIF dans le fichier ANIMATE.IDS.
3b. Pendant que j'y suis, je vérifie l'existence dans le jeu de tous les fichiers BAM, BMP (palettes) et INI nécessaires pour afficher l'animation.
4. La fonction écrit directement la valeur du champ animation dans le fichier CRE en fonction du jeu.
5. Si le code de l'animation n'existe pas, pour éviter de planter la procédure, je lui attribue la valeur 0.
5b. Si un des fichiers nécessaires n'est pas présent, il est répertorié dans le fichier GWDiamant_missing_anim.txt dans le répertoire du jeu afin de pouvoir gérer son installation.
Code : Tout sélectionner
INCLUDE ~%MOD_FOLDER%/lib/GW_Cre_Def_Anim.tpa~ // Charge les fonctions nécessaires
LAM ~GW_DEFINE_ANIMATION_SLOTS~ // Définition des valeurs string des slots d'animation des créatures selon le moteur du jeu.
COPY ~%MOD_FOLDER%/Mycre.cre~ ~override/Mycre.cre~
PATCH_IF (SOURCE_SIZE > 0x2d3) BEGIN // protects against invalid files
LPF ~GW_CRE_DEF_ANIM~ STR_VAR GWdef_anim = "WYVERN_BIG_WH" RET GW_nvanimation END
PATCH_IF (GW_nvanimation = "-1") BEGIN // IDS_OF_SYMBOL returns "-1" if it does not find %GWdef_anim% in animate.ids
WRITE_LONG 0x028 0
END ELSE BEGIN
WRITE_LONG 0x028 EVAL "%GW_nvanimation%" // Animation ID (ANIMATE.IDS)
END
END
- J'ai adapté la procédure utilisée par mon mod et j'ai testé cette dernière brièvement sur une autre installation. Je l'ai postée car je serai peu disponible les dix prochains jours. Prévenez-moi s'il y a un problème et je le règlerai aussi vite que possible.
- Rien ne vous empêche de changer la valeur CODE COMPARATIF dans le fichier GW_Cre_Anim_table.tpa.
- Je n'ai pas fait de contrôle pour BG2 sans IA car ça ne m'est d'aucun intérêt. Mais s'il le faut, je pourrais l'ajouter à terme.