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é...
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] Rechercher des répliques dans des dialogues sans NI, ni DLTCEP
- 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] 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 [post=420644]petite routine WeiDU[/post] 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.
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 [post=420644]petite routine WeiDU[/post] 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...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- 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
.
1. Procédure d'installation.
Vous obtiendrez ceci :
2. Fonctionnement.
Généralement, le fichier .d que vous traduisez contient une liste d'instructions comme les suivantes :
Il vous suffit donc de repérer ces lignes et de les reporter dans le tableau GW_strings_a_trouver.tpa :
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,
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 :
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 :
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.
- Téléchargez l'archive proposée en pièces jointes.
- 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
[INDENT]- Un sous-répertoire backup (indispensable pour que WeiDU ne plante pas).[/INDENT]
[INDENT]- 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).[/INDENT]
[INDENT]- Le fichier GW_strings_a_trouver.tph qui contient les fonctions et macros utilisées pour le traitement.[/INDENT]
[INDENT]- Le fichier GW_strings_a_trouver.tpa qui contient le tableau des données à rechercher.[/INDENT]
2. Fonctionnement.
Généralement, le fichier .d que vous traduisez contient une liste d'instructions comme les suivantes :
Code : Tout sélectionner
I_C_T "[color="#00FF00"]nom de dialogue existant[/color]" "[color="#00FF00"]indice de la réplique à laquelle on ajoute quelque chose[/color]"
LISTE d'AJOUTS
END
APPEND_TOP "[color="#00FF00"]nom de dialogue existant[/color]" "[color="#00FF00"]indice de la réplique à laquelle on ajoute quelque chose[/color]"
LISTE d'AJOUTS
END
APPEND_BOTTOM "[color="#00FF00"]nom de dialogue existant[/color]" "[color="#00FF00"]indice de la réplique à laquelle on ajoute quelque chose[/color]"
LISTE d'AJOUTS
END
...
Code : Tout sélectionner
// 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
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 : Tout sélectionner
// Fichier # => String
//- 0 --------- 1 ---------------------
HGWRA01, 18 => 1
HGWRA01, 24 => 1
END
Idem pour :
Code : Tout sélectionner
// 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 : Tout sélectionner
*=====================================================================================================================================================================*
* 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é
-------------------------------------------------------------------------------------------------------------------------------
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 joints
-
- GW_strings_a_trouver_001.7z
- (847.5 Kio) Téléchargé 64 fois
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Isaya
- Adepte de Grondemarteau
- Planaire
- Messages : 6990
- Enregistré le : mar. 22 juil. 2003, 21:03
- Localisation : Plaisir
- Contact :
- Statut : Hors ligne
.
Le principe des dialogues n'a pas changé dans les Enhanced Edition.Freddy_Gwendo a écrit :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.
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 : Tout sélectionner
I_C_T ~%tutu_var%FIREBE~ %firebeadstate1% X#FirebeardImoen1
Code : Tout sélectionner
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 !
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 !
- 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
.
Ouaip, j'utilise ce genre de technique pour mon mod.
Exemple pour détecter Solaufein Romance :
Puis dans la procédure d'installation des dialogues :
Ç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.
Exemple pour détecter Solaufein Romance :
Code : Tout sélectionner
// 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~
Code : Tout sélectionner
// 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)
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.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité