<!doctype metacosm system>

<article>
<title>RFC sur les dialogues
<author>&frAuthor;
<date>v1.5 17 avril 2000
<abstract>
Ce document spécifie les dialogues.
</abstract>

<toc>

&frLicense;
&frProject;

<sect>Historique
<p>
<itemize>
<item>Version 1.5~: correction mineure dans la section 'Modificateurs
d'expression'
<item>Version 1.4~: amélioration des sections 'Bots actifs' et 'Le dialogue',
ajout des modificateurs d'expression
<item>Version 1.3~: conversion en dtd metacosm
<item>Version 1.2~: ajout des codes de retour et extension des dialogues à
plusieurs créatures
<item>Version 1.1~: mises à jour suite aux discussions
<item>Version 1.0~: premières ébauches
</itemize>

<sect>Notations
<p>
Ces termes sont définis dans le Vocabulary-RFC, disponible sur le site officiel.

Concernant la casse des dialogues, les mots-clés peuvent être entrés en
minuscules, en majuscules voire en panaché sans que cela pose un problème.

<sect>Mode d'interrogation des bots
<p>

<sect1>Bases
<p>
Il est question ici de spécifier le mode d'interrogation des bots.
Il a été choisi un mode d'interrogation par mots-clés. Chaque bot est associé à
un ensemble de couples (mot-clé, réponse).

Ex.~: Pour un bot qui s'appelle Raoul et qui est boulanger.
<tscreen><verb>
        Name -> My name is Raoul.
        Job  -> I am the baker.
</verb></tscreen>

Chaque bot devra ainsi répondre aux mots-clés suivants~:
<itemize>
<item>Name
<item>Job
<item>les noms de créatures que connaît le bot
<item>les noms des lieux que connaît le bot
</itemize>

Si les réponses aux deux premiers mots-clés sont statiques, elles sont
dynamiques pour les autres et dépendent du bot. Il faut néanmoins nuancer la
staticité des deux premiers~: une créature peut mentir ou changer de métier.

Ex.~: Raoul est un boulanger qui vit au nord de la ville de Midgaard.

<tscreen><verb>
        >Raoul
        Bot: Raoul the baker is a vile enemy of mine.
              You can find it in the vicinity of North Midgaard.
        >Marcel
        Bot: I don't know that.
</verb></tscreen>

Les mots-clés doivent aussi permettre d'élargir la conversation~: 
<tscreen><verb>
        >Job
        Raoul: I am the baker.
        >baker
        Raoul: I cook breads, pies and cakes.
        >cakes
        Raoul: My cakes are the best of Midgaard.
</verb></tscreen>
Mais ils peuvent aussi servir de fil rouge dans une quête~:
<tscreen><verb>
        >treasure
        Old Pirate: I had a map but I sold it to an adventurer named Raoul.
        (...)
        >treasure
        Raoul: I have only 1 half of the map. Robert has the other part.
        (...)
        >treasure
        Robert: I have the other part of the map.
</verb></tscreen>

<sect1>Bots actifs
<p>
Jusqu'à présent, nous avons considéré les bots comme étant complètement passifs,
répondant uniquement aux interrogations des joueurs. Mais il n'y aucune
raison, et même au contraire, que les bots ne puissent pas être plus actifs
dans la conversation.
Ils peuvent proposer des sujets de discussion (parler de la pluie et du beau
temps, de l'actualité locale), entamer une discussion avec un passant
(joueur ou non), notamment si le bot à quelque chose à vendre.

Ex.~: 
Un garde aborde Janselmeer. Il ne le connaît pas, donc il l'interroge 
pour savoir qui il est.

<tscreen><verb>
        A guard is approaching.
        Guard: What's your name, stranger?
case 1: >Janselmeer
        Guard: I am watching you, Janselmeer.
case 2: >Oumph
        Guard: I am watching you, Oumph.
</verb></tscreen>

Janselmeer peut dire son véritable nom (1) ou mentir (2). Les deux réponses
seront acceptées par le garde. Janselmeer sera alors connu sous le nom qu'il 
a donné à ce garde (Janselmeer ou Oumph), et aussi par les autres personnes 
en ville de manière potentielle.

<p>
Maintenant, reprenons à nouveau cet exemple mais cette fois-ci le garde 
connaît déjà Janselmeer.

<tscreen><verb>
        A guard is approaching.
        Guard: What's your name, stranger?
case 1: >Janselmeer
        Guard: I am watching you, Janselmeer.
case 2: >Oumph
        Guard: You lie! I know that you are not Oumph.
        A guard attacks you.
</verb></tscreen>

Ici, le garde attendait 'Janselmeer' comme réponse. Toute autre réponse 
, 'Oumph' par exemple, peut être considérée comme un mensonge par le 
garde.

<p>
Cet exemple permet d'effleurer deux nouveaux aspects.
Le premier, c'est l'ajout de nouveaux mots-clés (ici 'Janselmeer' a été
rajouté).
Le deuxième, plus intéressant, est l'intégration des réponses du joueur à la
mémoire du bot. Sur l'exemple, le garde va associer le nom du joueur
Janselmeer à son apparence. Bien sûr, rien n'empêche de mentir mais l'exemple
montre de façon simplifiée les risques encourus.

Il peut arriver que l'on ne désire pas répondre aux questions. Dans ce cas,
une créature peut utiliser le mot-clé JOKER pour le signifier.
Une absence de réponse (au bout d'un temps limité) pourra aussi être considérée
comme un refus de communiquer.
Les joueurs préféreront peut être la deuxième solution tandis que les bots 
utiliseront la première. Si les joueurs doivent utiliser JOKER, il serait mieux 
de lui donner un alias comme '...' pour l'interface utilisateur, ce qui est 
plus explicite.

<sect1>Communication entre bots
<p>
Appliquons ce que l'on a défini précédemment à la communication entre 2 bots.
Reprenons l'exemple du garde.

Vu par le joueur, cela devrait donner ça~:
<tscreen><verb>
        Guard to Bot: What's your name, stranger?
        Bot to Guard: My name is Bot.
        Guard to Bot: I am watching you Bot.
</verb></tscreen>
Vu par un bot~:
<tscreen><verb>
        Guard to Bot: Name
        Bot to guard: Bot
        Guard to Bot: ""
</verb></tscreen>

La principale difficulté pour réaliser ceci est que le garde ne sait pas qu'il
parle à un bot. Celui à qui il parle doit pouvoir comprendre qu'il soit bot ou
joueur.
Pour être certain de se faire comprendre, le garde doit donc s'adresser à son
interlocuteur de manière compréhensible par les joueurs et les non-joueurs.
De plus, s'il y a d'autres créatures qui écoutent la conversation, elles
pourront aussi comprendre qu'il s'agisse de joueurs ou non.
La solution que suggère l'exemple est d'intégrer dans un message à la fois une
version courte interprétable par les bots (correspondant aux mots-clés), et une
version longue du message pour les joueurs.

Exemple du garde, vu par le jeu~:
<tscreen><verb>
        Guard to Bot: ("Name", "What's your name, stranger?")
        Bot to Guard: ("Bot", "My name is Bot.")
        Guard to Bot: ("", "I am watching you Bot.")
</verb></tscreen>

Lorsqu'un bot ou un joueur envoie un message qui ne peut être compris ou qui ne
nécessite aucune réponse, la version courte sera vide. Aucun traitement ne sera
alors fait pour interpréter le message. Par contre il pourra être répété.

Ex.~:
<tscreen><verb>
      Guard: Now you die, Raoul !
      Message ("", "Now you die, Raoul !")
</verb></tscreen>

Ex.~:
<tscreen><verb>
      Épicier: Elles sont belles mes outres ! Achetez-les !
(a priori destiné uniquement aux joueurs, ou alors les bots sont 
sacrement intelligents)
      Message ("", "Elles sont belles mes outres ! Achetez-les")
</verb></tscreen>

<sect1>Application au niveau de l'interface utilisateur
<p>
Le joueur peut envoyer des messages de 2 façons~:
<descrip>
<tag>classique</tag>

Ex~: tell Oumph "Ou étais-tu passe?"
Ceci générera ce message ("", "Ou étais-tu passe?").
Il ne sera compris par aucun non-joueur~; néanmoins n'importe quelle créature
est capable de rapporter les paroles qu'elle entend (espion, commère, etc). 

<tag>avec des alias</tag>

Ex~: tell Oumph Job
Ceci générera ce message ("Job", "What's your job?") qui pourra être compris
par les bots et les joueurs.
Une liste d'alias devra être implémentée dans le contrôleur. Le joueur aura
bien sûr la possibilité de les modifier à sa guise.
Si l'alias n'existe pas, 'tell Oumph cloporte' générera le message
("cloporte","cloporte").
</descrip>

<sect1>Les codes de contrôle
<p>
Pour que les bots puissent mieux se comprendre, nous rajoutons les codes de
retour NONE, ANS, WRONG_ANS et BAD_ANS.  Ces codes ne sont pas lisibles par les
joueurs et ces derniers ne peuvent pas non plus en utiliser directement (la
commande 'answer' permettra d'envoyer un message avec le code de contrôle ANS).
Leur usage est donc limité aux bots.

NONE est le code de contrôle par défaut. Il ne signifie rien. Il est employé
quand aucun autre code de contrôle n'est utilisé.
 
Le code ANS signifie que le message est une réponse à une précédente question.

WRONG_ANS sert à indiquer que la réponse est considérée comme fausse et
mensongère. L'interlocuteur peut donner ainsi une autre chance de dire la
vérité (ou plutôt ce que le bot considère comme la vérité), changer de sujet
de conversation ou bien rompre la discussion avec des conséquences fâcheuses
(combat, baisse de la réputation...).

Ex.~: un garde interroge un joueur.
<tscreen><verb>
        A guard is approaching.
        Guard: What's your name, stranger?
        (name, "What's your name, stranger?",NONE)
        >Janselmeer
        ("Janselmeer", "Janselmeer",ANS)
        Guard: You lie! I know you are not Janselmeer.
        ("", "You lie! I know you are not Janselmeer.", WRONG_ANS)
        >Oumph
        ("Oumph", "Oumph", ANS)
  cas 1 :
        Guard: You lie! I know that you are not Oumph. 
        ("", "You lie! I know that you are not Oumph.", WRONG_ANS)
        A guard attacks you.
  cas 2 :
        Guard: I'm watching you Oumph.
        ("", "I'm watching you Oumph.", NONE)
</verb></tscreen>
Il convient bien sûr de limiter le nombre d'essais possibles...
BAD_ANS indique que la réponse est incorrecte, non conforme au type 
de réponse souhaité.

Ex.~:
<tscreen><verb>
        A guard is approaching.
        Guard: What's your name, stranger?
        (name, "What's your name, stranger?", NONE)
        >43
        ("43", "43", ANS)
        Guard: "I said 'What's your name?'."
        ("", "I said 'What's your name?'." BAD_ANS)
</verb></tscreen>

Un code BAD_ANS généré par un bot est une erreur grave dans le code du jeu ou du
bot. Un enregistrement de l'erreur doit être effectué pour débogage et
correction.

Un code BAD_ANS généré par un joueur signifie une faute de frappe, une mauvaise
compréhension de la question, un mensonge volontaire, une tentative pour
perturber le bot, etc.

Le codeur est libre de faire réagir son bot comme bon lui semble (poli et
compréhensif, énervé et agressif, etc). Le bot peut donc ou non reposer sa
question.

Note~: le bot ne peut et ne doit pas savoir s'il parle à un autre bot ou à
un joueur. Pour cette raison, le nombre de réponses BAD_ANS doit être limité,
afin qu'aucun bot bogué ne provoque de boucles infinies...

<sect1>Les modificateurs d'expression.
<p>
Un modificateur d'expression est une information contextuelle qui accompagne 
le message. Cette information est signifiante pour le bot qui reçoit le 
message et lui permet de réagir de manière plus appropriée.

<p>
Par exemple, il y a plusieurs façons de demander son nom à quelqu'un.
<itemize>
<item>politesse: "Would you mind to tell me your name, please ?"
<item>neutralité: "What is your name ?"
<item>insulte: "What is your name, alien scum ?"
</itemize>


Dans chaque cas, seul le modificateur d'expression a changé.
Voici ci-dessous les mêmes messages entendus par un bot :
<itemize>
<item>politesse: (name, NONE, POLITE)
<item>neutralité: (name, NONE, NEUTRAL)
<item>insulte: (name, NONE, INSULTING)
</itemize>

POLITE, NEUTRAL et INSULTING sont des modificateurs d'expression.
Voici une liste de modificateurs d'expressions :
<itemize>
<item>OBSEQUIOUS
<item>POLITE
<item>NEUTRAL
<item>RUDE
<item>THREATENING
<item>INSULTING
<item>CHARMING
</itemize>

Cette liste n'est figée.

<p>
L'exemple suivant explique comment les modificateurs d'expressions 
peuvent être utilisés.
Janselmeer rencontre Robert le boucher (le frère de Raoul) et lui demande 
des informations sur Raoul le boulanger.

<tscreen><verb>
  Janselmeer: (RAOUL, "Do you know RAOUL?", NONE, NEUTRAL)
        Robert:  ("", "I am not concerned with that RAOUL.", ANS, RUDE)
  Janselmeer: (RAOUL, "O MIGHTY ONE, may I beg you a little of your
                     knowledge about Raoul?", NONE, OBSEQUIOUS)
        Robert: ("", "RAOUL? This thing exists only in your sick mind.",
                 ANS, INSULTING)
  Janselmeer: (RAOUL, "Tell me something about Raoul or I'll kill you!",
                     NONE, THREATENING)
        Robert: ("", "I swear I don't know Raoul.", ANS, NEUTRAL)
        Janselmeer punches at Robert.
  Janselmeer: (RAOUL, "Tell me something about Raoul or I'll kill you!",
                     NONE, THREATENING)
        Robert: ("", "Raoul is the baker. He lives North of here. Please don 't
                 kill me!", ANS, POLITE)
</verb></tscreen>

<p>
Il n'y a aucune obligation d'utiliser un modificateur d'expression plutôt qu'un 
autre. C'est purement une question de comportement. Certaines personnes sont plutôt 
insolentes tandis que d'autres se montrent polies tout simplement parce qu'elles 
sont comme cela. Mais évidemment, les créatures n'auront pas les mêmes réactions 
avec les premiers qu'avec les seconds. Cela dépend d'elles. Par exemple, un seigneur 
est normalement habitué à ce qu'on s'adresse à lui de manière obséquieuse et 
pourrait s'offusquer de quelqu'un qui ne le ferait pas. Le choix du modificateur 
d'expression dépend donc à la fois de la personnalité du du personnage qui parle 
et de la réaction attendue de celui qui écoute.

<sect1>Extensions futures du langage des bots
<p>
Le système des mots-clés a été choisi pour des raison de simplicité de mise en
oeuvre. Néanmoins, cela devrait évoluer et tendre vers un vrai dialogue avec
des phrases (sujet verbe complément).
La première extension aux mots-clés pourrait être l'utilisation des pronoms et
adverbes interrogatifs~: what, who, where, why, how, how many, which, when.

Ex.~:
<tscreen><verb>
        >Who Raoul
        Bot: Raoul is the baker.
        >Where Raoul
        Bot: You can find it in the vicinity of North Midgaard.
        >What Raoul
        Bot: I've never heard of this.
</verb></tscreen>


<sect>Les différents modes de la communication verbale
<p>
Le contenu de cette partie peut paraître évident, mais pourtant il est tout à
fait essentiel.
Nous distinguons 2 modes de communication, le dialogue et le monologue, qui
seront utilisés à des fins différentes dans le jeu.

<sect1>Le monologue
<p>
Le monologue est la situation où une créature émet un message qui se suffit à
lui-même et par conséquent n'attend pas de réponse.
Ce message peut être destiné à une créature en particulier, mais la plupart du
temps il n'est pas dirigé.

Ex.~:  Un garde attaque Janselmeer.
<tscreen><verb>
             Guard: Now you die, Janselmeer!
             A guard attacks Janselmeer.
</verb></tscreen>

Le message est destiné à Janselmeer, mais toutes les créatures de passage
peuvent l'entendre.

Ex.~:  Une caravane arrive sur la place du marché.
<tscreen><verb>
             The caravan: The caravan has arrived! Look at my beautiful vegetables!
</verb></tscreen>

Le message est destiné à toutes les créatures de passage.

Ex.~:  Janselmeer viens de faire un achat.
<tscreen><verb>
             Janselmeer: That was my last silver...
</verb></tscreen>

Le message n'est adressé à personne mais peut être entendu par toutes les
créatures présentes (qui vont s'interroger sur la santé de Janselmeer :).


<sect1>Le dialogue
<p>
<mdef name="Dialog">
Le dialogue est un échange d'informations par des messages entre 2 ou plus
créatures.
</mdef>

Il s'effectue en mode connecté, avec une phase de connexion, une phase de
conversation et une phase de déconnexion.

Voyons comme exemple de dialogue un touriste qui demande sa route à un passant~:
<tscreen><verb>
        -phase de connexion :
        touriste : S'il vous plaît, monsieur...
        Le passant s'arrête
        passant : Oui ?...
        
        -phase de conversation :
        touriste : Je cherche le camping du coin.
        passant : Vous tournez à gauche dans 500 m, vous continuez tout droit
                  jusqu'à la fontaine et tournez à droite.

        -phase de déconnexion : 
        touriste : Merci, bonne journée.
        passant : C'était avec plaisir.
</verb></tscreen>

C'est ce genre de dialogue que l'on va tenter de reproduire.
Un dialogue se déroule de la façon suivante~:
<verb>
La créature C1 veut parler aux créatures C2, C3, ..., Cn.
1- C1 demande à parler avec C2, C3, ..., Cn.
2- Certains Ci acceptent la demande, d'autres la refuse.
3- C1 parle avec ceux qui ont accepté.
4- Les participants se retire peu à peu. L'avant dernier retrait met fin
à la conversation.
</verb>

L'avantage d'un mode connecté est de faciliter la gestion des créatures. Par
exemple, si on parle à une créature qui est en train de se déplacer, celle-ci
s'arrêtera le temps de la conversation (donc de la connexion).

Le dialogue devrait donc être le mode de communication privilégié avec les bots.
Une fois un dialogue ouvert, certaines actions sont interdites (comme
s'éloigner par exemple). Ces actions interrompent automatiquement la
conversation.
Un dialogue peut être interrompu par un événement extérieur si celui-ci
nécessite obligatoirement une réaction de la part d'une créature engagée dans
la conversation (un combat par exemple).


<tscreen><verb>
            Touriste                     |             Passant
         ---------------------------------------------------------------------------
         >talk passant                   |
         touriste: S' il vous plaît      | touriste: S'il vous plaît, monsieur...
           monsieur...                   | a tourist wants to talk with you.
                                         | Do you accept? (Y/N)
                                         | >Y
         passant: Oui ?...               | passant: Oui ?...
         >tell passant "Je cherche le    |
           camping du coin."             | touriste: Je cherche le camping du coin.
                                         | >tell touriste "Vous tournez à gauche dans
                                         |  500 m, vous continuez tout droit jusqu'à
                                         | la fontaine et tournez à droite."
         passant: Vous tournez à gauche  |
           dans 500 m, vous continuez    |
           tout droit jusqu'à la         |
           fontaine et tournez à droite. |
         bye                             |
         touriste: Merci, bonne journée  | touriste: Merci, bonne journée.
</verb></tscreen>

Il est à noter que la commande 'talk' permet l'ouverture du dialogue et
que 'bye' met fin à la conversation.
remarquons aussi qu'une interface utilisateur peut fournir un certain nombre 
de raccourcis pour le dialogue. Par exemple, il n'est pas nécessaire de demander 
à un joueur si il veut répondre. Il suffit qu'il réponde dans le cas positif 
ou bien qu'il fasse autre chose en cas de réponse négative. De la même façon,
Il suffirait de faire simplement autre chose que parler pour mettre fin à un 
dialogue plutôt que de taper 'bye'.

Pour ouvrir un dialogue avec plus d'une créature, on rajoute les noms 
des créatures souhaitées en paramètre de 'talk' ou l'on utilise 'talk all'
pour parler à toutes les créatures présentes. 

Ex.~: Embauche dans une taverne 
<tscreen><verb>
       Recruteur> talk all
       Recruteur: "Votre attention s'il vous plaît."
 [A ce stade, certains écoutent, d'autres pas.]
       Recruteur: "J'ai du travail à proposer, dangereux et mal payé."
 [Deux ou trois créatures continuent à écouter...]
       Recruteur: "3 pièces d'argent pour aller tuer Skarkash."
 [Gros silence dans la pièce]
       Recruteur: "Bon, tant pis."
       Recruteur> bye
       Recruteur: "Merci de votre attention."
</verb></tscreen>

Ex.~: Contrôle d'identité dans la rue. Le garde recherche un elfe évadé. 
<tscreen><verb>
       Garde> talk elfe1 elfe2
       Garde: "Eh toi et toi !"
       Garde: "Quels sont vos noms ?"
       Elfe1: "Celeborn"
       Elfe2: "Galadriel"
       Garde> bye
       Garde: "Très bien, circulez."

</verb></tscreen>

Remarque~: cet exemple met en avant les difficultés de codage sous-jacentes.
La phrase associée à un mot-clé dépend du niveau de langage de celui qui
parle (politesse, élocution, etc), de son métier, du nombre de personnes
à qui l'on s'adresse, du sexe de ces personnes, etc.

<sect1>Les messages et la perception 
<p>
Le système de dialogue dépend des perceptions. En effet, un message n'est rien
d'autre qu'un stimulus particulier qui contient beaucoup d'informations.
Un message est associé à un ou plusieurs Stimuli, ce qui permet de choisir
le médium (son, télépathie, etc) et l'intensité du message.
Il est donc possible de choisir sa façon de communiquer.

<sect>Des dialogues multilingues
<p>

<sect1>Langues différentes dans le jeu
<p>
Les créatures dans un monde n'ont pas forcément toutes le même langage ni la
même façon de s'exprimer.
Pour gérer la différence entre les langues, un attribut 'langue' est introduit
dans les messages.
A la réception d'un message, une créature vérifie d'abord qu'elle connaît la
langue dans laquelle est formulé ce message avant de pouvoir le lire. Si ce
n'est pas le cas, le contenu du message apparaîtra codé (et donc inintelligible)
au joueur ou au script/IA qui le reçoit.

Une créature peut néanmoins mémoriser un message qu'elle ne comprend pas
(problème de langues). Par contre, elle ne peut mémoriser un message si
elle ne possède pas le sens requis pour sa perception.

<sect1>Support multilingue pour les joueurs
<p>
Pour répondre à l'objectif d'avoir un jeu multilingue (anglais, français,
espagnol, allemand...) , il est nécessaire que les dialogues le soient aussi
dans la mesure du possible.
La solution consisterait à intégrer dans les messages la même version du texte
dans des langues différentes.
Ceci concernerait les messages émis par les bots mais aussi les textes des
alias des joueurs.

Ex.~: job -> ("What's your name?", "Comment t'appelles-tu~?", "Wie heisst du~?")

Les joueurs pourront ainsi lire les messages dans la version qu'ils désirent,
si elle est disponible, sinon ce sera la version par défaut (qui est toujours
disponible).
Par contre, ils n'auront bien entendu pas à formuler leurs messages en
plusieurs langues.
La représentation interne des mots clés standards (name, job...) restera
toujours la même mais il n'est pas exclu que ceux-ci soient traduis par
l'interface utilisateur. D'autres mots-clés doivent absolument être traduits en
plusieurs langues par les créateurs de monde ou les traducteurs.
L'exemple suivant montre bien la nécessité de traduire certains mots-clés~:

Exemple du boulanger en version anglaise~: 

<tscreen><verb>
        >Job
        Raoul: I am the baker.
        >baker
        Raoul: I cook breads, pies and cakes.
        >cakes
        Raoul: My cakes are the best of Midgaard.
</verb></tscreen>

En version française~:
<tscreen><verb>
        >Job
        Raoul: Je suis le boulanger.
        >boulanger
        Raoul: Je fait du pain, des tartes et des gâteaux.
        >gâteaux
        Raoul: Mes gâteaux sont les meilleurs de Midgaard.
</verb></tscreen>

Si les mots-clés <tscreen>baker</tscreen> et <tscreen>cakes</tscreen> ne sont
pas traduits, un joueur en version française aura du mal à faire progresser
la conversation~:"

<tscreen><verb>
        >Job
        Raoul: Je suis le boulanger.
        >boulanger
        Raoul: Je ne connais pas.
        >gâteaux
        Raoul: Je ne connais pas.
</verb></tscreen>

Ceci est piège dans lequel il ne faut pas tomber pour les traducteurs.

Précisons enfin pour éviter toute confusion, qu'un mot clé en français ne
signifie pas que la réponse sera uniquement en français et idem dans les autres
langues. Dans tous les cas la réponse doit rester multilingue pour que les
autres joueurs qui écoutent le message et qui utilisent une autre langue
puissent le comprendre.
En fait, il y aura juste un ensemble de mots-clés associé à un
ensemble de réponses (boulanger, baker)->("Je fait du pain, des tartes et des gâteaux.", "I cook breads, pies and cakes.")

<sect>Résumé
<p>
Les mots-clés standards (valables pour tous les bots)~:
<itemize>
<item>job = "What is your job?"~: requête de l'activité de la créature.
<item>name = "What is your name?"~: requête du nom de la créature.
<item>joker = refus de répondre à une question.
</itemize>

Les codes de contrôle~:
<itemize>
<item>NONE~: par défaut (aucune signification),
<item>ANS~: réponse,
<item>BAD_ANS~: réponse non valable,
<item>WRONG_ANS~: réponse fausse.
</itemize>

Les modificateurs d'expression~:
<itemize>
<item>OBSEQUIOUS
<item>POLITE
<item>NEUTRAL
<item>RUDE
<item>THREATENING
<item>INSULTING
<item>CHARMING
</itemize>


Un message est constitué de~:
<itemize>
<item>un attribut indiquant la langue,
<item>un attribut indiquant le (ou les) destinataire du message,
<item>un texte court interprétable par les bots,
<item>un texte long pour les joueurs disponible en plusieurs langues (dont une
langue par défaut au minimum),
<item>un code de contrôle.
</itemize>

Les commandes~:
<itemize>
<item>tell~: envoie un message à une ou plusieurs entités,
<item>talk~: ouvre un dialogue avec une ou plusieurs entités,
<item>bye~: ferme un dialogue,
<item>answer~: répond à une question.
</itemize>

</article>