Différences entre les versions de « Creation Kit : Dialogue »

De Wiwiki
Aller à la navigation Aller à la recherche
m
(Mention du bug qui pourrait se faire s'arracher les cheveux de nombreux débutants!)
 
Ligne 13 : Ligne 13 :
* Comment un dialogue pour Skyrim est créé dans le Creation Kit.
* Comment un dialogue pour Skyrim est créé dans le Creation Kit.
* Comment scripter des événements suivant les choix de dialogue du joueur.
* Comment scripter des événements suivant les choix de dialogue du joueur.
::{|style="border-collapse: separate; border-spacing: 0; border-width: 1px; border-style: solid; border-color: #000; padding: 0"
|-
|style="border-style: solid; border-width: 0"|[[Image:CKNewFeature.jpg|48px]]
|style="border-style: solid; border-width: 0"| ATTENTION : Depuis le patch 1.6 de Skyrim, les mods comprenant des quêtes en 'Start Game Enabled' (comme celle-ci si vous avez bien suivi le tutorial) nécessitent un fichier SEQ pour que leur dialogues fonctionnent correctement. Sans lui, les dialogues auront des problèmes pour se lancer. Voir cette page [[Creation_Kit_:_Bug_Dialogues| cette page]] pour plus d'explications.
|}


=Les Vues de Dialogues=
=Les Vues de Dialogues=

Version actuelle datée du 19 octobre 2012 à 17:57


Tutoriel traduit du wiki officiel: Original

Résumé

Ce chapitre va vous montrer comment créer des dialogues spécifiques à notre quête, « Le Dernier Espoir de Bendu Olo ».


Vous allez apprendre :

  • Comment un dialogue pour Skyrim est créé dans le Creation Kit.
  • Comment scripter des événements suivant les choix de dialogue du joueur.
CKNewFeature.jpg ATTENTION : Depuis le patch 1.6 de Skyrim, les mods comprenant des quêtes en 'Start Game Enabled' (comme celle-ci si vous avez bien suivi le tutorial) nécessitent un fichier SEQ pour que leur dialogues fonctionnent correctement. Sans lui, les dialogues auront des problèmes pour se lancer. Voir cette page cette page pour plus d'explications.

Les Vues de Dialogues

Skyrim offre un système d'agencement graphique afin de vous aider à voir le cheminement de votre dialogue pendant que vous le créez.


CKNewFeature.jpg Si vous êtes habitué à l'ancien système de dialogues de Fallout 3 et avant, il est toujours disponible sous l'onglet « Player Dialogue » (et, en fait, la visualisation est juste une jolie interface pour ce système).

Pour commencer avec les vues, naviguez à votre quête (GSQ01) et double cliquez dessus pour ouvrir la fenêtre de quête. Puis ouvrez l'onglet « Dialogue Views ». Votre fenêtre devrait ressembler a ça :

CKEmptyDialogueTab.png

Pour faire une nouvelle vue, faites un clic-droit dans le tableau à gauche de la fenêtre et sélectionnez « New ». On va vous demander de donner un ID pour cette vue, et l'ID de la quête sera déjà placé pour servir de préfixe. Appelez cette vue « GSQ01BenduView ». Cliquez dessus dans le tableau pour la sélectionner.

Nous n'avons rien ajouté à la vue pour le moment, donc nous n'avons qu'un vide blanc. Faites un clic droit dedans, et sélectionnez « Create Branch ». Vous allez devoir entrer un nom pour la branche, vous devriez l'appeler « GSQ01MeetingBenduBranch ». Une fenêtre de plus pour nommer un topic (vous pouvez juste accepter le défaut « GSQ01MeetingBenduBranchTopic ») et, en appuyant sur Entrée, vous verrez une série de rectangles qui n'ont probablement aucun sens pour vous.

CKDialogueStartingBranch.png

Ainsi, tout à l'heure nous avons créé une branche, qui a automatiquement créé un Topic pour elle-même. Ce Topic ne contient pour le moment aucune Info.

CKDialogueStartingBranchLabeled.png

Topics

Double cliquez sur le Topic pour ouvrir son éditeur.

CKEmptyTopicWindow.png

La seule chose qui nous intéresse ici est le champ « Topic Text ». C'est celui qui définit la commande que le joueur choisira dans la liste des options de dialogue en parlant à un PNJ. Nous allons faire du joueur un aventurier serviable, mettez donc : « Est-ce que vous avez besoin d'aide pour quelque chose ? ».

Double cliquez dans la table des Info, afin de pouvoir entrer la réponse du PNJ.

CKEmptyResponseWindow.png

Dans le champ « Response Text », entrez : « Oui, maintenant que vous le dites. Une saleté de voleur m'a pris mon amulette. Est-ce que vous voulez bien me la... ahem... ramener ? ».

Maintenant, appuyez sur le bouton « OK » en bas de la fenêtre deux fois. La fenêtre va disparaître et vous verrez la fenêtre « Topic Info ».

CKInDepth.jpg La première fois que vous appuyez sur le bouton « OK », l’éditeur fait un correction orthographique simple. Si vous avez bien copié le texte, il ne devrait pas y avoir d'erreur, donc le premier clic sur le bouton n'a rien fait.
(N.D.T. Il se peut que le correcteur ne gère pas le Français, dans ce cas, appuyez sur Ignore ou Ignore All)

Topic Infos

CKTopicInfoWindowStart.png

Il y a plein de données dans cette fenêtre, mais la plupart nous sont inutiles. Ce qui nous intéresse est le tableau « Conditions » au milieu. C'est ici que nous spécifions au jeu qui est capable de dire cette Info. Si nous nous contentons de cliquer sur « OK » ici et que nous laissons la condition vide, tous les PNJ du monde auront un Topic disant « Est-ce que vous avez besoin d'aide pour quelque chose ? »

Faites un clic-droit dans la liste de Conditions et sélectionnez « New » pour faire notre première condition pour cette Info.

CKConditionItem.png

Chaque Condition est une vérification qui est soit Vrai, soit Faux. Si toutes les conditions de la liste sont valides, alors l'Info sera valide. Notre première condition est juste qui est capable de dire cette ligne. « GetIsID » est sélectionnée par défaut, car elle est très souvent utilisée dans les conditions de dialogues. Cliquez sur le bouton au milieu qui pour le moment dit « INVALID » afin de choisir l'acteur approprié. Sélectionnez « GSQBenduOlo » dans le menu déroulant puis appuyez sur « OK ».

CKConditionItemFilled.png

Appuyez sur OK dans la fenêtre de condition pour la fermer, et vous devriez la voir apparaître dans la liste. Maintenant seul Bendu peut la dire, mais nous ne voulons pas qu'il la dise tout le temps ; seulement avant qu'il ait donné la quête au joueur. Nous allons alors ajouter une autre condition. Faites un clic-droit et cliquez sur « New » à nouveau.

Nous allons continuer à limiter ce morceau de dialogue suivant l'étape actuelle de la quête. Ouvrez le menu déroulant « Condition Function » et sélectionnez « GetStage » (vous pouvez taper les premiere lettres pour vous déplacer dans la liste, pour gagner du temps). Maintenant, si vous cliquez sur le bouton « INVALID » pour sélectionner les paramètres, il va vous donner une liste de quêtes plutôt que d'objets de base (puisqu'il sait que la condition « GetStage » ne gère que des quêtes). Sélectionnez « GSQ01 » dans le menu et cliquez sur OK.

Il faut aussi que nous disions à la condition quelle étape nous intéresse. Puisque nous savons que la quête commence à l'étape 0, nous pourrions sélectionner « == » pour la comparaison et mettre la valeur à « 0 », mais on pourrait fausser la condition si nous ajoutions des étapes avant. La moyen le plus sûr est de vérifier que l'étape actuelle est inférieure a 10, on choisit donc « < » comme comparaison, et « 10 » dans le champ de valeur.

CKConditionItemGetStage.png

CKInDepth.jpg Notez que vous pouvez réordonner les conditions avec les touches flèche gauche et flèche droite, ou les boutons en bas à gauche de la fenêtre de conditions. Dans cet exemple l'ordre n'a pas d'importance, mais si vous commencez à mettre des conditions avec des « OU » et des « ET », il faudra s'en préoccuper.

Au final, la fenêtre d'Info du Topic devrait ressembler a ça :

CKTopicInfoWindowFilled.png

Appuyez sur « OK » pour fermer la fenêtre, et encore sur « OK » pour fermer la fenêtre du Topic.

Lier les dialogues

Finalement, nous sommes de retour à la Vue de Dialogues ! Avec notre morceau de dialogue présent. Si vous voulez voir tout le texte (et pourquoi ne le voudriez vous pas ?), cochez la case « Show All Text » en bas de la fenêtre.

CKDialogueViewWithStuff.png

Puisque Bendu pose une question dans son texte, il faut donner au joueur une chance de répondre. Faites un clic-droit dans la zone de la branche, et sélectionnez « Add Topic » (si vous ne voyez pas cette option dans le menu contextuel, vous n'avez probablement pas cliqué dans la branche).

Un nouveau Topic va être ouvert, Vous allez devoir lui assigner un ID ; « GSQMeetingBenduYes « ira bien, puisque ça sera notre choix pour que le joueur accepte d'aider. Mettez « Bien sur, je peux faire ça. » comme texte du Topic, et double cliquez dans la table d'info pour faire une réponse. Comme texte, entrez « Oh, merci beaucoup. Il est parti à Reachwind Eyrie. Je vous en prie, faites vite ! Je vous en offrirai deux fois sa valeur ! » Cette fois, lorsque vous appuyez sur « OK », le correcteur orthographique va se plaindre de « Reachwind ». Appuyez juste sur le bouton « Ignore » pour ignorer, puis appuyez de nouveau sur « OK » pour revenir à la fenêtre de Info du Topic.

Tant que vous êtes la, double cliquez sur le texte de la réponse pour la rouvrir. Remarquez la liste des fichiers sonores en bas de la fenêtre.

CKBadSoundExport.png

Puisque nous n'avons mis aucune condition sur ce dialogue, le jeu pense que tout le monde peut le dire, et va essayer d'avoir des fichiers sonores pour tous les types de voix. C'est un immense gâchis d'espace disque et (si vous prévoyez d'enregistrer des voix) un gâchis de temps d'enregistrement. Fermez donc cette fenêtre et ajouter une condition « GetIsID » cherchant « GSQBenduOlo » (tout comme l'Info du Topic précédent). Maintenant, si vous regardez la réponse à nouveau, vous verrez que cette ligne ne sera dite que par une phrase de type MaleDarkElf, et donc ne montre que ce fichier.

CKGoodSoundExport.png

Revenez maintenant à la Vue de Dialogues. Vous aurez un nouveau Topic dans la Branche, qui se sera étendu pour avoir la place.

CKMultiTopicBranch.png

La beauté des Vues de Dialogue est que nous pouvons arranger ces topics comme nous le souhaitons. Le jeu ne s'occupe pas de ce positionnement ; il est là seulement pour aider le créateur. Attrapez ce nouveau topic par la barre du haut et déplacez le à un endroit qui vous arrange.

Faites un nouveau Topic, avec comme texte « Désolé, pas pour le moment. » Faites répondre à Bendu « Bien, c'est votre choix. » N'oubliez pas de mettre une condition GetisID à l'Info. Une fois que vous avez créé ces deux Topic, la vue de dialogue devrait ressembler à ceci :

CKUnconnectedDialogue.png

Tous ces Topics existent dans la branche, mais le jeu ne sait pas quelles sont les connections entre eux. Nous devons les lier ensemble. Cliquez sur « GSQMeetingBenduBranchTopic » pour l'activer. Puis cliquez une nouvelle fois sur le texte de la ligne (le curseur se transformera en main quand vous serez dessus) et glissez une ligne jusqu'à « GSQ01MeetingBenduYes ». De même, tirez une ligne du Topic initial jusqu'à « GSQ01MeetingBenduNo ».

CKConnectedDialogue.png

Maintenant, quand le joueur sélectionne le sujet « Est-ce que vous avez besoin d'aide pour quelque chose ? », Bendu dira sa ligne et le joueur sera présenté à une liste de choix dépendant des liens de ce Topic. Les choix seront listés dans l'ordre dans lequel ils ont été liés depuis le Topic.

Scripter le dialogue

Nous allons faire notre première plongée dans le système de script, mais elle sera assez simple, alors ne vous inquiétez pas si ça n'est pas votre tasse de thé.

Pour le moment, nous avons un flux de dialogue en place, mais le jeu n'a aucune idée de la signification des divers choix. Quand le joueur dit « Oui », nous devons lui dire que le joueur a accepté la quête et que nous sommes à l'étape suivante.

Double cliquez sue le texte « Oh, merci... » dans le topic « GSQ01MeetingBenduYes ». (Notez que cela nous amène directement à la fenêtre d'Info sans passer par le Topic.)

En bas de la fenêtre, vous devriez voir deux champs pour Scripts marqués « Begin » et « End ». Le script Begin est lancé quand le PNJ commence sa ligne, et le script End quand il la finira. (En terminologie de scripting, ces petits scripts sont appelés des « Script Fragment ».)

Dans le champ End, entrez cette ligne de script : GetOwningQuest().SetStage(10)

La portion SetStage(10), comme on peut s'y attendre, met l'étape actuelle de la quête à 10. la partie GetOwningQuest() précise juste que la quête qui nous intéresse est celle qui contient ce dialogue (Parfois, vous pouvez vouloir qu'une ligne dans une quête modifie une autre quête, on doit donc préciser).

Si vous appuyez sur « Compile », vous verrez quelque chose apparaitre dans le tableau « Script Name » à droite. Vous pouvez l'ignorer (Si vous avez fait une erreur par contre, le compilateur se plaindra).

Au moment de fermer la fenêtre, elle devrait ressembler à ceci :

CKScriptedDialogue.png

Et c'est bon ! Fermez la fenêtre, et vous êtes prêt à continuer. Vous remarquerez que dans la vue de dialogue, le texte de cette Info a un « [S] » à côté d'elle, pour que nous voyons facilement quels morceaux de dialogue ont un script attaché sans avoir besoin de tous les ouvrir.

Branches et Conditions

Vous venez de créer une Branche d'un dialogue. Par défaut, elle, c'est une branche de « Haut Niveau » (d'où la coloration orange dans la Vue). Vous n'avez pas à vous inquiéter des autres types de branche pour le moment ; sachez juste qu'une branche de haut niveau est une de celle qui sera disponible comme première chose que dira un acteur au joueur.

Le Topic qui a une barre jaune orangée en haut est choisi comme point de départ de la Branche. Quand un acteur détermine quels choix offrir au joueur, il cherche les points d'entrée et offre un choix pour chacun de ceux qui sont valides. Si vous vous souvenez bien, nous avons mis une condition sur notre Topic de départ qui vérifie que l'étape de la quête est inférieure a 10. Une fois que le joueur choisit d'accepter la quête, nous mettons l'étape à 10, ce qui signifie que le topic de départ n'est plus valide ; il n'apparaîtra plus dans la liste des topics de l'acteur.

Les autre topics peuvent avoir une liste de conditions bien plus réduite, puisqu'ils sont typiquement accédés seulement si le topic d'entrée de leur branche est valide. C'est pourquoi nous ne les avons que limité à un PNJ pour ne pas avoir plus de fichiers de voix. Du coté du jeu, il n'y a pas de différence.

Une fois que le joueur aura choisi un topic sans lien sortant, le jeu cherchera à nouveau pour un topic de haut niveau valide à offrir au joueur. Si aucun n'est valide, le PNJ arrêtera sa conversation avec le joueur.

Essayez-le

Chargez le jeu avec votre plugin et allez voir Bendu (Rappelez vous que vous pouvez vous y téléporter avec COC MixwaterMillWorkersHouse). Il devrait maintenant avoir des choses à vous dire.

CKDialogueInGame.png

Il y a quelques problèmes avec le dialogue pour le moment :

  1. Il passe directement au choix suivant dans la liste (puisque il n'y a pas d'audio, si vous n'avez pas les sous-titres activés, vous n'aurez aucune idée de ce qu'il a dit. Même si vous les avez, ils sont probablement passés trop vite pour que vous puissiez les lire).
  2. Si vous refusez d'aider, il retournera simplement aux mêmes choix de dialogue, ce qui peut sembler étrange.

Heureusement, ces problèmes sont facilement réparés.

Enregistrer une piste temporaire

Ouvrez le « GSQ01MeetingBenduBranchTopic » et naviguez jusqu’à la fenêtre de réponse. En bas de la fenêtre, vous verrez un bouton « Record ». Appuyez dessus et, si vous avez un microphone raccordé à votre ordinateur, vous pouvez enregistrer la ligne vous-même. Si vous n'en avez pas (ou que vous ne souhaitez pas enregistrer votre voix) vous pouvez simplement enregistrer quelque secondes de silence, assez pour laisser le temps de lire les sous-titres. Appuyez sur le bouton « Save » pour enregistrer le fichier sur le disque.

Faites de même pour les deux autres Topics que nous avons faits (Tant que vous y êtes, vous pouvez changer l'émotion de ces lignes, afin que Bendu montre du dégoût ou de la joie suivant votre réponse).

Dans le topic « No », cochez la case nommée « Goodbye ». Cela sortira le joueur du dialogue lorsque elle est sélectionnée, afin qu'il ne revienne pas à la liste des topics après que la ligne soit dite. (Vous devriez aussi faire du topic « Yes » un goodbye. Comme Bendu n'a qu'un seul topic de haut niveau, ce n'est pas nécessaire, parce que nous savons qu'il n'aura rien d'autre à dire quand il aura fini. Mais si une autre quête a des dialogues pour lui, cela pourrait rendre le joueur confus.)

Dialogue Additionnel

Tant que nous y sommes, faisons aussi le dialogue qui va fermer la quête lorsque nous reviendrons avec l’amulette.

Dans la vue de dialogue, faites un clic droit pour créer une nouvelle branche, et appelez la « GSQ01BenduFinishBranch ». Acceptez le nom par défaut pour le Topic, et mettez « J'ai ramené votre amulette » comme texte. Donnez lui quelque chose de bien en réponse (j'ai mis « J’espère que vous avez mis une bonne raclée à ce voleur ! »). Il lui faudra deux conditions ; une qui la limite à Bendu, et une autre qui la limite à l'étape 30 de la quête. Finalement, mettez la en Goodbye, et mettez l'étape de la quête à 40 quand elle est dite.

Vous devriez être capable de vous en occuper seul maintenant. On aura ceci quand vous aurez fini :

CKFinishingQuestDialogue.png

Nous ne nous sommes toujours pas occupés de l'amulette elle même, et la quête n'a aucun moyen de passer de l'étape 10 à l'étape 30, il nous reste donc encore du travail.

CKInDepth.jpg Cela peut sembler être beaucoup de travail seulement pour quelque lignes. Une partie de la complexité est historique -- parce qu'elle a évolué depuis les dialogues textuels de Morrowind, l'organisation peut sembler un peu étrange et non dirigée. Mais le même système permet aussi à plusieurs personnages de dire la même ligne, les cris de combat, les accueils du joueur, les réponses au coups, etc. Flexibilité signifie aussi parfois complexité.

Avec un peu d'entrainement, tout ceci deviendra une deuxième nature, et vous serez capable de travailler avec le système de dialogue aussi vite que vous écrivez les dialogues eux-même.