Page 1 sur 1

DIALOGUE et .TRA

Posté : ven. 16 août 2013, 12:57
par Cocrane
Le fonctionnement de base est le suivant dans l'éditeur:
- un fichier mis à jour d'origine .DLG ou .D est sauvegardé en .D.

Je peux créer un .TRA lors de la sauvegarde du .D. Que faut il mettre dedans?

Je vois 3 solutions:

1- .D avec tout le texte dans le dialogue .TLK
> on a donc des références # dans le fichier sans .TRA associé.

2- .D avec support .TRA
> on a donc toutes les références @ dans le fichier .D. Les références # existantes ne sont pas utilisées.

3- Mixte, ce qui est en # reste en l'état et le reste en .TRA.

Qu'en pensez vous?

Cocrane

Posté : mer. 21 août 2013, 04:54
par Freddy_Gwendo
Oublie les modifications des fichiers .tlk : pour une meilleure compatibilité entre mods, le plus utile, c'est la création d'un fichier .d et d'un fichier .tra associé (sans les "#" puisqu'ils sont déjà contenus dans le fichier dialog.tlk).

Posté : sam. 24 août 2013, 00:01
par Cocrane
Ok, tu optes donc pour la solution 3.

On met dans le .TRA (gestion @) les nouveaux textes.

C'est noté. ^^

Cocrane

Posté : dim. 25 août 2013, 01:40
par Freddy_Gwendo
Juste un dernier point que je ne t'ai vu évoquer nulle part et que je n'ai pas vu dans tes captures d'écrans : n'oublie pas la gestion du fichier dialogF.tlk pour les dialogues concernant la gente féminine.

Exemple :
@999999 = ~Tu n'es pas pressé, <CHARNAME>~ ~Tu n'es pas pressée, <CHARNAME>~

Comme mon mod propose plus d'options pour les persos féminins, j'y suis assez sensible... ;)

Posté : dim. 25 août 2013, 10:28
par Cocrane
Oui c'est un sujet que je n'ai pas encore traité.

C'est la version masculine qui est en 1ier puis la version féminine?

Cocrane

Posté : dim. 25 août 2013, 12:04
par Freddy_Gwendo
Le fichier dialog.tlk contient les références aux dialogues, aux scripts, aux messages et aux panneaux du jeu. En règle générale, le fichier dialogF.tlk, valable pour les langues faisant la différence entre les genres, contient ces mêmes références, modifiées uniquement lorsqu'elles concernent un perso féminin.

Ex :

@999 = ~Je n'en ai rien à faire.~ --> identique dans dialog et dialogF.
@998 = ~<CHARNAME> est pressé.~ ~<CHARNAME> est pressée.~ --> premier string dans dialog, second dans dialogF.

Ces insertions sont générées automatiquement par la commande COMPILE de WeiDU : si WeiDU rencontre un string avec deux références (comme @998), il les scinde pour modifier automatiquement les deux fichiers .tlk.

Posté : jeu. 19 sept. 2013, 07:45
par Freddy_Gwendo
Comme je te l'avais dit, je compte refaire tous mes dialogues. Donc je n'en ai pas beaucoup de dispos.

Voici tout de même l'avant-dernière version de la première rencontre avec le perso qui lance la quête. Elle sera modifiée car elle ne me convient pas et en plus, j'ai modifié tout le background de Gwendolyne pour éviter les poncifs (celui-ci date d'il y a plus de 6 ans et je le trouve trop nul).

Mais ce qui importe, ce sont les strings MALE/FEMALE : tu en trouveras dès le début de la rencontre.

Je passe par ce topic pour te répondre parce que je trouvais stupide de passer par un hébergeur de fichiers pour une vingtaine de Ko ! ;)

Dès que tu l'as téléchargé, préviens-moi pour que je supprime le lien, histoire d'alléger mon quota de pièces jointes...

Posté : jeu. 19 sept. 2013, 11:33
par Cocrane
Freddy,
merci pour tes fichiers. Je confirme que c'est très intéressant de voir comment code les moddeurs par rapport aux fichiers du jeu.

Quelques remarques:

FICHIER .D
"
SAY @3900000 = @3900001
++ @3900002 DO ~DialogueSetGlobal("GWGwendyR1","GLOBAL",2)~ + Gwendolynette.Qui
+ ~Global("GWGwendyNO","GLOBAL",0)~ + @3900056 DO ~DialogueSetGlobal("GWGwendyOK","GLOBAL",1)~ + Gwendolynette.OK
...

IF ~~ + Gwendolynette.Histoire02
"

Je ne connais pas l'utilisation du "+" ou du "++".


"
IF ~~ DO ~DialogueSetGlobal("GWGwendyNO","GLOBAL",1) SetGlobalTimer("GWRefus1","GLOBAL",7200) PlaySound("EFF_HAND")

"
Ces lignes n'ont pas la structure "IF ... THEN ...".


"
CHAIN GWGwendy Gwendolynette.Nalia1304
@3900182
= @3900183
== NALIAJ @4890000
END
IF ~Global("GWGwendyOK","GLOBAL",1)~ EXTERN GWGwendy Gwendolynette.OK
IF ~Global("GWGwendyOK","GLOBAL",2) Global("GWAR1402","GLOBAL",0) PartyHasItem("SCALEB")~ EXTERN GWGwendy Gwendolynette.Thaxll1402
IF ~Global("GWGwendyOK","GLOBAL",2) Global("GWBELT10","GLOBAL",0) PartyHasItem("BELT10")~ EXTERN GWGwendy Gwendolynette.Belt10
IF ~Global("GWGwendyOK","GLOBAL",2) Global("GWRGMAGE","GLOBAL",0) OR(2) PartyHasItem("RING08") PartyHasItem("RING40")~ EXTERN GWGwendy Gwendolynette.RgMage
"

Je ne connais pas cette version de structure de CHAIN IF. La 'mienne' c'est:
CHAIN IF .... THEN
SAY ....
END
IF ... THEN REPLY


J'ai jeté un oeil sur la doc WEiDU:
- je vois que "==" équivaut à un "EXTERN".
-pas vu d'explication pour "+"
- le SAY du CHAIN peut être remplacé direct par le texte ~...~

Je suppose que Weidu interprète les "+", "++" et l'absence de "THEN". Pour le moment, ce n'es pas géré dans l'éditeur. Il faut que l'on détaille ces points.


FICHIER .TRA

Je ne gère pas les commentaires // ou /* ou ligne d'espace. Je vais mettre ce point en place.

Cocrane

Posté : jeu. 19 sept. 2013, 12:27
par Freddy_Gwendo
Lorsque je me suis remis à modder, j'ai découvert qu'il avait de nouvelles manières de coder les dialogues. Comme elles sont plus rapides, j'ai essayé de les adapter à mes anciens dialogues. D'ailleurs, je t'avais prévenu, ce dialogue était en voie de modification, donc pas encore terminé.

Donc :

Code : Tout sélectionner

IF ~Global("GWGwendyR1","GLOBAL",1)~ THEN BEGIN Gwendolynette.Hello
 SAY @3900000 = @3900001
  [color="#00FFFF"]++ [/color]@3900002 DO ~DialogueSetGlobal("GWGwendyR1","GLOBAL",2)~ [color="#00FFFF"]+[/color] Gwendolynette.Qui
  ++ @3900003 DO ~DialogueSetGlobal("GWGwendyR1","GLOBAL",2)~ + Gwendolynette.Quoi
  ++ @3900004 DO ~DialogueSetGlobal("GWGwendyR1","GLOBAL",2)~ + Gwendolynette.Insulte
END

IF ~~ THEN BEGIN Gwendolynette.LastChance
 SAY @3900012
  ++ @3900007 + Gwendolynette.Bataille
  [color="#00FFFF"]+ ~Class(Player1,PALADIN_ALL) ~ + @3900013 +[/color] Gwendolynette.Bye1_Paladin
  + ~!Class(Player1,PALADIN_ALL)~ + @3900013 + Gwendolynette.Bye1_NonPaladin
  + ~Global("GWGwendyHist","GLOBAL",0)~ + @3900002 + Gwendolynette.Qui
  + ~Global("GWGwendyQuoi","GLOBAL",0)~ + @3900003 + Gwendolynette.Quoi
END
équivaut à

Code : Tout sélectionner

IF ~Global("GWGwendyR1","GLOBAL",1)~ THEN BEGIN Gwendolynette.Hello
 SAY @3900000 = @3900001
  [color="#FFFF00"]IF ~~ THEN REPLY [/color]@3900002 DO ~DialogueSetGlobal("GWGwendyR1","GLOBAL",2)~ [color="#FFFF00"]GOTO[/color] Gwendolynette.Qui
  IF ~~ THEN REPLY @3900003 DO ~DialogueSetGlobal("GWGwendyR1","GLOBAL",2)~ GOTO Gwendolynette.Quoi
  IF ~~ THEN REPLY @3900004 DO ~DialogueSetGlobal("GWGwendyR1","GLOBAL",2)~ GOTO Gwendolynette.Insulte
END

IF ~~ THEN BEGIN Gwendolynette.LastChance
 SAY @3900012
  IF ~~ THEN REPLY @3900007 GOTO Gwendolynette.Bataille
  [color="#FFFF00"]IF ~Class(Player1,PALADIN_ALL) ~ THEN REPLY [/color]@3900013 [color="#FFFF00"]GOTO[/color] Gwendolynette.Bye1_Paladin
  IF ~!Class(Player1,PALADIN_ALL)~ THEN REPLY @3900013 GOTO Gwendolynette.Bye1_NonPaladin
  IF ~Global("GWGwendyHist","GLOBAL",0)~ THEN REPLY @3900002 GOTO Gwendolynette.Qui
  IF ~Global("GWGwendyQuoi","GLOBAL",0)~ THEN REPLY @3900003 GOTO Gwendolynette.Quoi
END


donc

++ = IF ~~ THEN
+ Gwendolynette.Qui = GOTO Gwendolynette.Qui (ça marche aussi avec EXTERN Dialog2 Gwendolynette.Qui)
+ ~condition~ = IF ~condition~


Par ailleurs, tu as raison, c'est effectivement

Code : Tout sélectionner

  IF ~~ THEN DO ~DialogueSetGlobal("GWGwendyNO","GLOBAL",1) SetGlobalTimer("GWRefus1","GLOBAL",7200) PlaySound("EFF_HAND") 
  Wait(1) AddJournalEntry(@3500901,INFO) ForceSpell(Myself,DRYAD_TELEPORT)~ EXIT
J'ai dû me mélanger les pinceaux en remplaçant les IF THEN par les ++ et comme je n'ai pas encore testé ce fichier puisque j'attendais ton éditeur pour me replonger dans les dialogues...


Par ailleurs, le CHAIN que tu mentionnes est entre /* et */, donc ne sera pas compilé. C'est un des exemples de dysfonctionnements que je te mentionnais par MP. Le bon code est juste au dessus :

Code : Tout sélectionner

/* Arnisse : Torgal */
IF ~~ THEN BEGIN Gwendolynette.Torgal1304
 SAY @3900180
  IF ~OR(2) !InParty("NALIA") StateCheck("NALIA",CD_STATE_NOTVALID)~ THEN DO ~DialogueSetGlobal("GWAR1304","GLOBAL",2) GiveItemCreate("GWTorgal",Player1,1,1,1)
	GiveItemCreate("GWTrollS",Player1,2,1,1) AddJournalEntry(@3900181,INFO)~ + Gwendolynette.OK
  IF ~InParty("NALIA") !StateCheck("NALIA",CD_STATE_NOTVALID)~ THEN DO ~DialogueSetGlobal("GWAR1304","GLOBAL",2) GiveItemCreate("GWTorgal",Player1,1,1,1)
	GiveItemCreate("GWTrollS",Player1,2,1,1) AddJournalEntry(@3900181,INFO)~ + Gwendolynette.Nalia1304
END

IF ~~ THEN BEGIN Gwendolynette.Nalia1304
 SAY @3900182 = @3900183
  IF ~~ EXTERN NALIAJ Torgal1304
 END
Beaucoup plus long à écrire, ce codage old school fonctionne parfaitement, lui ! ;)

Quant aux // et /*, ils sont très utiles en phase de développement sur les fichiers tra et d : positionnement de repères, d'indications, voire de trucs à vérifier ou à modifier tout en permettant de compiler tranquillement les fichiers. Comme dans l'exemple du CHAIN : je l'ai conservé pour être certain de le régler ultérieurement. Idem dans le fichier tra où tu as pu constater que j'ai laissé certains commentaires, notamment sur la création de fichiers sons pour certains strings (j'utilise pour l'instant des fichiers wav existants histoire de ponctuer les dialogues, mais ils devront être remplacés par d'autres voix).

Cependant, si on créé directement les fichiers d et tra à partir de ton éditeur, ne t'inquiète pas des // et consorts puisqu'ils seront rajoutés à postériori dans ces mêmes fichiers.

D'ailleurs, c'est un peu l'utilisation que je comptais en faire : définir rapidement la structure du dialogue dans ton édito, puis l'affiner si nécessaire dans les fichiers .d (rajouts de strings, modification des conditions, copier-coller d'actions déclenchées par une cinématique, etc...).

Posté : jeu. 19 sept. 2013, 12:51
par Cocrane
C'est vu pour les évolutions du code de WEIDU. J'en conclu que le '+' n'est pas à gérer.

Au sujet du fichier .TRA, je note que tu as quand même mis pas mal de commentaires. Commentaire qui me semble précieux pour aider à avoir des repères pendant la réalisation du mod.

Ce commentaire n'est pas saisissable dans l'éditeur pour le moment mais on peut réfléchir sur ce point:
- à l'écriture dans l'éditeur, une case à cocher 'Commentaire' peut permettre de signaler que c'est un commentaire qui est saisi.
=> à ajouter dans le fichier .TRA

- à la lecture du .TRA, la présence de '//' signalera que c'est un commentaire et non un indice à gérer.

Idée à creuser pour une V2.

Cocrane

Posté : jeu. 19 sept. 2013, 14:02
par Freddy_Gwendo
C'est vrai que j'écris pas mal de commentaires. Mais c'est dû à la nature du mod : comme c'est une campagne assez longue, si je ne me repère pas dans tous mes fichiers, je vais vite être perdu !
Mais ce n'est pas le cas de tous les mods.


Par ailleurs m'est venue une interrogation : il serait bon de prévoir une fonction copier-coller dans ton édito (ou de gérer l'utilisation du Ctrl-C, V) pour pouvoir écrire rapidement par exemple les conditions ou les actions qui se répètent selon les réponses.

Posté : jeu. 19 sept. 2013, 15:18
par Cocrane
Ok besoin à confirmer pour la gestion des commentaires

Concernant le copier coller de texte:
On n'édite pas du texte dans l'éditeur. On a une interface de saisie.

si jamais un block de discussion (if ... then ... End) est à créer et qu'un autre block est très ressemblant, on peut effectivement prévoir une copie de block comme choix à proposer.
Sinon on va dans le .D, on copie le block en le renommant. On charge le fichier dans l'éditeur.

Cocrane

Posté : sam. 05 oct. 2013, 21:38
par Freddy_Gwendo
Au sujet des "++", je suis tombé par hasard sur ce sujet sur PPG.
C'est un vieux tuto sommaire "pour les nuls" sur la manière de rédiger rapidement un fichier .d.

Posté : lun. 14 oct. 2013, 20:34
par Cocrane
Je te remercie pour ton post.

Pour le moment, je ne vais pas bosser la gestion des "++" vu que si j'ai bien compris c'est lié une version ancienne de WEIDU.

Cocrane

Posté : lun. 14 oct. 2013, 20:44
par Cocrane
Les travaux de ma salle d'eau me prennent bcp de temps...

J'avance néanmoins sur la gestion du sexe et j'ai deux questions:

1- le fichier dialogF.tlk sert aux textes SAY, REPLY, JOURNAL etc...?

2- Une valeur d'indice est valable correspond à la même phrase pour dialog.TLK (masculin) et dialogF.tlk (féminin).
Si oui, j'ai un pb, je n'obtiens pas le même texte (c'est facheux! ^^ )

Exemple avec QUAYLE
"SAY #36747 /* ~Merci de nous avoir aidés, mon bon monsieur. Kalah était un illusionniste de talent... qui s'abusait plus que nous le soupçonnions. Vous prendrez bien soin de ma petite Aerie, hein ?~ */
"

Si je le lis l'indice "36747" dans dialog.tlk, j'ai:
"
Merci de nous avoir aidés, mon bon monsieur. Kalah était un illusionniste de talent... qui s'abusait plus que nous le soupçonnions. Vous prendrez bien soin de ma petite Aerie, hein ?
"

Si je le lis l'indice "36747" dans dialogF.tlk, j'ai:
"
ur. Demandez à William Reirrac quels sont vos ordres.Je ne comprends pas bien pourquoi vous refusez un tel honneur. Nombreux sont ceux qui travaillent des années durant pour l'obteni
"

Idem pour un reply etc...

Si quelqu'un peut éclairer ma lanterne. ^^

Posté : lun. 14 oct. 2013, 22:59
par Isaya
Cocrane a écrit :Pour le moment, je ne vais pas bosser la gestion des "++" vu que si j'ai bien compris c'est lié une version ancienne de WEIDU
Le symbole "++" est plus que jamais d'actualité. L'âge du tutoriel est tout relatif, dans le monde du modding BG, c'est même un des plus récents, au contraire. Mais comme c'est surtout une façon d'écrire les choses de façon plus compacte, il n'est pas indispensable de s'en servir : tu peux toujours écrire "IF ~~ THEN" à la place
Cocrane a écrit :2- Une valeur d'indice est valable correspond à la même phrase pour dialog.TLK (masculin) et dialogF.tlk (féminin).
Si oui, j'ai un pb, je n'obtiens pas le même texte (c'est facheux! ^^ )

Exemple avec QUAYLE
"SAY #36747 /* ~Merci de nous avoir aidés, mon bon monsieur. Kalah était un illusionniste de talent... qui s'abusait plus que nous le soupçonnions. Vous prendrez bien soin de ma petite Aerie, hein ?~ */
"

Si je le lis l'indice "36747" dans dialog.tlk, j'ai:
"
Merci de nous avoir aidés, mon bon monsieur. Kalah était un illusionniste de talent... qui s'abusait plus que nous le soupçonnions. Vous prendrez bien soin de ma petite Aerie, hein ?
"

Si je le lis l'indice "36747" dans dialogF.tlk, j'ai:
"
ur. Demandez à William Reirrac quels sont vos ordres.Je ne comprends pas bien pourquoi vous refusez un tel honneur. Nombreux sont ceux qui travaillent des années durant pour l'obteni
"
Il n'y a aucune différence de texte entre les versions masculines et féminines pour le texte 36747, la version masculine s'applique aux deux.

A mon avis tu fais sans doute une grosse erreur car on voit que tu pointes pour le texte féminin sur des phrases non terminées. Je soupçonne que tu accèdes dans le fichier dialogF.tlk en utilisant les mêmes offset que ceux que tu as lus dans le fichier dialog.tlk. Et c'est une une énorme erreur !!!
En effet, si les textes diffèrent entre masculin et féminin ("content" / "contente", par exemple), on voit bien qu'un texte féminin pourra être plus long que son pendant masculin (cas typique). D'ailleurs les deux fichiers eux-mêmes n'ont pas la même taille.
Il faut donc bien considérer que chaque fichier dialog.tlk / dialogF.tlk soit être manipulé avec ses propres offsets. Le nombre de textes est le même, donc la partie "Entries" des deux fait la même taille, mais le début d'un texte dans la partie "Strings" de chaque fichier est à un offset différent, qu'il faut déterminer à partir du bloc "Entries" qui lui correspond.

Bonne continuation pour ce projet et pour ta salle d'eau.

Posté : sam. 19 oct. 2013, 23:36
par Cocrane
Ysaya tu as raison.

Au démarrage de l'éditeur, je charge quelques données du fichier Dialog.tlk. Données que j'utilise ensuite quand je lis le fichier. J'avais complètement oublié.

Utilisant la même fonction de lecture pour le fichier dialog.tlk et maintenant le fichier dialogF.tlk, je ne captais pas où étais le problème ... Maintenant c'est corrigé.

Merci à toi!


Pour la salle d'eau ça avance mais je rame vu que je suis un bricoleur du dimanche, j'y passe du coup plus de temps que prévu. :$

Peut être que les requins de Freddy auront envie d'y faire un tour! ^^

Cocrane