mirror of
https://github.com/evennia/evennia.git
synced 2026-03-19 06:16:31 +01:00
586 lines
No EOL
48 KiB
HTML
586 lines
No EOL
48 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
||
|
||
<title>Planning our tutorial game — Evennia 1.0-dev documentation</title>
|
||
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
|
||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||
<script src="../../../_static/jquery.js"></script>
|
||
<script src="../../../_static/underscore.js"></script>
|
||
<script src="../../../_static/doctools.js"></script>
|
||
<script src="../../../_static/language_data.js"></script>
|
||
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</script>
|
||
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
|
||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||
<link rel="search" title="Search" href="../../../search.html" />
|
||
</head><body>
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../../../genindex.html" title="General Index"
|
||
accesskey="I">index</a></li>
|
||
<li class="right" >
|
||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href="">Planning our tutorial game</a></li>
|
||
</ul>
|
||
<div class="develop">develop branch</div>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<section class="tex2jax_ignore mathjax_ignore" id="planning-our-tutorial-game">
|
||
<h1>Planning our tutorial game<a class="headerlink" href="#planning-our-tutorial-game" title="Permalink to this headline">¶</a></h1>
|
||
<p>Using the general plan from last lesson we’ll now establish what kind of game we want to create for this tutorial.
|
||
Remembering that we need to keep the scope down, let’s establish some parameters.
|
||
Note that for your own
|
||
game you don’t <em>need</em> to agree/adopt any of these. Many game-types need more or much less than this.
|
||
But this makes for good, instructive examples.</p>
|
||
<ul class="simple">
|
||
<li><p>To have something to refer to rather than just saying “our tutorial game” over and over, we’ll
|
||
name it … <em>EvAdventure</em>.</p></li>
|
||
<li><p>We want EvAdventure be a small game we can play ourselves for fun, but which could in principle be expanded
|
||
to something more later.</p></li>
|
||
<li><p>Let’s go with a fantasy theme, it’s well understood.</p></li>
|
||
<li><p>We’ll use some existing, simple RPG system.</p></li>
|
||
<li><p>We want to be able to create and customize a character of our own.</p></li>
|
||
<li><p>We want the tools to roleplay with other players.</p></li>
|
||
<li><p>We don’t want to have to rely on a Game master to resolve things, but will rely on code for skill resolution
|
||
and combat.</p></li>
|
||
<li><p>We want monsters to fight and NPCs we can talk to. So some sort of AI.</p></li>
|
||
<li><p>We want to be able to buy and sell stuff, both with NPCs and other players.</p></li>
|
||
<li><p>We want some sort of crafting system.</p></li>
|
||
<li><p>We want some sort of quest system.</p></li>
|
||
</ul>
|
||
<p>Let’s answer the questions from the previous lesson and discuss some of the possibilities.</p>
|
||
<section id="administration">
|
||
<h2>Administration<a class="headerlink" href="#administration" title="Permalink to this headline">¶</a></h2>
|
||
<section id="should-your-game-rules-be-enforced-by-coded-systems-by-human-game-masters">
|
||
<h3>Should your game rules be enforced by coded systems by human game masters?<a class="headerlink" href="#should-your-game-rules-be-enforced-by-coded-systems-by-human-game-masters" title="Permalink to this headline">¶</a></h3>
|
||
<p>Generally, the more work you expect human staffers/GMs to do, the less your code needs to work. To
|
||
support GMs you’d need to design commands to support GM-specific actions and the type of game-mastering
|
||
you want them to do. You may need to expand communication channels so you can easily
|
||
talk to groups people in private and split off gaming groups from each other. RPG rules could be as simple
|
||
as the GM sitting with the rule books and using a dice-roller for visibility.</p>
|
||
<p>GM:ing is work-intensive however, and even the most skilled and enthusiastic GM can’t be awake all hours
|
||
of the day to serve an international player base. The computer never needs sleep, so having the ability for
|
||
players to “self-serve” their RP itch when no GMs are around is a good idea even for the most GM-heavy games.</p>
|
||
<p>On the other side of the spectrum are games with no GMs at all; all gameplay are driven either by the computer
|
||
or by the interactions between players. Such games still need an active staff, but nowhere as much active
|
||
involvement. Allowing for solo-play with the computer also allows players to have fun when the number of active
|
||
players is low.</p>
|
||
<p>We want EvAdventure to work entirely without depending on human GMs. That said, there’d be nothing
|
||
stopping a GM from stepping in and run an adventure for some players should they want to.</p>
|
||
</section>
|
||
<section id="what-is-the-staff-hierarchy-in-your-game-is-vanilla-evennia-roles-enough-or-do-you-need-something-else">
|
||
<h3>What is the staff hierarchy in your game? Is vanilla Evennia roles enough or do you need something else?<a class="headerlink" href="#what-is-the-staff-hierarchy-in-your-game-is-vanilla-evennia-roles-enough-or-do-you-need-something-else" title="Permalink to this headline">¶</a></h3>
|
||
<p>The default hierarchy is</p>
|
||
<ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">Player</span></code> - regular players</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">Player</span> <span class="pre">Helper</span></code> - can create/edit help entries</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">Builder</span></code> - can use build commands</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">Admin</span></code> - can kick and ban accounts</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">Developer</span></code> - full access, usually also trusted with server access</p></li>
|
||
</ul>
|
||
<p>There is also the <em>superuser</em>, the “owner” of the game you create when you first set up your database. This user
|
||
goes outside the regular hierarchy and should usually only.</p>
|
||
<p>We are okay with keeping this structure for our game.</p>
|
||
</section>
|
||
<section id="should-players-be-able-to-post-out-of-characters-on-channels-and-via-other-means-like-bulletin-boards">
|
||
<h3>Should players be able to post out-of-characters on channels and via other means like bulletin-boards?<a class="headerlink" href="#should-players-be-able-to-post-out-of-characters-on-channels-and-via-other-means-like-bulletin-boards" title="Permalink to this headline">¶</a></h3>
|
||
<p>Evennia’s <em>Channels</em> are by default only available between <em>Accounts</em>. That is, for players to communicate with each
|
||
other. By default, the <code class="docutils literal notranslate"><span class="pre">public</span></code> channel is created for general discourse.
|
||
Channels are logged to a file and when you are coming back to the game you can view the history of a channel
|
||
in case you missed something.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>> public Hello world!
|
||
[Public] MyName: Hello world!
|
||
</pre></div>
|
||
</div>
|
||
<p>But Channels can also be set up to work between Characters instead of Accounts. This would mean the channels
|
||
would have an in-game meaning:</p>
|
||
<ul class="simple">
|
||
<li><p>Members of a guild could be linked telepathically.</p></li>
|
||
<li><p>Survivors of the apocalypse can communicate over walkie-talkies.</p></li>
|
||
<li><p>Radio stations you can tune into or have to discover.</p></li>
|
||
</ul>
|
||
<p><em>Bulletin boards</em> are a sort of in-game forum where posts are made publicly or privately. Contrary to a channel,
|
||
the messages are usually stored and are grouped into topics with replies. Evennia has no default bulletin-board
|
||
system.</p>
|
||
<p>In EvAdventure we will just use the default inter-account channels. We will also not be implementing any
|
||
bulletin boards.</p>
|
||
</section>
|
||
</section>
|
||
<section id="building">
|
||
<h2>Building<a class="headerlink" href="#building" title="Permalink to this headline">¶</a></h2>
|
||
<section id="how-will-the-world-be-built">
|
||
<h3>How will the world be built?<a class="headerlink" href="#how-will-the-world-be-built" title="Permalink to this headline">¶</a></h3>
|
||
<p>There are two main ways to handle this:</p>
|
||
<ul class="simple">
|
||
<li><p>Traditionally, from in-game with build-commands: This means builders creating content in their game
|
||
client. This has the advantage of not requiring Python skills nor server access. This can often be a quite
|
||
intuitive way to build since you are sort-of walking around in your creation as you build it. However, the
|
||
developer (you) must make sure to provide build-commands that are flexible enough for builders to be able to
|
||
create the content you want for your game.</p></li>
|
||
<li><p>Externally (by batchcmds): Evennia’s <code class="docutils literal notranslate"><span class="pre">batchcmd</span></code> takes a text file with Evennia Commands and executes them
|
||
in sequence. This allows the build process to be repeated and applied quickly to a new database during development.
|
||
It also allows builders to use proper text-editing tools rather than writing things line-by-line in their clients.
|
||
The drawback is that for their changes to go live they either need server access or they need to send their
|
||
batchcode to the game administrator so they can apply the changes. Or use version control.</p></li>
|
||
<li><p>Externally (with batchcode or custom code): This is the “professional game development” approach. This gives the
|
||
builders maximum power by creating the content in Python using Evennia primitives. The <code class="docutils literal notranslate"><span class="pre">batchcode</span></code> processor
|
||
allows Evennia to apply and re-apply build-scripts that are raw Python modules. Again, this would require the
|
||
builder to have server access or to use version control to share their work with the rest of the development team.</p></li>
|
||
</ul>
|
||
<p>In this tutorial, we will show examples of all these ways, but since we don’t have a team of builders we’ll
|
||
build the brunt of things using Evennia’s Batchcode system.</p>
|
||
</section>
|
||
<section id="can-only-privileged-builders-create-things-or-should-regular-players-also-have-limited-build-capability">
|
||
<h3>Can only privileged Builders create things or should regular players also have limited build-capability?<a class="headerlink" href="#can-only-privileged-builders-create-things-or-should-regular-players-also-have-limited-build-capability" title="Permalink to this headline">¶</a></h3>
|
||
<p>In some game styles, players have the ability to create objects and even script them. While giving regular users
|
||
the ability to create objects with in-built commands is easy and safe, actual code-creation (aka <em>softcode</em> ) is
|
||
not something Evennia supports natively. Regular, untrusted users should never be allowed to execute raw Python
|
||
code (such as what you can do with the <code class="docutils literal notranslate"><span class="pre">py</span></code> command). You can
|
||
<a class="reference internal" href="../../../Concepts/Soft-Code.html"><span class="doc std std-doc">read more about Evennia’s stance on softcode here</span></a>. If you want users to do limited scripting,
|
||
it’s suggested that this is accomplished by adding more powerful build-commands for them to use.</p>
|
||
<p>For our tutorial-game, we will only allow privileged builders to modify the world. The exception is crafting,
|
||
which we will limit to repairing broken items by combining them with other repair-related items.</p>
|
||
</section>
|
||
</section>
|
||
<section id="systems">
|
||
<h2>Systems<a class="headerlink" href="#systems" title="Permalink to this headline">¶</a></h2>
|
||
<section id="do-you-base-your-game-off-an-existing-rpg-system-or-make-up-your-own">
|
||
<h3>Do you base your game off an existing RPG system or make up your own?<a class="headerlink" href="#do-you-base-your-game-off-an-existing-rpg-system-or-make-up-your-own" title="Permalink to this headline">¶</a></h3>
|
||
<p>We will make use of <a class="reference external" href="http://www.geekguild.com/openadventure/">Open Adventure</a>, a simple ‘old school’ RPG-system
|
||
that is available for free under the Creative Commons license. We’ll only use a subset of the rules from
|
||
the blue “basic” book. For the sake of keeping down the length of this tutorial we will limit what features
|
||
we will include:</p>
|
||
<ul class="simple">
|
||
<li><p>Only two ‘archetypes’ (classes) - Arcanist (wizard) and Warrior, these are examples of two different play
|
||
styles.</p></li>
|
||
<li><p>Two races only (dwarves and elves), to show off how to implement races and race bonuses.</p></li>
|
||
<li><p>No extra features of the races/archetypes such as foci and special feats. While these are good for fleshing
|
||
out a character, these will work the same as other bonuses and are thus not that instructive.</p></li>
|
||
<li><p>We will add only a small number of items/weapons from the Open Adventure rulebook to show how it’s done.</p></li>
|
||
</ul>
|
||
</section>
|
||
<section id="what-are-the-game-mechanics-how-do-you-decide-if-an-action-succeeds-or-fails">
|
||
<h3>What are the game mechanics? How do you decide if an action succeeds or fails?<a class="headerlink" href="#what-are-the-game-mechanics-how-do-you-decide-if-an-action-succeeds-or-fails" title="Permalink to this headline">¶</a></h3>
|
||
<p>Open Adventure’s conflict resolution is based on adding a trait (such as Strength) with a random number in
|
||
order to beat a target. We will emulate this in code.</p>
|
||
<p>Having a “skill” means getting a bonus to that roll for a more narrow action.
|
||
Since the computer will need to know exactly what those skills are, we will add them more explicitly than
|
||
in the rules, but we will only add the minimum to show off the functionality we need.</p>
|
||
</section>
|
||
<section id="does-the-flow-of-time-matter-in-your-game-does-night-and-day-change-what-about-seasons">
|
||
<h3>Does the flow of time matter in your game - does night and day change? What about seasons?<a class="headerlink" href="#does-the-flow-of-time-matter-in-your-game-does-night-and-day-change-what-about-seasons" title="Permalink to this headline">¶</a></h3>
|
||
<p>Most commonly, game-time runs faster than real-world time. There are
|
||
a few advantages with this:</p>
|
||
<ul class="simple">
|
||
<li><p>Unlike in a single-player game, you can’t fast-forward time in a multiplayer game if you are waiting for
|
||
something, like NPC shops opening.</p></li>
|
||
<li><p>Healing and other things that we know takes time will go faster while still being reasonably ‘realistic’.</p></li>
|
||
</ul>
|
||
<p>The main drawback is for games with slower roleplay pace. While you are having a thoughtful roleplaying scene
|
||
over dinner, the game world reports that two days have passed. Having a slower game time than real-time is
|
||
a less common, but possible solution for such games.</p>
|
||
<p>It is however <em>not</em> recommended to let game-time exactly equal the speed of real time. The reason for this
|
||
is that people will join your game from all around the world, and they will often only be able to play at
|
||
particular times of their day. With a game-time drifting relative real-time, everyone will eventually be
|
||
able to experience both day and night in the game.</p>
|
||
<p>For this tutorial-game we will go with Evennia’s default, which is that the game-time runs two times faster
|
||
than real time.</p>
|
||
</section>
|
||
<section id="do-you-want-changing-global-weather-or-should-weather-just-be-set-manually-in-roleplay">
|
||
<h3>Do you want changing, global weather or should weather just be set manually in roleplay?<a class="headerlink" href="#do-you-want-changing-global-weather-or-should-weather-just-be-set-manually-in-roleplay" title="Permalink to this headline">¶</a></h3>
|
||
<p>A weather system is a good example of a game-global system that affects a subset of game entities
|
||
(outdoor rooms). We will not be doing any advanced weather simulation, but we’ll show how to do
|
||
random weather changes happening across the game world.</p>
|
||
</section>
|
||
<section id="do-you-want-a-coded-world-economy-or-just-a-simple-barter-system-or-no-formal-economy-at-all">
|
||
<h3>Do you want a coded world-economy or just a simple barter system? Or no formal economy at all?<a class="headerlink" href="#do-you-want-a-coded-world-economy-or-just-a-simple-barter-system-or-no-formal-economy-at-all" title="Permalink to this headline">¶</a></h3>
|
||
<p>We will allow for money and barter/trade between NPCs/Players and Player/Player, but will not care about
|
||
inflation. A real economic simulation could do things like modify shop prices based on supply and demand.
|
||
We will not go down that rabbit hole.</p>
|
||
</section>
|
||
<section id="do-you-have-concepts-like-reputation-and-influence">
|
||
<h3>Do you have concepts like reputation and influence?<a class="headerlink" href="#do-you-have-concepts-like-reputation-and-influence" title="Permalink to this headline">¶</a></h3>
|
||
<p>These are useful things for a more social-interaction heavy game. We will not include them for this
|
||
tutorial however.</p>
|
||
</section>
|
||
<section id="will-your-characters-be-known-by-their-name-or-only-by-their-physical-appearance">
|
||
<h3>Will your characters be known by their name or only by their physical appearance?<a class="headerlink" href="#will-your-characters-be-known-by-their-name-or-only-by-their-physical-appearance" title="Permalink to this headline">¶</a></h3>
|
||
<p>This is a common thing in RP-heavy games. Others will only see you as “The tall woman” until you
|
||
introduce yourself and they ‘recognize’ you with a name. Linked to this is the concept of more complex
|
||
emoting and posing.</p>
|
||
<p>Adding such a system from scratch is complex and way beyond the scope of this tutorial. However,
|
||
there is an existing Evennia contrib that adds all of this functionality and more, so we will
|
||
include that and explain briefly how it works.</p>
|
||
</section>
|
||
</section>
|
||
<section id="rooms">
|
||
<h2>Rooms<a class="headerlink" href="#rooms" title="Permalink to this headline">¶</a></h2>
|
||
<section id="is-a-simple-room-description-enough-or-should-the-description-be-able-to-change">
|
||
<h3>Is a simple room description enough or should the description be able to change?<a class="headerlink" href="#is-a-simple-room-description-enough-or-should-the-description-be-able-to-change" title="Permalink to this headline">¶</a></h3>
|
||
<p>Changing room descriptions for day and night, winder and summer is actually quite easy to do, but looks
|
||
very impressive. We happen to know there is also a contrib that helps with this, so we’ll show how to
|
||
include that.</p>
|
||
</section>
|
||
<section id="should-the-room-have-different-statuses">
|
||
<h3>Should the room have different statuses?<a class="headerlink" href="#should-the-room-have-different-statuses" title="Permalink to this headline">¶</a></h3>
|
||
<p>We will have different weather in outdoor rooms, but this will not have any gameplay effect - bow strings
|
||
will not get wet and fireballs will not fizzle if it rains.</p>
|
||
</section>
|
||
<section id="can-objects-be-hidden-in-the-room-can-a-person-hide-in-the-room">
|
||
<h3>Can objects be hidden in the room? Can a person hide in the room?<a class="headerlink" href="#can-objects-be-hidden-in-the-room-can-a-person-hide-in-the-room" title="Permalink to this headline">¶</a></h3>
|
||
<p>We will not model hiding and stealth. This will be a game of honorable face-to-face conflict.</p>
|
||
</section>
|
||
</section>
|
||
<section id="objects">
|
||
<h2>Objects<a class="headerlink" href="#objects" title="Permalink to this headline">¶</a></h2>
|
||
<section id="how-numerous-are-your-objects-do-you-want-large-loot-lists-or-are-objects-just-role-playing-props">
|
||
<h3>How numerous are your objects? Do you want large loot-lists or are objects just role playing props?<a class="headerlink" href="#how-numerous-are-your-objects-do-you-want-large-loot-lists-or-are-objects-just-role-playing-props" title="Permalink to this headline">¶</a></h3>
|
||
<p>Since we are not going for a pure freeform RPG here, we will want objects with properties, like weapons
|
||
and potions and such. Monsters should drop loot even though our list of objects will not be huge.</p>
|
||
</section>
|
||
<section id="is-each-coin-a-separate-object-or-do-you-just-store-a-bank-account-value">
|
||
<h3>Is each coin a separate object or do you just store a bank account value?<a class="headerlink" href="#is-each-coin-a-separate-object-or-do-you-just-store-a-bank-account-value" title="Permalink to this headline">¶</a></h3>
|
||
<p>Since we will use bartering, placing coin objects on one side of the barter makes for a simple way to
|
||
handle payments. So we will use coins as-objects.</p>
|
||
</section>
|
||
<section id="do-multiple-similar-objects-form-stacks-and-how-are-those-stacks-handled-in-that-case">
|
||
<h3>Do multiple similar objects form stacks and how are those stacks handled in that case?<a class="headerlink" href="#do-multiple-similar-objects-form-stacks-and-how-are-those-stacks-handled-in-that-case" title="Permalink to this headline">¶</a></h3>
|
||
<p>Since we’ll use coins, it’s practical to have them and other items stack together. While Evennia does not
|
||
do this natively, we will make use of a contrib for this.</p>
|
||
</section>
|
||
<section id="does-an-object-have-weight-or-volume-so-you-cannot-carry-an-infinite-amount-of-them">
|
||
<h3>Does an object have weight or volume (so you cannot carry an infinite amount of them)?<a class="headerlink" href="#does-an-object-have-weight-or-volume-so-you-cannot-carry-an-infinite-amount-of-them" title="Permalink to this headline">¶</a></h3>
|
||
<p>Limiting carrying weight is one way to stop players from hoarding. It also makes it more important
|
||
for players to pick only the equipment they need. Carrying limits can easily come across as
|
||
annoying to players though, so one needs to be careful with it.</p>
|
||
<p>Open Adventure rules include weight limits, so we will include them.</p>
|
||
</section>
|
||
<section id="can-objects-be-broken-can-they-be-repaired">
|
||
<h3>Can objects be broken? Can they be repaired?<a class="headerlink" href="#can-objects-be-broken-can-they-be-repaired" title="Permalink to this headline">¶</a></h3>
|
||
<p>Item breakage is very useful for a game economy; breaking weapons adds tactical considerations (if it’s not
|
||
too common, then it becomes annoying) and repairing things gives work for crafting players.</p>
|
||
<p>We wanted a crafting system, so this is what we will limit it to - repairing items using some sort
|
||
of raw materials.</p>
|
||
</section>
|
||
<section id="can-you-fight-with-a-chair-or-a-flower-or-must-you-use-a-special-weapon-kind-of-thing">
|
||
<h3>Can you fight with a chair or a flower or must you use a special ‘weapon’ kind of thing?<a class="headerlink" href="#can-you-fight-with-a-chair-or-a-flower-or-must-you-use-a-special-weapon-kind-of-thing" title="Permalink to this headline">¶</a></h3>
|
||
<p>Traditionally, only ‘weapons’ could be used to fight with. In the past this was a useful
|
||
simplification, but with Python classes and inheritance, it’s not actually more work to just
|
||
let all items in game work as a weapon in a pinch.</p>
|
||
<p>So for our game we will let a character use any item they want as a weapon. The difference will
|
||
be that non-weapon items will do less damage and also break and become unusable much quicker.</p>
|
||
</section>
|
||
<section id="will-characters-be-able-to-craft-new-objects">
|
||
<h3>Will characters be able to craft new objects?<a class="headerlink" href="#will-characters-be-able-to-craft-new-objects" title="Permalink to this headline">¶</a></h3>
|
||
<p>Crafting is a common feature in multiplayer games. In code it usually means using a skill-check
|
||
to combine base ingredients from a fixed recipe in order to create a new item. The classic
|
||
example is to combine <em>leather straps</em>, a <em>hilt</em>, a <em>pommel</em> and a <em>blade</em> to make a new <em>sword</em>.
|
||
A full-fledged crafting system could require multiple levels of crafting, including having to mine
|
||
for ore or cut down trees for wood.</p>
|
||
<p>In our case we will limit our crafting to repairing broken items. To show how it’s done, we will require
|
||
extra items (a recipe) in order to facilitate the repairs.</p>
|
||
</section>
|
||
<section id="should-mobs-npcs-have-some-sort-of-ai">
|
||
<h3>Should mobs/NPCs have some sort of AI?<a class="headerlink" href="#should-mobs-npcs-have-some-sort-of-ai" title="Permalink to this headline">¶</a></h3>
|
||
<p>A rule of adding Artificial Intelligence is that with today’s technology you should not hope to fool
|
||
anyone with it anytime soon. Unless you have a side-gig as an AI researcher, users will likely
|
||
not notice any practical difference between a simple state-machine and you spending a lot of time learning
|
||
how to train a neural net.</p>
|
||
<p>For this tutorial, we will show how to add a simple state-machine for monsters. NPCs will only be
|
||
shop-keepers and quest-gives so they won’t need any real AI to speak of.</p>
|
||
</section>
|
||
<section id="are-npcs-and-mobs-different-entities-how-do-they-differ">
|
||
<h3>Are NPCs and mobs different entities? How do they differ?<a class="headerlink" href="#are-npcs-and-mobs-different-entities-how-do-they-differ" title="Permalink to this headline">¶</a></h3>
|
||
<p>“Mobs” or “mobiles” are things that move around. This is traditionally monsters you can fight with, but could
|
||
also be city guards or the baker going to chat with the neighbor. Back in the day, they were often fundamentally
|
||
different these days it’s often easier to just make NPCs and mobs essentially the same thing.</p>
|
||
<p>In EvAdventure, both Monsters and NPCs will be the same type of thing; A monster could give you a quest
|
||
and an NPC might fight you as a mob as well as trade with you.</p>
|
||
</section>
|
||
<section id="should-there-be-npcs-giving-quests-if-so-how-do-you-track-quest-status">
|
||
<h3>_Should there be NPCs giving quests? If so, how do you track Quest status?<a class="headerlink" href="#should-there-be-npcs-giving-quests-if-so-how-do-you-track-quest-status" title="Permalink to this headline">¶</a></h3>
|
||
<p>We will design a simple quest system to track the status of ongoing quests.</p>
|
||
</section>
|
||
</section>
|
||
<section id="characters">
|
||
<h2>Characters<a class="headerlink" href="#characters" title="Permalink to this headline">¶</a></h2>
|
||
<section id="can-players-have-more-than-one-character-active-at-a-time-or-are-they-allowed-to-multi-play">
|
||
<h3>Can players have more than one Character active at a time or are they allowed to multi-play?<a class="headerlink" href="#can-players-have-more-than-one-character-active-at-a-time-or-are-they-allowed-to-multi-play" title="Permalink to this headline">¶</a></h3>
|
||
<p>Since Evennia differentiates between <code class="docutils literal notranslate"><span class="pre">Sessions</span></code> (the client-connection to the game), <code class="docutils literal notranslate"><span class="pre">Accounts</span></code>
|
||
and <code class="docutils literal notranslate"><span class="pre">Character</span></code>s, it natively supports multi-play. This is controlled by the <code class="docutils literal notranslate"><span class="pre">MULTISESSION_MODE</span></code>
|
||
setting, which has a value from <code class="docutils literal notranslate"><span class="pre">0</span></code> (default) to <code class="docutils literal notranslate"><span class="pre">3</span></code>.</p>
|
||
<ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">0</span></code>- One Character per Account and one Session per Account. This means that if you login to the same
|
||
account from another client you’ll be disconnected from the first. When creating a new account, a Character
|
||
will be auto-created with the same name as your Account. This is default mode and mimics legacy code bases
|
||
which had no separation between Account and Character.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">1</span></code> - One Character per Account, multiple Sessions per Account. So you can connect simultaneously from
|
||
multiple clients and see the same output in all of them.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">2</span></code> - Multiple Characters per Account, one Session per Character. This will not auto-create a same-named
|
||
Character for you, instead you get to create/choose between a number of Characters up to a max limit given by
|
||
the <code class="docutils literal notranslate"><span class="pre">MAX_NR_CHARACTERS</span></code> setting (default 1). You can play them all simultaneously if you have multiple clients
|
||
open, but only one client per Character.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">3</span></code> - Multiple Characters per Account, Multiple Sessions per Character. This is like mode 2, except players
|
||
can control each Character from multiple clients, seeing the same output from each Character.</p></li>
|
||
</ul>
|
||
<p>We will go with a multi-role game, so we will use <code class="docutils literal notranslate"><span class="pre">MULTISESSION_MODE=3</span></code> for this tutorial.</p>
|
||
</section>
|
||
<section id="how-does-the-character-generation-work">
|
||
<h3>How does the character-generation work?<a class="headerlink" href="#how-does-the-character-generation-work" title="Permalink to this headline">¶</a></h3>
|
||
<p>There are a few common ways to do character generation:</p>
|
||
<ul class="simple">
|
||
<li><p>Rooms. This is the traditional way. Each room’s description tells you what command to use to modify
|
||
your character. When you are done you move to the next room. Only use this if you have another reason for
|
||
using a room, like having a training dummy to test skills on, for example.</p></li>
|
||
<li><p>A Menu. The Evennia <em>EvMenu</em> system allows you to code very flexible in-game menus without needing to walk
|
||
between rooms. You can both have a step-by-step menu (a ‘wizard’) or allow the user to jump between the
|
||
steps as they please. This tends to be a lot easier for newcomers to understand since it doesn’t require
|
||
using custom commands they will likely never use again after this.</p></li>
|
||
<li><p>Questions. A fun way to build a character is to answer a series of questions. This is usually implemented
|
||
with a sequential menu.</p></li>
|
||
</ul>
|
||
<p>For the tutorial we will use a menu to let the user modify each section of their character sheet in any order
|
||
until they are happy.</p>
|
||
</section>
|
||
<section id="how-do-you-implement-different-classes-or-races">
|
||
<h3>How do you implement different “classes” or “races”?<a class="headerlink" href="#how-do-you-implement-different-classes-or-races" title="Permalink to this headline">¶</a></h3>
|
||
<p>The way classes and races work in most RPGs (as well as in OpenAdventure) is that they act as static ‘templates’
|
||
that inform which bonuses and special abilities you have. This means that all we need to store on the
|
||
Character is <em>which</em> class and <em>which</em> race they have; the actual logic can sit in Python code and just
|
||
be looked up when we need it.</p>
|
||
</section>
|
||
<section id="if-a-character-can-hide-in-a-room-what-skill-will-decide-if-they-are-detected">
|
||
<h3>If a Character can hide in a room, what skill will decide if they are detected?<a class="headerlink" href="#if-a-character-can-hide-in-a-room-what-skill-will-decide-if-they-are-detected" title="Permalink to this headline">¶</a></h3>
|
||
<p>Hiding means a few things.</p>
|
||
<ul class="simple">
|
||
<li><p>The Character should not appear in the room’s description / character list</p></li>
|
||
<li><p>Others hould not be able to interact with a hidden character. It’d be weird if you could do <code class="docutils literal notranslate"><span class="pre">attack</span> <span class="pre"><name></span></code>
|
||
or <code class="docutils literal notranslate"><span class="pre">look</span> <span class="pre"><name></span></code> if the named character is in hiding.</p></li>
|
||
<li><p>There must be a way for the person to come out of hiding, and probably for others to search or accidentally
|
||
find the person (probably based on skill checks).</p></li>
|
||
<li><p>The room will also need to be involved, maybe with some modifier as to how easy it is to hide in the room.</p></li>
|
||
</ul>
|
||
<p>We will <em>not</em> be including a hide-mechanic in EvAdventure though.</p>
|
||
</section>
|
||
<section id="what-does-the-skill-tree-look-like-can-a-character-gain-experience-to-improve-by-killing-enemies-solving-quests-by-roleplaying">
|
||
<h3>What does the skill tree look like? Can a Character gain experience to improve? By killing enemies? Solving quests? By roleplaying?<a class="headerlink" href="#what-does-the-skill-tree-look-like-can-a-character-gain-experience-to-improve-by-killing-enemies-solving-quests-by-roleplaying" title="Permalink to this headline">¶</a></h3>
|
||
<p>Gaining experience points (XP) and improving one’s character is a staple of roleplaying games. There are many
|
||
ways to implement this:</p>
|
||
<ul class="simple">
|
||
<li><p>Gaining XP from kills is very common; it’s easy to let a monster be ‘worth’ a certain number of XP and it’s
|
||
easy to tell when you should gain it.</p></li>
|
||
<li><p>Gaining XP from quests is the same - each quest is ‘worth’ XP and you get them when completing the test.</p></li>
|
||
<li><p>Gaining XP from roleplay is harder to define. Different games have tried a lot of different ways to do this:</p>
|
||
<ul>
|
||
<li><p>XP from being online - just being online gains you XP. This inflates player numbers but many players may
|
||
just be lurking and not be actually playing the game at any given time.</p></li>
|
||
<li><p>XP from roleplaying scenes - you gain XP according to some algorithm analyzing your emotes for ‘quality’,
|
||
how often you post, how long your emotes are etc.</p></li>
|
||
<li><p>XP from actions - you gain XP when doing things, anything. Maybe your XP is even specific to each action, so
|
||
you gain XP only for running when you run, XP for your axe skill when you fight with an axe etc.</p></li>
|
||
<li><p>XP from fails - you only gain XP when failing rolls.</p></li>
|
||
<li><p>XP from other players - other players can award you XP for good RP.</p></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<p>For EvAdventure we will use Open Adventure’s rules for XP, which will be driven by kills and quest successes.</p>
|
||
</section>
|
||
<section id="may-player-characters-attack-each-other-pvp">
|
||
<h3>May player-characters attack each other (PvP)?<a class="headerlink" href="#may-player-characters-attack-each-other-pvp" title="Permalink to this headline">¶</a></h3>
|
||
<p>Deciding this affects the style of your entire game. PvP makes for exciting gameplay but it opens a whole new
|
||
can of worms when it comes to “fairness”. Players will usually accept dying to an overpowered NPC dragon. They
|
||
will not be as accepting if they perceive another player is perceived as being overpowered. PvP means that you
|
||
have to be very careful to balance the game - all characters does not have to be exactly equal but they should
|
||
all be viable to play a fun game with. PvP does not only mean combat though. Players can compete in all sorts of ways, including gaining influence in
|
||
a political game or gaining market share when selling their crafted merchandise.</p>
|
||
<p>For the EvAdventure we will support both Player-vs-environment combat and turn-based PvP. We will allow players
|
||
to barter with each other (so potentially scam others?) but that’s the extent of it. We will focus on showing
|
||
off techniques and will not focus on making a balanced game.</p>
|
||
</section>
|
||
<section id="what-are-the-penalties-of-defeat-permanent-death-quick-respawn-time-in-prison">
|
||
<h3>What are the penalties of defeat? Permanent death? Quick respawn? Time in prison?<a class="headerlink" href="#what-are-the-penalties-of-defeat-permanent-death-quick-respawn-time-in-prison" title="Permalink to this headline">¶</a></h3>
|
||
<p>This is another big decision that strongly affects the mood and style of your game.</p>
|
||
<p>Perma-death means that once your character dies, it’s gone and you have to make a new one.</p>
|
||
<ul class="simple">
|
||
<li><p>It allows for true heroism. If you genuinely risk losing your character of two years to fight the dragon,
|
||
your triumph is an actual feat.</p></li>
|
||
<li><p>It limits the old-timer dominance problem. If long-time players dies occationally, it will open things
|
||
up for newcomers.</p></li>
|
||
<li><p>It lowers inflation, since the hoarded resources of a dead character can be removed.</p></li>
|
||
<li><p>It gives capital punishment genuine discouraging power.</p></li>
|
||
<li><p>It’s realistic.</p></li>
|
||
</ul>
|
||
<p>Perma-death comes with some severe disadvantages however.</p>
|
||
<ul class="simple">
|
||
<li><p>It’s impopular. Many players will just not play a game where they risk losing their beloved character
|
||
just like that.</p></li>
|
||
<li><p>Many players say they like the <em>idea</em> of permadeath except when it could happen to them.</p></li>
|
||
<li><p>It can limit roleplaying freedom and make people refuse to take any risks.</p></li>
|
||
<li><p>It may make players even more reluctant to play conflict-driving ‘bad guys’.</p></li>
|
||
<li><p>Game balance is much, much more important when results are “final”. This escalates the severity of ‘unfairness’
|
||
a hundred-fold. Things like bugs or exploits can also lead to much more server effects.</p></li>
|
||
</ul>
|
||
<p>For these reasons, it’s very common to do hybrid systems. Some tried variations:</p>
|
||
<ul class="simple">
|
||
<li><p>NPCs cannot kill you, only other players can.</p></li>
|
||
<li><p>Death is permanent, but it’s difficult to actually die - you are much more likely to end up being severely
|
||
hurt/incapacitated.</p></li>
|
||
<li><p>You can pre-pay ‘insurance’ to magically/technologically avoid actually dying. Only if don’t have insurance will
|
||
you die permanently.</p></li>
|
||
<li><p>Death just means harsh penalties, not actual death.</p></li>
|
||
<li><p>When you die you can fight your way back to life from some sort of afterlife.</p></li>
|
||
<li><p>You’ll only die permanently if you as a player explicitly allows it.</p></li>
|
||
</ul>
|
||
<p>For our tutorial-game we will not be messing with perma-death; instead your defeat will mean you will re-spawn
|
||
back at your home location with a fraction of your health.</p>
|
||
</section>
|
||
</section>
|
||
<section id="conclusions">
|
||
<h2>Conclusions<a class="headerlink" href="#conclusions" title="Permalink to this headline">¶</a></h2>
|
||
<p>Going through the questions has helped us get a little bit more of a feel for the game we want to do. There are
|
||
many other things we could ask ourselves, but if we can cover these points we will be a good way towards a complete,
|
||
playable game!</p>
|
||
<p>Before starting to code in earnest a good coder should always do an inventory of all the stuff they <em>don’t</em> need
|
||
to code themselves. So in the next lesson we will check out what help we have from Evennia’s <em>contribs</em>.</p>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
<div class="clearer"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
<div class="sphinxsidebarwrapper">
|
||
<p class="logo"><a href="../../../index.html">
|
||
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
||
</a></p>
|
||
<div id="searchbox" style="display: none" role="search">
|
||
<h3 id="searchlabel">Quick search</h3>
|
||
<div class="searchformwrapper">
|
||
<form class="search" action="../../../search.html" method="get">
|
||
<input type="text" name="q" aria-labelledby="searchlabel" />
|
||
<input type="submit" value="Go" />
|
||
</form>
|
||
</div>
|
||
</div>
|
||
<script>$('#searchbox').show(0);</script>
|
||
<p><h3><a href="../../../index.html">Table of Contents</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#">Planning our tutorial game</a><ul>
|
||
<li><a class="reference internal" href="#administration">Administration</a><ul>
|
||
<li><a class="reference internal" href="#should-your-game-rules-be-enforced-by-coded-systems-by-human-game-masters">Should your game rules be enforced by coded systems by human game masters?</a></li>
|
||
<li><a class="reference internal" href="#what-is-the-staff-hierarchy-in-your-game-is-vanilla-evennia-roles-enough-or-do-you-need-something-else">What is the staff hierarchy in your game? Is vanilla Evennia roles enough or do you need something else?</a></li>
|
||
<li><a class="reference internal" href="#should-players-be-able-to-post-out-of-characters-on-channels-and-via-other-means-like-bulletin-boards">Should players be able to post out-of-characters on channels and via other means like bulletin-boards?</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#building">Building</a><ul>
|
||
<li><a class="reference internal" href="#how-will-the-world-be-built">How will the world be built?</a></li>
|
||
<li><a class="reference internal" href="#can-only-privileged-builders-create-things-or-should-regular-players-also-have-limited-build-capability">Can only privileged Builders create things or should regular players also have limited build-capability?</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#systems">Systems</a><ul>
|
||
<li><a class="reference internal" href="#do-you-base-your-game-off-an-existing-rpg-system-or-make-up-your-own">Do you base your game off an existing RPG system or make up your own?</a></li>
|
||
<li><a class="reference internal" href="#what-are-the-game-mechanics-how-do-you-decide-if-an-action-succeeds-or-fails">What are the game mechanics? How do you decide if an action succeeds or fails?</a></li>
|
||
<li><a class="reference internal" href="#does-the-flow-of-time-matter-in-your-game-does-night-and-day-change-what-about-seasons">Does the flow of time matter in your game - does night and day change? What about seasons?</a></li>
|
||
<li><a class="reference internal" href="#do-you-want-changing-global-weather-or-should-weather-just-be-set-manually-in-roleplay">Do you want changing, global weather or should weather just be set manually in roleplay?</a></li>
|
||
<li><a class="reference internal" href="#do-you-want-a-coded-world-economy-or-just-a-simple-barter-system-or-no-formal-economy-at-all">Do you want a coded world-economy or just a simple barter system? Or no formal economy at all?</a></li>
|
||
<li><a class="reference internal" href="#do-you-have-concepts-like-reputation-and-influence">Do you have concepts like reputation and influence?</a></li>
|
||
<li><a class="reference internal" href="#will-your-characters-be-known-by-their-name-or-only-by-their-physical-appearance">Will your characters be known by their name or only by their physical appearance?</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#rooms">Rooms</a><ul>
|
||
<li><a class="reference internal" href="#is-a-simple-room-description-enough-or-should-the-description-be-able-to-change">Is a simple room description enough or should the description be able to change?</a></li>
|
||
<li><a class="reference internal" href="#should-the-room-have-different-statuses">Should the room have different statuses?</a></li>
|
||
<li><a class="reference internal" href="#can-objects-be-hidden-in-the-room-can-a-person-hide-in-the-room">Can objects be hidden in the room? Can a person hide in the room?</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#objects">Objects</a><ul>
|
||
<li><a class="reference internal" href="#how-numerous-are-your-objects-do-you-want-large-loot-lists-or-are-objects-just-role-playing-props">How numerous are your objects? Do you want large loot-lists or are objects just role playing props?</a></li>
|
||
<li><a class="reference internal" href="#is-each-coin-a-separate-object-or-do-you-just-store-a-bank-account-value">Is each coin a separate object or do you just store a bank account value?</a></li>
|
||
<li><a class="reference internal" href="#do-multiple-similar-objects-form-stacks-and-how-are-those-stacks-handled-in-that-case">Do multiple similar objects form stacks and how are those stacks handled in that case?</a></li>
|
||
<li><a class="reference internal" href="#does-an-object-have-weight-or-volume-so-you-cannot-carry-an-infinite-amount-of-them">Does an object have weight or volume (so you cannot carry an infinite amount of them)?</a></li>
|
||
<li><a class="reference internal" href="#can-objects-be-broken-can-they-be-repaired">Can objects be broken? Can they be repaired?</a></li>
|
||
<li><a class="reference internal" href="#can-you-fight-with-a-chair-or-a-flower-or-must-you-use-a-special-weapon-kind-of-thing">Can you fight with a chair or a flower or must you use a special ‘weapon’ kind of thing?</a></li>
|
||
<li><a class="reference internal" href="#will-characters-be-able-to-craft-new-objects">Will characters be able to craft new objects?</a></li>
|
||
<li><a class="reference internal" href="#should-mobs-npcs-have-some-sort-of-ai">Should mobs/NPCs have some sort of AI?</a></li>
|
||
<li><a class="reference internal" href="#are-npcs-and-mobs-different-entities-how-do-they-differ">Are NPCs and mobs different entities? How do they differ?</a></li>
|
||
<li><a class="reference internal" href="#should-there-be-npcs-giving-quests-if-so-how-do-you-track-quest-status">_Should there be NPCs giving quests? If so, how do you track Quest status?</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#characters">Characters</a><ul>
|
||
<li><a class="reference internal" href="#can-players-have-more-than-one-character-active-at-a-time-or-are-they-allowed-to-multi-play">Can players have more than one Character active at a time or are they allowed to multi-play?</a></li>
|
||
<li><a class="reference internal" href="#how-does-the-character-generation-work">How does the character-generation work?</a></li>
|
||
<li><a class="reference internal" href="#how-do-you-implement-different-classes-or-races">How do you implement different “classes” or “races”?</a></li>
|
||
<li><a class="reference internal" href="#if-a-character-can-hide-in-a-room-what-skill-will-decide-if-they-are-detected">If a Character can hide in a room, what skill will decide if they are detected?</a></li>
|
||
<li><a class="reference internal" href="#what-does-the-skill-tree-look-like-can-a-character-gain-experience-to-improve-by-killing-enemies-solving-quests-by-roleplaying">What does the skill tree look like? Can a Character gain experience to improve? By killing enemies? Solving quests? By roleplaying?</a></li>
|
||
<li><a class="reference internal" href="#may-player-characters-attack-each-other-pvp">May player-characters attack each other (PvP)?</a></li>
|
||
<li><a class="reference internal" href="#what-are-the-penalties-of-defeat-permanent-death-quick-respawn-time-in-prison">What are the penalties of defeat? Permanent death? Quick respawn? Time in prison?</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#conclusions">Conclusions</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<div role="note" aria-label="source link">
|
||
<!--h3>This Page</h3-->
|
||
<ul class="this-page-menu">
|
||
<li><a href="../../../_sources/Howto/Starting/Part2/Planning-The-Tutorial-Game.md.txt"
|
||
rel="nofollow">Show Page Source</a></li>
|
||
</ul>
|
||
</div><h3>Links</h3>
|
||
<ul>
|
||
<li><a href="https://www.evennia.com">Home page</a> </li>
|
||
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
|
||
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
||
<li>
|
||
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
||
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
||
<a href="https://evennia.blogspot.com/">Blog</a>
|
||
</li>
|
||
</ul>
|
||
<h3>Versions</h3>
|
||
<ul>
|
||
<li><a href="Planning-The-Tutorial-Game.html">1.0-dev (develop branch)</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../../../genindex.html" title="General Index"
|
||
>index</a></li>
|
||
<li class="right" >
|
||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href="">Planning our tutorial game</a></li>
|
||
</ul>
|
||
<div class="develop">develop branch</div>
|
||
</div>
|
||
<div class="footer" role="contentinfo">
|
||
© Copyright 2020, The Evennia developer community.
|
||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||
</div>
|
||
</body>
|
||
</html> |