Affichage des résultats 1 à 5 sur 5

Discussion: [WeiDU] Rechercher des répliques dans des dialogues sans NI, ni DLTCEP

  1. #1
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 649

    Flèche [WeiDU] Rechercher des répliques dans des dialogues sans NI, ni DLTCEP

    Modifier un fichier dlg existant peut paraître très facile à première vue. Surtout si on prend comme base le fichier vanilla du jeu. En revanche, pour peu que l'on se penche sur les problèmes de compatibilité avec les autres mods, ça peut vite devenir l'enfer.

    En effet, si vous partez d'une phrase de dialogue proposant 4 répliques possibles et décidez d'en ajouter une entre la 3° et la quatrième, votre code a de fortes chances de ne pas produire ce que vous espériez si d'autres mods ont ajouté leur propre contenu avant le vôtre !

    J'en ai fait l'amère expérience en voulant ajouter des options de réponses au dialogue UHMAY01 (Ministre Lloyd des Collines d'Umar) : il n'y a pas moins de 43 mods qui le modifient, et encore je ne suis pas certain de les avoir tous téléchargés.

    Pour les ceusses intéressés, j'ai pondu une petite routine WeiDU qui permet de retrouver l'index d'une réponse dans l'architecture du fichier .dlg et donc de s'affranchir des mods qui auraient été installés avant le vôtre.


    Quelques jours plus tard, je l'ai adaptée pour répondre à une demande d'un membre des d'Oghms qui souhaitait connaître les textes correspondant à des interjections introduites par le mod qu'il traduisait.

    Son utilisation est simple. Je la détaille dans le message suivant.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  2. #2
    Avatar de Galathée
    Galathée est déconnecté Impératrice d'Erhedun
    Date d'inscription
    August 2004
    Localisation
    sur une autre longueur d'ondes...
    Messages 
    33 369
    C'est moi le membre mystérieux des d'Oghmatiques et je profite de l'occasion pour te remercier encore de ton aide précieuse
    Un outil extrêmement pratique à n'en pas douter !
    Créateurs de tous poils, rejoignez-nous : Ecrivains, moddeurs, traducteurs, amateurs de RP, une place pour chaque plume !

    MJ sur Hélonna, full en ce moment

  3. #3
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 649

    Recherche de texte dans les dialogues pour traducteurs

    1. Procédure d'installation.

    1. Téléchargez l'archive proposée en pièces jointes.
    2. Désarchivez-la dans votre répertoire de jeu.



    Vous obtiendrez ceci :

    • Le fichier setup-GW_strings_a_trouver.exe (une copie de WeiDU v239.00).

    • Le répertoire GW_strings_a_trouver. Ce dernier contient

      - Un sous-répertoire backup (indispensable pour que WeiDU ne plante pas).
      - Le fichier setup-GW_strings_a_trouver.tp2 (associé à setup-GW_strings_a_trouver.exe, c'est lui qui indique à WeiDU ce qu'il doit faire).
      - Le fichier GW_strings_a_trouver.tph qui contient les fonctions et macros utilisées pour le traitement.
      - Le fichier GW_strings_a_trouver.tpa qui contient le tableau des données à rechercher.




    2. Fonctionnement.

    Généralement, le fichier .d que vous traduisez contient une liste d'instructions comme les suivantes :

    Code:
    I_C_T "nom de dialogue existant" "indice de la réplique à laquelle on ajoute quelque chose"
    LISTE d'AJOUTS
    END
    
    APPEND_TOP "nom de dialogue existant" "indice de la réplique à laquelle on ajoute quelque chose"
    LISTE d'AJOUTS
    END
    
    APPEND_BOTTOM "nom de dialogue existant" "indice de la réplique à laquelle on ajoute quelque chose"
    LISTE d'AJOUTS
    END
    
    ...
    Il vous suffit donc de repérer ces lignes et de les reporter dans le tableau GW_strings_a_trouver.tpa :

    Code:
    // Fichier	#	=> String
    //- 0 --------- 1 ---------------------
    HGWRA01,	18	=> HGWRA01_18
    HGWRA01,	24	=> HGWRA01_24
    MELISS01,	11	=> MELISS01_11
    IMOEN25J,	11	=> IMOEN25J_11
    MINSC25J,	7	=> MINSC25J_7
    NALIA25J,	3	=> NALIA25J_3
    BALTH,		26	=> BALTH_26
    
    END
    Oubliez les deux premières lignes qui sont des repères de programmation.

    Chaque ligne contient le nom du fichier dialogue ("nom de dialogue existant") et l'index du texte à retrouver ("indice de la réplique à laquelle on ajoute quelque chose") séparés par une virgule.
    Après la flèche se trouve une donnée artificielle, mais indispensable : Elle permet à WeiDU de comprendre que chaque ligne est différente. Vous pouvez très bien changer HGWRA01_18 par 1, HGWRA01_24 par 2, etc.
    L'essentiel est que chaque valeur "String" soit différente.

    Ainsi, pour WeiDU,

    Code:
    // Fichier	#	=> String
    //- 0 --------- 1 ---------------------
    HGWRA01,	18	=> 1
    HGWRA01,	24	=> 1
    
    END
    les résultats du traitement de la première ligne seront écrasés par ceux de la seconde puisqu'il considérera que ce sont les mêmes. Et vous n'obtiendrez pas le texte correspondant à la réplique 18 du fichier HGWRA01.dlg

    Idem pour :
    Code:
    // Fichier	#	=> String
    //- 0 --------- 1 ---------------------
    HGWRA01,	18	=> 1
    HGWRA01,	18	=> 2
    
    END

    Une fois vos données saisies, sauvegardez le fichier GW_strings_a_trouver.tpa, puis lancez la procédure en double-cliquant sur setup-GW_strings_a_trouver.exe.

    A la fin du traitement, vous trouverez dans votre répertoire le fichier GW_strings_a_trouver.txt :

    Code:
    *=====================================================================================================================================================================*
    *                                                               Liste des phrases de dialogue à trouver                                                               *
    *                                                                                                                                                                     *
    *  DLG		n°	tlk		Phrase                                                                                                                        *
    *=====================================================================================================================================================================*
      HGWRA01  	18	65896	Combien d'autres devront souffrir avant que tu comprennes que j'ai raison ? Combien d'autres mourront ? Que sont devenus tes anciens compagnons... combien sont morts, à cause de toi ?
    	Gorion
    -------------------------------------------------------------------------------------------------------------------------------
      HGWRA01  	24	65914	Tu ne sais pas de quoi tu parles. Tu es liée à lui, tu as tué tout comme lui.
    	Gorion
    -------------------------------------------------------------------------------------------------------------------------------
      HGWRA01  	25	65926	Je ne permettrai pas que la prophétie se réalise grâce à toi ! Je ne le permettrai pas ! Tu devras mourir par ma main, avant !
    	Gorion
    -------------------------------------------------------------------------------------------------------------------------------
      SARVOLO  	9	71486	De quel compagnon as-tu envie d'entendre parler ?
    	Volo
    -------------------------------------------------------------------------------------------------------------------------------
      GORODR1  	11	62379	Ce jour est venu, <CHARNAME>. Le grand Mal se débat à l'intérieur, et il a déjà infecté la Tour de Garde au point que nous ne pouvons contourner les créatures et les magies qu'il a déjà générées.
    	Odren
    -------------------------------------------------------------------------------------------------------------------------------
      GORODR1  	35	62548	Nous...je...je l'admets. J'ai honte à le reconnaître, mais c'est ce que j'ai fait. Je ne croyais pas que vous...ou qui que ce soit...serait assez puissant pour tuer le Prince des Démons.
    	Odren
    -------------------------------------------------------------------------------------------------------------------------------
      IMOEN25J  	30	70535	"Notre folie nous sera pardonnée" ! De qui se moque-t-il ?! Il cherche la bagarre !
    	Nom de la créature pas trouvé
    -------------------------------------------------------------------------------------------------------------------------------
    Vous y trouverez le nom du fichier de dialogue, l'indice de la réplique recherchée, son numéro d'index dans le fichier dialog.tlk, puis le texte de la réplique.
    Cerise sur le gâteau, j'ai ajouté le nom de la créature qui utilise le dialogue.
    Pour certains fichiers de dialogue, vous trouverez la mention « Nom de la créature pas trouvé ». C'est normal : ça concerne généralement les dialogues attribués par script, notamment aux PNJ. Cependant, il est très facile de trouver leur destinataire : IMOEN25J, ça devrait vous dire quelque chose, non ?!



    3. Notes.

    a. Cette procédure n'installe rien et ne modifie rien.

    b. Cependant, j'ai conservé une routine qui vérifie la présence du fichier GW_strings_a_trouver.txt dans le répertoire. S'il n'existe pas, elle le crée, sinon, elle le complète par les éléments trouvés.
    Donc, à chaque utilisation, je vous conseille de le sauvegarder quelque part, puis de le supprimer.

    c. Comme je ne mode pour l'instant que sur des versions normales, je ne sais pas si cette procédure fonctionne sur les versions Enhanced (il va vraiment falloir que je les télécharge un de ces jours). En fait, je n'en suis pas certain du tout.

    Si quelqu'un veut l'adapter, pas de problème.



    J'espère avoir été clair dans mes explications. Si ce n'est pas le cas, n'hésitez pas à réagir ; je rectifierai le tir.
    Fichiers attachés Fichiers attachés
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  4. #4
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages 
    6 833
    Citation Envoyé par Freddy_Gwendo Voir le message
    c. Comme je ne mode pour l'instant que sur des versions normales, je ne sais pas si cette procédure fonctionne sur les versions Enhanced (il va vraiment falloir que je les télécharge un de ces jours). En fait, je n'en suis pas certain du tout.
    Le principe des dialogues n'a pas changé dans les Enhanced Edition.

    Néanmoins il se peut que les dialogues aient changé par rapport aux versions d'origine, par exemple pour corriger des bugs ou pour inclure des interjections des nouveaux personnages introduits par Beamdog, de sorte que les mods qui veulent justement ajouter des interjections ou des réponses doivent distinguer ces cas (sans compter certains changements du patch 2.0 ou supérieur). Mais c'est avant tout le problème de l'auteur du mod.

    Néanmoins, par rapport aux exemples que tu donnes, cela signifie qu'identifier l'indice de la réplique peut s'avérer un peu plus compliqué dans un tel cas. Par exemple, BG1 NPC a recours à des variables fixées en fonction du jeu pour ce type de situation. Cela se traduit par le fait qu'il faut aller consulter les fichiers g3_<jeu>_cpmvars.tpa dans le répertoire bg1npc\lib (avec <jeu> = bgee, par exemple) pour connaître l'indice en question. Cela s'applique notamment au dialogue de Perleflamme où l'intervention d'Imoen se traduit par :
    Code:
    I_C_T ~%tutu_var%FIREBE~ %firebeadstate1% X#FirebeardImoen1
    avec dans g3_bgee_cpmvars.tpa
    Code:
    OUTER_SET firebeadstate1 = 3
    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 !

  5. #5
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 649
    Ouaip, j'utilise ce genre de technique pour mon mod.

    Exemple pour détecter Solaufein Romance :

    Code:
    // DÉFINITION de la COMPATIBILITÉ avec le mod Solaufein Romance
    
    DEFINE_ACTION_MACRO ~GW_COMPATIBILITY_SOLAROM~ 
    BEGIN
    
    // 1. Recherche de la présence du mod Solaufein Romance dans le répertoire du jeu.
    // -------------------------------------------------------------------------------
    	ACTION_IF (DIRECTORY_EXISTS "solarom") BEGIN
    		PRINT "Le mod Solaufein Romance est present dans le repertoire."
    
    // 2. Recherche du rang du nouvel échange ajouté au dialogue UHMER01 par kit de la Chevaucheuse.
    // ---------------------------------------------------------------------------------------------
    		OUTER_SET GW_Uhmer01_state_remise1 = STATE_WHICH_SAYS 11105624 IN ~Diamant_Eternel/tra/%s/vaelasa.tra~ FROM UHMER01
    
    // 3. Création d'un clone du fichier wwmer01.sto pour intégrer les remises accordées par Elence Fielding à la Chevaucheuse.
    // ------------------------------------------------------------------------------------------------------------------------
    		ACTION_IF FILE_EXISTS_IN_GAME ~wwmer01.sto~ BEGIN		// Si le mod Solaufein Romance a déjà été installé : on modifie les paramètres de wwmer01.sto
    			COPY_EXISTING ~wwmer01.sto~ ~override/GWwwmer1.sto~
    				PATCH_IF (SOURCE_SIZE > 0x9b) BEGIN
    					SAY NAME2 @11105631	// ~Armurerie d'Elence Fielding~
    					WRITE_LONG 0x14 110	// ORIGINAL = 150	- Store "sell price markup" (percentage of base price store charges for items)
    					WRITE_LONG 0x18 50	// ORIGINAL = 30	- Store "buy price markup" (percentage of base price store is willing to pay)
    					WRITE_LONG 0x1c 0	// ORIGINAL = 5		- Depreciation rate
    					WRITE_LONG 0x40 80	// ORIGINAL = 100	- ID Price
    				END
    			BUT_ONLY
    		END ELSE BEGIN							// Sinon, on on crée directement ce clone.
    			COPY ~solarom/uhmer01.sto~ ~override/GWwwmer1.sto~
    				PATCH_IF (SOURCE_SIZE > 0x9b) BEGIN
    					SAY NAME2 @11105631	// ~Armurerie d'Elence Fielding~
    					WRITE_LONG 0x14 110	// ORIGINAL = 150	- Store "sell price markup" (percentage of base price store charges for items)
    					WRITE_LONG 0x18	50	// ORIGINAL = 30	- Store "buy price markup" (percentage of base price store is willing to pay)
    					WRITE_LONG 0x1c 0	// ORIGINAL = 5		- Depreciation rate
    					WRITE_LONG 0x40 80	// ORIGINAL = 100	- ID Price
    				END
    			BUT_ONLY
    		END	// of ACTION_IF FILE_EXISTS_IN_GAME ~wwmer01.sto~
    
    //4. Définition de la valeur GW_Solaufein_Romance (= 1) pour modifier le dialogue UHMER01 du kit.
    // ----------------------------------------------------------------------------------------------
    		OUTER_SET GW_Solaufein_Romance = 1
    
    	END ELSE BEGIN						// Si le mod Solaufein Romance n'est pas dans le répertoire du jeu.
    
    		PRINT "Le mod Solaufein Romance n'est pas present dans le repertoire"
    		OUTER_SET GW_Solaufein_Romance = 0
    //		OUTER_SET GW_Uhmer01_state_remise1 = "-99"
    		OUTER_SET GW_Uhmer01_state_remise1 = STATE_WHICH_SAYS 11105624 IN ~Diamant_Eternel/tra/%s/vaelasa.tra~ FROM UHMER01
    
    	END		// of ACTION_IF (DIRECTORY_EXISTS "solarom")
    
    END			// of DEFINE_ACTION_MACRO ~GW_COMPATIBILITY_SOLAROM~
    Puis dans la procédure d'installation des dialogues :

    Code:
    // COMPATIBILITÉ avec le mod Solaufein Romance : Modification du dialogue UHMER01.
    LAM ~GW_COMPATIBILITY_SOLAROM~
    
    ACTION_IF (GW_Uhmer01_state_remise1 > 0) BEGIN
    
    	<<<<<<<< .../Diamant_Eternel/inlined/uhmer01.d
    A_T_T UHMER01 %GW_Uhmer01_state_remise1% ~!GlobalGT("SolaTalk","GLOBAL",13)~
    EXTEND_TOP UHMER01 %GW_Uhmer01_state_remise1%
    	IF ~GlobalGT("SolaTalk","GLOBAL",13)~ THEN DO ~StartStore("GWwwmer1",LastTalkedToBy(Myself))~ EXIT
    END
    >>>>>>>>
    	COMPILE ~.../Diamant_Eternel/inlined/uhmer01.d~ EVALUATE_BUFFER
    
    END	// of ACTION_IF (GW_Uhmer01_state_remise1 > 0)
    Ça me permet :

    1. D'identifier la présence du mod Solaufein Romance dans le répertoire.
    2. De savoir s'il a été installé avant mon mod ou s'il le sera après.
    3. De gérer la modification du fichier UHMER01.dlg en conséquence.
    Dernière modification par Freddy_Gwendo ; 22/05/2016 à 21h16.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. [TUTORIEL] Création d'Objets avec DLTCEP et Installation avec WeiDU
    Par Mathrim Cauthon dans le forum Tutoriels et Guides
    Réponses: 110
    Dernier message: 18/08/2018, 17h47
  2. [BGT] Dans BG2, Charname homme considéré comme femme dans tous les dialogues
    Par Jack-OF-Blades dans le forum Baldur's Gate Reloaded : les mods TUTU et Baldur's Gate Trilogy
    Réponses: 0
    Dernier message: 25/01/2014, 19h40
  3. [WeiDU] Problèmes de décompilation et de compilation de dialogues
    Par Manchot Empereur multiclassé dans le forum Programmation WeiDU
    Réponses: 8
    Dernier message: 16/05/2006, 18h18
  4. Réinstaller un mod weidu sans désinstaller les suivants ?
    Par zefklop dans le forum Programmation WeiDU
    Réponses: 1
    Dernier message: 14/01/2006, 12h17
  5. Réponses: 11
    Dernier message: 05/07/2005, 00h39

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 251 252 253 254 255 256