Tutoriel pour une logique d'événements pour un jeu narratif?

Je cherche mais je ne trouve pas, un tuto qui me va (lol) pour mettre en place une logique d’événements qui me permet d’afficher une série de lignes de dialogue dont chaque ligne s’affiche après un clic ou appui sur une touche. Je voudrais aussi lancer une animation associée à une ligne.

Par exemple un personnage parle, il y a une ligne où il est pas content et je voudrais alors déclencher son animation de sprite “pas content” dès le début de l’affichage de la ligne ou à la fin.

Salut à toi @alepinay !

J’ai voulu réfléchir il y a un petit moment à un système dans ce genre.
Je n’ai pas le temps tout de suite de faire un tuto mais j’ai fait un prototype avec quelques commentaires que tu peux utiliser si tu veux : Projet Dialogue

En espérant que ça puisse t’aider :slight_smile:

Merci beaucoup ! C’est ce que je cherche. Par contre comment faire pour faire une succession de dialogues. Le vrai besoin, en fait c’est comment faire plutôt pour que je puisse faire un dialogue super long avec ce PNG, qui est découpé en succession de courtes phrases. Si j’exagère comment faire pour avoir un paragraphe de 2000 caractères découpés en petites lignes à lire ? Si je met 2000 signes dans la valeur de la variable texte de PNG, comment faire pour que ça n’affiche pas un bloque informe, et que les courtes phrases s’enchainent clic après clic. J’ai vu que je pouvais faire passer à la ligne dans la valeur et ça peut suffire pour les dialogues courts, mais les longs dialogues, dois-je faire de même ?

Je n’ai pas saisi où dire quel objet sprite je veux attacher à $sad ou $ok :slight_smile:

Pour les longs dialogues j’ai deux solutions qui le viennent en tête :

  1. Dans mon exemple j’utilise le caractère de saut de ligne pour mettre une pause dans le dialogue. Tu pourrais détecter un autre caractère spécial ou une sorte de “commande” (comme j’ai fait pour les changement de tête) qui ne serait pas afficher et permettrait de mettre en pause puis de clear l’objet texte pour qu’il continue avec le reste. La mise en forme serait entièrement sous ton contrôle mais il faut juste faire attention à ne pas deborder soit même :stuck_out_tongue:
  2. Tu peux également faire une variable qui compte les caractères que tu affiche jusqu’à arriver a une limite que tu auras fixé par avance qui mettra alors le dialogue en pause, et il n’y aura plus qu’a clean l’objet texte après l’appui touche et reprendre tel quel. Ca offre moins de contrôle mais si la limite est raisonable ton texte ne debordera jamais.
    On peut combiner les 2 méthodes éventuellement mais je pense que ça peut mélanger les pinceaux niveau mise en forme.

Pour ce qui est de $sad et $ok ils modifient en dur un sprite dans mon exemple (j’ai oublier le nom du sprite lol) mais on pourrait étendre ça à n’importe quel “face” en faisant un groupe d’objets qui contiendrai les sprites des dialogues, une variable du sprite avec qui tu veux dialoguer contiendrait le nom du sprite de la “face” qu’il utilise dans son dialogue, la “face” est créée avec l’action qui permet de créer un objet depuis son nom dans un groupe et on modifie l’animation de n’importe quel objet de ce groupe plutôt que juste 1 sprite en dur. Le seul bémol il me semble à cette méthode c’est qu’il ne peut y avoir qu’une tête de ce groupe durant un dialogue, sinon elles seraient toutes modifié en même temps en théorie. À tester :smiley:

J’espère que ça aura pu t’eclairer un peu :slight_smile: (désolé si mes explications sont pas très claires, c’est pas facile en freestyle sur son phone :v)

Oui ça m’éclaire, je débute, désolé de poser des questions “bateau”. Je vais tenter des choses. Je voudrais aussi utiliser ton exemple pour d’autres conditions que si le sprite rentre en collision avec un autre sprite. J’aimerais lancer le dialogue une fois que le joueur appui une première fois sur une touche (return ou space peu importe), ensuite les autres fois où il appui sur la touche ça poursuit le dialogue. J’ai retiré la condition sur la collision et mis comme condition “Une fois que la scène commence” mais ça ne suffit. j’essai de comprendre la logique, j’ai du mal mais je suis certain que si je comprend ça, ça me servira pour d’autres cas.

tfkmaster Salut. Peux tu me dire, s’il te plait, à quoi se réfère la variable _char dans ton exemple, c’est la seul que je ne comprend pas. J’essais d’afficher au dessus d’un dialogue la valeur d’une variable associée à une instance d’un sprite de personnage. En gros j’aimerais faire que quand le sprite du perso s’affiche, s’affiche aussi son nom dans un texte dont le nom est pris de la valeur d’une variable renseignée avec l’instance du personnage.

Salut, désolé pour la réponse (très) tardive.
La variable _char de mémoire contient le caractère qui est actuellement traité dans l’affichage du message (c’est ce qui permet de différencier le texte d’une “commande”, ou d’une saut de ligne pour les traiter différemment).
Pour ce qui est du nom, tu as juste à faire exactement comme tu l’as décrit, suffit de modifier ll’élément texte avec le texte de la variable, je pense que tu peux trouver facilement.

Encore désolé pour le long silence radio :stuck_out_tongue:

Un contributeur au code source de GD met en place un outil pour des dialogues.
Je n’ai pas pu testé encore mais ça à l’air prometteur !
A voir ici
et ici

1 Like

Merci @tfkmaster. Je comprend maintenant, mais je dois être fatigué je vois pas ou _char est déclaré dans les objets ou ailleurs.

@Bouh , oui en effet je suis ce projet avec attention, ça correspond à ce que j’attend. Cette personne bosse sur ça depuis un moment déjà et elle voudrait pouvoir faciliter le travail de personnes voulant faire des jeux narratifs à la Night in the Wood en ayant une feuille d’évènement propre et simple à gérer :slight_smile:

@tfkmaster Salut. Si je peux te questionner là-dessus. Quelle serait ton approche pour que le dialogue du personnage une fois terminé s’efface et déclenche un autre dialogue ?

Moi je compterais le nombre de lettre par ligne, et si le nombre de lettre afficher correspond au total alors après un petit temps on passe au suivant.