<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
 <!ENTITY copyrightDates '1999,2000,2001'>
 <!ENTITY % METACOSM SYSTEM "../en.metacosm.ent">
 %METACOSM;
]>

<article lang="EN">
  <articleinfo>
    <title>RFC - Dialogs specification</title>
    <corpauthor>&author;</corpauthor>
     <revhistory>
      <revision>
        <revnumber>1.5.1</revnumber>
        <date>April, 16th 2000</date>
        <authorinitials>Janselmeer</authorinitials>
        <revremark>Small change in the 'expression modifiers' section</revremark>
      </revision>
      <revision>
        <revnumber>1.4</revnumber>
        <date>April, 9th 2000</date>
        <authorinitials>Janselmeer</authorinitials>
        <revremark>Improvement section 5.2, addition of notes about
UI in sections 5.2 and 6.2, addition of expression modifiers</revremark>
      </revision>
      <revision>
        <revnumber>1.3</revnumber>
        <date>March, 30th 2000</date>
        <authorinitials>Janselmeer</authorinitials>
        <revremark>Conversion to metacosm-DTD</revremark>
      </revision>
      <revision>
        <revnumber>1.2</revnumber>
        <date>November, 21th 1999</date>
        <authorinitials>Janselmeer</authorinitials>
        <revremark>Addition of return codes and extension to dialogs between several creatures</revremark>
      </revision>
      <revision>
        <revnumber>1.1</revnumber>
        <date>November, 17th 1999</date>
        <authorinitials>Janselmeer</authorinitials>
        <revremark>Updates following discussions</revremark>
      </revision>
      <revision>
        <revnumber>1.0</revnumber>
        <date>July, 22th 1999</date>
        <authorinitials>Janselmeer</authorinitials>
        <revremark>First draft</revremark>
      </revision>
    </revhistory>
    <abstract>
      <simpara>This document describes the dialogs (and monologues too).</simpara>
    </abstract>
  </articleinfo>

&license;
&project;

<sect1>
<title>Notations</title>
  <para>Some terms are defined in the Vocabulary-RFC, which is available on the
  official web site.</para>

  <para>Concerning dialogs case, keywords can be entered in lowercase, in uppercase
  or even in mixed case without any problem.</para>
</sect1>

<sect1>
<title>Bots Query Mode</title>

  <sect2>
  <title>Bases</title>
    <para>Here the current subject is bots query mode specification.
    Query mode by keywords has been chosen. Each bot possesses a set of words,
    with which are associated answers.</para>

    <example>
    <title>A bot whose name is Raoul and who is a baker</title>
      <blockquote><para><screen>
        Name -> My name is Raoul.
        Job  -> I am the baker.
      </screen></para></blockquote>
    </example>

    <para>Each bot will have to answer the following keywords:
      <itemizedlist>
        <listitem><para>Name
        <listitem><para>Job
        <listitem><para>names of the creatures known by the bot
        <listitem><para>names of locations known by the bot
      </itemizedlist>
    </para>

    <para>Whereas the first two keywords are static, the following ones will be dynamic
    and will rely on bot memory. However, we have to nuance the staticity
    of the first two ones: a creature can lie or change job.</para>

    <example>
    <title>Raoul is a baker who lives in North Midgaard</title>
      <blockquote><para><screen>
        >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.
      </screen></para></blockquote>
    </example>

    <para>Keywords should also allow to move forward in a conversation:</para>
    <example>
    <title>Keywords in conversation</title>
      <blockquote><para><screen>
        >Job
        Raoul: I am the baker.
        >baker
        Raoul: I cook breads, pies and cakes.
        >cakes
        Raoul: My cakes are the best in Midgaard.
      </screen></para></blockquote>
    </example>

    <para>But they can also be used as the thread of a quest:</para>
    <example>
    <title>Keywords in a quest</title>
      <blockquote><para><screen>
         >treasure
         Old Pirate: I had a map but I sold it to an adventurer called Raoul.
         (...)
         >treasure
         Raoul: I have only half of the map. Robert has the other part.
         (...)
         >treasure
         Robert: I have the other part of the map.
      </screen></para></blockquote>
    </example>
  </sect2>

  <sect2>
  <title>Active Bots</title>
    <para>Until now, we considered bots as completely passive, only answering players
    queries. But there is no reason and to the contrary bots should be more
    active in conversation.</para>
    <para>They can propose discussion subjects (talk about the weather, local news),
    start a discussion with a passer-by (be it player or not), especially if
    the bot has something to sell.</para>

    <example>
    <title>Meeting with a guard</title>
      <para>A guard meet Janselmeer. He does not know who he is. So he is asking 
      Janselmeer.</para>
      <blockquote><para><screen>
                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.
      </screen></para></blockquote>
    </example>

    <para>Janselmeer can say his true name (1) or not (2). Both answers will be accepted 
    by the guard. Janselmeer will be known until that moment under the name 
    he gave (Janselmeer or Oumph) by this guard, and potentially by other 
    people in town.</para>

    <para>Now, let's take this example again but the guard already knows the name 
    of Janselmeer.</para>

    <example>
    <title>Meeting with a guard (2)</title>
      <blockquote><para><screen>
                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.
      </screen></para></blockquote>
    </example>

    <para>Here, the guard waited 'Janselmeer' as an answer. Any other answer, for
    instance 'Oumph', can be interpreted as a lie by the guard.</para>

    <para>This examples allows to touch two new aspects.
    First is the temporary addition of extra keywords. In the example above,
    it's Janselmeer which has been added.</para>

    <para>Second is the more interesting integration of player answers into the bot
    memory.  In the examples, the guard will remember that the name of the player
    is Janselmeer.  Of course, nothing prevents lying but the example shows
    incurred risks in a simplified way.</para>

    <para>It can happen that one does not wish to answer questions. In this case, a
    creature can use the keyword JOKER to mean it.</para>

    <para>The lack of an answer (after a limited time) could be considered as a refusal
    to communicate too.</para>

    <para>Players will generally use the second solution and bots the first one. 
    If players have to use JOKER, it would be better to alias it as "..." 
    (or something else) in the UI, that is more explicit.</para>
  </sect2>

  <sect2>
  <title>Communication between bots</title>
    <para>Let us apply what we previously defined to communication between 2 bots.
    Let us go over the guard example again.</para>
    <example>
    <title>Meeting with a guard (3)</title>
      <para>As seen by the player, it should give the following:</para>
      <blockquote><para><screen>
        Guard to Bot: What's your name, stranger?
        Bot to Guard: My name is Bot.
        Guard to Bot: I am watching you Bot.
      </screen></para></blockquote>
      <para>As seen by a bot:</para>
      <blockquote><para><screen>
        Guard to Bot: Name
        Bot to Guard: Bot
        Guard to Bot: ""
      </screen></para></blockquote>
    </example>

    <para>The main difficulty to achieve this is that the guard does not know that he
    talks to a bot. The one whom the guard talks to should be able to understand
    whether it is a bot or a player.</para>
    <para>In order to make sure he is understood, the guard must therefore speak to his
    interlocutor in a way understandable by players and non-players alike. Moreover,
    if there are other creatures who listen to the conversation, they will hence be
    able to understand too, whether they be bots or players.</para>
    <para>The solution that the example suggests is to integrate into a message both the
    short version interpretable by bots (corresponding to keywords), as well as a
    long version for players.</para>

    <example>
    <title>Meeting with a guard (4)</title>
      <para>As seen by the game:</para>
      <blockquote><para><screen>
        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.")
      </screen></para></blockquote>
    </example>

    <para>When a bot or a player sends a message which can not be understood or which
    does not need an answer, the short version will be empty. No processing will
    then be done in order to interpret the message. On the other hand, it could
    be repeated.</para>

    <example>
    <title>Meeting with a guard (5)</title>
      <para>As seen by the game:</para>
      <blockquote><para><screen>
        Guard: Now you die, Raoul!
        Message ("", "Now you die, Raoul!")
      </screen></para></blockquote>
    </example>

    <example>
    <title>The grocer</title>
      <blockquote><para><screen>
        Grocer: Look at my beautiful waterskins! Buy them!
(a priori destined only to players, unless bots are uncannily clever)
        Message ("", "Look at my beautiful waterskins! Buy them!")
      </screen></para></blockquote>
    </example>
  </sect2>

  <sect2>
  <title>Application to user interface level</title>
    <para>The player has two ways of sending messages:</para>

    <itemizedlist>
       <listitem>
         <para>classical</para>
         <example>
         <title>Where was Oumph?</title>
           <para>tell Oumph "Where have you been?"</para>
           <para>This will generate this message ("", "Where have you been?").
           It could not be understood by a non-player; however every creature is able to
           report the words that she hears (spy, gossip, etc).</para>
         </example>
       </listitem>
       <listitem>
         <para>with aliases</para>
         <example>
         <title>Oumph's job</title>
           <para>This will generate this message ("Job", "What's your job?") which can be
           understood by bots and players.</para>
           <para>An alias list will have to be implemented in the controller. The player will
           of course be able to modify them in his own way.</para>
           <para>If the alias does not exist, 'tell Oumph cloporte' will generate the message
           ("cloporte", "cloporte").</para>
        </example>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
  <title>Control codes</title>
    <para>In order that the bots could understand one another better, we add return codes
    NONE, ANS, WRONG_ANS and BAD_ANS. These codes are not readable by players and
    cannot be used directly by players either (the 'answer' commands will allow to
    send a message with the control code ANS). So the codes using is reserved to
    bots.</para>
   <para>NONE is the default control code. It does not mean anything. It is employed when
    no other control code is used.</para>
   <para>The code ANS means that the message is an answer to a previous question.</para>
   <para>WRONG_ANS is used to point out that the answer is regarded as wrong and
    deceitful. The interlocutor can therefore give another chance to say the truth
    (or rather what the bot considers as the truth), change topic of conversation
    or break the discussion with troublesome consequences (fight, reputation
    drop...).</para>
    <example>
    <title>A guard is questioning a player</title>
      <blockquote><para><screen>
        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)
        case 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.
        case 2:
          Guard: I'm watching you Oumph.
          ("", "I'm watching you Oumph.", NONE)
      </screen></para></blockquote>
    </example>

    <para>It is advisable to limit the number of possible tries...
    BAD_ANS marks that the answer is incorrect, inconsistent with the answer type
    which was expected.</para>

    <example>
    <title>A guard is approaching</title>
      <blockquote><para><screen>
        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)
      </screen></para></blockquote>
    </example>

    <para>A BAD_ANS code generated by a bot is a serious error in the game code or
    in the bot code. An error log must be made for debugging and correction.</para>
    <para>A BAD_ANS code generated by a player means a typo, a bad understanding of the
    question, a voluntary lie, a try at disturbing the bot, etc.</para>
    <para>The coder is free to make its bot react as she thinks best (polite and
    understanding, nervous and aggressive, etc). So the bot can repeat its question
    or not.</para>
    <note><para>the bot cannot and should not know whether it speaks to another bot or to
    a player. This is the reason why the number of BAD_ANS answers must be limited,
    in order to prevent buggy bots to induce infinite loops...</para></note>
  </sect2>

  <sect2>
  <title>Expression modifiers</title>
    <para>An Expression Modifier is a context information going with the message. This 
    information is relevant for the bot receiving the message and help him decide 
    how to react.</para>

    <para>For example, there are several ways to ask somebody its name:
      <itemizedlist>
        <listitem><para>polite: "Would you mind to tell me your name, please?"</para></listitem>
        <listitem><para>neutral: "What is your name?"</para></listitem>
        <listitem><para>insulting: "What is your name, alien scum?"</para></listitem>
      </itemizedlist>
    </para>

    <para>Each time, only the expression modifier changed.
    Below are the same messages understood by bots:
      <itemizedlist>
        <listitem><para>polite: (name, NONE, POLITE)</para></listitem>
        <listitem><para>neutral: (name, NONE, NEUTRAL)</para></listitem>
        <listitem><para>insulting: (name, NONE, INSULTING)</para></listitem>
      </itemizedlist>
    </para>

    <para>POLITE, NEUTRAL and INSULTING are Expression Modifiers.
    Here is a list of expression MODIFIERS:</para>

    <itemizedlist>
      <listitem><para>OBSEQUIOUS</para></listitem>
      <listitem><para>POLITE</para></listitem>
      <listitem><para>NEUTRAL</para></listitem>
      <listitem><para>RUDE</para></listitem>
      <listitem><para>THREATENING</para></listitem>
      <listitem><para>INSULTING</para></listitem>
      <listitem><para>CHARMING</para></listitem>
    </itemizedlist>

    <para>This list is not closed.</para>

    <para>The following example explains how Expression Modifiers could be used.
    Janselmeer meets Robert the butcher (Raoul's brother) and asks him about 
    Raoul the baker.</para>

    <example>
    <title>Expression modifiers</title>
      <blockquote><para><screen>
  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)
      </screen></para></blockquote>
    </example>

    <para>There is no obligation using an Expression Modifier whether another. It is a 
    pure matter of roleplay. Some people are used to be rude and some others are 
    used to be polite only because it is their way. But of course creatures may not
    have the same reaction with the first than with the second. It depends on them.
    For example, a lord is normally used to be talked obsequiously and may be 
    offended by someone that would act differently. So the choice of an expression 
    modifier depends on both the personality of the character that is speaking
    and the expected reaction of the character that is listening.</para>
  </sect2>

  <sect2>
  <title>Future extensions of bots language</title>
    <para>The keywords system has been chosen on grounds of simplicity of implementation.
    Nevertheless, this should evolve and lead towards a true dialog with complete
    sentences (subject, verb, complement).</para>
    <para>The first extension to keywords could be the use of interrogative pronouns and
    adverbs: what, who, where, why, how, how many, which, when.</para>

    <example>
    <title>Pronouns</title>
      <blockquote><para><screen>
        >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.
      </screen></para></blockquote>
    </example>
  </sect2>
</sect1>

<sect1>
<title>The various modes of verbal communication</title>
  <para>The content of this part can seem obvious but yet it is altogether essential.
  We distinguish two communication modes which are dialog and monologue, which
  will be used to different ends in the game.</para>

  <sect2>
  <title>The monologue</title>
    <para>What we call monologue is when a creature sends a self-supporting message and
    hence does not wait for an answer.</para>
    <para>This message can be intended for a creature in particular, but most of the time
    it is not specifically aimed.</para>

    <example>
    <title>A guard attacks Janselmeer</title>
      <blockquote><para><screen>
        Guard: Now you die, Janselmeer!
        A guard attacks Janselmeer.
      </screen></para></blockquote>
    </example>

    <para>This message is aimed merely to Janselmeer, but all creatures passing by can
    hear it.</para>

    <example>
    <title>A caravan arrives to the market place</title>
      <blockquote><para><screen>
        The caravan: The caravan has arrived! Look at my beautiful vegetables!
      </screen></para></blockquote>
    </example>

    <para>This message is intended for all creatures passing by.</para>

    <example>
    <title>Janselmeer has just bought something</title>
      <blockquote><para><screen>
        Janselmeer: That was my last silver...
      </screen></para></blockquote>
    </example>

    <para>The message is aimed to no one but can be heard by all present creatures (who
    will wonder about Janselmeer's health :).</para>

  <sect2>
  <title>The dialog</title>
    <para>
      <glosslist>
        <glossentry id="dialog">
          <glossterm>Dialog</glossterm>
          <glossdef>
            <para>The dialog is an information exchange by means of messages between two or more
            creatures.</para>
          </glossdef>
        </glossentry>
      </glosslist>
    </para>

    <para>It is carried out in connected mode, with a connection phase, a conversation
    phase and a disconnection phase.</para>
    <para>Let us see an instance of dialog: a tourist who asks his way to a passer-by.</para>

    <blockquote><para><screen>
        -connection phase:
  tourist: Please, sir...
  The passer-by stops
  passer-by: Yes?
  
  -conversation phase:
  tourist: I'm looking for the local camp site.
  passer-by: You turn to the left 500m from here, then go straight ahead
             to the fountain and then turn to the right.

        -disconnection phase:
  tourist: Thank you, have a nice day!
  passer-by: You're welcome.
    </screen></para></blockquote>

    <para>It's this kind of dialog which we will attempt to reproduce.
    A dialog unfolds in the following way:</para>

    <blockquote><para><screen>
    The C1 creature wants to talk to creatures C2, C3, ..., Cn.
    1- C1 asks to talk to C2, C3, ..., Cn.
    2- Some Ci accept the request, others decline it.
    3- C1 talks with the ones who have accepted.
    4- Those taking part in the conversation withdraw gradually. The last but one
    leave will put an end to the conversation.
    </screen></para></blockquote>

    <para>The advantage of a connected mode is to make the control of bots easier. For
    example, if one speaks to a bot which is moving, this bot will stop during the
    conversation (hence during the connection).</para>

    <para>The dialog should then be the privileged communication mode with bots.
    As soon as a dialog is opened, some actions are forbidden (as going away for
    instance). These actions automatically break the conversation.</para>
    <para>A dialog can be interrupted by an external event only if this one requires
    a mandatory reaction from a creature involved in the conversation. Such an event
    can be a fight for example.</para>

    <blockquote><para><screen>
           Tourist                      |             Passer-by
        -----------------------------------------------------------------------
  >talk passer-by                 |
  Tourist: Please sir...          | Tourist: Please sir...
                                  | A tourist wants to talk with you.
                                        | Do you accept? (Y/N)
          | >Y
        passer-by: Yes?...    | passer-by: Yes?...
  >tell passer-by "I'm looking    |
   for the local camp site."      | tourist: I'm looking for the local
                                        | camp site.
                                  | >tell tourist "You turn to the left
                                        |  500m from here, then go straight
                                        |  ahead to the fountain and then turn
                                        | to the right."
  passer-by: You turn to the left |
    500m from here, then go on    |
    straight ahead to the         |
    fountain and then turn to the |
    right.                        |
  tell passer-by bye    |
  Tourist: Thank you, have a nice |
    day!              | tourist: Thank you, have a nice day!
    </screen></para></blockquote>

    <para>This is worth noting that the command 'talk' allows dialog opening and that
    the keyword 'bye' puts an end to the conversation.</para>

    <para>Note too, that an UI can provide some shortcuts in the dialog. for example,
    it is not  needed to ask the players if they want to answer. It is possible 
    just let them answer if yes and do something else if no. In a similar fashion,
    to break the dialog, it should be enough just to do something else and not 
    to have to type bye.</para>

    <para>In order to open a dialog with more than one creature, one adds the names of
    the desired creatures in the parameters to 'talk', or one uses 'talk~all' in
    order to talk to all present creatures.</para>

    <example>
    <title>Hiring in a tavern</title>
      <blockquote><para><screen>
        Recruiter> talk all
        Recruiter: "I beg your attention, please."
        [To this stage, some listen, some others don't.]
        Recruiter: "I've got a job to offer, dangerous and underpaid."
        [Two or three creatures are still listening...]
        Recruiter: "3 silvers to go kill Skarkash."
        [Huge silence in the room]
        Recruiter: "Well, never mind!"
        Recruiter> bye
        Recruiter: "Thanks for your attention."
      </screen></para></blockquote>
    </example>

    <example>
    <title>Identity control in the street</title>
      <para>The guard is searching for an escaped elf prisoner.</para>
      <blockquote><para><screen>
        Guard> talk elf1 elf2
        Guard: "Hey you, and you!"
        Guard: "Give me your names!"
        Elf1: "Celeborn"
        Elf2: "Galadriel"
        Guard> bye
        Guard: "All right, move along."
      </screen></para></blockquote>
    </example>

    <note><para>this example shows the underlying coding difficulties. The sentence
    associated to a keyword depends on the language level of the one who speaks
    (politeness, elocution, etc), on its work, on the number of persons to which
    one speaks to, on the sex of these persons, etc.</para></note>
  </sect2>

  <sect2>
  <title>Messages and perception</title>
    <para>The dialog system depends on perceptions. A message is indeed nothing but a
    special stimulus which holds a lot of information. A message is associated to
    one or several stimuli, which makes it possible to choose the medium (sound,
    telepathy, etc) and the intensity of the message. So it is possible to choose
    one's means to communicate.</para
  </sect2>
</sect1>

<sect1>
<title>Multilingual dialogs</title>

  <sect2>
  <title>Various languages in the game</title>
    <para>Creatures in a given world do not have necessarily the same language nor the
    same way to express themselves.</para>
    <para>In order to manage the differences between languages, we introduce a 'language'
    attribute in messages.</para>
    <para>On receiving a message, a creature will have to verify that it knows the
    language in which this message is formulated, before being able to read it. If
    this is not the case, the message text will appear encrypted (and so
    unintelligible) to the player or to the script/AI which receives it.</para>

    <para>A creature can anyway memorize a message which it do not understand (language
    problem). To the contrary, it cannot memorize a message if it does not possess
    the sense required for the perception of the message.</para>
  </sect2>

  <sect2>
  <title>Multilingual support for players</title>
    <para>In order to face the objective of a multilingual game (English, French, Spanish,
    German...), it is required that dialogs be the same as much as we can.</para>
    <para>The solution would consist in integrating in the messages the same version of the
    text in various languages.</para>
    <para>It would concern messages sent by bots but also the texts of player aliases.</para>

    <example>
    <title>Multilingual example</title>
      <para>job -> ("What's your name?", "Comment t'appelles-tu~?", "Wie heisst du~?")</para>
    </example>

    <para>Therefore players could read messages from the desired version if this version is
    available, otherwise it will be the default version (which is always available).
    On the other hand, players will of course not have to formulate their messages in
    several languages.</para
    <para>The internal representation of standard keywords (name, job...) will always stay
    the same but it is not out of the question that these keywords be translated by
    the interface. Other keywords will definitely have to be translated in several
    languages by world creators or translators.</para>
    <para>The following example shows well the necessity of translating some keywords:</para>

    <example>
    <title>Example of the baker</title>
      <para>in English</para>
      <blockquote><para><screen>
        >Job
        Raoul: I am the baker.
        >baker
        Raoul: I cook breads, pies and cakes.
        >cakes
        Raoul: My cakes are the best in Midgaard.
      </screen></para></blockquote>

      <para>In French</para>
      <blockquote><para><screen>
        >Job
        Raoul: Je suis le boulanger.
        >boulanger
        Raoul: Je fais du pain, des tartes et des g&acirc;teaux.
        >gateaux
        Raoul: Mes g&acirc;teaux sont les meilleurs de Midgaard.
      </screen></para></blockquote>
    </example>

    <para>If we do not translate the keywords <screen>baker</screen> and <screen>cakes</screen>,
    a player in French version will have some trouble to advance in the conversation:</para>

    <example>
    <title>Bad translation</title>
      <blockquote><para><screen>
        >Job
        Raoul: Je suis le boulanger.
        >boulanger
        Raoul: Je ne connais pas.
        >gateaux.
        Raoul: Je ne connais pas.
      </screen></para></blockquote>
    </example>

    <para>This is a trap into which translators must not fall.</para>

    <para>Finally, we specify to avoid any misunderstanding, that a keyword in French does
    not mean that the answer will be merely in French, and ditto for other
    languages. In all events, the answer must remain multilingual so that the other
    players who listen to the message and who use another language, may understand.
    Actually, there will be only a set of keywords associated to a set of answers:</para>
    <blockquote><para><screen>
    (boulanger, baker)->("Je fais du pain, des tartes et des g&acirc;teaux.",
    "I cook breads, pies and cakes.")
    </screen></para></blockquote>
  </sect2>
</sect1>

<sect1>
<title>Summary</title>
  <para>Standard keywords (valid for all bots):</para>
  <para>
    <itemizedlist>
      <listitem><para>job = "What is your job?": request of the activity of the creature.</para></listitem>
      <listitem><para>name = "What is your name?": request of the name of the creature.</para></listitem>
      <listitem><para>joker = refusal of answering a question.</para></listitem>
    </itemizedlist>
  </para>

  <para>Control codes:</para>
  <para>
    <itemizedlist>
      <listitem><para>NONE: default (no signification).</para></listitem>
      <listitem><para>ANS: answer.</para></listitem>
      <listitem><para>BAD_ANS: not a valid answer.</para></listitem>
      <listitem><para>WRONG_ANS: wrong answer.</para></listitem>
     </itemizedlist>
  </para>


   <para>Expression modifiers:</para>
  <para>
    <itemizedlist>
      <listitem><para>OBSEQUIOUS</para></listitem>
      <listitem><para>POLITE</para></listitem>
      <listitem><para>NEUTRAL</para></listitem>
      <listitem><para>RUDE</para></listitem>
      <listitem><para>THREATENING</para></listitem>
      <listitem><para>INSULTING</para></listitem>
      <listitem><para>CHARMING</para></listitem>
    </itemizedlist>
  </para>


  <para>A messages consists in:</para>
  <para>
    <itemizedlist>
      <listitem><para>an attribute giving the language,</para></listitem>
      <listitem><para>an attribute giving the addressee(s) of the message,</para></listitem>
      <listitem><para>a short text interpretable by bots,</para></listitem>
      <listitem><para>a long text for players available in several languages (including at least
      a default language),</para></listitem>
      <listitem><para>a control code,</para></listitem>
      <listitem><para>an expression modifier.</para></listitem>
    </itemizedlist>
  </para>

  <para>Commands:</para>
  <para>
    <itemizedlist>
      <listitem><para>tell: sends a message to one or several entities.</para></listitem>
      <listitem><para>talk: opens a dialog with one or several entities.</para></listitem>
      <listitem><para>bye: closes a dialog.</para></listitem>
      <listitem><para>answer: answers to a question.</para></listitem>
    </itemizedlist>
  </para>

</article>