Vers l'Infinity et Baldur's Gate
 
AccueilAccueil  PortailPortail  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  ConnexionConnexion  

Partagez | 
 

 [PNJ] Une autre gestion des dialogues - Partie 2 : Une rédaction claire des fichiers .d.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Pépé Malin
Pépé Pizza
Pépé Pizza
avatar

Nombre de messages : 333
Age : 29
Date d'inscription : 29/05/2008

MessageSujet: [PNJ] Une autre gestion des dialogues - Partie 2 : Une rédaction claire des fichiers .d.   Ven 20 Mar 2009 - 1:27

Partie 2 : Une rédaction claire des fichiers .d.


Sommaire du tutoriel :



Dans cette partie du tutoriel, j’aimerais aborder plusieurs points qui me semblent importants pour apporter une lecture et relecture plus claire et plus facile des fichiers .d.

Les conseils sont les suivants :

  • 1) Mettre en tête du .d le contenu synthétique du fichier.


Il me parait important de mettre en commentaire (//) au début du .d un résumé synthétique de ce que contient le .d

Aussi chaque référence sera reportée dans le .d au niveau de la section concernée. Ainsi, avec la fonction recherche, on retrouve facilement où débute chaque grosse partie du .d, ce qui facilite grandement la navigation.

Un exemple de ce que ça peut donner pour XXNPC.d :

Code:
// XXNPC.d
// Contenu :
// XXNPC
// Recrutement. (JT)
// XXNPCR
// Dialogues de quêtes (QT)
// Dialogues de romance (LT)
// Dialogues d’amitié (FT)
// XXNPCJ
// Dialogues déclenchés par le joueur (CT)
// Flirt Pack (FP)
// XXNPCP
//Dialogues de kick out (KT)
// Dialogue post pétrification (PT)

Je reparlerai plus en détail du contenu des .d dans un prochain tutoriel. Ce qu’il faut retenir, c’est que cet en-tête permet de se rappeler d’un coup d’œil ce que contient notre .d et il nous permettra de se diriger directement au bon endroit pour coder dans son .d ou modifier un dialogue déjà existant.

Par exemple si je cherche les dialogues de romance, hop, il me suffit de rechercher « // Dialogues de romance (LT) » et je serai direct dessus.

Petite note : ce genre d’en-tête peut être très utile également pour les gros fichiers scripts : je pense notamment au fichier script du PNJ recrutable qui contient tout un tas de scripts divers et variés qui agissent sur tout un tas de choses. Du coup, mettre des annotations et des références qui sont également regroupées en début de fichier permet de mieux s’y retrouver dans tout ce fouillis.

Les couples de lettres entre parenthèses (JT, QT, LT, FT etc…) sont là pour rappeler les préfixes utilisés pour nommer les labels des blocs utilisés pour chaque type de dialogue, ce qui nous amène au conseil n°2.


  • 2) Labelliser efficacement et sans efforts ses blocs de dialogue.



La méthode est simple, il s’agit de créer les noms de label des blocs sur le modèle suivant :

  • On associe à chaque type de dialogue un couple de lettre : LT (LoveTalk) pour les dialogues de romance, FT (FriendshipTalk) pour les dialogues d’amitié, QT (QuestTalk) pour les dialogues de Quêtes etc… comme c’est montré au-dessus dans le bout de code. Bien entendu, ce ne sont que des exemples, vous pouvez inventer les couples de lettres que vous souhaitez, il en est de même pour les catégories de dialogue.
  • On adjoint un numéro au couple de lettre : QT1 sera le premier dialogue de quête, QT2 le deuxième, LT1 le premier dialogue de romance et ainsi de suite.
  • Ensuite on accole une lettre et un chiffre et on obtient un label de bloc : QT1A1 sera le premier bloc du dialogue de quête n°1, QT1A2 sera le deuxième bloc de ce dialogue et on continue la numérotation comme cela, linéairement au fur et à mesure que l’on créé ses blocs de dialogue.



Cette méthode apporte les avantages suivants :

  • Pas besoin de se creuser la tête pour inventer des noms de blocs.
  • Pas de redondance possible dans les noms des blocs : les blocs du QT1 ne pourront jamais se confondre avec les blocs du QT2 par exemple.
  • On peut retrouver le premier bloc de chaque dialogue très facilement. En effet, si je veux retrouver le début du dialogue de quête 1, c’est facile, il me suffit de rechercher QT1A1. Autre exemple : le début du 4ème dialogue de romance sera le bloc LT4A1. En effet, tous les dialogues débutent par un bloc nommé XXXA1 (XXX représentant le couple de lettre et le n° du dialogue). Ca devient très utile quand les fichiers .d commencent à atteindre une certaine taille.



Personnellement, j’ai pris l’habitude de changer de lettre pour nommer les blocs chaque fois qu’il y a une bifurcation, une zone à choix multiple pour Charname par exemple. Prenons l’exemple du dialogue suivant :

NOTE : tout ce qui écrit après une double barre // sont des commentaires apportant des explications sur les blocs.


BEGIN ~XXNPC~ // fichier dialogue du personnage avant tout recrutement.

IF ~Global("XXNPCRecru","GLOBAL",1)~ THEN BEGIN JT1A1 // premier bloc du premier dialogue de recrutement (JoinTalk)
SAY @0 /*@0 = ~Salut !~*/
IF ~THEN REPLY @1 /*@1 = Salut aussi !*/ GOTO JT1A2 // Ici il n’y a qu’un choix possible, je ne change pas de lettre, je passe au n° supérieur.
END


IF ~~ THEN BEGIN JT1A2
SAY @2 /*@2 = ~Puis-je rejoindre ton groupe ?~*/
IF ~~ THEN REPLY @3 /*@3 = ~Oui.~*/ GOTO JT1B1
IF ~~ THEN REPLY @4 /*@4 = ~Non.~*/ GOTO JT1C1
END // Dans ce bloc, j’ai deux choix différents. Plutôt que de nommer les deux prochains blocs JT1A3 et JT1A4 ce qui pourrait finir par m’embrouiller, lorsqu’il y a un choix multiple, je passe à la lettre suivante pour créer une nouvelle série de blocs correspondant au chemin emprunté.


IF ~~ THEN BEGIN JT1B1
SAY @5 /*@5 = ~Génial ! Est-ce que je peux emmener aussi mon caniche nain ?~*/
IF ~~ THEN REPLY @6 /*@6 = ~Oui, bien sûr.~*/ GOTO JT1B2 // Un seul choix possible, je ne change donc pas la letter mais je passe au n° supérieur.
END


IF ~~ THEN BEGIN JT1B2
SAY @7 /*@7 = ~Super, alors en route !~*/
IF ~~ THEN DO ~JoinParty()
SetGlobal("XXNPCRecru","GLOBAL",2)~ EXIT
END


IF ~~ THEN BEGIN JT1C1
SAY @8 /*@8 = ~Tu es sûr et certain de ta decision ?~*/
IF ~~ THEN REPLY @9 /*@9 = ~Non, j’ai changé d’avis, je veux que tu viennes avec moi.~*/ GOTO JT1D1
IF ~~ THEN REPLY @10 /*@10 = ~Oui, débarasse-moi le plancher !~*/ GOTO JT1E1
END // Ici, deux alternatives on passe donc aux blocs JT1D1 et JT1E1


IF ~~ THEN BEGIN JT1D1
SAY @11 /*@11 = ~Cool, on va bien s’amuser !~*/
IF ~~ THEN DO ~JoinParty()
SetGlobal("XXNPCRecru","GLOBAL",2)~ EXIT
END


IF ~~ THEN BEGIN JT1E1
SAY @12 /*@12 = ~Que la colère des mille crucifix s’abatte sur toi ! J’espère que tu crèveras comme un chien !~*/
IF ~~ THEN DO ~EscapeArea()
DestroySelf()
SetGlobal("XXNPCRecru","GLOBAL",2)~ EXIT
END


Passons au conseil n°3 de cette partie du tuto. Si vous avez bien regardé les blocs ci-dessus, vous devez vous douter de quoi il s’agit. Wink


  • 3) Mettre en commentaire les lignes du .tra dans le .d


Si vous regardez dans les blocs ci-dessus, vous remarquerez entre /* */ la copie des lignes telles qu’elles sont écrites dans le .tra. En effet, utiliser /* */ équivaut à utiliser la double barre //, c’est-à-dire que le contenu à l’intérieur du /**/ sera mis en commentaire (donc non lu par le compilateur) avec l’avantage que l’on peut mettre du code derrière (ce qui n’est pas le cas de la double barre qui met en commentaire tout ce qui est écrit après elle.).

Alors vous me direz, mais quel intérêt de mettre en commentaire le contenu des lignes dans le .d ?

La réponse est simple : ça permet ainsi de consulter et de lire/relire ses dialogues sans avoir à naviguer entre le .tra et le .d. En effet, en temps normal, c’est très casse-tête si on veut relire un dialogue, il faut sans cesse basculer entre .d et .tra : le .d permet de voir la structure et le .tra le contenu des lignes.
Là, en faisant une copie des lignes entre /**/ dans le .d, ça permet d’avoir la structure du dialogue et le contenu des lignes sous les yeux dans un seul et même fichier. Evidemment, ceci ne dispense pas de remplir le .tra avec les lignes, car c’est dans ce fichier qu’elles sont effectivement stockées et exploitées par l’installeur.

De même si l’on veut modifier le contenu d’une ligne, il faut le faire dans le .tra puis éventuellement modifier la version entre /**/ pour être à jour.


Si l’on applique ces trois conseils, voici à quoi ressemblera le XXNPC.d dans sa version très basique avec un unique dialogue. Cependant, on voit déjà une différence : le squelette du .d est en place, le premier dialogue de recrutement est lisible directement et il est facilement retrouvable grâce à son premier label.

// XXNPC.d
// Contenu :
// XXNPC
// Recrutement. (JT)
// XXNPCR
// Dialogues de quêtes (QT)
// Dialogues de romance (LT)
// Dialogues d’amitié (FT)
// XXNPCJ
// Dialogues déclenchés par le joueur (CT)
// Flirt Pack (FP)
// XXNPCP
//Dialogues de kick out (KT)
// Dialogue post pétrification (PT)



// XXNPC

BEGIN ~XXNPC~

// Recrutement. (JT)

IF ~Global("XXNPCRecru","GLOBAL",1)~ THEN BEGIN JT1A1
SAY @0 /*@0 = ~Salut !~*/
IF ~THEN REPLY @1 /*@1 = Salut aussi !*/ GOTO JT1A2
END

IF ~~ THEN BEGIN JT1A2
SAY @2 /*@2 = ~Puis-je rejoindre ton groupe ?~*/
IF ~~ THEN REPLY @3 /*@3 = ~Oui.~*/ GOTO JT1B1
IF ~~ THEN REPLY @4 /*@4 = ~Non.~*/ GOTO JT1C1
END

IF ~~ THEN BEGIN JT1B1
SAY @5 /*@5 = ~Génial ! Est-ce que je peux emmener aussi mon caniche nain ?~*/
IF ~~ THEN REPLY @6 /*@6 = ~Oui, bien sûr.~*/ GOTO JT1B2
END

IF ~~ THEN BEGIN JT1B2
SAY @7 /*@7 = ~Super, alors en route !~*/
IF ~~ THEN DO ~JoinParty()
SetGlobal("XXNPCRecru","GLOBAL",2)~ EXIT
END

IF ~~ THEN BEGIN JT1C1
SAY @8 /*@8 = ~Tu es sûr et certain de ta decision ?~*/
IF ~~ THEN REPLY @9 /*@9 = ~Non, j’ai changé d’avis, je veux que tu viennes avec moi.~*/ GOTO JT1D1
IF ~~ THEN REPLY @10 /*@10 = ~Oui, débarasse-moi le plancher !~*/ GOTO JT1E1
END

IF ~~ THEN BEGIN JT1D1
SAY @11 /*@11 = ~Cool, on va bien s’amuser !~*/
IF ~~ THEN DO ~JoinParty()
SetGlobal("XXNPCRecru","GLOBAL",2)~ EXIT
END

IF ~~ THEN BEGIN JT1E1
SAY @12 /*@12 = ~Que la colère des mille crucifix s’abatte sur toi ! J’espère que tu crèveras comme un chien !~*/
IF ~~ THEN DO ~EscapeArea()
DestroySelf()
SetGlobal("XXNPCRecru","GLOBAL",2)~ EXIT
END

// XXNPCR
// Dialogues de quêtes (QT)
// Dialogues de romance (LT)
// Dialogues d’amitié (FT)
// XXNPCJ
// Dialogues déclenchés par le joueur (CT)
// Flirt Pack (FP)
// XXNPCP
//Dialogues de kick out (KT)
// Dialogue post pétrification (PT)

_________________


Adoptez-moi !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 
[PNJ] Une autre gestion des dialogues - Partie 2 : Une rédaction claire des fichiers .d.
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Faire migrer une partie des données d'une 3DS a une autre 3D
» Comment accéder à l'autre partie de sa plage ?
» Ouvrir une partie dans un autre onglet avec un clic gauche
» simple bilan partie a 1000 points contre un nain
» Jouer avec une sauvegarde d'un autre PC

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
LEGENDES :: LE MONDE DU MODDING :: Maîtrise :: Outils et Tutoriaux-
Sauter vers: