mirror of
https://github.com/evennia/evennia.git
synced 2026-03-18 13:56:30 +01:00
425 lines
No EOL
26 KiB
HTML
425 lines
No EOL
26 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Building a mech tutorial — Evennia 0.9.5 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>
|
||
<link rel="shortcut icon" href="_static/favicon.ico"/>
|
||
<link rel="index" title="Index" href="genindex.html" />
|
||
<link rel="search" title="Search" href="search.html" />
|
||
<link rel="next" title="Python basic introduction" href="Python-basic-introduction.html" />
|
||
<link rel="prev" title="Tutorial World Introduction" href="Tutorial-World-Introduction.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="right" >
|
||
<a href="Python-basic-introduction.html" title="Python basic introduction"
|
||
accesskey="N">next</a> |</li>
|
||
<li class="right" >
|
||
<a href="Tutorial-World-Introduction.html" title="Tutorial World Introduction"
|
||
accesskey="P">previous</a> |</li>
|
||
<li class="nav-item nav-item-0"><a href="index.html">Evennia 0.9.5</a> »</li>
|
||
<li class="nav-item nav-item-1"><a href="Tutorials.html" accesskey="U">Tutorials</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href="">Building a mech tutorial</a></li>
|
||
</ul>
|
||
<div class="develop">develop branch</div>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<div class="section" id="building-a-mech-tutorial">
|
||
<h1>Building a mech tutorial<a class="headerlink" href="#building-a-mech-tutorial" title="Permalink to this headline">¶</a></h1>
|
||
<blockquote>
|
||
<div><p>This page was adapted from the article “Building a Giant Mech in Evennia” by Griatch, published in
|
||
Imaginary Realities Volume 6, issue 1, 2014. The original article is no longer available online,
|
||
this is a version adopted to be compatible with the latest Evennia.</p>
|
||
</div></blockquote>
|
||
<div class="section" id="creating-the-mech">
|
||
<h2>Creating the Mech<a class="headerlink" href="#creating-the-mech" title="Permalink to this headline">¶</a></h2>
|
||
<p>Let us create a functioning giant mech using the Python MUD-creation system Evennia. Everyone likes
|
||
a giant mech, right? Start in-game as a character with build privileges (or the superuser).</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@create</span><span class="o">/</span><span class="n">drop</span> <span class="n">Giant</span> <span class="n">Mech</span> <span class="p">;</span> <span class="n">mech</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Boom. We created a Giant Mech Object and dropped it in the room. We also gave it an alias <em>mech</em>.
|
||
Let’s describe it.</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@desc</span> <span class="n">mech</span> <span class="o">=</span> <span class="n">This</span> <span class="ow">is</span> <span class="n">a</span> <span class="n">huge</span> <span class="n">mech</span><span class="o">.</span> <span class="n">It</span> <span class="n">has</span> <span class="n">missiles</span> <span class="ow">and</span> <span class="n">stuff</span><span class="o">.</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Next we define who can “puppet” the mech object.</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@lock</span> <span class="n">mech</span> <span class="o">=</span> <span class="n">puppet</span><span class="p">:</span><span class="nb">all</span><span class="p">()</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This makes it so that everyone can control the mech. More mechs to the people! (Note that whereas
|
||
Evennia’s default commands may look vaguely MUX-like, you can change the syntax to look like
|
||
whatever interface style you prefer.)</p>
|
||
<p>Before we continue, let’s make a brief detour. Evennia is very flexible about its objects and even
|
||
more flexible about using and adding commands to those objects. Here are some ground rules well
|
||
worth remembering for the remainder of this article:</p>
|
||
<ul class="simple">
|
||
<li><p>The <a class="reference internal" href="Accounts.html"><span class="doc">Account</span></a> represents the real person logging in and has no game-world existence.</p></li>
|
||
<li><p>Any <a class="reference internal" href="Objects.html"><span class="doc">Object</span></a> can be puppeted by an Account (with proper permissions).</p></li>
|
||
<li><p><a class="reference external" href="Objects.html#characters">Characters</a>, <a class="reference external" href="Objects.html#rooms">Rooms</a>, and <a class="reference external" href="Objects.html#exits">Exits</a> are just
|
||
children of normal Objects.</p></li>
|
||
<li><p>Any Object can be inside another (except if it creates a loop).</p></li>
|
||
<li><p>Any Object can store custom sets of commands on it. Those commands can:</p>
|
||
<ul>
|
||
<li><p>be made available to the puppeteer (Account),</p></li>
|
||
<li><p>be made available to anyone in the same location as the Object, and</p></li>
|
||
<li><p>be made available to anyone “inside” the Object</p></li>
|
||
<li><p>Also Accounts can store commands on themselves. Account commands are always available unless
|
||
commands on a puppeted Object explicitly override them.</p></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<p>In Evennia, using the <code class="docutils literal notranslate"><span class="pre">@ic</span></code> command will allow you to puppet a given Object (assuming you have
|
||
puppet-access to do so). As mentioned above, the bog-standard Character class is in fact like any
|
||
Object: it is auto-puppeted when logging in and just has a command set on it containing the normal
|
||
in-game commands, like look, inventory, get and so on.</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@ic</span> <span class="n">mech</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>You just jumped out of your Character and <em>are</em> now the mech! If people look at you in-game, they
|
||
will look at a mech. The problem at this point is that the mech Object has no commands of its own.
|
||
The usual things like look, inventory and get sat on the Character object, remember? So at the
|
||
moment the mech is not quite as cool as it could be.</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@ic</span> <span class="o"><</span><span class="n">Your</span> <span class="n">old</span> <span class="n">Character</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>You just jumped back to puppeting your normal, mundane Character again. All is well.</p>
|
||
<blockquote>
|
||
<div><p>(But, you ask, where did that <code class="docutils literal notranslate"><span class="pre">@ic</span></code> command come from, if the mech had no commands on it? The
|
||
answer is that it came from the Account’s command set. This is important. Without the Account being
|
||
the one with the <code class="docutils literal notranslate"><span class="pre">@ic</span></code> command, we would not have been able to get back out of our mech again.)</p>
|
||
</div></blockquote>
|
||
<div class="section" id="arming-the-mech">
|
||
<h3>Arming the Mech<a class="headerlink" href="#arming-the-mech" title="Permalink to this headline">¶</a></h3>
|
||
<p>Let us make the mech a little more interesting. In our favorite text editor, we will create some new
|
||
mech-suitable commands. In Evennia, commands are defined as Python classes.</p>
|
||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
16
|
||
17
|
||
18
|
||
19
|
||
20
|
||
21
|
||
22
|
||
23
|
||
24
|
||
25
|
||
26
|
||
27
|
||
28
|
||
29
|
||
30
|
||
31
|
||
32
|
||
33
|
||
34
|
||
35
|
||
36
|
||
37
|
||
38</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># in a new file mygame/commands/mechcommands.py</span>
|
||
|
||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">Command</span>
|
||
|
||
<span class="k">class</span> <span class="nc">CmdShoot</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
||
<span class="sd">"""</span>
|
||
<span class="sd"> Firing the mech’s gun</span>
|
||
|
||
<span class="sd"> Usage:</span>
|
||
<span class="sd"> shoot [target]</span>
|
||
|
||
<span class="sd"> This will fire your mech’s main gun. If no</span>
|
||
<span class="sd"> target is given, you will shoot in the air.</span>
|
||
<span class="sd"> """</span>
|
||
<span class="n">key</span> <span class="o">=</span> <span class="s2">"shoot"</span>
|
||
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"fire"</span><span class="p">,</span> <span class="s2">"fire!"</span><span class="p">]</span>
|
||
|
||
<span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="s2">"This actually does the shooting"</span>
|
||
|
||
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
||
<span class="n">location</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span>
|
||
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
||
<span class="c1"># no argument given to command - shoot in the air</span>
|
||
<span class="n">message</span> <span class="o">=</span> <span class="s2">"BOOM! The mech fires its gun in the air!"</span>
|
||
<span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
|
||
<span class="k">return</span>
|
||
|
||
<span class="c1"># we have an argument, search for target</span>
|
||
<span class="n">target</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||
<span class="k">if</span> <span class="n">target</span><span class="p">:</span>
|
||
<span class="n">message</span> <span class="o">=</span> <span class="s2">"BOOM! The mech fires its gun at </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">target</span><span class="o">.</span><span class="n">key</span>
|
||
<span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
|
||
|
||
<span class="k">class</span> <span class="nc">CmdLaunch</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
||
<span class="c1"># make your own 'launch'-command here as an exercise!</span>
|
||
<span class="c1"># (it's very similar to the 'shoot' command above).</span>
|
||
</pre></div>
|
||
</td></tr></table></div>
|
||
<p>This is saved as a normal Python module (let’s call it <code class="docutils literal notranslate"><span class="pre">mechcommands.py</span></code>), in a place Evennia looks
|
||
for such modules (<code class="docutils literal notranslate"><span class="pre">mygame/commands/</span></code>). This command will trigger when the player gives the command
|
||
“shoot”, “fire,” or even “fire!” with an exclamation mark. The mech can shoot in the air or at a
|
||
target if you give one. In a real game the gun would probably be given a chance to hit and give
|
||
damage to the target, but this is enough for now.</p>
|
||
<p>We also make a second command for launching missiles (<code class="docutils literal notranslate"><span class="pre">CmdLaunch</span></code>). To save
|
||
space we won’t describe it here; it looks the same except it returns a text
|
||
about the missiles being fired and has different <code class="docutils literal notranslate"><span class="pre">key</span></code> and <code class="docutils literal notranslate"><span class="pre">aliases</span></code>. We leave
|
||
that up to you to create as an exercise. You could have it print “WOOSH! The
|
||
mech launches missiles against <target>!”, for example.</p>
|
||
<p>Now we shove our commands into a command set. A <a class="reference internal" href="Command-Sets.html"><span class="doc">Command Set</span></a> (CmdSet) is a container
|
||
holding any number of commands. The command set is what we will store on the mech.</p>
|
||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># in the same file mygame/commands/mechcommands.py</span>
|
||
|
||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">CmdSet</span>
|
||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">default_cmds</span>
|
||
|
||
<span class="k">class</span> <span class="nc">MechCmdSet</span><span class="p">(</span><span class="n">CmdSet</span><span class="p">):</span>
|
||
<span class="sd">"""</span>
|
||
<span class="sd"> This allows mechs to do do mech stuff.</span>
|
||
<span class="sd"> """</span>
|
||
<span class="n">key</span> <span class="o">=</span> <span class="s2">"mechcmdset"</span>
|
||
|
||
<span class="k">def</span> <span class="nf">at_cmdset_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="s2">"Called once, when cmdset is first created"</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdShoot</span><span class="p">())</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdLaunch</span><span class="p">())</span>
|
||
</pre></div>
|
||
</td></tr></table></div>
|
||
<p>This simply groups all the commands we want. We add our new shoot/launch commands. Let’s head back
|
||
into the game. For testing we will manually attach our new CmdSet to the mech.</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@py</span> <span class="bp">self</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">"mech"</span><span class="p">)</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"commands.mechcommands.MechCmdSet"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This is a little Python snippet (run from the command line as an admin) that searches for the mech
|
||
in our current location and attaches our new MechCmdSet to it. What we add is actually the Python
|
||
path to our cmdset class. Evennia will import and initialize it behind the scenes.</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@ic</span> <span class="n">mech</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>We are back as the mech! Let’s do some shooting!</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>fire!
|
||
BOOM! The mech fires its gun in the air!
|
||
</pre></div>
|
||
</div>
|
||
<p>There we go, one functioning mech. Try your own <code class="docutils literal notranslate"><span class="pre">launch</span></code> command and see that it works too. We can
|
||
not only walk around as the mech — since the CharacterCmdSet is included in our MechCmdSet, the mech
|
||
can also do everything a Character could do, like look around, pick up stuff, and have an inventory.
|
||
We could now shoot the gun at a target or try the missile launch command. Once you have your own
|
||
mech, what else do you need?</p>
|
||
<blockquote>
|
||
<div><p>Note: You’ll find that the mech’s commands are available to you by just standing in the same
|
||
location (not just by puppeting it). We’ll solve this with a <em>lock</em> in the next section.</p>
|
||
</div></blockquote>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="making-a-mech-production-line">
|
||
<h2>Making a Mech production line<a class="headerlink" href="#making-a-mech-production-line" title="Permalink to this headline">¶</a></h2>
|
||
<p>What we’ve done so far is just to make a normal Object, describe it and put some commands on it.
|
||
This is great for testing. The way we added it, the MechCmdSet will even go away if we reload the
|
||
server. Now we want to make the mech an actual object “type” so we can create mechs without those
|
||
extra steps. For this we need to create a new Typeclass.</p>
|
||
<p>A <a class="reference internal" href="Typeclasses.html"><span class="doc">Typeclass</span></a> is a near-normal Python class that stores its existence to the database
|
||
behind the scenes. A Typeclass is created in a normal Python source file:</p>
|
||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
16</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># in the new file mygame/typeclasses/mech.py</span>
|
||
|
||
<span class="kn">from</span> <span class="nn">typeclasses.objects</span> <span class="kn">import</span> <span class="n">Object</span>
|
||
<span class="kn">from</span> <span class="nn">commands.mechcommands</span> <span class="kn">import</span> <span class="n">MechCmdSet</span>
|
||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">default_cmds</span>
|
||
|
||
<span class="k">class</span> <span class="nc">Mech</span><span class="p">(</span><span class="n">Object</span><span class="p">):</span>
|
||
<span class="sd">"""</span>
|
||
<span class="sd"> This typeclass describes an armed Mech.</span>
|
||
<span class="sd"> """</span>
|
||
<span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="s2">"This is called only when object is first created"</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">add_default</span><span class="p">(</span><span class="n">default_cmds</span><span class="o">.</span><span class="n">CharacterCmdSet</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">MechCmdSet</span><span class="p">,</span> <span class="n">permanent</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"puppet:all();call:false()"</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="s2">"This is a huge mech. It has missiles and stuff."</span>
|
||
</pre></div>
|
||
</td></tr></table></div>
|
||
<p>For convenience we include the full contents of the default <code class="docutils literal notranslate"><span class="pre">CharacterCmdSet</span></code> in there. This will
|
||
make a Character’s normal commands available to the mech. We also add the mech-commands from before,
|
||
making sure they are stored persistently in the database. The locks specify that anyone can puppet
|
||
the meck and no-one can “call” the mech’s Commands from ‘outside’ it - you have to puppet it to be
|
||
able to shoot.</p>
|
||
<p>That’s it. When Objects of this type are created, they will always start out with the mech’s command
|
||
set and the correct lock. We set a default description, but you would probably change this with
|
||
<code class="docutils literal notranslate"><span class="pre">@desc</span></code> to individualize your mechs as you build them.</p>
|
||
<p>Back in the game, just exit the old mech (<code class="docutils literal notranslate"><span class="pre">@ic</span></code> back to your old character) then do</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@create</span><span class="o">/</span><span class="n">drop</span> <span class="n">The</span> <span class="n">Bigger</span> <span class="n">Mech</span> <span class="p">;</span> <span class="n">bigmech</span> <span class="p">:</span> <span class="n">mech</span><span class="o">.</span><span class="n">Mech</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>We create a new, bigger mech with an alias bigmech. Note how we give the python-path to our
|
||
Typeclass at the end — this tells Evennia to create the new object based on that class (we don’t
|
||
have to give the full path in our game dir <code class="docutils literal notranslate"><span class="pre">typeclasses.mech.Mech</span></code> because Evennia knows to look in
|
||
the <code class="docutils literal notranslate"><span class="pre">typeclasses</span></code> folder already). A shining new mech will appear in the room! Just use</p>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@ic</span> <span class="n">bigmech</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>to take it on a test drive.</p>
|
||
</div>
|
||
<div class="section" id="future-mechs">
|
||
<h2>Future Mechs<a class="headerlink" href="#future-mechs" title="Permalink to this headline">¶</a></h2>
|
||
<p>To expand on this you could add more commands to the mech and remove others. Maybe the mech
|
||
shouldn’t work just like a Character after all. Maybe it makes loud noises every time it passes from
|
||
room to room. Maybe it cannot pick up things without crushing them. Maybe it needs fuel, ammo and
|
||
repairs. Maybe you’ll lock it down so it can only be puppeted by emo teenagers.</p>
|
||
<p>Having you puppet the mech-object directly is also just one way to implement a giant mech in
|
||
Evennia.</p>
|
||
<p>For example, you could instead picture a mech as a “vehicle” that you “enter” as your normal
|
||
Character (since any Object can move inside another). In that case the “insides” of the mech Object
|
||
could be the “cockpit”. The cockpit would have the <code class="docutils literal notranslate"><span class="pre">MechCommandSet</span></code> stored on itself and all the
|
||
shooting goodness would be made available to you only when you enter it.</p>
|
||
<p>And of course you could put more guns on it. And make it fly.</p>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<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="#">Building a mech tutorial</a><ul>
|
||
<li><a class="reference internal" href="#creating-the-mech">Creating the Mech</a><ul>
|
||
<li><a class="reference internal" href="#arming-the-mech">Arming the Mech</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#making-a-mech-production-line">Making a Mech production line</a></li>
|
||
<li><a class="reference internal" href="#future-mechs">Future Mechs</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>Previous topic</h4>
|
||
<p class="topless"><a href="Tutorial-World-Introduction.html"
|
||
title="previous chapter">Tutorial World Introduction</a></p>
|
||
<h4>Next topic</h4>
|
||
<p class="topless"><a href="Python-basic-introduction.html"
|
||
title="next chapter">Python basic introduction</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<!--h3>This Page</h3-->
|
||
<ul class="this-page-menu">
|
||
<li><a href="_sources/Building-a-mech-tutorial.md.txt"
|
||
rel="nofollow">Show Page Source</a></li>
|
||
</ul>
|
||
</div>
|
||
<h3>Versions</h3>
|
||
<ul>
|
||
<li><a href="../1.0-dev/index.html">1.0-dev (develop branch)</a></li>
|
||
<li><a href="Building-a-mech-tutorial.html">0.9.5 (master 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="right" >
|
||
<a href="Python-basic-introduction.html" title="Python basic introduction"
|
||
>next</a> |</li>
|
||
<li class="right" >
|
||
<a href="Tutorial-World-Introduction.html" title="Tutorial World Introduction"
|
||
>previous</a> |</li>
|
||
<li class="nav-item nav-item-0"><a href="index.html">Evennia 0.9.5</a> »</li>
|
||
<li class="nav-item nav-item-1"><a href="Tutorials.html" >Tutorials</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href="">Building a mech tutorial</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> |