Inform intègre la création des dialogues et, même si le système implémanté par défaut n'est pas le plus performant, il a le mérite de limiter les bugs et problème de compatibilité avec les extensions (et nous risquons de voir malheureusement bientôt qu'il y a pas mal de soucis).
Le système reprend la logique classique d'Inform, on interroge quelqu'un à propos d'un topic. Il s'articule autour des deux verbes ask et tell.
Petite parenthèse historique : parler à une machine
Dans les années 60, la question du dialogue avec les machines s'est immiscée sur le devant de la scène scientifique. Plusieurs prototypes ont permis d'interroger une éventuelle intelligence artificielle.
Plusieurs prototypes techniques ont été réalisés pour faire croire à un individu qu'il parle avec un humain alors qu'en fait il s'agit d'une machine. La psychologie s'est notamment fortement intéressée à ces programmes espérant notamment y trouver des outils capables de pratiquer à distance et en grand nombre des psychanalyses.
Deux exemples :
Le test de Turing
Le test de Turing décrit en 1950 par le chercheur Alan Turing montra qu'il était parfois difficile de savoir pour un individu si son interlocuteur était un humain ou une machine.
On dit que le Turing test est réussi quand une solution technique réussit à se faire passer pour un humain.
Elyza
Elyza est un programme crée en 1966 par Joseph Weizenbaum. Il permet de converser avec un humain en lui posant des questions et en reprenant des éléments de réponses données par l'individu afin de les intégrer dans la conversation.
Il est censé simulée séance chez un psychanalyste.
Inform s'inscrit dans cette tradition de dialogue entre humain et machine même s'il propose un système de conversation relativement limité si on le compare des solutions techniques concurrentes comme TADS.
Toutefois, il existe plusieurs extensions qui permettent d'améliorer grandement l'écriture de dialogues interactifs.
Ask/questionner
Ask permet d'interroger un personnage sur un sujet spécifique.
Par exemple pour interroger un personnage mystérieux qui s'appellerait "l'homme à la valise" à propos d'une éventuelle invasion, le lecteur devrait entrer la commande (nous sommes encore en anglais) :
ask l'homme à la valise about invasion
La syntaxe d'une commande avec ask est donc ask+interlocuteur+about+sujet.
Nous proposons un exemple plus complet. Clément est un personnage dans l'atelier. L'extension pour la langue française n'est pas encore installée.
L'atelier is a room.
Clément is a man in l'atelier.
After asking Clément about "journée":
say "Clément vous regarde et dit 'C'était une journée bien chargée, mais ça va, parce que maintenant c'est presque le week-end.'";
Quand le lecteur écrit "ask Clément about journée", la réponse "Clément vous regarde et dit 'C'était une journée bien chargée...'" apparait à l'écran.
Si l'on passe en français et que l'on rajoute l'extension d'Eric Forgeot, le lecteur peut utiliser le verbe "questionner" pour remplacer "ask", "sur" remplace "about"; il lui faut donc écrire cette commande assez étrange :
questionner Clément sur journée
La syntaxe en français a retenir est donc questionner [quelqu'un] sur [quelque chose].
Tell/raconter
Tell/ raconter se comporte de la même façon qu'ask/questionner. Son sens est différent puisqu'il s'agit cette fois dire un fait aux personnages et non pas de leur demander quelque chose mais il faut avouer que la nuance s'atténue très souvent jusqu'à disparaitre dans l'usage si bien qu'on finit par les confondre.
La syntaxe varie légèrement, prenons un exemple où nous devons dire un secret à un personnage, pour y parvenir, nous devrons écrire quelque chose comme : tell Clément about secret.
En anglais la syntaxe pour tell ne varie pas de celle utilisée pour ask : tell+interlocuteur+about+secret.
Attention en français, il ne semble pas y avoir de substitut au verbe tell. De plus, assez étrangement, le verbe "dire" semble également ne pas être implémanté, en tout cas dans la version avec laquelle je travaille.
Exercice
Imaginer une conversation qui s'amorce automatiquement.
Le personnage arrive dans une première room où il n'y rien. Une petite introduction introduit son arrivée.
Quand il rentre dans la seconde room, il voit un autre personnage avec lequel se met en place automatiquement une conversation sur au moins trois topics (sujets) et qui nécessitent ask.
Indice : Il vous faudra utiliser une scène, et la commande try.
Réponse de l'exercice
Dehors is a room."Il suffit d'aller au nord."
L'atelier is a room. It is north of dehors.
Clément is a man in l'atelier.
When play begins:
say "Le soleil rase les murs. Vous êtes enfin arrivé.";
Début is a scene. Début begins when the player is in l'atelier for the first time.
When Début begins:
say "Vous poussez la porte et entrez dans l'atelier. Il est en train de vous attendre.";
say "Vous le saluez rapidement et lui demander comment s'est passée sa journée.";
try asking Clément about "journée";
After asking Clément about "journée":
say "Clément vous regarde et dit 'C'était une journée bien chargée, mais ça va, parce que maintenant c'est presque le week-end.'";
say "Vous pouvez questionner Clément sur demain.";
After asking Clément about "demain":
say "Vous souriez : 'Et qu'est-ce que tu vas faire demain?'[line break]'Pas grand chose, je vais commencer par une grasse matinée'.";
say "Vous pouvez questionner Clément sur repos";
After asking Clément about "repos":
say "'Ca ne te fera pas de mal de dormir un peu, n'est-ce pas?'";
say "C'est à son tour de sourire : 'Oh que non!'";
la table is a supporter in l'atelier. le livre is an object on la table.
Consult
Toujours sur ce même principe de sujet associé à un interlocuteur, les objets eux-mêmes peuvent nous "parler".
Par exemple, on peut imaginer un journal que le lecteur voudrait consulter à propos d'un sujet particulier, il nous faudrait ainsi une commande de type "questionner le journal sur Charles".
Consult est un verbe destiné aux objets qui nous permet de les interroger sans qu'il y ait d'ambiguité avec un "vrai" dialogue.
On l'utilise de la même manière que pour ask : consult+[objet]+about+[topic]
Le français ne pose cette fois-ci pas de problème, la traduction est "consulter", la syntaxe : consulter+[objet]+sur+[sujet].
Ainsi par exemle :
After consulting le livre about "la malédiction":
say "Le livre prétend que la mort finira par s'abattre sur le royaume le jour où le corbeau parlera."
...Nous permet de désigner très simplement une interaction avec un livre.
Question
Dans l'exemple que nous venons de voir, quelle commande le lecteur devra écrire pour obtenir les informations que le livre contient au sujet de la malédiction ?
Réponse (c'est facile!)
consulter le livre sur la malédiction
Aller plus loin avec les dialogues
Première remarque
Les informations concernant le dialogue que nous avons vues pour l'instant lors de cette séance concerne, au final, plus le point de vue du lecteur que celui du programmeur.
La logique d'interaction pour les dialogues n'est pas naturelle pour l'utilisateur. Il faut donc réellement réfléchir à comment vous l'introduirez dans votre récit pour que votre lecteur ne soit pas désemparé.
Plusieurs sujets pour une même réponse
Il est possible de combiner plusieurs sujets pour une même réponse, par exemple:
Instead of asking Clément about "nuit/soir/tard":
say "'C'est vrai qu'il est tard.'";
Des extensions puissantes (mais...)
Il existe des extensions extrêmement bien réalisées et parfaitement adaptées à nos contraintes d'écriture.
Nous pensons notamment à deux d'entre elles
Threaded Conversation par Chris Conley et Emily Short qui est vraiment un système excellent et parfaitement adapté à l'écriture de récit mais qui rencontre certains problèmes avec l'extension en français.
Conversation Framework par Eric Eve qui s'inspire si j'ai bien compris du système de TADS 3.
L'utilisation de ces extensions provoque certains bugs notamment avec l'extension française.
Introduction aux variables
Les variables temporaires
Parfois il est pratique de pouvoir conserver temporairement des informations : à l'intérieur d'un instead, d'un check...Les variables temporaires sont alors très utiles.
Une variable temporaire se déclare avec le mot "let"
let [nom de la variable] be [valeur de la variable]
Par exemple :
let selection be a random thing in Dehors;
Nous créeons une variable "selection" et nous décidons que sa valeur est "a random thing", c'est à dire n'importe quel objet de la room appelé dehors.
Il est possible de remplacer la valeur d'une variable en écrivant
now selection is le [nuage].
Il faut bien sûr avoir déclaré au préalable l'objet "le nuage".
Pour appeler ensuite le contenu de la variable il suffit de rajouter son nom entre crochet dans une commande :
say "[selection] est un objet qu'on trouve dehors."
"selection" sera remplacé par "le nuage".
Exercice :
Créer l'action de rêver et faire en sorte qu'au moment de rêver un message apparaisse qui dit que le personnage pense à un objet aléatoire d'une des pièces du récit.
Réponse
Dehors is a room."Il suffit d'aller au nord."
L'atelier is a room. It is north of dehors.
Clément is a man in l'atelier.
le nuage is an object. le vieil arbre is an object in Dehors.
Instead of waiting when the player is in Dehors:
say "Vous voyez un nuage.";
now le nuage is in Dehors;
Dreaming is an action applying to nothing.
Understand "dream" as dreaming.
Understand "rêver", "rêves" or "rêve" as dreaming.
A report dreaming rule:
let selection be a random thing in Dehors;
say "Vous pensez à quelque chose que vous avez trouvé beau : [selection].";
Les variables à portée globale
Il également possible de créer des variables dont la valeur est maintenue pendant tout le temps du récit. Il suffit pour cela de déclarer une variable en précisant son type :
L'humeur is a number variable.
L'objet favori is an object variable.
Il est ensuite facile de lui spécifier une valeur:
L'humeur is a number variable.
L'humeur is 0.
L'utilisation de variable peut être extrêmement utile pour prendre que le programme se souvienne que des interactions ont eu lieu.
Exercice/ exemple
Imaginer un lieu où l'on ne peut accéder que si la jauge d'humeur n'est pas à 0. Le message varie selon que l'action soit possible ou non. La jauge peut changer si l'on parle avec un personnage d'un certain sujet.
Réponse
L'atelier is a room. Clément is in l'atelier.
Le long escalier is a room. It is down of l'atelier.
Instead of asking Clément about "nuit/soir/tard":
say "'C'est vrai qu'il est tard.'";
now l'humeur is 1;
L'humeur is a number variable.
L'humeur is 0.
Before going down when the player is in l'atelier:
if l'humeur is 0:
say "Vous n'avez pas envie de descendre. Vous avez déjà le morale au plus bas.";
stop the action;
otherwise:
say "Quel bel escalier.";
Le release du texte
Comment publier son texte avec Inform
Changer de format de texte
Pour changer de format, il suffit de se rendre dans la rubrique "settings".
Z-machine et Glulx
Une fois le texte écrit que faire de notre IFA. Inform permet de compiler un texte en différents formats. Il existe principalement deux formats : ceux compilés par la z-machine et ceux compilés par un outil plus récent "Glux".
Choisir le format d'un texte ne change rien normalement à son code source, il est donc possible théoriquement de passer d'un format à un autre en deux clics.
Avantages et inconvénients de Glulx
Glulx présente de nombreux avantages, toutefois certaines extensions ne sont pas compatibles avec ce système. De plus utiliser Glulx, c'est très certainement choisir des extensions Glulx et donc s'empêcher de pouvoir exporter son code sur Playfic et travailler avec Vorple.
Glulx prend nettement plus facilement en compte des travaux ambitieux de la taille de votre projet final et permet de les charger et compiler plus rapidement.
Certaines extensions spécifiques à Glulx sont très pratiques : nous pensons par exemple à l'Hyperlink Interface de Leonardo Boselli qui permet de créer des hyperliens dans un texte Inform.
Glulx est beaucoup plus ouvert sur le multimédia, mais un code généré en zblorb peut être augmenté par Vorple.
Le choix du format se posera surtout au moment du choix des extensions.
Playfic
Nous avons tout au long du cours utilisé Playfic pour partager rapidement les travaux. Pour le projet final, si votre architecture technique vous le permet, rien ne vous empêche de le faire également, toutefois il vous sera demandé de créer votre propre release personnel de votre sur votre espace.
Nous rappelons que Playfic compile les codes sources d'Inform avec une version web de la z-machine, il ne prend donc pas en compte les extensions Glux mais il comprend par contre d'office la plupart des extensions Inform officielles.
Playfic est disponible à l'adresse suivante : playfic.com (mais vous le saviez déjà!).
Générer son propre release avec interpréteur pour le web
Pour générer un realease de son texte, il suffit d'appuyer sur le bouton release. Une version en format ".z", ".zblorb" ou ".glulx" est alors produite. Cette version n'est lisible qu'avec un lecteur comme Gargoyle, Zoom ou Spatterlight.
Mais il est également possible, et c'est l'option que nous allons retenir de créer un dossier pour le web qui comporte un fichier index.html qui est la page d'accueil du site et un fichier play.html où l'on peut directement lire la fiction depuis un navigateur. En effet le fichier est généré avec un interpréteur. A noter qu'une version pour reader est également générée et accessible depuis la page d'accueil.
Pour générer ce type de release, il suffit de rajouter dans le code source de votre récit, la ligne suivante :
Release along with an interpreter.
Publication
Pour publier votre texte, il vous suffit de copier ce dossier en ligne via un serveur ftp. Vous pouvez par exemple le mettre dans votre dossier "public".
Et plus
Nous verrons par la suite qu'il est possible de changer les templates et le css des textes publiés et même d'interagir plus en profondeur avec le code généré en HTML via Vorple.
Exercices d'écriture
Introduction
Plusieurs contraintes sont proposées pour dynamiser l'inspiration des étudiants. Eles visent à développer des éléments qui peuvent être intégrés dans les projets. Les étudiants peuvent en choisir une et l'adapter à leurs récits.
Un moyen de transport en circuit.
Imaginer un circuit
Imaginer un véhicule qui passe automatiquement à travers plusieurs rooms quand on l'emprunte.
En fonction du lieu où le personnage se trouve, le véhicule se rend dans un lieu différent. Il y a plusieurs points d'arrêts qui correspondent en quelque sorte à des stations.
Vous pouvez complexifier le réseau à votre gré.
Deux univers qui varient selon l'état d'une variable.
Quand le lecteur utilise un objet, une variable stocke la valeur "on" et la perception du monde en est changée.
Chaque room de cette région dispose de deux descriptions différentes selon que l'objet soit mis en service ou non.
Un dialogue utile !
Imaginer un dialogue dans lequel le fait d'aborder des sujets de conversation enclenche des variables qui empêche de revenir sur certains sujets ou qui permettent de se rendre dans d'autres endroits de l'histoire.
Par exemple si vous parlez avec le vieillard de la pierre noire, il vous apprend qu'il y a une maison au nord de l'entrée de la ville. Avant quand vous alliez au nord de la ville, on vous disait "il ne semble pas y avoir grand chose par là". Désormais une variable fait en sorte que vous n'êtes plus empêché de passer. De plus, le message du vieillard change quand vous lui reparlez de la pierre noire...