<!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 >= 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 >= 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>