Comment Faire: Une Quête Simple dans Neverwinter Nights .
de Iksander
traduit par Kemay



Introduction

Il s'agit peut-être de la quête la plus simple que vous puissiez imaginer - un PC rencontre un NPC, le NPC a perdu un objet, le PC récupère l'objet, le NPC est content, et récompense le PC. Ceci devrait être trivial à faire avec le NWN Toolset. Mais attendez! On dirait que cela nécessite d'écrire des scripts! Argh! Je n'y connais rien en programmation!! Que puis-je faire ? Qui peut aider ? Il n'y a aucune documentation! PANIQUE!


N'ayez crainte - l'aide est à portée de main!

Le NWN Toolset possède une série de "Wizards" qui automatisent les tâches simples à scripter, ainsi il n'est pas nécessaire de savoir comment écrire des scripts pour créer des interactions dynamiques de NPC, et créer des quêtes. Pour vous mettre dans le bain, ce tutorial a pour but de décrire comment réaliser une simple quête du style 'Va chercher!' en utilisant uniquement les "Wizards", et sans écrire une seule ligne de code.



Pré requis

Comme tout tutorial, je dois partir du principe que vous avez certaines connaissances. J'ai essayé de le rendre abordable par tout le monde, mais il existe certains concepts que vous ne pouvez ignorez pour comprendre la suite. Par exemple, je pars du principe que vous en savez un petit peu sur les scripts - vous n'avez pas besoin de savoir comment écrire un script, mais vous devez être au moins familier avec:
Si vous êtes déjà découragé, ne le soyez pas! Continuez à lire et voyez si vous arrivez à suivre ce dont je parle. Les concepts qui sont un peu flous pour l'instant pourraient devenir plus clairs au fur et à mesure que vous progressez dans le tutorial.


Tutorial

Préparation
Vous êtes sur le point de construire une quête pour un NPC, Plott de Vice. Il a perdu son Machinchose de Destruction, et veut que vous alliez le récupérer pour lui. Avant que nous ne commencions, créez Plott et le Machinchose, et placez Plott dans une zone (area). Placez un Machinchose dans la zone (area) aussi et donnez lui pour tag itemPlottMachinchose. Nous allons aussi a voir besoin d'une variable pour garder une trace de la progression de notre quête, aussi décidons tout de suite que ce sera un "integer" (nombre entier),iPlottQuete.

Planification
Il s'agit peut-être d'une quête triviale, mais nous devons quand même la planifier un minimum. Nous devons déterminer quelles seront les différentes étapes de la quêtes, et comment nous allons les représenter avec notre variable de progression de quête. Nous déciderons à l'avance que iPlottQuete pourra avoir 3 valeurs potentielles:
  • 0 - La quête n'a pas été donnée au PC (par défaut)

  • 100 - La quête a été donnée au PC, mais il ne l'a pas achevée.

  • 200 - Le PC a achever la quête, et ne peut pas la refaire une nouvelle fois.

Débuter la conversation
Le noyau de la quête est la conversation que le PC a avec Plott de Vice. Normalement, vous prépareriez l'arbre de dialogue à l'avance, et construiriez tous les nœuds de dialogue avant d'ajouter les scripts avec les "Wizards". Nous ferons cela en deux étapes, cependant, dans le but de mieux illustrer le mécanisme. Pour commencer, éditez les propriétés de Plott (clique droit sur Plott et choisissez "Properties") et cliquez sur "Edit" juste à côté du champ "Conversation" dans l'onglet "Basic". Ceci ouvrira le "Conversation Editor" avec un nouveau fichier de dialogue. Ajouter ces trois nœuds à la racine:

Notez que l'ordre des branches du dialogue semble inversé. En effet, lorsqu' il est confronté à des choix multiples pour un NPC dans le même niveau de conversation, le jeu choisira la première branche de dialogue, soit qui n'a aucun script dans l'onglet "Text Appears when...", soit dont le script dans l'onglet "Text Appears When..." renvoie TRUE (Si vous n'avez aucune idée de ce que cette dernière partie signifie, ne vous inquiétez pas, le "Wizard" s'en occupera tout seul). Ce que cela signifie, en pratique, c'est que vos dialogues commenceront fréquemment par la fin de la quête, progressant à rebours vers le commencement.

Pour faire varier le texte qui apparaît lorsque quelqu'un parle au NPC, nous devons définir des conditions sur les deux premiers nœuds du dialogue. En d'autres mots, nous devons décrire les conditions qui doivent être vraies pour que le texte apparaisse. Le premier nœud ne devrait apparaître que lorsque la quête est achevée, et c'est lorsque la variable iPlottQuete est égal à 200. Configurons cela avec le "Wizard":

Note à propos du nom des scripts
Pour cet exemple, le nom des scripts est sans importance, et si vous comptez n'utiliser que les "Wizards" lorsque vous créez un module, vous pouvez vous permettre d'accepter les noms par défaut et de les oublier. Mais pour des projets plus importants, vous devrez décider d'un code de dénomination pour vos scripts, de façon à être capable de les identifier rapidement. Vous risquez probablement d'en avoir un très grand nombre.

1. Sélectionnez le premier nœud (Encore merci...)
2. Cliquez sur l'onglet 'Text Appears When...' en bas à droite du "Conversation Editor"
3. Cliquez sur le bouton avec un chapeau de magicien pour lancer le "Script Wizard"
4. Cochez la case 'Local Variable', et cliquez sur 'Next'
5. Tapez le de la variable locale (iPlottQuete) dans la case en haut à droite
6. Tapez la valeur que doit avoir iPlottQuete (200) dans la case en bas à gauche.
7. Cliquez sur 'Add'. Vous devriez voir apparaître une ligne de code dans la case 'Local Expressions', qui dit:
: GetLocalInt(GetPCSpeaker(), "iPlottQuete") == 200
8. Cliquez sur 'Next', appelez le script 'dlg_plott_01' et sauvegardez le


Le "Wizard" a généré un script de façon à ce que la première branche du dialogue n'apparaîtra que si le PC a achevé la quête. Vous n'avez pas besoin de modifier ce script, mais si vous voulez en apprendre plus sur l'écriture de script, un bon moyen de commencer est lire les scripts générés par le "Wizard", et déchiffrer ce qu'ils font et comment ils le font. Pour compléter notre conversation à l'étape intermédiaire de la quête, répéter le processus ci-dessus avec la ligne de dialogue Avez-vous trouvé..., en remplaçant la valeur 200 par 100

Achever la quête
Maintenant, vous devez complétez la conversation pour donner au PC quelques possibilités de réponses. Le PC doit avoir la possibilité d'accepter la quête, et de dire 'Oui' lorsqu'il possède le machinchose. Ajouter des branches au dialogue pour qu'il ressemble à l'arbre de dialogue ci-dessous. Vous pouvez modifiez le texte comme vous le souhaitez, mais pour l'instant, laissez la structure de l'arbre exactement comme montrer sur l'illustration.


Il est temps de déclencher la quête - de changer l'étape de la quête du PC de 'Pas commencée' à 'Non achevée', ou pour le dire autrement, d'attribuer la valeur 100 à iPlottQuete. Nous savons déjà quand faire cela, puisque nous avons notre conversation toute prête. La branche 'Ouais. J'reviens de suite avec' déclenche le départ de la quête (et demanderait à être réécrite mais ce n'est pas mon problème). Jusqu'à présent, nous avons uniquement effectué des tests sur la valeurs de iPlottQuete, maintenant nous allons devoir lui effectuer des modifications. Vous vous en doutiez, nous ferons cela dans l'onglet 'Action Taken'. Voici comment:
1. Sélectionnez le nœud Ouais. J'reviens de suite avec
2. Cliquez sur l'onglet 'Action Taken'
3. Cliquez sur le bouton avec un chapeau de magicien pour lancer le "Script Wizard"
4. Cochez la case 'Set Local Variable', et cliquez sur 'Next'
5. Tapez le nom de la variable locale dans la case en haut à droite
6. Tapez la valeur représentant l'étape 'Quête Commecée' dans la case en bas à gauche.
7. Cliquez sur 'Add'. Vous devriez voir apparaître une ligne de code dans la case 'Local Expressions', qui dit: SetLocalInt( GetPCSpeaker(), "iPlottQuete",100)
8. Cliquez sur 'Next', appelez le script 'dlg_plott_02' et sauvegardez le.


Jusque là tout va bien. Nous venons juste d'arranger la quête de façon à ce que le PC puisse la commencer, et nous avons déjà le mécanisme tout prêt pour les différentes possibilités du dialogue, donc finissons la quête et distribuons parcimonieusement les récompenses. Tout est en place pour que le PC revienne après que la quête soit entamée, et qu'il se voit demandé Avez-vous retrouvé le Machinchose de Destruction ?. Partant du principe que e joueur moyen est fondamentalement malhonnête, et essaiera d'obtenir quelque chose sans rien faire, nous devons vérifier qu'il possède réellement le Machinchose de Destruction lorsqu'il choisit Oui. A l'heure actuelle, vous devriez avoir une idée assez précise sur la façon de vérifier cela avec le "Wizard". Il s'agit juste d'une variante du test de iPlottQuete, à la différence près que c'est plus facile. Les instructions complètes sont cachées ci-dessous, sélectionnez le texte avec votre souris pour les faire apparaître.
1. Selectionnez le nœud 'Oh merci, merci, merci...'
2. Cliquez sur l'onglet 'Text Appears When...' en bas à droite du "Conversation Editor"
3. Cliquez sur le bouton avec un chapeau de magicien pour lancer le "Script Wizard"
4. Cochez la case 'Item in Inventory', et cliquez sur 'Next'
5. Tapez le Tag du Machinchose de Destruction (itemPlottMachinchose) dans la case du haut
6. Cliquez sur 'Add'. Le Tag devrait apparaître dans la case 'Currently required item tags'
7. Cliquez sur 'Next'


A nous les récompenses!
Enfin, nous devons définir la quête comme achever pour le PC, et consentir à distribuer quelques récompenses. Toujours à la branche Oh merci, merci, merci..., utilisez le "Script Wizard" de l'onglet 'Action Taken'. Vous devez cocher 'Give Rewards', 'Take From Player' et 'Set Local Variable'. Chacun fournira son propre champ à remplir dans le Wizard. Ceci devrait être, maintenant, un territoire familier, donc je vous laisserai comme exercice de déterminer la récompense. N'oubliez pas d'attribuer la valeur représentant que la quête soit achevée à iPlottQuete. Si vous êtes toujours désespérément perdu, il y a une description pas à pas cachée à la fin du tutorial.

Vous avez fini!
C'est vrai... Si vous êtes toujours avec moi, vous avez maintenant une quête miniature à vous, et - avec un peu de chance - une idée de comment faire une entièrement tout seul. Tout ce qu'il vous reste à faire est de sauvegarder votre module, de la charger en mode "single player", et d'aller papoter avec votre NPC. Assurez vous bien de tester toutes les possibilités du dialogue... Un bon test est le secret d'un bon code!

Ceci une quête rudimentaire du style 'Va chercher!', qui nécessite pas une seule ligne de script à écrire. Vous devez comprendre quelques détails sur les variables et les tags, et vous devez être conscient que le "Conversation Editor" et le "Script Wizard" écrivent un tas de petits scripts dans les coulisses (vous verrez qu'ils ont déjà été ajoutés à votre module). Mais vous n'avez pas besoin d'écrire de scripts vous-même. Ce qui est cool.

Exercices pour le lecteur!
Voici quelques variantes, toutes pouvant être réalisables avec les "Wizards" et que vous pouvez essayer:

  • Vous avez donné de l'or et de l'expérience au PC... Comment améliorer sa réputation auprès de la faction du NPC ?
  • Donner au PC une chance d'insulter le NPC, et faire que cela diminue sa réputation auprès de la faction du NPC.
  • Ajouter une branche de dialogue : '<StartHighlight>[ Garder le Machinchose ]</Start>Nan... pas pu le trouver, juré!' au nœud 'Avez-vous trouvé...'. Ne la faites apparaître que lorsque le PC a le Machinchose... et ajoutez quelques conséquences au vol.
  • Rendre le NPC xénophobe: ne déclencher la quête que si le PC est de la même race.
  • Ajouter une option de Persuasion pour les PCs qui essaient d'obtenir la quête du NPC xénophobe.
  • Faites en sorte que l'option de Persuasion n'apparaisse pas pour des PCs avec un faible charisme.
  • Comment feriez-vous une quête de type 'Va tuer!' ? (Coup de pouce: Scalp de bandit)
...et quelques uns qui nécessiteront l'écriture de scripts:
  • Et si Plott continuait à perdre son Machinchose ? Après sa destruction, faites le réapparaître à un autre endroit.
  • Créez un "blueprint" du Machinchose et faites le apparaître à un endroit aléatoire quand la quête est déclenchée.
  • Préparez une chasse aux oeufs de Pâques multi-joueurs.
Quelques astuces au sujet du "Conversation Editor"

Revenir à des noeuds précédents: Pour faire revenir une conversation à un nœud précédent en boucle, utilisez les liaisons (linking). Copiez le nœud auquel vous voulez retournez, et sélectionnez "Paste as a link". Note: Vous ne pouvez pas coller ainsi des liens au même niveau de dialogue que l'original.

Pour couper une longue description d'un NPC en de multiples nœuds, Ajoutez un nœud de dialogue et effacez tout le texte. Ajoutez un nœud à ce nœud vide, et le nœud vide se changera de '[END DIALOGUE] à '[CONTINUE]' dans l'éditeur. Le PC obtiendra ainsi l'option habituelle 'Continue' lors de la conversation.


Donner les récompenses... les secrets révélés!

Sélectionnez la case ci-dessous avec votre souris pour faire apparaître le texte caché.


1. Séectionnez le noeud 'Oh merci, merci..."
2. Allez dans l'onglet 'Actions Taken'
3. Cochez 'Give Rewards', 'Take From Player' et 'Set Local Variable', puis cliquez sur 'Next'
4. Dans la partie 'Give what rewards?' assignez la récompense et decidez si tout le groupe ou juste le PC reçoit la récompense, puis cliquez sur 'Next'
5. Dans la partie 'Take what?', tapez "itemPlottMachinchose" (sans les guillemets) dans la case 'Take item (by Tag)', et laissez 'Destroy' sélectionnez. Cliquez sur 'Next'
6. Enfin, nous devons modifier notre varible de progression de quête une dernière fois. Assignez 200 à 'iPlottQuete', cliquez sur 'Add', puis sur 'Next', sauvegardez le script et c'est fini.

__________________
Kemay
Cinq personnes sur quatre ont des problèmes avec les fractions.