[cours] Les dialogues

Si cela n'a pas déjà été fait, voici un petit cours sur les dialogues pour fêter mon retour de week-end !
Alors voici :

Vocabulaire
Un dialogue (ou conversation) est un arbre avec des noeuds d'où partent plusieurs branches (chaque réponse possible). Chaque niveau de l'arbre de dialogue est alternativement une participation d'un interlocuteur (le pnj) et de l'autre (le pj).

Fonctionnement
A chaque noeud de l'arbre, on peut mettre une ou plusieurs réponses, chacune avec une précondition ou pas. Pour un pnj, la réponse utilisée sera la premiere qui correspond à un prérequis valide. Pour un pj, toutes les réponses correspondant à un prérequis valide seront possibles. Si aucun prérequis n'est respecté ou si il n'y a plus de branches, le dialogue se termine.

Utilisez la souris pour faire glisser les dialogues dans l'ordre dans lequel vous souhaitez les voir apparaitre pour un pj, et dans l'ordre de préference d'utilisation pour les réponses d'un pnj.

Pour faire dire plusieurs choses à un pj ou à un pnj, il suffit de laisser un blanc dans la réponse de l'autre interlocuteur. Il y aura alors "Continue" qui apparaitra pour le pj par exemple. Pensez à ne pas mettre de retours à la ligne dans vos dialogues pour divers problemes d'affichages : utilisez à la place une successsion de dialogues.

Pour faire parler plusieurs pnj, il faut que ceux-ci soient proches. Ensuite, il ne reste plus qu'à selectionner le portrait de celui qui parle dans "Speaker Tag".

Les boucles
Pour faire une boucle dans un texte, faites un clic droit vers la destination de votre boucle et copiez la. Puis faites un clic droit à l'origine de votre boucle, et faites une copie par lien : vous aurez alors formé une boucle partant de l'origine vers la destination ! C'est extremement utile et recommandé !

Le conditionnement / mettre un prérequis
Pour conditionner l'apparition d'un dialogue, aussi bien pour le pj que pour le pnj, c'est avec "Text Appears When ..." et un script de condition. Ce script doit renvoyer un entier qui vaut 0 ou FALSE pour signifier que le dialogue ne doit pas apparaitre, et qui vaut 1 (ou plus) ou TRUE pour signifier que le dialogue doit apparaitre.

Exemple : l'apparition unique
Pour que dans une boucle de dialogue les choix effectués n'apparaissent qu'une seule et unique fois, et plus jamais apres, il faut utiliser une variable d'etat. Pour cela, utilisez ces deux scripts dans les réponses que vous voulez conditionner ainsi :
"Text Appears When .."
if (GetLocalInt(GetPCSpeaker(), "checknode_1")) return FALSE; else return TRUE;
"Action Taken"
SetLocalInt(GetPCSpeaker(), "checknode_1", TRUE);

Exemple : apres une quete
Presque pareil pour faire l'inverse, c'est à dire faire apparaitre une reponse uniquement apres une certaine action seulement :
"Text Appears When .."
if (GetLocalInt(GetPCSpeaker(), "checkquest_1")) return TRUE; else return FALSE;
"OnDeath" (sur le monstre)
SetLocalInt(GetLastKiller(), "checkquest_1", TRUE);

Bien entendu, vous donnez le nom que vous voulez à "checknode_1" et "checkquest_1".
Si vous voulez faire dépendre un dialogue ou la mort d'un monstre de tout le module et non pas seulement d'un seul personnage, alors remplacez les GetPCSpeaker() et GetLastKiller() par GetArea().

Texte en couleur
Pour mettre des couleurs, utilisez les tokens. Les tokens se trouvent en faisant un clic droit sur la fenetre de dialogue ou en les écrivant directement. Il n'est pas encore possible de faire des token personnalisés, mais voici les tokens utiles :
<StartAction>Texte en vert</Start>
<StartCheck>Texte en rouge</Start>
<StartHighlight>Texte en bleu</Start>

Pour faire des tests particuliers, peu importe lesquels, il faut toujours utiliser "Text Appears When ..". Mettre du texte en couleur ne changera rien, c'est purement décoratif.

Plusieurs langues & compatibilité
Pour mettre des dialogues en plusieurs langues ou pour etre compatible avec la norme des modules francophones, utilisez le bouton "..." au milieu en bas : il vous permet pour chaque texte de preciser deux versions francophones, l'une adressée à un interlocuteur masculin, et l'autre pour un interlocuteur féminin. Toutefois, pour l'instant, ça ne fonctionne pas.

Actions
Pour ajouter des actions, des mimiques, ou tout autre evenement comme vous voulez, utilisez toujours "Action Taken" et un script adapté.
Pour ajouter une action spéciale finale, vous pouvez le faire directement avec un script placé dans le dernier onglet en bas à droite : "Current File".

Exemple : ouvrir l'échoppe du marchand
Utilisez simplement le script suivant dans "Action Taken" :
OpenStore(GetNearestObjectByTag("Tag_de_mon_stock_de_marchandises"), GetPCSpeaker());

[expert] Centralisation des liens depuis la racine pour les dialogues trop longs ou avec boucles
Un soucis qui apparait parfois, ce sont les dialogues trop longs ou avec des boucles pour lesquelles on ne trouve plus l'original des copies par lien dans toute cette arborescence.
Pour éviter ce soucis, creez une branche spéciale depuis la racine de l'arbre appellée "Racine des Liens" et avec comme prérequis False (traduction : mettez le script "return FALSE;" dans "Text Appears When"), et ajoutez-y tous vos dialogues "originaux" qui seront destinés à etre copiés ensuite un peu partout. Ajoutez-y aussi des portions de branches quand celles-ci sont trop longues. Ceci permet une meilleure lisibilité et diminue les chances du "bug de conversation trop longue" qui existe actuellement en version 1.19 et qui fait planter le module.

Voilà
Si vous avez des conseils supplémentaires ou des questions, j'essayerai de les ajouter au cours par la suite.

__________________
Lumina, dame de la Vie
Aventurière des Mondes Fantastiques