Affichage des résultats 1 à 5 sur 5

Discussion: [TUTORIEL] Le bâton du moddeur - cas pratique n°2 : Patcher un cre, la pratique

  1. #1
    Date d'inscription
    December 2007
    Localisation
    Dordogne
    Messages 
    1 141

    Flèche [TUTORIEL] Le bâton du moddeur - cas pratique n°2 : Patcher un cre, la pratique

    CAS PRATIQUE N°2 : Patcher un cre, on attaque la pratique



    Introduction


    Alors on va passer à la partie la plus fun, on va aller chercher un cre du jeux original, le recopier dans l’override sous un autre nom, puis le « réécrire » à notre sauce.
    La technique consiste à récupérer un cre qui ressemble à ce qu’on veut (et qui a surtout la bonne animation, vu que c’est hard-coded) et on va changer ce qui ne nous plait pas pour coller à l’idée qu’on a en tête. Bien sur, ce genre de manipulation est à réserver aux personnages plutôt secondaires ou tout du moins aux personnages qui ne nécessitent pas de grosses modifications pour coller à ce que vous voulez. Sinon effectivement DLTCEP est quand même un peu plus rapide…


    Bon trêve de bavardage on s’y met :





    UN "PETIT" EXEMPLE

    Code:
    COPY_EXISTING ~beast.cre~ ~override/#vSteph.cre~
    
        SAY NAME1 @68
        SAY NAME2 @68
        WRITE_ASCII DEATHVAR ~#vBrym~
        WRITE_ASCII DIALOG ~#vBrym~
        WRITE_ASCII SCRIPT_OVERRIDE ~#vBrym~
    
        WRITE_ ASCII 0x34 ~#vBrym~    // Small portrait
        WRITE_ ASCII 0x3c ~#vBrym~    // Large portrait
    
        WRITE_SHORT 0x46 8    // Armor class (natural)
        WRITE_SHORT 0x4a "-2"                        // Armor class (crushing attack modifier)
    
        WRITE_BYTE 0x52 26    // THACO
        WRITE_BYTE 0x54 26    // Save versus death
        WRITE_BYTE 0x56 26    // Save versus polymorph
        WRITE_BYTE 0x58 26    // Save versus spell



    EXPLICATION DÉTAILLÉE


    1. Mise en place générale

    Avant de passer aux infos en rapport avec la partie files actions où on va allez chercher les informations qu’on veut réécrire, j’ai préféré commencer par quelques commandes élémentaires (en gris) qui vont nous permettre de fabriquer les informations essentielles pour votre cre.

    Code:
    COPY_EXISTING ~beast.cre~ ~override/#vSteph.cre~
        SAY NAME1 @68
        SAY NAME2 @68
    La commande de base qu’on a déjà plus ou moins vue : Je copie un fichier existant « beast.cre » et j’en fais une copie sous mon nom à moi avec préfixe et tout le tremblement. Le truc c’est qu’ici il n’y aura que mon nom de fichier qui va changer. Ma créature a toujours le même fichier dlg, le même script attribué, la même death variable, etc…


    Code:
        WRITE_ASCII DEATHVAR ~#vBrym~
        WRITE_ASCII DIALOG ~#vBrym~
        WRITE_ASCII SCRIPT_OVERRIDE ~#vBrym~
    Par conséquent je vais changer tout ça avec la commande « WRITE_ASCII » qui comme je l’ai peut-être déjà dit, est la commande que l’on utilise lorsque l’on veut patcher des informations « écrites » (entendez par la non chiffrées). Mais vous allez me dire : la logique ne voudrait-elle pas qu’après mon « WRITE_ASCII » je mette une valeur en hexadécimal de type «0x54 » par exemple ? Et bien on pourrait parfaitement ! D’ailleurs si vous vous amusez à farfouiller dans le file action vous pourrez trouver des valeurs hexadécimales qui correspondent à ces données. Cependant comme vous pouvez le voir j’ai utilisé des mots clefs :

    DEATHVAR
    DIALOG
    SCRIPT_OVERRIDE


    Donc qui sont beaucoup plus intuitifs et qui sont des commandes classiques que vous pourrez trouver dans nombre de TP2 (je ne parle évidemment pas des mods old-school tel ceux de kalmachin et consort…). Vous pourrez retrouvez ce genre de mots clefs soit dans les tp2 des autres comme je l’ai dit, dans des extraits du readme de WeiDU, mais surtout (et c’est comme ça que je m’y suis pris) en ouvrant le fichier « ini » lié à vos highlighters : toutes les commandes y sont regroupés et on retrouve entre autre ce genre de chose. Alors mon conseil c’est d’explorer ce fichier et éventuellement d’essayer des combinaisons, par ailleurs c’est un excellent moyen de découvrir de nouvelles commandes et de se familiariser avec la logique d’un tp2. Alors farfouillez mes amis ! FARFOUILLEZ !


    2. WRITE_ASCII

    Maintenant on va passer à la suite, c’est la où on va commencer à se marrer… On a attribué un nouveau nom de fichier à notre cre, un nom in game et on lui a attribué nos propres fichiers dialogue, script, etc… On va donc commencer à attaquer les offsets en modifiant des données permettant d’afficher le portrait du PNJ :

    Code:
        WRITE_ASCII 0x34 ~#vBrymS~    // Small portrait
        WRITE_ASCII 0x3c ~#vBrymM~    // Large portrait
    Si on se réfère à mon tableau tout en haut de ce tutoriel, on s’aperçoit que ces données ont une valeur de 8 cela nécessite donc un WRITE_ASCII. De plus comme vous pouvez vous en apercevoir ce sont des valeurs écrites donc là aucune question à se poser c’est forcément du WRITE_ASCII. Mais ça vous le saviez déjà si vous avez suivi la théorie. Comment ? Mais si vous le saviez !


    Comme on le voit dans l’exemple, j’utilise le WRITE correspondant à la taille de l’offset et j’écris la valeur de l’offset (entre ~~ ici car c’est une valeur écrite). A noter également que je ne me suis pas servi des deux premiers 0 après le x (0x34 au lieu de 0x0034 comme on peut le voir dans le tableau du file action). En fait les deux syntaxes sont possibles mais la norme est plutôt de ne pas les utiliser mais si vous préférez avec les zéros après tout…



    3. WRITE_SHORT] & WRITE_BYTE

    Bon, on continue la manipulation avec un WRITE_SHORT si vous avez compris jusque la ça va aller assez vite maintenant la manip étant toujours la même :

    Code:
        WRITE_SHORT 0x46 8      // Armor class (natural)
        WRITE_SHORT 0x4a "-2"   // Armor class (crushing attack modifier)
    Je suis toujours mon modèle en observant mon code couleur. On s’aperçoit que j’utilise mon WRITE_SHORT car la valeur de mon offset est de 2. Petite subtilité pour modifier ma classe d’armure contre les dégâts « écrasants » (crushing) je mets ma valeur chiffrée entre guillemets pour que WeiDU puisse prendre en compte une valeur négative. Sans transition on passe à la suite :


    Code:
        WRITE_BYTE 0x52 26    // THACO
        WRITE_BYTE 0x54 26    // Save versus death
        WRITE_BYTE 0x56 26    // Save versus polymorph
        WRITE_BYTE 0x58 26    // Save versus spell
    Je ne m’étendrai pas là-dessus, je vais chercher mes infos dans mon petit tableau et je m’aperçois que la valeur de l’offset est de 1 donc j’utilise WRITE_BYTE car c’est la commande qui correspond à un offset de cette taille. Et après habituel, j’indique le nouveau montant de la valeur.


    4. Quelques nouveautés à signaler : commandes WeiDU clef en main

    En matière d’édition de fichier cre, les dernières maj de WeiDU nous font profiter de pas mal de nouvelles commandes toutes faites qui nous évitent nombre de manipulations compliquées. Celles ci sont trouvables sous le chapitre macro listing, nous pouvons ici en relever quelques unes assez pertinentes :

    ADD_CRE_EFFECT (pour ajouter des effets à des créatures (changements de couleurs, invisibilité, boostage de carac/de CA, protections diverses, immunités...)
    DELETE_CRE_EFFECT (pour effacer un ou plusieurs effets sur une créature)
    DELETE_CRE_ITEM (pour effacer un ou plusieurs objets de l’inventaire ou de l’équipement de la créature.)[/COLOR]


    Voici pour les plus courants et les plus usités. Voir ce tuto pour l'utilisation d'une macro, ça obéit globalement à la même structure peu importe la macro.

    Maintenant ça sera à vous de faire un tout cohérent. Bien souvent il suffit de modifier juste quelques éléments pour avoir un cre qui soit utilisable. Personnellement dans la plupart des cas, la création de cre par tp2 est la méthode que je vais utiliser systématiquement car c’est la plus souple la plus rapide, et la plus « propre » j’ai envie de dire.


    5. Une option supplémentaire pour éviter certains bugs

    La commande WRITE_ASCII comme on l'a déjà vu s’écrit sur 8 octets et si votre valeur "écrite" atteint les 8 lettres vous n'aurez aucun souci mais si ce n'est pas le cas alors vous aurez une partie de l'ancienne valeur qui subsistera. Si on reprend notre exemple de tout à l'heure :

    Code:
    WRITE_ASCII DEATHVAR ~#vBrym~
        WRITE_ASCII DIALOG ~#vBrym~
        WRITE_ASCII SCRIPT_OVERRIDE ~#vBrym~
    En observant notre fichier sur un éditeur tel que cremaker ou DLTCEP on aura quelque chose du genre :

    Death variable = #vBrymul
    Dialog file = #vBrymul
    Override script = #vBrymul


    Nous devons donc préciser sur quel espace, sur quelle zone, nous écrivons pour que la valeur que nous indiquons remplace complètement l'ancienne. En l’occurrence, la zone entière de 8 octet :

    Code:
     WRITE_ASCII DEATHVAR ~#vBrym~ #8
        WRITE_ASCII DIALOG ~#vBrym~ #8
        WRITE_ASCII SCRIPT_OVERRIDE ~#vBrym~ #8

    Et voilà. En recourant à cette manip, vous vous éviterez bien des problèmes. En précisant le nombre de caractères vous avez également la garantie de ne pas "déborder" sur les autres adresses ; ce qui a de bonnes chances de rendre invalides les scripts suivants par exemple. A savoir que comme vous l'aurez peut être deviné pour toute commande de type WRITE, la valeur "#chiffre" vous permettra d’écrire sur l'espace que vous avez précisez (1 octet, 2 octets, etc...).
    Dernière modification par Freddy_Gwendo ; 29/03/2016 à 14h15. Motif: Modification du titre de la discussion et mise en page

    http://toutlemondesontrolistes.blogs...nitiation.html
    Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe

  2. #2
    Date d'inscription
    December 2007
    Localisation
    Dordogne
    Messages 
    1 141
    Ajout d'une autre partie pour résoudre d'eventuels bug avec la commande WRITE_ ASCII. En espérant que ça vous soit utile...

    http://toutlemondesontrolistes.blogs...nitiation.html
    Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe

  3. #3
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages 
    6 826
    Citation Envoyé par Armand Voir le message
    5. Une option supplémentaire pour éviter certains bugs

    La commande WRITE_ASCII comme on l'a déjà vu s’écrit sur 8 octet et si votre valeur "ecrite" atteint les 8 lettres vous n'aurez aucun souci mais si ce n'est aps le cas alors vous aurez une partie de l'ancienne valeur qui subsitera.
    Il y a une erreur dans ton exemple. En ne précisant pas #8, le seul risque est qu'il reste des caractères parasites à la fin, ce qui donnerait :

    Death variable = #vBrymXXXXXXXXXXXXXXX
    Dialog file = #vBrymXX
    Override script = #vBrymXX

    XX étant les caractères demeurant d'avant.

    Pour Death variable, le champ fait 32 octets (d'où le plus grand nombre de X dans mon exemple), dont 18 utilisables en raison des variables de mort sous la forme SPRITE_IS_DEAD#vBrym.

    Le fait d'ajouter #8 précise le nombre de caractères à écrire. Si le texte indiqué à WRITE_ASCII est trop long, il est tronqué au nombre indiqué. S'il est plus court, WeiDU complète la fin avec des caractères NUL (des 0 binaires) qui marquent la fin d'un texte.

    A noter que WRITE_ASCII écrit bêtement ce qu'on lui dit si on ne précise pas le nombre de caractères. En conséquence, si on écrit 9 caractères là où il n'en faudrait que 8, on va allègrement jardiner dans le champ suivant et donc l'endommager.
    Par exemple :
    WRITE_ASCII SCRIPT_OVERRIDE ~#vBrym789~
    va joyeusement écrire un 9 à la place du premier caractère de SCRIPT_CLASS. Bref, non seulement le script Override ne sera pas reconnu (si le fichier BCS s'appelle bien #vBrym789.BCS) mais le script Class sera aussi introuvable dans le jeu à cause du 9 à la place du vrai caractère.

    Par conséquent, utiliser systématiquement #N est aussi une sécurité pour s'assurer de ne pas écraser quelque chose en cas d'erreur. A condition de mettre la bonne valeur pour N, bien entendu !
    Dernière modification par Isaya ; 10/02/2013 à 11h41.
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  4. #4
    Date d'inscription
    December 2007
    Localisation
    Dordogne
    Messages 
    1 141
    Merci pour ce complément d'information isaya. De mon coté j'ai réajusté légèrement le topic en suivant tes explications pour eviter les confusions et j'en ai profité pour mettre un lien vers mon tuto sur les macros vu qu'il en existe un depuis quelques temps déjà.

    http://toutlemondesontrolistes.blogs...nitiation.html
    Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe

  5. #5
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 644
    Et voilà, le dernier tuto de la série d'Arrmand a retrouvé ses images.

    Bonne lecture.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/03/2016, 18h26
  2. Réponses: 1
    Dernier message: 16/02/2016, 19h25
  3. Cas pratique : forger l'épée elfique Shollindal (The Chanter)
    Par Freddy_Gwendo dans le forum Menace sur le Royaume de Diamant Éternel
    Réponses: 7
    Dernier message: 28/08/2012, 09h27
  4. Question pour un moddeur !
    Par Shiir dans le forum Idées
    Réponses: 4
    Dernier message: 03/04/2011, 14h11
  5. [BGT] Besoin de patcher les jeux originaux ?
    Par zato one dans le forum Baldur's Gate Reloaded : les mods TUTU et Baldur's Gate Trilogy
    Réponses: 2
    Dernier message: 29/09/2008, 10h06

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250