CAS PRATIQUE N°2 : Patcher un cre, on commence par un peu de théorie
Introduction
On a commencé par une commande facile mais là les choses sérieuses vont démarrer... Pas de panique cependant, je vais tout vous détailler. Les commandes de patch de cre si elles peuvent sembler terriblement absconses ne sont en fait pas beaucoup plus compliquées qu'un script basique quand on prend bien le temps de les expliquer. En fait la manipulation est simple : on va chercher un fichier existant comme on l'a fait dans le tuto sur ADD_CRE_ITEM et on va lui dire "je veux que tu me remplaces telle donnée par une valeur que je t'indiquerai". Pour faire cela, on va déjà reprendre ensemble quelques commandes de tp2.
Les WRITE/OFFSETS et FILES ACTIONS
Comme leur nom l'indique, les WRITE vont "écrire" une nouvelle valeur dans un champ de votre cre (CA, Jet de sauvegarde, force, race, etc...), remplaçant par la même occasion la valeur qui s'y trouve. Évidemment comme toujours avec WeiDU, lors de la désinstallation du mod, votre cre retrouvera sa valeur initiale. En fait il existe 4 types de WRITE :
- WRITE_BYTE
- WRITE_SHORT
- WRITE_LONG
- WRITE_ASCII
On va aller farfouiller dans un onglet que vous connaissez probablement peu, à savoir ‘Files Formats". Véritable mine d’informations sur les différents types de fichiers que peut contenir le jeu : les sorts, zones, dialogues, effets, objets, etc…
En l’occurrence ce qui nous intéresse ça va être la version 1 car c’est la version qu’utilise Baldur’s gate II.
Voila on y est ! Un petit descriptif de l’en tête serait pas de trop je crois :
Applies to:
BG1, BG1: TotS, BG2, BG2: ToB
Tout simplement les jeux auxquels s’appliquent ces données. Ici il s’agit de toute la saga BG mais attention, ça ne sera pas forcément toujours le cas.
Detailed Description
Overall Structure
- Header (Les données principales de votre cre, dans 99 % des cas les modifs que vous ferez se passeront dans le « header ».)
- Known spells section (Les sorts connus par votre cre. Pour cette partie je déconseille les WRITE. Je vous montrerai une manip beaucoup plus simple plus tard au cours de ce tutoriel.)
- Spell memorization info (Cette section rassemble les infos liées au nombre de sorts que peut mémoriser votre cre et le nombre de sorts déjà mémorisés.)
- Memorized spells section (Les sorts mémorisés par votre cre. Idem que pour « know spells section », inutile de vous embêter avec les WRITE, j’ai beaucoup mieux.)
- Effects (Pour modifier les effets liés à votre cre, la manip étant assez longue je vous suggère plutôt de passer par DLTCEP si vous le pouvez.)
- Items section (Les données liées aux objets. Pour ça on a déjà ADD_CRE_ITEM alors inutile de se prendre la tête.)
Si vous avez un tant soit peu le sens de l’observation vous vous apercevrez qu’il y a trois colonnes qu’on va détailler de suite histoire de préparer le terrain :
• Offset : Ah les offsets, ces fameux offsets ! En fait, chaque fichier - ou plutôt chaque type fichier - a une adresse où des données sont ou ne sont pas inscrites. Si vous voulez, les offsets sont des valeurs en hexadécimal dans lesquelles vous pourrez « écrire » ce que vous voulez. Car si les WRITE permettent d’écrire une valeur (qu’elle soit numérique ou pas) les offsets permettent de spécifier où.
• Size (data type) : La taille, le type de données. C’est ce qui va nous permettre de déterminer quel type de WRITE il faudra utiliser. J’ai entouré en rouge les trois exemples qui vont nous intéresser.
• Description : Des informations sur ce que l’offset peut patcher. Avec les valeurs possibles à inscrire, les éventuelles restrictions, voire impossibilités… L’offset faisant référence à l’animation par exemple est codé en dur et est impatchable.
On va passer à la pratique, mais avant ça reprenons un peu ces WRITE, si on résume ça donne ça (voir screen au dessus) :
- WRITE_BYTE : Quand la data type est égale à 1.
- WRITE_SHORT : Quand la data type est égale ou inférieure à 2
- WRITE_LONG : Quand la data type est égale ou inférieure à 4
- WRITE_ASCII : Pour tout autre data type, notamment pour tout ce qui est chaîne de caractères, c’est un classique
Maintenant qu'on a vu la théorie passons à la [THREAD=26192]pratique[/THREAD].