Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

[DLG] Questions diverses sur l'organisation d'un dialogue

Répondre
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne

[DLG] Questions diverses sur l'organisation d'un dialogue

.

Message par Nightmare »

Bonjour,

Voilà j'ai une petite question technique à poser.

Dans un de mes dialogues (le premier en fait :whistle3: ^^ ), j'ai plusieurs fois la même réponse mais je l'utilise pour plusieurs suite qui modifient le jeu.
Exemple: Charname a le choix de rattraper un individus qu'il soupçonne et cela se divise en trois cas bien distincts :

1- Charname possède l'objet que l'individu lui a vendu et lorsqu'il rattrape la personne, les méchants arrivent.
2- Charname ne possède pas l'objet mais veut le rattraper, les méchants n'arrivent pas tout de suite mais un peu plus tard.
3- Charname décide de ne pas rattraper le vendeur et il voit les méchants l'agresser.

Est ce que cela est possible même en partant d'une même réponse (si choix "A" alors 1 et 2 possibles suivant s'il possède l'objet ou non) ?
Logiquement je dirais que oui en mettant le nombre de blocs en fonction des possibilités rattachés par le même label avec des conditions différentes qui bloqueraient les autres possibilités mais pourriez vous m'éclaircir sur ce point ?
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Oui, ce que tu décris est tout à fait possible, grâce à la possibilité de préciser des conditions s'appliquant aux différentes réponses possibles dans une réplique. Mais tu dois avoir suffisamment de conditions différentes pour distinguer les 3 cas, hors tu n'en as que 2 : avoir ou non l'objet. Tu devras impérativement passer par un texte différent pour le troisième cas, sinon ce ne sera pas compréhensible car le joueur aura deux fois le même texte de réponse. Pour que le joueur "décide" de ne pas le rattraper, il faut un texte clairement différent.

En gros, ça donnerait :

Code : Tout sélectionner

IF ~~ THEN BEGIN Replique
  SAY @1 /* ~Tu n'as aucune preuve.~ */
  IF ~PartyHasItem("PREUVE")~ THEN REPLY @2 /* ~Tu te trompes. Je sais tout.~ */ DO ~SetGlobal("AttaqueDesMechants","ARxxxx",1)~ EXIT
  IF ~!PartyHasItem("PREUVE")~ THEN REPLY @2 /* ~Tu te trompes. Je sais tout.~ */ DO ~SetGlobalTimer("VariableTimer","ARxxxx",10)~ EXIT
END 
Comme tu peux le voir, les deux cas sont mutuellement exclusifs, donc il n'y aura qu'une seule réponse mais qui déclenchera des choses différentes.
Si tu ajoutes une troisième réponse sans condition, tu auras une deuxième réponse identique et ce qui se passera dépendra du choix du joueur mais ce ne sera pas clair.
Le troisième cas serait alors :

Code : Tout sélectionner

  IF ~!PartyHasItem("PREUVE")~ THEN REPLY @3 /* ~Tu ne perds rien pour attendre.~ */ DO ~SetGlobal("AttaqueDesMechants","ARxxxx",1)~ EXIT
Là tu pourrais ajouter en fait une autre réplique du personnage poursuivi pour justifier, ce qui donnerait :

Code : Tout sélectionner

  IF ~!PartyHasItem("PREUVE")~ THEN REPLY @3 /* ~Tu ne perds rien pour attendre.~ */ DO ~~ GOTO Attaque

IF ~~ THEN BEGIN Attaque
  SAY @4 /* ~Tu as laissé passer ta chance. On se retrouvera en enfer !~ */
  IF ~~ THEN DO ~SetGlobal("AttaqueDesMechants","ARxxxx",1)
ChangeEnemyAlly(Myself,EVILCUTOFF)
Enemy()
Attack(NearestEnemyOf(Myself))~ EXIT
END
Les 3 dernières lignes font aussi attaquer le groupe par le personnage qui parle, ce qui me semblerait logique.

Il y a quelque chose qui me chiffonne, somme toute. Tu veux faire ça par un dialogue, hors tu parles de poursuivre quelqu'un et de le rattraper, ce qui déclencherait l'attaque des méchants (ses amis ?). Si tu veux ça, il faut impérativement passer par des scripts et non par le dialogue. D'une part pour détecter que tu le rattrapes, par une détection de proximité dans le script du personnage, qui dépendrait également d'avoir fait le choix de le poursuivre dans le dialogue (qui mettrait une variable que le script vérifierait).

N'hésite pas à préciser ton objectif.
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne
.

Message par Nightmare »

Code : Tout sélectionner

@7 = ~Eh bien c'est... (Il n'a pas l'air de comprendre de suite votre réponse, semblant hésiter à le croire: apparemment vous êtes loin d'être le premier à qui cette prodigieuse offre fut faîte.) une bonne nouvelle. Vous avez fait un excellent choix. Le monde est à vous désormais, profitez-en bien! (Un soupir de soulagement semble le traverser, vous avez tout à coup des soupçons sur ce mystérieux personnage et son parchemin. Une sensation étrange parcours en ce même instant tout votre être...) Je dois vous laisser, j'ai fort à faire, adieu et merci.~ // Renvoie à @15-16
@8 = ~Je ne vends pas de... Oh laissez tomber. Mais l'inestimable vous est passé sous votre nez. (Il attend quelques secondes, comme si il espérait que vous reveniez sur votre décision. Finalement vous le voyez s'éloigner, l'air abattu. Cela attire votre curiosité...)~ // Renvoie à @15-16
@9 = ~2000! Je vous vends l'immensité et voilà votre prix? Vous ne méritez vraiment pas mon offre... Adieu. (Il attend quelque secondes, comme si il espérait que vous reveniez sur votre décision. Finalement vous le voyez s'éloigner, l'air abattu. En y réfléchissant son offre n'était peut être pas aussi inintéressante, de plus son attitude attire votre curiosité...)~ // Renvoie @15-16
@14 = ~Je... Euh...(Il attend quelques secondes, comme si il espérait que vous reveniez sur votre décision. Finalement vous le voyez s'éloigner, l'air abattu. En y refléchissant son offre n'était peut être pas aussi inintéressante malgré son air farfelue. De plus son attitude attire votre curiosité...)~ // Renvoie à @15-16
@15 = ~(Le rattraper.)~ 
@16 = ~Bah après tout peu importe...( Le laisser partir.)~

Voilà j'ai mis l'ensemble des phrases qui sont concernés.

Je me suis pas très bien expliqué.
En fait ce qu'il se passe ici c'est que j'ai 4 phrases qui renvoient à deux choix uniques.

@16 va faire que des personnes vont agresser l'individu que l'on a laissé partir. C'est une description par dialogue de ce qui se passe. Après dans la pratique je verrais un truc du style le personnage s'éloigne, se fait accoster et assassiner (le tout dans la vision de Charname), puis les agresseurs s'en prennent à Charname. Mais @16 comporte en elle-même 2 variantes à savoir si Charname possède ou non l'objet et cela modifiera par la suite le dialogue avec les agresseurs.
Dans l'autre (@15) et bien, j'avoue que je ne sais pas comment procéder, j'imagine qu'il s'éloignerait et qu'il s'arrêterait à côté d'autres PNJ citoyens, de sorte qu'il suffirait de se rapprocher de lui pour recommencer le dialogue. Mais la aussi il y a deux variantes, toujours si il possède ou non l'objet et cela modifiera encore la suite.

J'aimerais juste savoir si cela serait possible car je ne sais absolument rien sur ce genre de programmation (j'en suis à celle de "base", juste du dialogue), j'aimerais être sûr que la programmation est possible avec les enchaînements que j'ai choisis.
J'espère que ce que j'ai écrit est compréhensible j'ai toujours tendance à compliquer les choses quand j'explique ^^ .
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Tu corriges mes défauts de perception de ce que tu souhaitais mais je dois avouer que ce n'est toujours pas clair pour moi...

Tu ne donnes que quelques phrases du dialogue (celles du personnage) sans les réactions de l'équipe ni les enchaînements. Du coup je ne comprends pas si le dialogue est coupé en deux : d'abord l'achat de l'objet puis, plus tard, un nouveau dialogue dans lequel le fait d'avoir l'objet modifierait les réactions.

Si ton dialogue s'enchaine sans interruption (le joueur achète ou non, fin du dialogue puis la scène de l'attaque intervient), il te suffit de provoquer les enchainements dans le dialogue lui même. Pas de test sur la possession de l'objet, elle découle d'avoir choisi de l'acheter dans le dialogue.
Dans le cas contraire, tu dois prévoir une variable ou un test sur la possession de l'objet pour déclencher les conséquences (attaque, ...), d'une façon similaire à ce que j'ai indiqué hier.

Pour ce qui concerne les séquences qui se déroulent hors dialogue (l'éloignement du personnage, le joueur qui le rattrape, l'attaque), il faut impérativement faire intervenir des scripts. Ces actions dans les scripts seraient alors déclenchées par des variables comme je le montrais hier.
Certains enchainements ne sont pas simples à obtenir, notamment l'éloignement du personnage, puis le fait que le joueur le rattrape et enfin l'attaque par le groupe. De même faire un script de comportement des "méchants" qui attaque le personnage puis ensuite l'équipe n'est pas simple (plus précisément l'enchainement des attaques).
Une alternative simple serait de déclencher une scène cinématique à la fin du dialogue, qui pourrait dès lors forcer l'enchainement éloignement du personnage, rapprochement du groupe, attaque par les méchants. Tout cela sans que le joueur ait le choix d'agir. A ce moment, tu mets fin à la scène pour que le joueur puisse reprendre la main sur la réaction à l'attaque.

J'espère ne pas être à côté de la plaque encore une fois. ;)
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne
.

Message par Nightmare »

Je dois préciser que je n'ai encore pas codé cette partie.

Je viens de comprendre ce que tu veux dire, il n'y aura pas d'interruption du dialogue si achat. Je compte faire en sorte que dans ce cas
  • pas d'interruption, le personnage acquerra l'objet à la fin du combat (combat obligatoire pour le conserver), la cinématique serait une bonne alternative mais je tiens à ce qu'il y ait un dialogue avec les agresseurs (l'homme sera assassiné dans la cinématique).
  • si pas d'achat alors même procédé : cinématique, les agresseurs tuent le bonhomme et Charname intervient, le dialogue s'ouvre = combat pour arrêter les criminels (gains de l'objet) ou les laisser partir (fin du dialogue et objet non acquis).
Tout en sachant que quelque soient les réponses (@15 et 16), la cinématique aurait lieu. Les seuls variables étant celles citées ci-dessus. @16 et 15 mettent fin au dialogue, initient la cinématique puis les possibilités du joueur divergent ainsi que les dialogues en fonction de l'achat.

J'aurais également une autre question: dois-je coder tout ces détails plus tard ou il est préférable de tout régler en même temps ? Mon idaée d'origine était de réaliser absolument tout les dialogues du mod puis de passer à la section codage et programmation. Est ce un bon moyen de fonctionner ?
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Il n'y a pas de bonne ni de mauvaise méthode, je pense. Dans beaucoup de milieu, il est d'usage d'avoir un script complet (au sens cinématographique par exemple) avant de réaliser quoi que ce soit.
Dans le cas d'un mod, l'équivalent est d'avoir effectivement les dialogues écrits avant de coder, mais ça ne s'arrête pas là. En plus des textes, tu pourrais clairement différencier les répliques des réponses possibles et préciser les conditions dans lesquelles le joueur a ce choix (avoir ou non tel objet, ...) et les conséquences des choix lorsqu'elles ont des répercutions hors dialogue (déclencher l'attaque si quelque chose, au bout de ...).

En contrepartie, tu es confronté à un autre problème, celui des questions de faisabilité (au contraire, un cinéaste sait en général ce qu'il peut faire). Pour ces problèmes, il est d'usage de statuer au plus vite sur la faisabilité, de façon à ne pas bâtir quelque chose qui va s'écrouler partiellement ou complètement parce qu'un élément n'est pas possible. Tu peux bien entendu faire ces expérimentations sur des "démonstrateurs" qui ne se retrouveront pas dans le mod (un dialogue "bonjour", "au revoir", attaque). Mais il peut s'avérer aussi intéressant de le faire sur des éléments directement utilisables dans le mod. Mais il faut veiller à garder le même caractère simple que dans le "démonstrateur", sous peine d'avoir des problèmes avec d'autres éléments du mod et non ce que tu voulais essayer.

Enfin intervient le facteur personnel. Chacun a sa façon de travailler. Si on peut souvent apprendre en s'inspirant des façons des autres, parfois il n'est pas possible de reprendre telle quelle celle des autres pour tout un tas de raisons.
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne
.

Message par Nightmare »

Merci pour ces renseignements.
Je vais régler ce problème comme suit: pour le dialogue avec l'agresseur celui-ci comportera deux variantes qui sont: charname possède ou non l'objet.
Finalement je change d'avis: le dialogue s’interrompra si charname achète l'objet et il l'aura dans son inventaire. Ensuite il se retrouvera sur @15 et 16. Cinématique correspondant à la réponse. Puis je vais réaliser deux dialogues différents donc dans le codage deux parties différentes complètement séparés l'une de l'autre et pour cela l'un aura pour condition que charname est l'objet. Si il ne là pas l'autre dialogue s'activera par défaut (puisque pas de présence d'objet).
Cela est possible ?

Je vais faire des recherches sur le "démonstrateur", je n'ai aucune idée de ce que c'est :gign: .
Encore merci.
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Chaque réplique d'un personnage peut être conditionnée afin de permettre justement d'adapter ce qu'il dit aux événements. Tu pourras donc ajouter la condition d'avoir l'objet. Les conditions se mettent dans la partie IF ~conditions~ THEN BEGIN Replique SAY ....

Inutile de chercher démonstrateur, ça ne correspond à rien de particulier pour la création de mod. C'est un terme que j'ai employé pour évoquer quelque chose dont la fonction est de montrer comment faire pour obtenir ce que l'on souhaite. Par exemple, un concept car est souvent un démonstrateur de technologie automobile mais il n'est jamais vendu en tant que tel. Mais un concept car est complexe par rapport à ce que j'évoquais. Disons que l'équivalent serait plutôt un châssis avec quatre roues et un volant dans l'optique de tester un nouveau système de direction.
Le démonstrateur dont je parlais serait un ensemble de dialogues et scripts le plus simple possible permettant d'identifier les besoins de ce que tu veux réaliser en terme de structure de dialogue, de script, de variable, ...
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne
.

Message par Nightmare »

Ha, d'accord,

Ma dernière question: si le joueur achète le parchemin j'aimerai qu'il perde l'or (soit 4000) mais qu'il puisse récupérer la somme identique ensuite sur le cadavre du méchant pour que le joueur ne soit pas lésé.

De plus si le joueur ne paie pas la somme j'aimerai que cette fois l'argent n'apparaisse pas sur son cadavre sinon ce serait injuste et illogique.
Est-ce la aussi faisable ?
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

L'action TakePartyGold(nnn) permet de transférer de l'argent (nnn pièces d'or) vers le personnage dont le dialogue ou le script y fait appel. L'argent va dans son inventaire, donc tu devrais le récupérer sur le cadavre.

Pour d'autres recherches du même genre, consulte La Bible de l'Infinity Engine. C'est comme la bible, très long à lire, mais plein d'enseignements ! ;)
Avatar du membre
Magnus
Araignée colossale
Messages : 517
Enregistré le : dim. 30 déc. 2007, 13:09
Statut : Hors ligne
.

Message par Magnus »

Isaya,tu semmbles t'y connaîte en matière de script.

Peux tu me dire ce qui peut provoquer le non déclenchement d'un dialogue dans un mod ?
J'essaie de faire le mod qui prolonge la sphère planaire mais le jeu bloque quand les aventuriers arrivent (le dialogue n'arrive pas).
Je m'excuse pour le off topic mais le bug risque de bloquer le mod dans son intégralité et je risque de ne plus pouvoir me permettre de revenir dans la sphère.


http://www.baldursgateworld.fr/lacouron ... tique.html
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne
.

Message par Nightmare »

Très bien.
Merci pour le lien Isaya ^^
je me le suis mis dans mes favoris, je vais le :read: petit à petit.
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Magnus : non, je ne te pardonne pas pour le off-topic.
J'ai bien vu ton message dans l'autre partie du forum. Si je n'y ai pas répondu, ce que je ne sais pas donner de réponse et que je n'ai pas le mod en question. Alors, je t'en prie, ne viens pas polluer les autres sujets du forum avec la même demande.
S'il te plaît, peux-tu activer les messages privés dans ton compte utilisateur ? Je préfèrerais traiter ce genre de chose en privé. Merci.

Nightmare : tu trouveras d'autres liens utiles dans le forum consacré aux outils dans la forge des apprentis. Notamment dans ce sujet dont le nom, il est vrai, est peu indicatif de son contenu suite à la perte de son sous-titre.
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne
.

Message par Nightmare »

Une petite question: comment faire pour que les dialogues arrivent sous forme de vers comme au début de TOB et non sous forme de dialogue normal ?

Il suffit d'aller tout simplement à la ligne dans le fichier texte ? Ou bien est-ce plus complexe ?
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Oui, c'est bien en mettant des retours à la ligne là où tu le souhaites. Mais vise bien de façon à ce que l'effet soit bon aussi pour le jeu en 640x480 (on ne sait jamais que quelqu'un joue encore avec cette résolution-là ;) ). Sinon tu auras quand même une coupure avant la fin d'une ligne dans ce cas.
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne
.

Message par Nightmare »

Oui d'accord j'y penserai.
Merci bien ^^


Je reviens en force avec mes pièces d'or pour une nouvelle demande de faisabilité dans la pratique. J'espère après cela ne plus vous déranger avec ça.


j'ai donc des phrases qui ici seront cachées suivant la somme dépensée. Y a-t-il une condition du style : uniquement si 4000 pièces d'or dépensées au dialogue z alors phrase y disponible ?
Cela m'arrangerait fort bien pour la forme du dialogue.

Et peut-on faire en sorte à partir d'une même réplique (@19) de pouvoir récupérer soit 4000 ou 2000 à partir de la somme dépensée au dialogue précédent ? Tout en faisant également perdre le parchemin à Charname.

J'espère avoir été clair dans mes propos. J'ai conscience de la redondance de mes questions sur ce sujet mais si cela est impossible je dois le savoir sinon tout tomberait à l'eau.
+
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Réponse courte : oui, aux deux questions et pour la perte du parchemin.

Si tu veux savoir comment, n'oublie pas de le demander la prochaine fois ! :tongue:

En résumé, il suffit de fixer des valeurs avec une variable en fonction de la somme dépensée. Ensuite, tu peux utiliser la méthode que j'avais montrée (avec la possession d'un objet) pour avoir deux réponses à texte identique conditionnées par la valeur de la variable.
Si pour l'instant tu t'intéresses uniquement à la faisabilité, inutile de rentrer dans les détails.

Quand tu as des questions de faisabilité, pense à des situations équivalentes dans le jeu. Il n'est pas rare que tu veuilles reproduire quelque chose qui existe déjà dans le jeu ou dans des mods. C'est un bon point de départ également quand tu voudras coder.
Rimbaud
Statut : Hors ligne
.

Message par Rimbaud »

Je passe par ici et je voulais juste dire que je peux aider Nightmare sur MSN s'il le désire, avec des exemples concrets. Pour la programmation de base, tant qu'il ne s'agit pas de scripts ou autres choses trop compliquées, ça va. Donc hésite pas à passer, Nighty.

Par contre je trouve franchement dommage d'afficher les dialogues ici... C'est du bon gros spoil ça, y'a plus de plaisir. :(
Avatar du membre
Nightmare
Squelette
Messages : 127
Enregistré le : mar. 01 janv. 2008, 17:56
Statut : Hors ligne
.

Message par Nightmare »

Très bien merci tes conseils et tes lumières Isaya. Je vais pouvoir avancer serein.

PS : je viens d'enlever les dialogues
Répondre

Retourner vers « Dialogues »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité