Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -20%
Drone Dji DJI Mini 4K (EU)
Voir le deal
239 €

 

 Un système de dialogue avec une limite de temps à la telltale

Aller en bas 
4 participants
AuteurMessage
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
filoulefilou


Nombre de messages : 359

Date d'inscription : 24/05/2010


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyDim 21 Juil 2019 - 12:22

Yo
Voici mon "souhait", des gens ont-ils déjà joué aux point'n'click de Telltale ? Ca renouvelle pas mal le jeu, je trouve.
Enfin bon.
Voilà l'idée, dans ces jeux, parfois, on doit choisir entre plusieurs réponses mais on est limité par une barre de temps.
Quand celle-ci est épuisée, notre personnage répond n'importe quoi au hasard (ou bien la donne la pire des réponses ou fait le choix le pire )

C'est génial comme principe, car ça ajoute du stresse. On a que quelques secondes pour faire des choix cruciaux.
J'adorais avoir un système similaire ...
Mais je dois dire que j'ai aucune idée de commencer procéder avec le système de dialogue d'AGS.

Quelqu'un aurait une piste ? Des idées ? Une fonction des familles à coder ?

Merci d'avance.
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyDim 21 Juil 2019 - 22:36

Salut filoulefilou

J'ai cherché un peu et j'ai trouvé aucune fonction pour sélectionner une option de dialogue depuis le script, donc à moins que je sois passé à côté de quelque chose, ça risque d'être un peu difficile d'utiliser le système natif de dialogues d'AGS confus

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Shai-la
Ouvrière en Chef de la Grande Tasse Bleue
Ouvrière en Chef de la Grande Tasse Bleue
Shai-la


Nombre de messages : 6018

Age : 46

Localisation : Montpellier

Date d'inscription : 17/04/2006


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyLun 22 Juil 2019 - 6:26

Ca doit être possible avec un Timer, et sans passer par le système de dialogue de base. En créant un GUI avec des boutons et du texte à la place, par exemple sourire
Revenir en haut Aller en bas
http://marionpoinsot.fr/video
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
filoulefilou


Nombre de messages : 359

Date d'inscription : 24/05/2010


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyLun 22 Juil 2019 - 8:39

Je voulais justement éviter de refaire tout un système de dialogue, alors qu'il en existe un déjà de très bien fait...


Pour ma part, j'ai pensé à plusieurs pistes.

Je sais qu'une option en Say est automatiquement lu lorsqu'il ne reste qu'une seule option active. Je ne sais pas si vous aviez remarqué ça. La solution serait d'effacer toutes les autres.
hm ! Laborieux, surtout dans des dialogues complexes.

Je ne suis pas certain qu'on puisse utilise un Timer avec un dialogue ouvert qui bloque le temps, je crois.


Il faudrait donc passer par un Gui modifié...
L'idéal serait de pouvoir créer une fonction personnalisé qui permet de générer des boutons réponses.
Et coupler ça dans un système de dialogue normal.
Ca veut dire, refaire un système personnalisé.
C'est un peu la piste que j'explorais de mon côté pour le moment.


Je vais continuer à bidouiller de mon côté et je vous dit ça.
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyLun 22 Juil 2019 - 17:03

filoulefilou a écrit:
Je sais qu'une option en Say est automatiquement lu lorsqu'il ne reste qu'une seule option active. Je ne sais pas si vous aviez remarqué ça. La solution serait d'effacer toutes les autres.
hm ! Laborieux, surtout dans des dialogues complexes.
Moi je trouve que c'est une super idée ! Le seul hic : j'ai codé un petit script qui désactive automatiquement toutes les options sauf l'option "défaut" après un certain temps, mais ces changements ne sont pris en compte qu'après qu'une option a été manuellement sélectionnée...

filoulefilou a écrit:
Je ne suis pas certain qu'on puisse utilise un Timer avec un dialogue ouvert qui bloque le temps, je crois.
En fait tu peux activer l'option "Run game loops while dialog options are displayed" dans les réglages généraux, comme ça après tu peux utiliser la fonction repeatedly_execute_always.


filoulefilou a écrit:
Il faudrait donc passer par un Gui modifié...
L'idéal serait de pouvoir créer une fonction personnalisé qui permet de générer des boutons réponses.
Et coupler ça dans un système de dialogue normal.
Ca veut dire, refaire un système personnalisé.
C'est un peu la piste que j'explorais de mon côté pour le moment.
Oui, en fait je pense que tu devrais scripter un système d'affichage personnalisé des options de dialogues. C'est un peu effrayant au début mais c'est pas si compliqué que ça en vrai.
Ensuite. je viens de tester et ça marche, je te conseillerais d'utiliser les fonctions Mouse.SetPosition et Mouse.Click. Il te "suffit" de récupérer les coordonnéees de l'option de dialogue par défaut. Tu voudras aussi renseigner quelle est l'option par défault pour chaque dialogue, moi je suis passé par une fonction perso dialog.defaultOption(n) que j'appelle au début du dialogue.

Je pourrais essayer de coder une petite démo au besoin.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
filoulefilou


Nombre de messages : 359

Date d'inscription : 24/05/2010


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyMar 23 Juil 2019 - 8:27

Mouse.SetPosition et Mouse.Click pour dire en gros si tu cliques sur telle réponse, alors ça veut dire que tu as activé l'option... Et dans l'exemple d'affichage personnalisé,
la fonction function dialog_options_render(DialogOptionsRenderingInfo *info)

Elle permet d'aller chercher directement dans un fichier de Dialog les options ?
C'est plutôt puissant car les Drawing surface sont un truc un poil relou mais très cool a utiliser car très personnalisable.  Le seul truc qui me chagrine c'est que j'ai l'impression que trop utilisé, ça bouffe un peu de la performance. Non ?

Dans l'absolu, je me suis dis que puisque j'étais parti pour refaire un système de dialogue, autant me lâcher et permettre d'afficher le texte avec différentes couleurs / tailles /Sprites / voir même des positions.


Pour le moment, je me suis dirigé, c'est évidemment et comme toujours le bordel dans ma tête. Je me suis dirigé vers un système de Gui...
Pour le moins ... langue



Code:


function Tell_Option(String say, int ID_button, String couleur, int ID_dialogue,  int Option_dial){
  
 
  gTell_system.Controls[ID_button].AsButton.Visible = true;
  gTell_system.Visible=true;  
    
            if(couleur == "R") {
                        gTell_system.Controls[ID_button].AsButton.TextColor = 61505;
                         TimerDial.Visible=true; // La couleur rouge est spécial, elle fonctionne avec un timer
                         Timer_Dialog = 10; // Par défaut, le temps est de 10. Dans l'absolu, je vais bidouiller
                                 //Un sytème pour avoir une timer personnalisable selon les conditions de jeu
                         }
                 else if (couleur == "B") gTell_system.Controls[ID_button].AsButton.TextColor = 1055;
                           else gTell_system.Controls[ID_button].AsButton.TextColor = 16;
        
    
    gTell_system.Controls[ID_button].AsButton.Text = say;
  
   // memory_say[ID_button] = say.Copy();
    memory_chars_ID[ID_button] = ID_dialogue;
    memory_opt[ID_button] = Option_dial;
  
 

  
}


Ainsi qu'une fonction

Code:



function Tell_Say(int Option_nbr){
  
  int D;
  int O;
  
  D = memory_chars_ID[Option_nbr];
  O = memory_opt[Option_nbr];
   PNJ[D]  = O;
  
  //Display(" PNJ[%d] =%d ",D,  memory_opt[Option_nbr]);

  

  
  for(int i = 0; i<gTell_system.ControlCount;i++) {
  gTell_system.Controls[i].AsButton.Visible = false;
}
    gTell_system.Visible=false;
    
  
  //player.Say(memory_say[Option_nbr]);
  //dialog[D].SetOptionState(O, eOptionOn);
  
  dialog[D].Start();
  
  
}



J'ai par la suite crée un GUI, avec des boutons, qui me servent de boites de réponse. Et lorsqu'on clique dessus , ça lance  :

Code:
Tell_Say(control.ID);



Du coup, avec tout ça, j'ouvre un fichier Dialog.
Et je rédige pour la forme de If et d'Option...
(bon, faut surtout pas faire gaffe à ce que je raconte, c'est pour tester ... et dans le moment où je bidouille du code, j'ai toujours besoin de m'aérer un peu le cerveau en écrivant nimp.
Voilà aussi pourquoi je me parle. C'est pour me souvenir de mes pensées et mes observations du moment, quand je reprend le code des semaines (voire des mois après)

Code:

// Dialog script file
@S  // Dialog startup entry point
    
  //Dialogue avec le perso test cChar1;
  //////////////////////////////////////////////// ////////////////////////////
  //        Testons ensemble le système d'option,
  //         Le timer ... et évaluons la relouitude de cette méthodologie//
  //            Youpi !
  //////////////////////////////////////////////////////////////////////
  int Option;
  
  Option =  PNJ[dDialog1.ID];
  
  gTell_system.Y = (System.ScreenHeight/2);
  
  
  
  if(Timer_Dialog == 0) { PNJ[dDialog1.ID] = Critique_opt;
  dDialog1.Start();}
  
  
  
  
  
  
  
   if(Option == 0) {
    
    //INTRO
    Tell_Option("*L'insulter*Je ne veux rien de spécial pour toi",0,"N",dDialog1.ID,1);
    Tell_Option("Je suis un ange",1,"B",dDialog1.ID,2);
    Tell_Option("Je suis un démon",2,"N",dDialog1.ID,3);
    Tell_Option("Je me tire",3,"N",dDialog1.ID,5);
    
    
  }
  
  
  
  
  
  if(Option== 1) {

 //Je ne veux rien de spécial//
player:"Je ne veux rien de spécial avec toi mais peut être avec ta soeur, je suis un rebelle !!!"
Char1:"Tu es surtout un foufou dans ta teuté  ?"
player:"Pourquoi, j'en ai fait trop ?"
Char1:"Tu dis n'importe quoi surtout..."
Char1:"Je dis ça, je ne veux pas insulter les malades mentaux non plus..."
    Tell_Option("C'est pas faux, j'ai un peu craqué mon slip",0,"N",dDialog1.ID,6);
    Tell_Option("Je faisais de l'humour",1,"B",dDialog1.ID,7);
    Tell_Option("Je suis un ouf de chez ouf !",2,"N",dDialog1.ID,8);
    Tell_Option("Je me tire",3,"N",dDialog1.ID,5);
    gTell_system.Visible=true;  

    
    
 }
 
 
 
 
 if(Option == 6) {
   //J'ai craqué mon slip//
player:"C'est pas faux, j'ai craqué mon slip !"  
Char1:"Tu portes un slip kangourou ?"  
   Tell_Option("Je faisais de l'humour",0,"B",dDialog1.ID,7);
    Tell_Option("Je suis un ouf de chez ouf !",1,"N",dDialog1.ID,8);
    Tell_Option("Je me tire",2,"N",dDialog1.ID,5);
  
  
  
  
 }
 
 
 if(Option == 7) {
   //Je faisais de l'humour//
player:"Je faisais de l'humour"  
cChar1:"Mort ... de ... rire . . ."  
 Tell_Option("C'est pas faux, j'ai un peu craqué mon slip",0,"N",dDialog1.ID,6);
 Tell_Option("Je suis un ouf de chez ouf !",1,"N",dDialog1.ID,8);
 Tell_Option("Je me tire",2,"N",dDialog1.ID,5);
 }
 
 
 if(Option ==  {
   //Je suis un ouf ...//
player:"Je suis un ouf de chez ouf !"  
cChar1:"C'est cela oui ... "  
 Tell_Option("Je faisais de l'humour",0,"N",dDialog1.ID,7);
 Tell_Option("C'est pas faux, j'ai un peu craqué mon slip",1,"N",dDialog1.ID,6);
 Tell_Option("Je me tire",2,"N",dDialog1.ID,5);
 }
 
 
 
 
 
 
 
  if(Option == 2) {
      
      
  //Je suis un ange//
player:"Je suis un ange"
narrator:L'homme vous fixe, interrogatif.
player:"Pourquoi, j'en ai fait trop ?"
Char1:"Tu dis n'importe quoi surtout..."
Char1:"Je dis ça, je ne veux pas insulter les malades mentaux non plus..."  
    Tell_Option("C'est pas faux, j'ai un peu craqué mon slip",0,"N",dDialog1.ID,6);
    Tell_Option("Je faisais de l'humour",1,"N",dDialog1.ID,7);
    Tell_Option("Je suis un ouf de chez ouf !",2,"N",dDialog1.ID,8);
    Tell_Option("Je me tire",3,"N",dDialog1.ID,5);
    gTell_system.Visible=true;  
    }
 
 if(Option== 3) {


  //Je suis un démon//
player:"Je suis un démon !"
narrator:L'homme vous fixe, interrogatif.
player:"Pourquoi, j'en ai fait trop ?"
Char1:"Tu dis n'importe quoi surtout..."
Char1:"Je dis ça, je ne veux pas insulter les malades mentaux non plus..."  
    Tell_Option("C'est pas faux, j'ai un peu craqué mon slip",0,"N",dDialog1.ID,6);
    Tell_Option("Je faisais de l'humour",1,"N",dDialog1.ID,7);
    Tell_Option("Je suis un ouf de chez ouf !",2,"N",dDialog1.ID,8);
    Tell_Option("Je me tire",3,"N",dDialog1.ID,5);
    gTell_system.Visible=true;  

   }


 

  
  
  
  
  
  
   /////////Option de reprise de dialogue
  if (Option == -1) {
    
    
cChar1: Encore toi ?
    

    Tell_Option("Je suis un ange",1,"B",dDialog1.ID,2);
    //////////////////////////////////////////////////////
    Tell_Option("Je suis un démon",2,"R",dDialog1.ID,3); //// Cette Option, induit que la question -Encore toi-, apporte son lot de souffrance. Nous avons 3 secondes pour répondre //
    //Sinon
    Critique_opt = 9; // L'option critique est celle qui sera lu, si l'on ne prend pas de décision à temps.
    
    ///////////////////////////////////////////////////
    
    Tell_Option("Je me tire",3,"N",dDialog1.ID,5); //
    
   }
  
  
  
  
  
  /////////////////////////////////////////////////////
  
  if(Option == 5) {

  //Opt qui sert à quitter le dialogue
player:"Je me tiiiire !  Dans un endroit où je ne serai pas le suspect ! Un endroit où j'aurais plus besoin de prendre le mic'";  
Char1:"Salut gros naz !"
  
  PNJ[dDialog1.ID]= -1;
  
  StopDialog();
  }
  
    
  
  
  



 if(Option == 9) {
   //Replique due au stress//
  Timer_Dialog = -1;  
player: ENCULE !!!!!!!  //Pas bien !//

    //////////Testons un système de brouillage opt pour apporter un feedback ?//
    Tell_Option("@####!",0,"N",dDialog1.ID,5);
    Tell_Option("@#!\\##0#!",1,"N",dDialog1.ID,5);
    Tell_Option("*##*@##!",2,"N",dDialog1.ID,5);
    Tell_Option("##*##*@##!",3,"N",dDialog1.ID,5);
 

Char1:"?!"
  
  PNJ[dDialog1.ID]= -1;
  
  StopDialog();

  
 }

stop



@1
return
@2
return
@3
return
@4
return
@5
return
@6
return
@7
return
@8
return
@9
return



Note que j'ai (non)utilisé 9 Options .
En gros, j'utilise les cases des options pour réindiquer le nom de mes options, avec le numéro qui correspond.
C'est un moyen que j'ai trouvé pour m'aider à m'y retrouver justement...

Bref, je trouve ça quand même très fastidieux, mais bon, le système de dialogue d'AGS depuis le début, c'est pas ça.
Vivement qu'ils implantent un système plus visuel en flowchart, comme ça existe déjà dans certains autre moteurs... mais ça, c'est un autre sujet.




Voilà où j'en suis actuellement...
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyMar 23 Juil 2019 - 15:35

filoulefilou a écrit:
Mouse.SetPosition et Mouse.Click pour dire en gros si tu cliques sur telle réponse, alors ça veut dire que tu as activé l'option...
Oui c'est ça, c'est ce que tu veux, non ?

filoulefilou a écrit:
la fonction function dialog_options_render(DialogOptionsRenderingInfo *info)

Elle permet d'aller chercher directement dans un fichier de Dialog les options ?
Cette fonction sert à afficher les options, donc oui, étant donné que tu t'en sers pour te charger toi-même de placer les options à l'écran, ça te permet de te "rappeler" où se trouve l'option par défaut, afin de pouvoir passer ses coordonnées à SetPosition lorsque le timer sera écoulé.

filoulefilou a écrit:
Le seul truc qui me chagrine c'est que j'ai l'impression que trop utilisé, ça bouffe un peu de la performance. Non ?
Pas vraiment, c'est prévu pour ça. Chaque animation à l'écran utilise exactement le même procédé, sauf que c'est fait sous le capot pour les animations de marche, etc. Donc oui, c'est un poil plus lent avec les DrawingSurface parce que y'a sur-couche AGS, mais ça fait des années qu'aucune bécane ne ramera plus à cause de ça clin d'oeil (à moins que tu fasses plein de calculs à chaque rafraichissement bien sûr, par exemple pour afficher un modèle 3D en rotation avec gestion de l'éclairage et tout ça, mais ça me parait un peu machine à gaz pour un système de dialogue)

filoulefilou a écrit:
Dans l'absolu, je me suis dis que puisque j'étais parti pour refaire un système de dialogue, autant me lâcher et permettre d'afficher le texte avec différentes couleurs / tailles /Sprites / voir même des positions.


Pour le moment, je me suis dirigé, c'est évidemment et comme toujours le bordel dans ma tête. Je me suis dirigé vers un système de Gui...
Pour le coup le système de DrawingSurface me paraitrait plus adapté, mais si tu t'en sors avec ton système de GUI tant mieux !

J'ai quand même l'impression que ton code est assez redondant et alterne énormément entre script de dialogue et appels aux fonctions de script, je me demande si y'aurait moyen d'optimiser un peu tout ça

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyMar 23 Juil 2019 - 15:51

Désolé pour le double post

J'avais pas pensé à la commande RunActiveOption, ça rend les choses beaucoup plus simples. Je viens de tester ça, et ça marche au poil (par contre esthétiquement c'est horrible) :

DialogDefault Script
Code:
#define DIALOGTIMERID 20
#define DIALOGTIMERDELAY 200

Dialog* currentdialog;
int defaultoption;
int delaydialog;
bool launchTimer;

function defaultOption(this Dialog*, int option, int delay){
    if (option < 1 || option > this.OptionCount){
      currentdialog = null;
      SetTimer(DIALOGTIMERID, 0);
      return;
    }
    currentdialog = this;
    defaultoption = option;
    delaydialog = DIALOGTIMERDELAY;
    if (delay > 0)
      delaydialog = delay;
    launchTimer = true;
}

bool isDefaultOn(DialogOptionsRenderingInfo* info) {
  return (currentdialog == info.DialogToRender && defaultoption > 0 && defaultoption <= info.DialogToRender.OptionCount && info.DialogToRender.GetOptionState(defaultoption) == eOptionOn);
}


// Code ci-dessous copie depuis https://www.adventuregamestudio.co.uk/manual/ags41.htm (+ 3 petits ajouts)

int dlg_opt_color = 14;
int dlg_opt_acolor = 13;
int dlg_opt_ncolor = 4;

function dialog_options_get_dimensions(DialogOptionsRenderingInfo *info)
{
  // Create a 200x200 dialog options area at (50,100)
  info.X = 50;
  info.Y = 100;
  info.Width = 200;
  info.Height = 200;
  // Enable alpha channel for the drawing surface
  info.HasAlphaChannel = true;
  // Put the text parser at the bottom (if enabled)
  info.ParserTextBoxX = 10;
  info.ParserTextBoxY = 160;
  info.ParserTextBoxWidth = 180;
}

function dialog_options_render(DialogOptionsRenderingInfo *info)
{
  info.Surface.Clear(dlg_opt_color);
  int i = 1,  ypos = 0;
  // Render all the options that are enabled
  while (i <= info.DialogToRender.OptionCount)
  {
    if (info.DialogToRender.GetOptionState(i) == eOptionOn)
    {
      if (info.ActiveOptionID == i)
        info.Surface.DrawingColor = dlg_opt_acolor;
      else
        info.Surface.DrawingColor = dlg_opt_ncolor;
        
      info.Surface.DrawStringWrapped(5, ypos, info.Width - 10,
              eFontfntDefault, eAlignLeft, info.DialogToRender.GetOptionText(i));
      ypos += GetTextHeight(info.DialogToRender.GetOptionText(i), eFontfntDefault, info.Width - 10);
    }
    i++;
  }
  // J'ai ajoute ca :
  if (isDefaultOn(info) && !IsTimerExpired(DIALOGTIMERID) && launchTimer){
    SetTimer(DIALOGTIMERID, delaydialog);
    launchTimer = false;
  }
  // ----
}

function dialog_options_repexec(DialogOptionsRenderingInfo *info)
{
  // Et puis ca aussi :
  if (isDefaultOn(info) && IsTimerExpired(DIALOGTIMERID)){
    info.ActiveOptionID = defaultoption;
    info.RunActiveOption();
    return;
  }
  // ----
  
  info.ActiveOptionID = 0;
  if (mouse.y < info.Y || mouse.y >= info.Y + info.Height ||
      mouse.x < info.X || mouse.x >= info.X + info.Width)
  {
    return; // return if the mouse is outside UI bounds
  }
  
  int i = 1, ypos = 0;
  // Find the option that corresponds to where the mouse cursor is
  while (i <= info.DialogToRender.OptionCount)
  {
    if (info.DialogToRender.GetOptionState(i) == eOptionOn)
    {
      ypos += GetTextHeight(info.DialogToRender.GetOptionText(i), eFontfntDefault, info.Width - 10);
      if ((mouse.y - info.Y) < ypos)
      {
        info.ActiveOptionID = i;
        return;
      }
    }
    i++;
  }
}

function dialog_options_mouse_click(DialogOptionsRenderingInfo *info, MouseButton button)
{
  if (info.ActiveOptionID > 0){
    // Et enfin ca :
    if (isDefaultOn(info) && !IsTimerExpired(DIALOGTIMERID))
      launchTimer = true;
    // ----
    info.RunActiveOption();
  }
}

DialogDefault Header
Code:
import function defaultOption(this Dialog*, int option, int delay = 0);


Un exemple de fichier dialogue (j'ai eu la flemme, j'ai mis aucune ligne à part les options elles-mêmes !) :
Code:
// Dialog script file
@S  // Dialog startup entry point
  this.defaultOption(2);
return
@1
return
@2
stop
@3
return
@4
return
@5
return
@6
return
@7
return

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
filoulefilou


Nombre de messages : 359

Date d'inscription : 24/05/2010


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyLun 29 Juil 2019 - 9:42

Très très intéressant tout ça !

J'ai pas encore tout bien compris, mais grossomodo, si.

Je voudrais avoir une possibilité de modifier les couleurs, ainsi que les sprites des Options...
Selon les réponses possibles (un peu comme dans les sims où des logos indiquent les conséquences de nos actions de réponse. Par exemple, un logo qui boude pour indiquer que la réponse est méchante ... Un logo spécial pour indiquer que cet option est valable uniquement selon certaines conséquences...)

Néanmoins, j'ai plusieurs questions.
Je ne suis pas très familier des Timer.
Comment fait-on pour récupérer la valeur d'un timer en direct (pour l'afficher dans un label_txt par exemple, ou bien pour en faire une barre qui défile)

Et aussi, un peu truc que je ne comprends pas bien, c'est au niveau du delay.
Si je mets par exemple :  this.defaultOption(3,1);
Alors, il m'affiche aussitôt l'option 3

Parcontre, si je mets par exemple this.defaultOption(3,10); Rien ne se passe.
J'avais cru comprendre que la variable delay servait à indiquer la durée du timer, non ?

Aussi, c'est quoi analyseur de texte (parser) ?



Edit : Alors, j'ai bien avancé, ça m'a pris du temps, mais finalement l'aide pour l'affichage des options de dialogue ainsi que Kit' m'ont bien aidé. J'ai plus ou moins ce que je voulais.
Désormais, j'ai un système d'option de dialogues personnalisables (couleur/font/position) et je peux aussi déclencher un mode que j'ai nommé "stress mode" avec un timer qui demande au joueur de vite répondre ... Sinon le jeu va choisir une réponse tout seul.
Pour apporter du Feedback, j'ai bidouillé un petit système de "shake" au stress model.


Illustré avec un petit Gif :

https://drive.google.com/open?id=1ypUnBRi8xBUoRk_3g8RZEp_WnV803E0x

Je peux développer ce que j'ai bidouillé, si ça intéresse quelqu'un.
Revenir en haut Aller en bas
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Creamy


Nombre de messages : 1266

Date d'inscription : 15/10/2007


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyVen 2 Aoû 2019 - 19:53

J'ai aussi essayé de coder un système de temps limité dans un petit jeu en mars. C'est super pour stresser le joueur  sourire

Le mien est également bricolé avec un GUI et des timers.

Par curiosité : tu veux mettre ça dans Fin de pétrole ?


Dernière édition par Creamy le Dim 11 Aoû 2019 - 10:57, édité 2 fois
Revenir en haut Aller en bas
http://creamy.unblog.fr/
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
filoulefilou


Nombre de messages : 359

Date d'inscription : 24/05/2010


Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale EmptyLun 5 Aoû 2019 - 8:51

Coucou.

Oui oui, je trouve ce procédé très ludique et je vois bien son utilité lorsque le personnage doit mentir ou bien lorsqu'il se fait agresser ?

Oui, je pense mettre ça dans Fin de Pétrole... mais ce jeu a déjà beaucoup évolué par rapport a sa version initiale (version trop bof, bien loin de mes ambitions narratives)
Revenir en haut Aller en bas
Contenu sponsorisé





Un système de dialogue avec une limite de temps à la telltale Empty
MessageSujet: Re: Un système de dialogue avec une limite de temps à la telltale   Un système de dialogue avec une limite de temps à la telltale Empty

Revenir en haut Aller en bas
 
Un système de dialogue avec une limite de temps à la telltale
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: La Boîte à Souhaits-
Sauter vers: