[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