NOTE : Depuis, j'ai été contacté par l'auteur de BAM Batcher pour intégrer cette fonction à l'utilitaire. Elle a été améliorée pour être utilisée avec des fichiers BAM d'icône inventaire ne répondant pas forcément à la définition que j'ai utilisée. Vous trouverez la toute dernière version de BAM Batcher [post=436906]ici[/post]. La nouvelle fonction est détaillée [POST=436988]là[/POST].
Message initial :
Dans les versions Enhanced, les fichiers BAM des icônes d'inventaire ne sont pas faits comme ceux des versions classiques. Dans ces dernières, elles sont constituées de deux images : une petite (32x32 pixels) que l'on trouve dans les écrans d'inventaire et des boutiques, et une grande (64x64) qui s'affiche lorsqu'on déplace l'objet dans son écran d'inventaire.
Dans BG2EE, en général, les icônes sont constituées d'une seule image, souvent la grande reprise des icônes vanilla.
Quand on utilise dans BG2EE des fichiers bam créés pour un mod classique, le moteur affiche par défaut la grande icône. Ce qui peut devenir gênant lorsque la petite et le grande image sont différentes.
Comme j'ai plus d'un millier de bam concernés et que je ne n'avais pas envie de recréer de nouvelles icônes pour une installation sur BG2EE, j'ai écrit une petite routine WeiDU qui le fait toute seule.
Le but du jeu est d'ajouter la petite image de la seconde séquence du fichier BAM à la première.
En gros :
BG2 Classique : 1° séquence (grande image) - 2° séquence (petite image)
BG2EE : 1° séquence (grande image et petite image)
Code : Tout sélectionner
COPY_EXISTING ~monmod/mabam.bam~ ~override/mabam.bam~
// Lecture du fichier bam
// ----------------------
READ_ASCII 0x0 sg (4) // Signature
READ_ASCII 0x0 sn (3) // Short signature
// Décompression du fichier si nécessaire : obligatoire pour modifier les séquences
// --------------------------------------
PATCH_IF (~%sg%~ STRING_EQUAL_CASE ~BAMC~ = 1) BEGIN
READ_LONG 0x8 dl // Uncompressed data length
DECOMPRESS_REPLACE_FILE 0xc (SOURCE_SIZE - 0xc) dl
END ELSE BEGIN
dl = SOURCE_SIZE // Uncompressed data length
END
// Ajout de la frame 0 comme deuxième image du premier cycle.
// ----------------------------------------------------------
PATCH_IF (~%sn%~ STRING_EQUAL_CASE ~BAM~ = 1) BEGIN
READ_SHORT 0x08 fc // Frame count
READ_LONG 0x0c fn // Frame entry offset
READ_SBYTE 0x0a cc // Count of cycles
READ_LONG 0x14 lu // Offset (from start of file) to frame lookup table
READ_SHORT (fc * 0xc + fn) c_fnb0 // Count of frame indices in 1st cycle
[color="#FFFF00"] WRITE_SHORT (fc * 0xc + fn) (c_fnb0 + 1) // Adds one frame in 1st cycle
[/color]
END
// Recompression du fichier si nécessaire
// --------------------------------------
PATCH_IF (~%sg%~ STRING_EQUAL_CASE ~BAMC~ = 1) BEGIN
COMPRESS_REPLACE_FILE 0 dl 9
INSERT_BYTES 0x0 0xc
WRITE_ASCII 0x0 ~BAMCV1 ~
WRITE_LONG 0x8 dl
END
BUT_ONLY
Vous pouvez utiliser cette routine à l'intérieur d'un
Code : Tout sélectionner
ACTION_BASH_FOR ~%MOD_FOLDER%/Bam~ ~^.+\.bam$~ BEGIN
Note : le fichier bam créé conserve la seconde séquence, mais comme la supprimer demanderait une énergie que je n'ai pas et puisque le moteur ne la lit pas, inutile de perdre mon temps à travailler là-dessus.