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

<article LANG="EN">
  <articleinfo>
   <title>RFC - Instance</title>
    <corpauthor>&author;</corpauthor>
    <revhistory>
      <revision>
        <revnumber>M1</revnumber>
        <date>July, 15th 2001</date>        
        <revremark>DocBook conversion, misc typos fixes, Properties and
  Predicates are now taken into account.</revremark>
      </revision>
      <revision>
        <revnumber>0.3</revnumber>
        <date>March 2001</date>        
        <authorinitials>Ruffy</authorinitials> 
        <revremark>Metacosm framework section</revremark>
      </revision>
      <revision>
        <revnumber>0.2</revnumber>
        <date>March 2001</date>        
        <authorinitials>Ruffy</authorinitials> 
        <revremark>"Horus birthday version" (corrections, examples)</revremark>
      </revision>
      <revision>
        <revnumber>0.1</revnumber>
        <date>January 2001</date>        
        <authorinitials>Janselmeer and Ruffy</authorinitials> 
        <revremark>First version</revremark>
      </revision>
    </revhistory>
    <abstract>
      <para>
        This document describes what is provided by the framework Metacosm and
        how to create your own game. It gives the great lines of the instanciation.
      </para>
    </abstract>
  </articleinfo>

&license;

&project;

<sect1>
<title>Metacosm framework</title>
<para>
You can see the Metacosm framework as a generic way to create an online
multiplayer RPG in a persistent world. It is independent of any game rule.
</para>

<para>
The Metacosm framework provides:
<itemizedlist>
<listitem><para>the server (network connections, protocol)</para></listitem>
<listitem><para>the world persistence</para></listitem>
<listitem><para>the administration module</para></listitem>
<listitem><para>the schedule system</para></listitem> <!-- its existence is not sure yet -->
<listitem><para>the perceptions system</para></listitem>
<listitem><para>the Interactions system (Actions)</para></listitem>
<listitem><para>the Entities system (Properties, Influences)</para></listitem>
<listitem><para>the game time </para></listitem>
<listitem><para>the game space (Places)</para></listitem>
<listitem><para>the random generator</para></listitem>
<listitem><para>the Quests system</para></listitem>
<listitem><para>the game editors: ActionsEditor, EntitiesEditor and QuestsEditor</para></listitem>
<listitem><para>some generic clients (text, 2D, 3D).</para></listitem>
</itemizedlist>
</para>
</sect1>

<sect1 id="working-list">
<title>Working list</title>
<para>The following list summarises the operations to do to obtain a Metacosm
instance.
</para>

<sect2 id="work-design">
<title>Design part</title>
<para>
<orderedlist>
<listitem><para>Define ideas/concepts of the new instance</para></listitem>
<listitem><para>Choose a name for your instance</para></listitem> <!-- code should be covered by GPL -->
<listitem><para>Extend your concept: add some background, to describe the world(s),
to clarify rules
<listitem><para>Define your rules.</para></listitem>
</orderedlist>
</para>
</sect2>

<sect2 id="work-instantiation">
<title>Instantiation</title>
<para>
<orderedlist>
<listitem><para>Create Properties and Entities</para></listitem>
<listitem><para>Create Predicates and Actions</para></listitem>
<listitem><para>Create Quests</para></listitem>
<listitem><para>Test, test and test</para></listitem>
<listitem><para>Write some documentation</para></listitem>
<listitem><para>Release (and enhance and release and ...)</para></listitem>
</orderedlist>
</para>

<para>
You can rely on <link linkend="basic-instance">Basic Instance</link> or not.
</para>
</sect2>
</sect1>

<sect1 id="design">
<title>Design part</title>
<para>You must have a fairly good idea of what you want before defining your
rules. 'Defining your rules' means choosing which attributes your world(s)
inhabitants, items, etc will have, which actions they could do, etc.
</para>

<example>
<title>Example</title>
<para>
In the StarWars(tm) RPG, rules are based on six face dice (D6). Each player
has some skills ( first aid, to pilot ships, to swim, to command, to dodge,
to astrogate, languages, blaster, etc), divided in six categories (dexterity,
knowledge, mechanics, perception, vigour, technique). They can be sensible to
the force or not. They are (or should be) heroes. Game rules also define ships
characteristics, E.T. powers, the fight Empire vs Alliance, etc.
To determine if an action is a success, dice are rolled and sum should be
greater than the difficulty factor. The more the sum is, the more you succeed.
</para>
</example>

<example>
<title>Example</title>
<para>
In the 'Mage: the Ascension' RPG, rules are based on ten face dice. Each
player has three physical attributes (strength, dexterity, vigour), three social
attributes (charisma, manipulation, appearance) and three mental attributes
(perception, intelligence, cunning). Skills are consciousness, intuition,
vigilance, driving, meditation, technology, law, riddles, computer science,
 sciences, etc. There are nine magics. Entelechy and willpower are really
important.
To determine if a magic action is a success, dice are rolled and dice greater
than the difficulty factor count as successes. The more successes you have, the
better you succeed. Dice equal to one are automatic failures and remove one
success. If the number of successes is zero, action failed. If the number of
successes is negative, action is catastrophic (or worse). 
</para>
</example>

<example>
<title>Dummy instance</title>
<para>
Basic rules could be to use a physical and an intellectual attributes
(values from 1 to 6, chosen with 1D6). For physical (respectively intellectual)
actions, you roll 1D6 and the result should be greater than the difficulty
factor. For fighting (resp. playing chess), each fighter (resp. player) adds 1D6
with its own physical (resp. intellectual) attribute; the greater wins.
</para>
</example>

<para>
After defining your rules, you should know which Properties are needed, which
Actions are possible and which Quests are allowed.
</para>

<para>
You won't have to define non-Action command (i.e. commands acting outside the
world, like 'help', 'quit' or 'about'). Metacosm should provide all such
commands. So you just have to define Action command (like 'swim', 'kill'
or 'steal').
</para>
</sect1>

<sect1 id="instantiation">
<title>Instantiation</title>
<para>Now it's time to make your ideas come to life.</para>

<sect2 id="create-properties-and-entities">
<title>Create Properties and Entities</title>
<para>
With the EntityEditor, you define which Properties and Influences Entities have
and which Influences are available. After defining that in general, you'll have
to create real Entities (instances) to fill your world(s).
</para>

<example>
<title>Dummy instance</title>
<para>
Each Entity contains two Properties, named Body and Brain
(unsigned integers, range (1,6), uniform distribution (1D6)).
There is only one Type: 'Human' which brings Body and Brain.
</example>
</sect2>

<sect2 id="create-predicates-and-actions">
<title>Create Predicates and Actions</title>
<para>
With the ActionEditor, you define Predicates and choose which Actions are allowed.
You'll have to code Actions if you want to use Actions not available in the
<link linkend="basic-instance">Basic Instance</link>.
</para>

<!-- create the AI? -->

<example>
<title>Dummy instance</title>
<para>
The 'swim' action is coded like that:
<blockquote>
<para>
perform( ..., where, ...)
{
  if (swimming in calm water)
    difficulty = 3
  else
    difficulty = 8

  if ( entity.Body + 1D6 < difficulty )
    entity sinks
  else
    entity swims
}
</para>
</blockquote>
(this is just a basic example, a 'real' swim action should take into account
members tied, possible equipment, possible amputations, drugs, ...)
</para>
</example>
</sect2>

<sect2 id="create-quests">
<title>Create Quests</title>
<para>
With the QuestsEditor, you add new instances for already defined Quests
patterns. It means defining when a type of Quest is possible, for who, etc.
</para>

<para>
Cf Quests-RFC for details about QuestsEditor
</para>

<example>
<title>Dummy instance</title>
<para>
Chess quest: requires entity.Brain &gt;= 4, success if an Action 'to play chess'
succeed against Gary Kasparov, reward is a chessboard in marble. This quest
can only be done one time.
Wrestle quest: requires entity.Body &gt;= 5, success if an Action 'to wrestle'
succeed against Hogar 'Hand Crusher', reward is a bodyguard job at the palace.
</para>
</example>
</sect2>

<sect2 id="tests">
<title>Test, test and test</title>
<para>
And have fun.
</para>
</sect2>

<sect2 id="documentation">
<title>Write some documentation</title>
<para>
You'll have to write doc, both for players (background and world(s) description,
how to play, etc) and developers/maintainers.
</para>
</sect2>

<sect2 id="release">
<title>Release (and enhance and release and ...)</title>
<para>
Now you're trapped: you'll lost your sleep, coding or playing.
And please don't forget to keep contact with us.
</para>
</sect2>
</sect1>

<sect1 id="basic-instance">
<title>Basic instance</title>
<para>
The 'basic instance' is an instance using predefined Attributes (Endurance,
Power, Coordination, Charisma, Intelligence, Will, Magic, Essence). It provides
some background and a world. Many Actions and Quests are already defined, based
these Attributes.  The 'Basic instance' is a RFC-based world (i.e. created using
examples coming from our RFC).
You are free to use it to base your own instance on. It's easier to enhance the
"basic instance" than to completely rewrite an instance. But you'll have to if
you want to use completely different Attributes.
</para>
</sect1>

</article>