Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

[WeiDU] Installer facilement les slots d'animation des créatures selon le jeu moddé

Regroupe tous les sujets sur les commandes, les fonctions, les routines, les modifications des fichiers systèmes (ids, 2da...)...
Répondre
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne

[WeiDU] Installer facilement les slots d'animation des créatures selon le jeu moddé

.

Message par Freddy_Gwendo »

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.
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
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 :

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
Notes :
  • 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.
Fichiers joints
GW_Saisie_slots_animation_selon_jeu_v1.7z
(14.03 Kio) Téléchargé 70 fois
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Répondre

Retourner vers « Programmation WeiDU »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité