mirror of
https://github.com/evennia/evennia.git
synced 2026-03-24 16:56:32 +01:00
New dev blog 2023-06-10
This commit is contained in:
parent
4ebe332687
commit
60207cd347
21 changed files with 6359 additions and 2761 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -12,8 +12,100 @@
|
|||
<script src="../javascripts/scale.fix.js">
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 1.0 released!: <br>
|
||||
<!--meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 2.0.0 released today: <p><img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Field_Hamois_Belgium_Luc_Viatour.jpg" alt="screenshot" />
|
||||
<br></p>
|
||||
<p>As part of our new use of <a href="https://semver.org/">semantic versioning</a>, Evennia
|
||||
2.0.0 was released today. Evennia is a Python <code>MU*</code> creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, <em>maybe</em>. It depends on your use-case. Read on.</p>
|
||||
<p>In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.</p>
|
||||
<h2>New version of the ExtendedRoom</h2>
|
||||
<p>The main thing that <em>may</em> be backwards income is the <code>ExtendedRoom</code> contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the <code>ExtendedRoom</code> contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.</p>
|
||||
<p>Here are the <a href="https://github.com/evennia/evennia/discussions/3200">new features</a>:</p>
|
||||
<ul>
|
||||
<li>All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The <code>season</code> and <code>time_of_day</code> are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.</li>
|
||||
<li>Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute <code>desc_<roomstate></code> to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
<code>desc</code> Attribute is used.</li>
|
||||
<li>In the old contrib, you could add special tags, like <code><morning>...</morning></code>
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The <code>ExtendedRoom</code> understands the new <code>state</code> inline function. This
|
||||
can be used with <em>any</em> room state (including seasons and time-of-day). For
|
||||
example: <code>$state(morning, The morning sun is shining in.)</code> or
|
||||
<code>$state(burning, This place is on fire!)</code>.</li>
|
||||
<li>The room still supports <code>details</code> - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.</li>
|
||||
<li>The <code>ExtendedRoom</code> now also has simple support for echoing random messages now
|
||||
and then to the room.</li>
|
||||
</ul>
|
||||
<p>Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.</p>
|
||||
<p>Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the <code>ExtendedRoom</code> contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.</p>
|
||||
<h2>More on the Beginner Tutorial</h2>
|
||||
<p>Most of my time has been spent continuing to work on the new <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html">Beginner Tutorial</a>. Notably on <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html">part three</a>, where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on</p>
|
||||
<ul>
|
||||
<li>Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
<em>Knave</em> TTRPG ruleset).</li>
|
||||
<li>Organizing Player Character data, and character generation.</li>
|
||||
<li>In-game objects and items.</li>
|
||||
<li>Handling equipment and weapons.</li>
|
||||
<li>In-game rooms.</li>
|
||||
<li>Non-player characters.</li>
|
||||
<li>Two types of Combat systems (Twitch-based and Turn based).</li>
|
||||
</ul>
|
||||
<p>TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.</p>
|
||||
<h2>A truckload of new features!</h2>
|
||||
<p>As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.</p>
|
||||
<ul>
|
||||
<li><code>Containers</code> - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).</li>
|
||||
<li>The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).</li>
|
||||
<li>New <code>logger.delete_log</code> method for deleting log files from inside the server (aMiss-aWry).</li>
|
||||
<li>For those intending to override the <code>SessionHandler</code>, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).</li>
|
||||
<li>New <code>create_channel(attr=...)</code> keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in <code>settings.DEFAULT_CHANNELS</code> (me)</li>
|
||||
<li>Attributes will now properly save Python <code>deques</code> with <code>maxlen=...</code> set (me).</li>
|
||||
<li><a href="https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty"><code>TagCategoryProperty</code></a> - A new way to define tags with a particular category on a class at creation-time, without having to do so in the <code>at_object_creation</code> method (me).</li>
|
||||
<li>A lot of bug fixes; <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html">see the CHANGELOG</a> for all the details!</li>
|
||||
</ul>
|
||||
<h2>Continuing</h2>
|
||||
<p>Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the <a href="https://discord.gg/AJJpcRUhtF">evennia discord</a>, which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.</p>
|
||||
<p>In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)</p>
|
||||
<p>Have a nice summer!</p>
|
||||
...
|
||||
---
|
||||
Evennia is a modern Python library and server for creating text-based
|
||||
|
|
@ -49,6 +141,22 @@
|
|||
<div class="devblog-calendar">
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<a href="2023.html"> 2023 (1)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 2.0.0 released today</span>
|
||||
<a href="2023.html#2023-06-10-evennia-2.0.0-released-today"> Evennia 2.0.0 rel...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2022.html"> 2022 (4)
|
||||
|
||||
|
|
@ -56,26 +164,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!">Dec 3
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!"> Evennia 1.0 relea...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two">Sep 17
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two"> Project plans and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore">Jul 5
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore"> Tutorial-writing ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans">Jan 6
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans"> Into 2022 with th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -90,20 +198,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!">Nov 18
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!"> The blog moved!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?">Mar 21
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?"> Where do I begin?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!">Jan 1
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!"> Happy New Years 2...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -118,20 +226,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Nov 14
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Evennia 0.9.5 rele...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">Oct 20
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">On using Markdown ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Apr 14
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Spring updates whi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -146,44 +254,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Blackifying and fi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Jul 4
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Evennia 0.9 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">May 26
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">May 18
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">Podcast about Even...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Apr 25
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Steaming on Eating...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-01-02-into-2019">Jan 2
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<a href="2019.html#2019-01-02-into-2019">Into 2019
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -198,26 +306,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Evennia 0.8 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Aug 18
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Inline building in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Jan 27
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Kicking into gear ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff">Jan 5
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff"> New year, new stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -232,38 +340,38 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Oct 29
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Getting a MUD RP s...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Oct 1
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Evennia in Hacktob...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Sep 20
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Evennia 0.7 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app">Aug 25
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app"> Renaming Django's...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">Apr 23
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">The luxury of a cr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">News items from th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -278,44 +386,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Nov 30
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Birthday retrospec...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Oct 13
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Season of fixes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">Jul 1
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">The art of sharing...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">May 31
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">Evennia in Pictures
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!">May 22
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!"> Evennia 0.6!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Mar 24
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Technical stuff ha...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Feb 14
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Climbing up Branches
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -330,80 +438,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">Dec 17
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">A summary of a year
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!">Nov 12
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!"> MIT uses Evennia!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Oct 11
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Illustrations and ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-02-emoting-system">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<a href="2015.html#2015-10-02-emoting-system">Emoting System
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`">Sep 29
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`"> Evennia on `podca...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Sep 24
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Pushing through a ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">Aug 27
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">A wagon load of po...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve"">Jun 22
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve""> Announcing the Ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-15-need-your-help!">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<a href="2015.html#2015-06-15-need-your-help!"> Need your help!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-30-dreaming-big?">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<a href="2015.html#2015-05-30-dreaming-big?"> Dreaming big?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-11-things-goin-on">May 11
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<a href="2015.html#2015-05-11-things-goin-on">Things goin on
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">Documenting Python...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Jan 19
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Building Django pr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -418,44 +526,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Slowly moving thro...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Aug 4
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Dance my puppets
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Jun 30
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Webby stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Bringing back Pyth...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1">May 16
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1"> Imaginary Realiti...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Feb 8
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Moving from Google...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Jan 24
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Looking forwards a...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -470,32 +578,32 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Dec 16
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Imaginary Realitie...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Nov 28
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Out of band mergings
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">Oct 22
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">A list of Evennia ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-05-13-one-to-many">May 13
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<a href="2013.html#2013-05-13-one-to-many">One to Many
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Jan 29
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Churning behind th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -510,80 +618,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Oct 28
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Evennia changes to...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-05-community-interest">Oct 5
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<a href="2012.html#2012-10-05-community-interest">Community interest
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Aug 31
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Combining Twisted ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-16-taking-command">Aug 16
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<a href="2012.html#2012-08-16-taking-command">Taking command
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Jun 26
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Extending time and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Jun 11
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Coding from the in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things"> Dummies doing (ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Mar 26
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Shortcuts to goodn...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Feb 22
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Dummies doing dumm...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Feb 17
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Commands and you
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-...">Feb 15
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-..."> Such a small thin...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">About this dev blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks"> Evennia's open bo...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -633,30 +741,14 @@
|
|||
<p>Thanks also to the other authors who penned some very interesting articles. Great job guys!</p>
|
||||
<p>My impressions:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>KaVir elaborates in <em>A modern interface for a modern MUD</em> on the advantages of not sticking with an outdated UI just for the sake of it. Adding a more accessible presentation is not that hard and won't ruin your game but rather help it. Whereas I have read his argument about this before, this is a good summary to take to heart. Evennia's javascript web client is currently mainly a telnet clone; there's a lot of things we could offer to make it easier for users to offer a more graphical presentation.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Molly O’Hara, in her <em>A well built zone is a work of art,</em> outlines a list of useful things to keep in mind when designing a zone. While some of these vary with game type, others do not. I like the suggestion that scripting bugs need not be the most important aspect - syntactic errors can be handled by automated means as long as the design aspect of the zone is solid.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><em>A journey through Paradice</em> [sic] is Matthew Chaplain's entry on designing a dice-roller using the telnet protocol. Some interesting things here, including making creative use of the telnet character-mode and VT100 control sequences. This ties a bit into KaVir's article, in that the interface used for "modern" MUDs are often voefully missing out on a lot of possibilities.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><em>Blind accessibility: challenges and opportunities</em> by Matthew “Chaos” Sheahan, is based on interviews with a blind mudder and a game admin having implemented lots of support for seeing-impaired players. This was a really interesting article since I've been pondering myself what could be done from Evennia's core side to help players support players using screen readers. Most seem to be down to configuration options though, and avoiding making colour or ascii art the only sources of information. These are all things Evennia devs implement depend on their game. We may offer some good contribs to build from though.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><em>Evennia: an introduction -</em> this is mine. It not-so-briefly sums up stuff about Evennia and the more important systems it relies on.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><em>Getting a roleplaying scene going</em> - another article of mine. This is a light-hearted list of tropes for getting a RP scene going on an RP-mud. It's based on things I've tried or seen myself in play.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Darcie “Natilena” Laur laments on the often opaque newbie guides in <em>Introducing new players and redesigning MUD School.</em> It describes how she tested (and improved) her own MUD's starter area while testing it on her kids. It made me think more on having Evennia offering easier ways to dump text logs in all sorts of situations. And we find out that kids have the attention span of zombie squirrels - something new learned every day!</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, <em>The Hunger Game, or how I learned to break the ship from the bottle</em> is Michael “Drakkos” Heron's epic about his journey developing and releasing his zombie-survival MUD <em>Epitaph.</em> Drakkos is a frequent blogger on the MUD-planet feed, so I knew some of this already, but it's a good read and contains some useful warnings and things-to-think-of for those thinking of starting their own MUD project. We already give some of the same advice (albeit with fewer words) in our wiki but I'm seriously considering linking to Drakkos post from there as well - it gives a more comprehensive treatment and offers a real-world example of the long road to a released game.</p>
|
||||
</li>
|
||||
<li>KaVir elaborates in <em>A modern interface for a modern MUD</em> on the advantages of not sticking with an outdated UI just for the sake of it. Adding a more accessible presentation is not that hard and won't ruin your game but rather help it. Whereas I have read his argument about this before, this is a good summary to take to heart. Evennia's javascript web client is currently mainly a telnet clone; there's a lot of things we could offer to make it easier for users to offer a more graphical presentation.</li>
|
||||
<li>Molly O’Hara, in her <em>A well built zone is a work of art,</em> outlines a list of useful things to keep in mind when designing a zone. While some of these vary with game type, others do not. I like the suggestion that scripting bugs need not be the most important aspect - syntactic errors can be handled by automated means as long as the design aspect of the zone is solid.</li>
|
||||
<li><em>A journey through Paradice</em> [sic] is Matthew Chaplain's entry on designing a dice-roller using the telnet protocol. Some interesting things here, including making creative use of the telnet character-mode and VT100 control sequences. This ties a bit into KaVir's article, in that the interface used for "modern" MUDs are often voefully missing out on a lot of possibilities.</li>
|
||||
<li><em>Blind accessibility: challenges and opportunities</em> by Matthew “Chaos” Sheahan, is based on interviews with a blind mudder and a game admin having implemented lots of support for seeing-impaired players. This was a really interesting article since I've been pondering myself what could be done from Evennia's core side to help players support players using screen readers. Most seem to be down to configuration options though, and avoiding making colour or ascii art the only sources of information. These are all things Evennia devs implement depend on their game. We may offer some good contribs to build from though.</li>
|
||||
<li><em>Evennia: an introduction -</em> this is mine. It not-so-briefly sums up stuff about Evennia and the more important systems it relies on.</li>
|
||||
<li><em>Getting a roleplaying scene going</em> - another article of mine. This is a light-hearted list of tropes for getting a RP scene going on an RP-mud. It's based on things I've tried or seen myself in play.</li>
|
||||
<li>Darcie “Natilena” Laur laments on the often opaque newbie guides in <em>Introducing new players and redesigning MUD School.</em> It describes how she tested (and improved) her own MUD's starter area while testing it on her kids. It made me think more on having Evennia offering easier ways to dump text logs in all sorts of situations. And we find out that kids have the attention span of zombie squirrels - something new learned every day!</li>
|
||||
<li>Finally, <em>The Hunger Game, or how I learned to break the ship from the bottle</em> is Michael “Drakkos” Heron's epic about his journey developing and releasing his zombie-survival MUD <em>Epitaph.</em> Drakkos is a frequent blogger on the MUD-planet feed, so I knew some of this already, but it's a good read and contains some useful warnings and things-to-think-of for those thinking of starting their own MUD project. We already give some of the same advice (albeit with fewer words) in our wiki but I'm seriously considering linking to Drakkos post from there as well - it gives a more comprehensive treatment and offers a real-world example of the long road to a released game.</li>
|
||||
</ul>
|
||||
<p>The issue also contains a call to help recover old MUDing resources that has gone offline since their heyday. Having browsed through the classic MUD-dev mailing list archives I can agree they are not quite as easily searchable as could be hoped. It would also be great to see the old comment posts tied to the articles of the old <em>Imaginary Realities</em> articles, if those could be found somehow.</p>
|
||||
<p>This is actually one thing which I do miss with this first Imaginary Realities issue - a way for readers to comment on the articles. This would likely mean a much higher level of complexity and work though, so I can certainly see why it's not there - using the existing MUD forums is probably enough for now.</p>
|
||||
|
|
@ -680,21 +772,11 @@
|
|||
<p><a href="https://4.bp.blogspot.com/-RcZi6McnLtc/Upd90AEpnTI/AAAAAAAACHA/ALGE2Ompi6k/s1600/FS-0609-Merger-1.jpg"><img src="https://4.bp.blogspot.com/-RcZi6McnLtc/Upd90AEpnTI/AAAAAAAACHA/ALGE2Ompi6k/s200/FS-0609-Merger-1.jpg" alt="" /></a></p>
|
||||
<p>As of today the development repository of Evennia, which has been brewing for a few months now, merged into the main repository. This update grew from one experimental feature to a relatively big update in the end. Together with the "many-character-per-player" feature released earlier, this update covers all the stuff I talked about in my <a href="http://evennia.blogspot.se/2013/01/churning-behind-scenes.html">Behind the Scenes</a> blog post.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Evennia's webserver was moved from <em>Portal</em> to <em>Server</em>. This moves all database-modifying operations into the same process and neatly avoids race conditions when modifying a game world from various interfaces.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The OOB (Out Of Band) handler was implemented. This goes together with a protocol for telnet sub-negotiations according to the <a href="http://tintin.sourceforge.net/msdp/">MSDP</a> specification. The handler allows on-demand reporting whenever database fields update. It also offers regular polling of properties if needed. A user can customize which oob commands are available to the client and write whatever handlers are needed for their particular game. In the future we'll also add support for GMCP, but the lack of a central, official specification is off-putting (if there is a central document besides accounts of how individual games chose to implement GMCP, please let me know). For our own included web client, we'll likely just use JSON straight off.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Our channel system is now <em>typeclassed</em>. If you are not familiar with Evennia this won't mean much to you - In short it means developers will be able to customize their channel system much easier than in the past since a channel can be treated pretty much like any Python class (thanks go to user Kelketek who actually did the implementation).</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>We added the concept of <em>Tagging</em>, as a more generalized version of our old <em>Alias</em> system. Tagging is just what it sounds like - it allows you to tag all your objects in order to group them and easily (and efficiently) find them later. Tagging offers a powerful way to create what other code bases refer to as "zones". There are many other possible uses though, such as having effects appear only in certainly tagged rooms, indicate which Characters have joined a particular guild and so on.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Behind the scenes there were a lot of cleanups, along with minor API changes mentioned on the mailing list. A slew of older Issues were also fixed with this merge.</p>
|
||||
</li>
|
||||
<li>Evennia's webserver was moved from <em>Portal</em> to <em>Server</em>. This moves all database-modifying operations into the same process and neatly avoids race conditions when modifying a game world from various interfaces.</li>
|
||||
<li>The OOB (Out Of Band) handler was implemented. This goes together with a protocol for telnet sub-negotiations according to the <a href="http://tintin.sourceforge.net/msdp/">MSDP</a> specification. The handler allows on-demand reporting whenever database fields update. It also offers regular polling of properties if needed. A user can customize which oob commands are available to the client and write whatever handlers are needed for their particular game. In the future we'll also add support for GMCP, but the lack of a central, official specification is off-putting (if there is a central document besides accounts of how individual games chose to implement GMCP, please let me know). For our own included web client, we'll likely just use JSON straight off.</li>
|
||||
<li>Our channel system is now <em>typeclassed</em>. If you are not familiar with Evennia this won't mean much to you - In short it means developers will be able to customize their channel system much easier than in the past since a channel can be treated pretty much like any Python class (thanks go to user Kelketek who actually did the implementation).</li>
|
||||
<li>We added the concept of <em>Tagging</em>, as a more generalized version of our old <em>Alias</em> system. Tagging is just what it sounds like - it allows you to tag all your objects in order to group them and easily (and efficiently) find them later. Tagging offers a powerful way to create what other code bases refer to as "zones". There are many other possible uses though, such as having effects appear only in certainly tagged rooms, indicate which Characters have joined a particular guild and so on.</li>
|
||||
<li>Behind the scenes there were a lot of cleanups, along with minor API changes mentioned on the mailing list. A slew of older Issues were also fixed with this merge.</li>
|
||||
</ul>
|
||||
<p>Now, in the immediate future we'll be working on updating the documentation. Evennia prides itself with having a large body of documentation and this update comes with small changes to various existing systems. There are also a few bigger new features (such as OOB). No doubt the near future will also see other issues popping up as more people try things out.</p>
|
||||
<h4>Imaginary Realities update</h4>
|
||||
|
|
@ -718,13 +800,13 @@
|
|||
<p><a href="https://4.bp.blogspot.com/-WXVxxb06XBA/UmZ_5TSzmrI/AAAAAAAACE4/NbBAjohOi6E/s1600/building-blocks.jpg"><img src="https://4.bp.blogspot.com/-WXVxxb06XBA/UmZ_5TSzmrI/AAAAAAAACE4/NbBAjohOi6E/s1600/building-blocks.jpg" alt="" /></a></p>
|
||||
<p>Some Evennia updates.</p>
|
||||
<h2>Development</h2>
|
||||
<p>Lots of work has been happening in the <a href="http://code.google.com/r/griatch-evennia-dev/source/list">dev-clone</a> of Evennia over the last few months.</p>
|
||||
<p>As alluded to in the last blog, the main work has been to move Evennia's webserver component into the <em>Server</em>-half of Evennia for various reasons, the most obvious one to make sure that all database writes happen in the same process, avoiding race conditions. But this move lead to a rework of the cache system, which in turn lead to me having to finalize the plans for how Out-of-Band protocols should be implemented server-side. And once that was finalized, OOB was pretty much implemented anyway. As part of making sure OOB trackers were updated correctly at all times meant reworking some of the ways data is stored ... So one thing led to another making this a bigger update than originally planned.</p>
|
||||
<p>Lots of work has been happening in the <a href="http://code.google.com/r/griatch-evennia-dev/source/list">dev-clone</a> of Evennia over the last few months.<br />
|
||||
As alluded to in the last blog, the main work has been to move Evennia's webserver component into the <em>Server</em>-half of Evennia for various reasons, the most obvious one to make sure that all database writes happen in the same process, avoiding race conditions. But this move lead to a rework of the cache system, which in turn lead to me having to finalize the plans for how Out-of-Band protocols should be implemented server-side. And once that was finalized, OOB was pretty much implemented anyway. As part of making sure OOB trackers were updated correctly at all times meant reworking some of the ways data is stored ... So one thing led to another making this a bigger update than originally planned.</p>
|
||||
<p>I plan to make a more detailed post to the <a href="https://groups.google.com/forum/#%21forum/evennia">mailing list</a> soon with more technical details of the (relatively minor) API changes existing users should expect. The merging of the clone into the main repo is still a little way off, but adventurous users have already started testing things.</p>
|
||||
<h2>Google Code</h2>
|
||||
<p>I like Google Code. It's easy to manage and maintain, it has a good wiki and Issue system, not to mention that it allows the use of Mercurial. But in the beginning of September, suddenly all links to our user's clone repositories were <em>gone</em> from the front of the project page_._ Not only that, creating new clones just didn't work anymore.</p>
|
||||
<p>Now any site can have bugs, and we made an <a href="http://code.google.com/p/support/issues/detail?id=30989">issue</a> for it (other projects were similarly affected). But nothing happened for the longest time - at least two months given that we didn't report it right away. Just recently the functionality came back but there is no confirmation or comments from Google (our issue is not even closed).</p>
|
||||
<p>That such a fundamental feature can go unheeded for so long is disturbing to me, driving home the fact that Google is certainly not putting much priority in their code hosting.</p>
|
||||
<p>I like Google Code. It's easy to manage and maintain, it has a good wiki and Issue system, not to mention that it allows the use of Mercurial. But in the beginning of September, suddenly all links to our user's clone repositories were <em>gone</em> from the front of the project page_._ Not only that, creating new clones just didn't work anymore.<br />
|
||||
Now any site can have bugs, and we made an <a href="http://code.google.com/p/support/issues/detail?id=30989">issue</a> for it (other projects were similarly affected). But nothing happened for the longest time - at least two months given that we didn't report it right away. Just recently the functionality came back but there is no confirmation or comments from Google (our issue is not even closed).<br />
|
||||
That such a fundamental feature can go unheeded for so long is disturbing to me, driving home the fact that Google is certainly not putting much priority in their code hosting.</p>
|
||||
<h2>Community</h2>
|
||||
<p>Some furious activity in the <a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC chat</a> lately, with new people dropping in to chat and ask about Evennia. For example, an enthusiastic new user learned not only about Evennia but also Python for the first time. It was a lot of fun to see him go from having <em>no programming experience except</em> <em>mush softcode</em> to doing advanced Evennia system implementations in the course of a week and offering good feedback on new features in two. Good show! The freedom you get upgrading from something like softcode to Evennia's use of a full modern programming language was seemingly quite eye-opening.</p>
|
||||
<p>Other discussions have concerned the policies around using clones/branches for development as well as the benefits of some other hosting solution. Nothing has been decided on this. There is however now also an official GitHub mirror of Evennia's main repo to be found <a href="https://github.com/Evennia/evennia">here</a>.</p>
|
||||
|
|
@ -752,8 +834,8 @@
|
|||
<p>Previously the Player class would normally only handle one Session at a time. This made for an easy implementation and this behavior is quite familiar to users of many other mud code bases. There was an option to allow more than one Session, but each were then treated equally: all Sessions would see the same returns and the same in-game entities were controlled by all (and giving the quit command from one would kick all out).</p>
|
||||
<p>What changed now is that the Player class will manage each Session separately, without interfering with other Sessions connected to the same Player. Each Session can be connected, through the Player, to an individual Character. So multiple Characters could in principle be controlled simultaneously by the same real-world player using different open mud clients. This gives a lot of flexibility for games supporting multi-play but also as a nice way to transparently puppet temporary extras in heavy roleplaying games.</p>
|
||||
<p>It is still possible to force Evennia to accept only one Session per Player just like before, but this is now an option, not a limitation. And even in hardcore one-character-at-a-time roleplaying games it is nice for builders and admins to be able to have separate staff or npc characters without needing a separate account for each.</p>
|
||||
<p>This feature took a lot more work than I anticipated - it consitutes a lot of under-the-hood changes. But it also gave me ample opportunity to fix and clean up older systems and fix bugs. The outcome is more consistency and standardization in several places. There are plenty of other noteworthy changes that were made along the way in the dev branch along with some API changes users should be aware of.</p>
|
||||
<p>So if you are an Evennia game developer you should peek at the more detailed mailing list <a href="https://groups.google.com/forum/#%21topic/evennia/EjAW8S2N86I">announcement</a> on what has changed. The wiki is not updated yet, that will come soon.</p>
|
||||
<p>This feature took a lot more work than I anticipated - it consitutes a lot of under-the-hood changes. But it also gave me ample opportunity to fix and clean up older systems and fix bugs. The outcome is more consistency and standardization in several places. There are plenty of other noteworthy changes that were made along the way in the dev branch along with some API changes users should be aware of.<br />
|
||||
So if you are an Evennia game developer you should peek at the more detailed mailing list <a href="https://groups.google.com/forum/#%21topic/evennia/EjAW8S2N86I">announcement</a> on what has changed. The wiki is not updated yet, that will come soon.</p>
|
||||
<p>Now onward to the next feature!</p>
|
||||
|
||||
<footer class="devblog-footer">
|
||||
|
|
|
|||
|
|
@ -12,8 +12,100 @@
|
|||
<script src="../javascripts/scale.fix.js">
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 1.0 released!: <br>
|
||||
<!--meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 2.0.0 released today: <p><img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Field_Hamois_Belgium_Luc_Viatour.jpg" alt="screenshot" />
|
||||
<br></p>
|
||||
<p>As part of our new use of <a href="https://semver.org/">semantic versioning</a>, Evennia
|
||||
2.0.0 was released today. Evennia is a Python <code>MU*</code> creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, <em>maybe</em>. It depends on your use-case. Read on.</p>
|
||||
<p>In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.</p>
|
||||
<h2>New version of the ExtendedRoom</h2>
|
||||
<p>The main thing that <em>may</em> be backwards income is the <code>ExtendedRoom</code> contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the <code>ExtendedRoom</code> contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.</p>
|
||||
<p>Here are the <a href="https://github.com/evennia/evennia/discussions/3200">new features</a>:</p>
|
||||
<ul>
|
||||
<li>All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The <code>season</code> and <code>time_of_day</code> are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.</li>
|
||||
<li>Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute <code>desc_<roomstate></code> to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
<code>desc</code> Attribute is used.</li>
|
||||
<li>In the old contrib, you could add special tags, like <code><morning>...</morning></code>
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The <code>ExtendedRoom</code> understands the new <code>state</code> inline function. This
|
||||
can be used with <em>any</em> room state (including seasons and time-of-day). For
|
||||
example: <code>$state(morning, The morning sun is shining in.)</code> or
|
||||
<code>$state(burning, This place is on fire!)</code>.</li>
|
||||
<li>The room still supports <code>details</code> - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.</li>
|
||||
<li>The <code>ExtendedRoom</code> now also has simple support for echoing random messages now
|
||||
and then to the room.</li>
|
||||
</ul>
|
||||
<p>Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.</p>
|
||||
<p>Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the <code>ExtendedRoom</code> contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.</p>
|
||||
<h2>More on the Beginner Tutorial</h2>
|
||||
<p>Most of my time has been spent continuing to work on the new <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html">Beginner Tutorial</a>. Notably on <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html">part three</a>, where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on</p>
|
||||
<ul>
|
||||
<li>Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
<em>Knave</em> TTRPG ruleset).</li>
|
||||
<li>Organizing Player Character data, and character generation.</li>
|
||||
<li>In-game objects and items.</li>
|
||||
<li>Handling equipment and weapons.</li>
|
||||
<li>In-game rooms.</li>
|
||||
<li>Non-player characters.</li>
|
||||
<li>Two types of Combat systems (Twitch-based and Turn based).</li>
|
||||
</ul>
|
||||
<p>TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.</p>
|
||||
<h2>A truckload of new features!</h2>
|
||||
<p>As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.</p>
|
||||
<ul>
|
||||
<li><code>Containers</code> - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).</li>
|
||||
<li>The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).</li>
|
||||
<li>New <code>logger.delete_log</code> method for deleting log files from inside the server (aMiss-aWry).</li>
|
||||
<li>For those intending to override the <code>SessionHandler</code>, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).</li>
|
||||
<li>New <code>create_channel(attr=...)</code> keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in <code>settings.DEFAULT_CHANNELS</code> (me)</li>
|
||||
<li>Attributes will now properly save Python <code>deques</code> with <code>maxlen=...</code> set (me).</li>
|
||||
<li><a href="https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty"><code>TagCategoryProperty</code></a> - A new way to define tags with a particular category on a class at creation-time, without having to do so in the <code>at_object_creation</code> method (me).</li>
|
||||
<li>A lot of bug fixes; <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html">see the CHANGELOG</a> for all the details!</li>
|
||||
</ul>
|
||||
<h2>Continuing</h2>
|
||||
<p>Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the <a href="https://discord.gg/AJJpcRUhtF">evennia discord</a>, which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.</p>
|
||||
<p>In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)</p>
|
||||
<p>Have a nice summer!</p>
|
||||
...
|
||||
---
|
||||
Evennia is a modern Python library and server for creating text-based
|
||||
|
|
@ -49,6 +141,22 @@
|
|||
<div class="devblog-calendar">
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<a href="2023.html"> 2023 (1)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 2.0.0 released today</span>
|
||||
<a href="2023.html#2023-06-10-evennia-2.0.0-released-today"> Evennia 2.0.0 rel...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2022.html"> 2022 (4)
|
||||
|
||||
|
|
@ -56,26 +164,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!">Dec 3
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!"> Evennia 1.0 relea...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two">Sep 17
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two"> Project plans and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore">Jul 5
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore"> Tutorial-writing ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans">Jan 6
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans"> Into 2022 with th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -90,20 +198,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!">Nov 18
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!"> The blog moved!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?">Mar 21
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?"> Where do I begin?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!">Jan 1
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!"> Happy New Years 2...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -118,20 +226,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Nov 14
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Evennia 0.9.5 rele...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">Oct 20
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">On using Markdown ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Apr 14
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Spring updates whi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -146,44 +254,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Blackifying and fi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Jul 4
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Evennia 0.9 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">May 26
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">May 18
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">Podcast about Even...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Apr 25
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Steaming on Eating...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-01-02-into-2019">Jan 2
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<a href="2019.html#2019-01-02-into-2019">Into 2019
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -198,26 +306,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Evennia 0.8 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Aug 18
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Inline building in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Jan 27
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Kicking into gear ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff">Jan 5
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff"> New year, new stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -232,38 +340,38 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Oct 29
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Getting a MUD RP s...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Oct 1
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Evennia in Hacktob...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Sep 20
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Evennia 0.7 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app">Aug 25
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app"> Renaming Django's...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">Apr 23
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">The luxury of a cr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">News items from th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -278,44 +386,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Nov 30
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Birthday retrospec...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Oct 13
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Season of fixes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">Jul 1
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">The art of sharing...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">May 31
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">Evennia in Pictures
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!">May 22
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!"> Evennia 0.6!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Mar 24
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Technical stuff ha...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Feb 14
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Climbing up Branches
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -330,80 +438,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">Dec 17
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">A summary of a year
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!">Nov 12
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!"> MIT uses Evennia!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Oct 11
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Illustrations and ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-02-emoting-system">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<a href="2015.html#2015-10-02-emoting-system">Emoting System
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`">Sep 29
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`"> Evennia on `podca...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Sep 24
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Pushing through a ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">Aug 27
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">A wagon load of po...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve"">Jun 22
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve""> Announcing the Ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-15-need-your-help!">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<a href="2015.html#2015-06-15-need-your-help!"> Need your help!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-30-dreaming-big?">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<a href="2015.html#2015-05-30-dreaming-big?"> Dreaming big?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-11-things-goin-on">May 11
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<a href="2015.html#2015-05-11-things-goin-on">Things goin on
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">Documenting Python...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Jan 19
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Building Django pr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -418,44 +526,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Slowly moving thro...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Aug 4
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Dance my puppets
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Jun 30
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Webby stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Bringing back Pyth...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1">May 16
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1"> Imaginary Realiti...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Feb 8
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Moving from Google...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Jan 24
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Looking forwards a...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -470,32 +578,32 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Dec 16
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Imaginary Realitie...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Nov 28
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Out of band mergings
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">Oct 22
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">A list of Evennia ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-05-13-one-to-many">May 13
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<a href="2013.html#2013-05-13-one-to-many">One to Many
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Jan 29
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Churning behind th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -510,80 +618,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Oct 28
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Evennia changes to...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-05-community-interest">Oct 5
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<a href="2012.html#2012-10-05-community-interest">Community interest
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Aug 31
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Combining Twisted ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-16-taking-command">Aug 16
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<a href="2012.html#2012-08-16-taking-command">Taking command
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Jun 26
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Extending time and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Jun 11
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Coding from the in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things"> Dummies doing (ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Mar 26
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Shortcuts to goodn...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Feb 22
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Dummies doing dumm...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Feb 17
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Commands and you
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-...">Feb 15
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-..."> Such a small thin...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">About this dev blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks"> Evennia's open bo...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -633,18 +741,10 @@
|
|||
<p>Evennia's default model uses traditional MU* rooms. These are simple nodes with exits linking them together. Such Rooms have no internal size and no inherent spatial relationship to each other. Moving from any Room to any other is happening as fast as the system can process the movement.</p>
|
||||
<p>Introducing a delay on exit traversal can have a surprisingly big effect on a game:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>It dramatically changes the "feel" of the game. It often makes the game feel less "twitch" and slows things down in a very real way. It lets Players consider movement as a "cost".</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>It simulates movement speed. A "quick" (or maybe well-rested) character might perceive an actual difference in traversal. The traversal speed can vary depending on if the Character is "running" or "walking".</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>It can emulate travel distance. An Exit leading to "the top of the mountain" may take longer to traverse than going "inside the tent".</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>It makes movement a "cost" to take into consideration in the game. Moving back and forth over and over across a distance of multiple rooms becomes a much more daunting prospect with a time delay than if you could just zip along as quickly as you could press the button. This also has effects on map and quest design.</p>
|
||||
</li>
|
||||
<li>It dramatically changes the "feel" of the game. It often makes the game feel less "twitch" and slows things down in a very real way. It lets Players consider movement as a "cost".</li>
|
||||
<li>It simulates movement speed. A "quick" (or maybe well-rested) character might perceive an actual difference in traversal. The traversal speed can vary depending on if the Character is "running" or "walking".</li>
|
||||
<li>It can emulate travel distance. An Exit leading to "the top of the mountain" may take longer to traverse than going "inside the tent".</li>
|
||||
<li>It makes movement a "cost" to take into consideration in the game. Moving back and forth over and over across a distance of multiple rooms becomes a much more daunting prospect with a time delay than if you could just zip along as quickly as you could press the button. This also has effects on map and quest design.</li>
|
||||
</ul>
|
||||
<p>Introducing delayed movement in Evennia is simple. But to explain the idea, let's first briefly explain how Evennia implements Exits.</p>
|
||||
<h4>A brief sideline: About Exits</h4>
|
||||
|
|
@ -735,16 +835,16 @@
|
|||
</h1>
|
||||
<p><a href="https://2.bp.blogspot.com/-AoyW71rwdmw/U52RCQqYoDI/AAAAAAAADnU/KH7QGKf_GmM/s1600/RAM.jpg"><img src="https://2.bp.blogspot.com/-AoyW71rwdmw/U52RCQqYoDI/AAAAAAAADnU/KH7QGKf_GmM/s1600/RAM.jpg" alt="" /></a></p>
|
||||
<p>Lately I've done work on the memory management of Evennia. Analyzing the memory footprint of a python program is a rather educational thing in general.</p>
|
||||
<p>Python keeps tracks of all objects (from variables to classes and everything in between) via a memory reference. When other objects reference that object it tracks this too.</p>
|
||||
<p>Once nothing references an object, it does not need to be in memory any more - in a more low-level languages this might lead to a memory leak. Python's <em>garbage collector</em> handles this for us though - it goes through all abandoned objects and frees the memory for usage by other things. The garbage collector will however <em>not</em> do its thing as long as some other object (which will not be garbage-collected) <em>still</em> holds a reference to the object. This is what you want - you don't want existing objects to stop working because an object they rely on is suddenly not there.</p>
|
||||
<p>Python keeps tracks of all objects (from variables to classes and everything in between) via a memory reference. When other objects reference that object it tracks this too.<br />
|
||||
Once nothing references an object, it does not need to be in memory any more - in a more low-level languages this might lead to a memory leak. Python's <em>garbage collector</em> handles this for us though - it goes through all abandoned objects and frees the memory for usage by other things. The garbage collector will however <em>not</em> do its thing as long as some other object (which will not be garbage-collected) <em>still</em> holds a reference to the object. This is what you want - you don't want existing objects to stop working because an object they rely on is suddenly not there.</p>
|
||||
<p>Normally in Django, whenever you retrieve an database model instance, that exists only in memory then and there. If you later retrieve the same object from the database, the model instance you have to work with is most likely a new one. This is okay for most usage, but Evennia's typeclass system (described in an earlier blog entry) as well our wish to store temporary properties on models (existing until next server restart) does not work if the model instance we get is always different. It would also help if we didn't have to load models from the database more than necessary.</p>
|
||||
<p>For this reason, Evennia uses something called the <em>idmapper</em>. This is a cache mechanism (heavily modified for Evennia) that allows objects to be loaded from the database only once and then be reused when later accessed. The speedup achieved from this is important, but as said it also makes critical systems work properly.</p>
|
||||
<p>The tradeoff of speed and utility is memory usage. Since the idmapper never drops those references it means that objects will never be garbage collected. The result was that the memory usage of Evennia could rise rapidly with an increasing number of objects. Whereas some objects (like those with temporary attributes) should indeed not be garbage collected, in a working game there is likely to be objects without such volatile data. An example might be objects that are not used some of the time - simply because players or the game don't need them for the moment. For such objects it may be okay to re-load them on demand rather than keep them in memory indefinitely.</p>
|
||||
<p>When looking into this I found that simply force-flushing the idmapper did <em>not</em> clean up all objects from memory. The reason for this has to do with how Evennia references objects via a range of other means. The reference count never went to zero and so the garbage collector never got around to it.</p>
|
||||
<p>With the excellent <a href="https://pypi.python.org/pypi/objgraph">objgraph</a> library it is actually pretty easy to track just what is referencing what, and to figure out what to remove. Using this I went through a rather prolonged spree of cleanups where I gradually (and carefully) cleaned up Evennia's object referencing to a point where the only external reference to most objects were the idmapper cache reference. So removing that (like when deliberately flushing the cache) will now make the object possible to garbage-collect.</p>
|
||||
<p><a href="http://postimg.org/image/p00v4oinl/">This</a> is how the reference map used to look for one type of Evennia object (ObjectDB) before the cleanup. Note the several references into the ObjectDB and the cyclic references for all handlers (the cyclic reference is in itself not a problem for reference-counting but they are slow and unnecessary; I now made all handlers use lazy-loading with weak referencing instead).</p>
|
||||
<p><a href="http://postimg.org/image/90i7l4mlt/">This</a> is how the reference map looks for the same object now. The <strong>instance</strong> cache is the idmapper reference. There are also no more cyclic references for handlers (the display don't even pick up on them for this depth of recursion). Just removing that single link will now garbage-collect ObjectDB and its typeclass (ignore the <em>g</em> reference, that is just the variable holding the object in ipython).</p>
|
||||
<p>We also see that the dbobj.typeclass <-> typeclass.dbobj references keep each other alive and when one goes the other one goes too - just as expected.</p>
|
||||
<p><a href="http://postimg.org/image/90i7l4mlt/">This</a> is how the reference map looks for the same object now. The <strong>instance</strong> cache is the idmapper reference. There are also no more cyclic references for handlers (the display don't even pick up on them for this depth of recursion). Just removing that single link will now garbage-collect ObjectDB and its typeclass (ignore the <em>g</em> reference, that is just the variable holding the object in ipython).<br />
|
||||
We also see that the dbobj.typeclass <-> typeclass.dbobj references keep each other alive and when one goes the other one goes too - just as expected.</p>
|
||||
<p>An curious aspect of Python memory handling is that (C-)Python does <em>not</em> actually release the memory back to operating system when flushing the idmapper cache. Rather Python makes it internally available so that it does not need to request any more. The result is that if you look at Evennia with the <em>top</em> command, its memory requirement (for example while continuously creating new objects) will not actually <em>drop</em> on a idmapper flush, it will just <em>stop rising</em>. This is discussed at length in <a href="http://effbot.org/pyfaq/why-doesnt-python-release-the-memory-when-i-delete-a-large-object.htm">this blog</a>, it was good to learn it was not something I did at least.</p>
|
||||
<p>Apart from the memory stuff, there is work ongoing with fixing the latest batch of user issue reports. Another dev is working on cleaning up the web-related code, it should make it a lot cleaner to overload web functionality with custom code. One of those days I'll also try to sit down and finally convert our web client from long-polling to use web sockets now that Evennia suppports web sockets natively. Time, time ...</p>
|
||||
|
||||
|
|
@ -767,27 +867,13 @@
|
|||
<p>I'm a bit late with writing about it, but the latest issue of <em>Imaginary Realities</em> has been out for a month or so now. You can find it <a href="https://www.blogger.com/"></a><a href="http://journal.imaginary-realities.com/volume-06/issue-01/index.html">here</a>.</p>
|
||||
<p>Here is a brief summary of the articles in the latest issue.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>In <em><strong>A Journey Through Paradice, Part II</strong>,</em> Matthew Chaplan continues his description of the C++ codebase <em>Paradice9</em>, notably focusing on its input handling, which uses character-mode telnet to produce plenty of interesting effects in a custom terminal client. There are plenty of interesting features (or potential features) discussed. An example is the client knowing to store the receiver of a "reply" command the moment the command is entered rather than waiting for the player the press return (at which point someone else might have written to you and the reply-to target would have changed in a traditional setup). There is no denying the power of having a custom client for your game. And whereas I think some more secure protocol than telnet would maybe be better to use when you control both server and client anyway, it's really interesting to see the power and features you can achieve with it.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><em><strong>Building a Giant Mech in Evennia</strong> -</em> this is my entry for this issue; a short little tutorial on designing a machine of mirth and mayhem in Evennia.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Richard “KaVir” Woolcock's <em><strong>Describing a Virtual World</strong></em> covers the different uses of dynamically created descriptions in text games. He summarizes the types, from the most common, fully static room description up unto the character-dependent procedurally generated descriptions in his own <em>GodWarsII</em> mud. It's a fascinating read since it not only goes into rooms but also how to build piecemeal and situation-aware character and object descriptions as well as procedural help and quest info. The techniques are not for every type of game of course. But a good and informative read for anyone interested in game design.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><em><strong>Dynamic room descriptions</strong>,</em> by Jana, are also covering room descriptions although takes a more conservative conclusion than the full procedural contruction of KaVir's article. This covers the hybrid hand-written description - that is hand-written text that uses a markup language for optional or situation-dependent text. It makes for a good text on implementing such a system (an Evennia equivalent is <em>extended_room.py</em> found in our <em>contrib</em> folder.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong><em>Saddle Up - A Personal Story about Riding Your Demon to Success</em></strong> is a summary and inspirational story by Michael "Drakkos" Heron. It ties back to his work with <em>Epitath</em> and how it has affected and improved (and continues to improve) his personal and professional life. I like that he manages to include his game development work into his teaching and reasearch, a cool way to make use of your hobby. He has a point on the usability of a coding hobby like this: I myself have had lots of use and even landed project work based on my work with Evennia. One of our users landed his current job based on knowledge he learned working with Evennia. So there is definitely an advantage to mud-development outside the hobby realm.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><em><strong>The Successful Quest Builder</strong></em> by John "TheDude" Robinette and Joanna "Lorana" Liberty covers the construction of a Quest from the designer's perspective. Rather than focusing on gameplay considerations the authors here focus on the technical aspects; learning the codebase's tools and things to think about debugging and developing something that is enjoyable for the players.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The article <strong><em>Your MUD Should Have an Account System</em></strong> finally, is Matthew “Chaos” Sheahan's argument as to why a game should use a single login account system rather than the old way of creating a new account per player. Much of the argument is around converting an old-school code base into this configuration and how it's not as hard as one may think. I fully agree on his assessment (although I wonder just how "easy" it is to patch on such a system on an old-running mud). He even mentions Evennia as an example of a modern codebase having this functionality out of the box (yay!).</p>
|
||||
</li>
|
||||
<li>In <em><strong>A Journey Through Paradice, Part II</strong>,</em> Matthew Chaplan continues his description of the C++ codebase <em>Paradice9</em>, notably focusing on its input handling, which uses character-mode telnet to produce plenty of interesting effects in a custom terminal client. There are plenty of interesting features (or potential features) discussed. An example is the client knowing to store the receiver of a "reply" command the moment the command is entered rather than waiting for the player the press return (at which point someone else might have written to you and the reply-to target would have changed in a traditional setup). There is no denying the power of having a custom client for your game. And whereas I think some more secure protocol than telnet would maybe be better to use when you control both server and client anyway, it's really interesting to see the power and features you can achieve with it.</li>
|
||||
<li><em><strong>Building a Giant Mech in Evennia</strong> -</em> this is my entry for this issue; a short little tutorial on designing a machine of mirth and mayhem in Evennia.</li>
|
||||
<li>Richard “KaVir” Woolcock's <em><strong>Describing a Virtual World</strong></em> covers the different uses of dynamically created descriptions in text games. He summarizes the types, from the most common, fully static room description up unto the character-dependent procedurally generated descriptions in his own <em>GodWarsII</em> mud. It's a fascinating read since it not only goes into rooms but also how to build piecemeal and situation-aware character and object descriptions as well as procedural help and quest info. The techniques are not for every type of game of course. But a good and informative read for anyone interested in game design.</li>
|
||||
<li><em><strong>Dynamic room descriptions</strong>,</em> by Jana, are also covering room descriptions although takes a more conservative conclusion than the full procedural contruction of KaVir's article. This covers the hybrid hand-written description - that is hand-written text that uses a markup language for optional or situation-dependent text. It makes for a good text on implementing such a system (an Evennia equivalent is <em>extended_room.py</em> found in our <em>contrib</em> folder.</li>
|
||||
<li><strong><em>Saddle Up - A Personal Story about Riding Your Demon to Success</em></strong> is a summary and inspirational story by Michael "Drakkos" Heron. It ties back to his work with <em>Epitath</em> and how it has affected and improved (and continues to improve) his personal and professional life. I like that he manages to include his game development work into his teaching and reasearch, a cool way to make use of your hobby. He has a point on the usability of a coding hobby like this: I myself have had lots of use and even landed project work based on my work with Evennia. One of our users landed his current job based on knowledge he learned working with Evennia. So there is definitely an advantage to mud-development outside the hobby realm.</li>
|
||||
<li><em><strong>The Successful Quest Builder</strong></em> by John "TheDude" Robinette and Joanna "Lorana" Liberty covers the construction of a Quest from the designer's perspective. Rather than focusing on gameplay considerations the authors here focus on the technical aspects; learning the codebase's tools and things to think about debugging and developing something that is enjoyable for the players.</li>
|
||||
<li>The article <strong><em>Your MUD Should Have an Account System</em></strong> finally, is Matthew “Chaos” Sheahan's argument as to why a game should use a single login account system rather than the old way of creating a new account per player. Much of the argument is around converting an old-school code base into this configuration and how it's not as hard as one may think. I fully agree on his assessment (although I wonder just how "easy" it is to patch on such a system on an old-running mud). He even mentions Evennia as an example of a modern codebase having this functionality out of the box (yay!).</li>
|
||||
</ul>
|
||||
<p>Deadline for the next issue is <a href="http://posted-stuff.blogspot.se/2014/04/write-article-for-imaginary-realities.html">announced to be May 31 2014</a> so don't be shy to contribute your own article. Richard Tew hints at in his introduction, finding people to write articles is the tricky part still.</p>
|
||||
|
||||
|
|
@ -818,12 +904,8 @@
|
|||
<p>I set aside a new folder on my hard drive and cloned the original mercurial repo into a new sub folder. A good idea is to set up a quick Python <a href="https://pypi.python.org/pypi/virtualenv">virtual environment</a> for easily getting updated dependencies of build scripts.</p>
|
||||
<p>I initialized an empty Git repository and used a program called <a href="https://github.com/frej/fast-export">hg-fast-export</a> to convert. As it turned out there were some finer details to consider when doing that:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>The most obvious one was that the conversion initially failed, complaining about the Mercurial original containing "unnamed branches". These came from a contributor who did <em>something</em> to spawn off all sorts of weird branches with little purpose. I should not have merged those into main in the first place, but in those days I didn't know mercurial well enough to be concerned. In the end I simply used mercurial's MQ extension to remove the unnamed (and unused) branches so the conversion could complete.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The second issue was that Mercurial is less stringent about its author strings than Git is. Git's author string is "name <email>". Over the years we have gotten contributions from people with all sorts of combinations of names, with or without an email address. So for this we had to supply a mapping file to the converter. It's basically a list of old_author_string = new_author_string and allows for grouping the various used names as needed (some of them were the same person using slightly different author strings).</p>
|
||||
</li>
|
||||
<li>The most obvious one was that the conversion initially failed, complaining about the Mercurial original containing "unnamed branches". These came from a contributor who did <em>something</em> to spawn off all sorts of weird branches with little purpose. I should not have merged those into main in the first place, but in those days I didn't know mercurial well enough to be concerned. In the end I simply used mercurial's MQ extension to remove the unnamed (and unused) branches so the conversion could complete.</li>
|
||||
<li>The second issue was that Mercurial is less stringent about its author strings than Git is. Git's author string is "name <email>". Over the years we have gotten contributions from people with all sorts of combinations of names, with or without an email address. So for this we had to supply a mapping file to the converter. It's basically a list of old_author_string = new_author_string and allows for grouping the various used names as needed (some of them were the same person using slightly different author strings).</li>
|
||||
</ul>
|
||||
<p>Once this was in place, the repo conversion worked fine. It was just a matter of changing the .hgignore file to a .gitignore file and change some code that made use of mercurial to get and display the current revision id.</p>
|
||||
<h3>Converting the Wiki, part one</h3>
|
||||
|
|
@ -832,9 +914,7 @@
|
|||
<p>All in all, the initial wiki conversion worked decently - all the pages were converted over and were readable. I was even to the point of declaring success when finding the damn thing messed up the links. Googe Code writes links like this: [MyLink Text to see on page]. The script converted this to [[MyLink|Text to see on page]]. Which may look fine except it isn't. GitHub actually wants the syntax in the inverse order: [[Text to see on page|MyLink]].</p>
|
||||
<p>Furthermore, in Google Code's wiki, code blocks were marked with</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>{{{
|
||||
|
||||
<verbatim code>
|
||||
|
||||
}}}
|
||||
</pre></div>
|
||||
|
||||
|
|
@ -842,13 +922,9 @@
|
|||
<p>I could have gone back and fixed the converter script, but I suspected there would be enough small things to fix anyway. So in the end I went through 80+ pages of fixing link syntax and adding empty lines by hand. After that I could finally push the first converted wiki version up to the GitHub wiki repository.</p>
|
||||
<p>Some time later I also found that there is a way to let GitHub wiki pages use syntax highlighting for the language of your choice. The way to do this is to enclose your code blocks like this:</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>```python
|
||||
|
||||
|
||||
|
||||
<verbatim code>
|
||||
|
||||
|
||||
|
||||
```
|
||||
</pre></div>
|
||||
|
||||
|
|
@ -859,37 +935,19 @@
|
|||
<h3>Converting the IRC announcer</h3>
|
||||
<p>A lot of development discussion goes on in our IRC channel #evennia on Freenode. There is an announcer bot in there that I've written, that collates information from various sources and reports it in the IRC channel:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Repository updates</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wiki updates</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Issue creation and updates</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Mailing list/forum posts</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Dev-blog updates (this blog)</p>
|
||||
</li>
|
||||
<li>Repository updates</li>
|
||||
<li>Wiki updates</li>
|
||||
<li>Issue creation and updates</li>
|
||||
<li>Mailing list/forum posts</li>
|
||||
<li>Dev-blog updates (this blog)</li>
|
||||
</ul>
|
||||
<p>Say what you will about Google, but they are great at offering RSS feeds to all their stuff. So my IRC bot was basically a glorified threaded RSS reader that echoed changes to the channel as they came in. This had been working nicely for years.</p>
|
||||
<p>GitHub does offer RSS feeds to -some- of their offerings, but it's a lot more patchy. I eventually had to do quite a bit of hacking to get everything reporting the way we were used to.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>GitHub has its own IRC announcer bot that reports to IRC. The problem is that this will connect, send message and then disconnect. This causes a lot of spam in the channel. We neither can nor want to set +n on our channel to allow external messages either. The way I solved this was to expand my own custom IRC bot to sit in <em>two</em> irc channels. The GitHub announcer connects to only one of them (so this gets all the spammy connect messages). My IRC bot picks up the announcement and echoes it cleanly to our main #evennia channel. It works really well.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Issues are handled by the GitHub announcer in the same way.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>GitHub has no automatic way to report wiki updates. It doesn't even have a proper RSS feed. However, a user clued me in on using the <a href="http://pipes.yahoo.com/pipes/pipe.info?_id=02bfefe73ba14054570ce82f1929e433">pipes</a> website to relay an RSS feed from github. I then configured my IRC bot to check that RSS and report it (I also changed the IRC colours to match the GitHub-announcer ones).</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Mailing list and blog haven't changed, so those are still handled via RSS as before.</p>
|
||||
</li>
|
||||
<li>GitHub has its own IRC announcer bot that reports to IRC. The problem is that this will connect, send message and then disconnect. This causes a lot of spam in the channel. We neither can nor want to set +n on our channel to allow external messages either. The way I solved this was to expand my own custom IRC bot to sit in <em>two</em> irc channels. The GitHub announcer connects to only one of them (so this gets all the spammy connect messages). My IRC bot picks up the announcement and echoes it cleanly to our main #evennia channel. It works really well.</li>
|
||||
<li>Issues are handled by the GitHub announcer in the same way.</li>
|
||||
<li>GitHub has no automatic way to report wiki updates. It doesn't even have a proper RSS feed. However, a user clued me in on using the <a href="http://pipes.yahoo.com/pipes/pipe.info?_id=02bfefe73ba14054570ce82f1929e433">pipes</a> website to relay an RSS feed from github. I then configured my IRC bot to check that RSS and report it (I also changed the IRC colours to match the GitHub-announcer ones).</li>
|
||||
<li>Mailing list and blog haven't changed, so those are still handled via RSS as before.</li>
|
||||
</ul>
|
||||
<p>All this done, the modified IRC announcement works well.</p>
|
||||
<h3>Closing the book on Google Code</h3>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -12,8 +12,100 @@
|
|||
<script src="../javascripts/scale.fix.js">
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 1.0 released!: <br>
|
||||
<!--meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 2.0.0 released today: <p><img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Field_Hamois_Belgium_Luc_Viatour.jpg" alt="screenshot" />
|
||||
<br></p>
|
||||
<p>As part of our new use of <a href="https://semver.org/">semantic versioning</a>, Evennia
|
||||
2.0.0 was released today. Evennia is a Python <code>MU*</code> creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, <em>maybe</em>. It depends on your use-case. Read on.</p>
|
||||
<p>In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.</p>
|
||||
<h2>New version of the ExtendedRoom</h2>
|
||||
<p>The main thing that <em>may</em> be backwards income is the <code>ExtendedRoom</code> contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the <code>ExtendedRoom</code> contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.</p>
|
||||
<p>Here are the <a href="https://github.com/evennia/evennia/discussions/3200">new features</a>:</p>
|
||||
<ul>
|
||||
<li>All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The <code>season</code> and <code>time_of_day</code> are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.</li>
|
||||
<li>Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute <code>desc_<roomstate></code> to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
<code>desc</code> Attribute is used.</li>
|
||||
<li>In the old contrib, you could add special tags, like <code><morning>...</morning></code>
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The <code>ExtendedRoom</code> understands the new <code>state</code> inline function. This
|
||||
can be used with <em>any</em> room state (including seasons and time-of-day). For
|
||||
example: <code>$state(morning, The morning sun is shining in.)</code> or
|
||||
<code>$state(burning, This place is on fire!)</code>.</li>
|
||||
<li>The room still supports <code>details</code> - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.</li>
|
||||
<li>The <code>ExtendedRoom</code> now also has simple support for echoing random messages now
|
||||
and then to the room.</li>
|
||||
</ul>
|
||||
<p>Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.</p>
|
||||
<p>Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the <code>ExtendedRoom</code> contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.</p>
|
||||
<h2>More on the Beginner Tutorial</h2>
|
||||
<p>Most of my time has been spent continuing to work on the new <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html">Beginner Tutorial</a>. Notably on <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html">part three</a>, where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on</p>
|
||||
<ul>
|
||||
<li>Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
<em>Knave</em> TTRPG ruleset).</li>
|
||||
<li>Organizing Player Character data, and character generation.</li>
|
||||
<li>In-game objects and items.</li>
|
||||
<li>Handling equipment and weapons.</li>
|
||||
<li>In-game rooms.</li>
|
||||
<li>Non-player characters.</li>
|
||||
<li>Two types of Combat systems (Twitch-based and Turn based).</li>
|
||||
</ul>
|
||||
<p>TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.</p>
|
||||
<h2>A truckload of new features!</h2>
|
||||
<p>As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.</p>
|
||||
<ul>
|
||||
<li><code>Containers</code> - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).</li>
|
||||
<li>The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).</li>
|
||||
<li>New <code>logger.delete_log</code> method for deleting log files from inside the server (aMiss-aWry).</li>
|
||||
<li>For those intending to override the <code>SessionHandler</code>, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).</li>
|
||||
<li>New <code>create_channel(attr=...)</code> keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in <code>settings.DEFAULT_CHANNELS</code> (me)</li>
|
||||
<li>Attributes will now properly save Python <code>deques</code> with <code>maxlen=...</code> set (me).</li>
|
||||
<li><a href="https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty"><code>TagCategoryProperty</code></a> - A new way to define tags with a particular category on a class at creation-time, without having to do so in the <code>at_object_creation</code> method (me).</li>
|
||||
<li>A lot of bug fixes; <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html">see the CHANGELOG</a> for all the details!</li>
|
||||
</ul>
|
||||
<h2>Continuing</h2>
|
||||
<p>Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the <a href="https://discord.gg/AJJpcRUhtF">evennia discord</a>, which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.</p>
|
||||
<p>In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)</p>
|
||||
<p>Have a nice summer!</p>
|
||||
...
|
||||
---
|
||||
Evennia is a modern Python library and server for creating text-based
|
||||
|
|
@ -49,6 +141,22 @@
|
|||
<div class="devblog-calendar">
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<a href="2023.html"> 2023 (1)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 2.0.0 released today</span>
|
||||
<a href="2023.html#2023-06-10-evennia-2.0.0-released-today"> Evennia 2.0.0 rel...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2022.html"> 2022 (4)
|
||||
|
||||
|
|
@ -56,26 +164,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!">Dec 3
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!"> Evennia 1.0 relea...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two">Sep 17
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two"> Project plans and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore">Jul 5
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore"> Tutorial-writing ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans">Jan 6
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans"> Into 2022 with th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -90,20 +198,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!">Nov 18
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!"> The blog moved!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?">Mar 21
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?"> Where do I begin?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!">Jan 1
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!"> Happy New Years 2...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -118,20 +226,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Nov 14
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Evennia 0.9.5 rele...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">Oct 20
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">On using Markdown ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Apr 14
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Spring updates whi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -146,44 +254,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Blackifying and fi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Jul 4
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Evennia 0.9 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">May 26
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">May 18
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">Podcast about Even...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Apr 25
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Steaming on Eating...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-01-02-into-2019">Jan 2
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<a href="2019.html#2019-01-02-into-2019">Into 2019
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -198,26 +306,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Evennia 0.8 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Aug 18
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Inline building in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Jan 27
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Kicking into gear ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff">Jan 5
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff"> New year, new stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -232,38 +340,38 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Oct 29
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Getting a MUD RP s...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Oct 1
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Evennia in Hacktob...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Sep 20
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Evennia 0.7 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app">Aug 25
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app"> Renaming Django's...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">Apr 23
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">The luxury of a cr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">News items from th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -278,44 +386,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Nov 30
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Birthday retrospec...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Oct 13
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Season of fixes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">Jul 1
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">The art of sharing...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">May 31
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">Evennia in Pictures
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!">May 22
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!"> Evennia 0.6!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Mar 24
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Technical stuff ha...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Feb 14
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Climbing up Branches
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -330,80 +438,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">Dec 17
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">A summary of a year
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!">Nov 12
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!"> MIT uses Evennia!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Oct 11
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Illustrations and ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-02-emoting-system">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<a href="2015.html#2015-10-02-emoting-system">Emoting System
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`">Sep 29
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`"> Evennia on `podca...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Sep 24
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Pushing through a ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">Aug 27
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">A wagon load of po...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve"">Jun 22
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve""> Announcing the Ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-15-need-your-help!">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<a href="2015.html#2015-06-15-need-your-help!"> Need your help!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-30-dreaming-big?">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<a href="2015.html#2015-05-30-dreaming-big?"> Dreaming big?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-11-things-goin-on">May 11
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<a href="2015.html#2015-05-11-things-goin-on">Things goin on
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">Documenting Python...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Jan 19
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Building Django pr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -418,44 +526,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Slowly moving thro...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Aug 4
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Dance my puppets
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Jun 30
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Webby stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Bringing back Pyth...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1">May 16
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1"> Imaginary Realiti...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Feb 8
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Moving from Google...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Jan 24
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Looking forwards a...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -470,32 +578,32 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Dec 16
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Imaginary Realitie...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Nov 28
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Out of band mergings
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">Oct 22
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">A list of Evennia ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-05-13-one-to-many">May 13
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<a href="2013.html#2013-05-13-one-to-many">One to Many
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Jan 29
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Churning behind th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -510,80 +618,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Oct 28
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Evennia changes to...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-05-community-interest">Oct 5
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<a href="2012.html#2012-10-05-community-interest">Community interest
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Aug 31
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Combining Twisted ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-16-taking-command">Aug 16
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<a href="2012.html#2012-08-16-taking-command">Taking command
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Jun 26
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Extending time and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Jun 11
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Coding from the in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things"> Dummies doing (ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Mar 26
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Shortcuts to goodn...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Feb 22
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Dummies doing dumm...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Feb 17
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Commands and you
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-...">Feb 15
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-..."> Such a small thin...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">About this dev blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks"> Evennia's open bo...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -663,36 +771,18 @@
|
|||
<p>The last few months has been dominated by bug-fixing and testing in Evennia-land. A lot more new users appears to be starting to use Evennia, especially from the <a href="https://en.wikipedia.org/wiki/MUSH">MUSH</a> world where the Evennia-based <em><a href="http://play.arxgame.org/">Arx, After the Reckoning</a></em> is, while still in alpha, currently leading the charge.</p>
|
||||
<p>With a new influx of users comes the application of all sorts of use- and edge-cases that stretch and exercise the framework in all the places where it matters. There is no better test of code than new users trying to use it unsupervised! Evennia is holding up well overall but there are always things that can be improved.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>I reworked the way on-object Attributes was cached (from a stupid but simple way to a lot more sophisticated but harder way) and achieved three times faster performance in certain special cases people had complained about. Other issues also came to view while diving into this, which could be fixed.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>I reworked the venerable batch command and batchcode processors (these allow to create a game world from a script file) and made their inputs make more sense to people. This was one of the older parts of Evennia and apart from the module needing a big refactoring to be easier to read, some parts were pretty fragile and prone to break. Especially when passing it file names tended to be confusing since it understood only certain relative paths to the files to read in and not even I could remember if one should include the file ending or not. This was cleaned up a lot.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Lots of changes and updates were made to the RPSystem contrib, which optionally adds more advanced roleplaying mechanics to Evennia. The use of this in Evennia's demo game (<a href="https://github.com/evennia/ainneve">Ainneve</a>, being separately developed) helps a lot for ironing out any remaining wrinkles.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Lots and lots of other fixes and smaller feature updates were done (About <a href="https://www.blogger.com/goog_1124770844"></a><a href="https://github.com/evennia/evennia/commits/master">150 commits and 50 Issues</a> closed since end of summer).</p>
|
||||
</li>
|
||||
<li>I reworked the way on-object Attributes was cached (from a stupid but simple way to a lot more sophisticated but harder way) and achieved three times faster performance in certain special cases people had complained about. Other issues also came to view while diving into this, which could be fixed.</li>
|
||||
<li>I reworked the venerable batch command and batchcode processors (these allow to create a game world from a script file) and made their inputs make more sense to people. This was one of the older parts of Evennia and apart from the module needing a big refactoring to be easier to read, some parts were pretty fragile and prone to break. Especially when passing it file names tended to be confusing since it understood only certain relative paths to the files to read in and not even I could remember if one should include the file ending or not. This was cleaned up a lot.</li>
|
||||
<li>Lots of changes and updates were made to the RPSystem contrib, which optionally adds more advanced roleplaying mechanics to Evennia. The use of this in Evennia's demo game (<a href="https://github.com/evennia/ainneve">Ainneve</a>, being separately developed) helps a lot for ironing out any remaining wrinkles.</li>
|
||||
<li>Lots and lots of other fixes and smaller feature updates were done (About <a href="https://www.blogger.com/goog_1124770844"></a><a href="https://github.com/evennia/evennia/commits/master">150 commits and 50 Issues</a> closed since end of summer).</li>
|
||||
</ul>
|
||||
<p>A fun thing with a growing user base is that we are also starting to see a lot more Pull requests and contributions. Thanks a lot, keep 'em coming!</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Map system contrib (merged), for creating a world based on ASCII map. Talking about maps, users contributed not just one but two new tutorials for implementing both static and dynamic maps with Evennia.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Webclient notifications (pending), for making the webclient show us in a clearer way when it gets updated in a different tab. A more advanced implementation awaits the webclient being expanded with a proper client-side option window; there is currently a feature request for this if anyone's interested in taking it on.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>AI system contrib (pending). This is a full AI backend for adding complex behaviors to game agents. It uses Behavioral trees and is designed to be modified both in code and from inside the game.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Action system contrib (pending). This contrib assigns the actions of Characters a time cost and delays the results of commands the given time. It also allows players to go into turn-based mode to enforce a strict action order.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><em>Lots</em> of now closed PRs were contributed by the Arx lead developer to fix various bugs and edge-cases as they came up in live use.</p>
|
||||
</li>
|
||||
<li>Map system contrib (merged), for creating a world based on ASCII map. Talking about maps, users contributed not just one but two new tutorials for implementing both static and dynamic maps with Evennia.</li>
|
||||
<li>Webclient notifications (pending), for making the webclient show us in a clearer way when it gets updated in a different tab. A more advanced implementation awaits the webclient being expanded with a proper client-side option window; there is currently a feature request for this if anyone's interested in taking it on.</li>
|
||||
<li>AI system contrib (pending). This is a full AI backend for adding complex behaviors to game agents. It uses Behavioral trees and is designed to be modified both in code and from inside the game.</li>
|
||||
<li>Action system contrib (pending). This contrib assigns the actions of Characters a time cost and delays the results of commands the given time. It also allows players to go into turn-based mode to enforce a strict action order.</li>
|
||||
<li><em>Lots</em> of now closed PRs were contributed by the Arx lead developer to fix various bugs and edge-cases as they came up in live use.</li>
|
||||
</ul>
|
||||
<p>The fixing and tightening of the nuts and bolts will likely continue the remainder of the year. I'm currently working on a refactoring of the way command sets are merged together (see the end of my <a href="http://evennia.blogspot.se/2016/05/evennia-in-pictures.html">blog post on Evennia in pictures</a> for a brief summary of the command system). But with so much new blood in the community, who can tell where things will turn from here!</p>
|
||||
|
||||
|
|
@ -731,18 +821,21 @@
|
|||
<h3>Multidescer contrib</h3>
|
||||
<p>I have added a new "multidescer" to the contrib folder. A multidescer is (I think) a MUSH term for a mechanism managing more than one description. You can then combine any of these various descriptions into your "active" description.</p>
|
||||
<p>An example of usage:</p>
|
||||
<p><strong>desc hat = a blue hat.</strong></p>
|
||||
<p><strong>desc basic = This is a tall man with narrow features.</strong></p>
|
||||
<p><strong>desc clothing = He is wearing black, flowing robes.</strong></p>
|
||||
<p><strong>desc hat = a blue hat.</strong><br />
|
||||
<strong>desc basic = This is a tall man with narrow features.</strong><br />
|
||||
<strong>desc clothing = He is wearing black, flowing robes.</strong></p>
|
||||
<p>These commands store the description on the Character and references them as unique keywords. Next we can combine these strings together in any order to build the actual current description:</p>
|
||||
<p><strong>> desc/set basic + |/ + clothing + On his head he has + hat</strong></p>
|
||||
<p><strong>> look self</strong></p>
|
||||
<p><strong>This is a tall man with narrow features.</strong></p>
|
||||
<p><strong>He is wearing black, flowing robes. On his head he has a blue hat.</strong></p>
|
||||
<p><strong>> desc/set basic + |/ + clothing + On his head he has + hat</strong><br />
|
||||
<strong>> look self</strong><br />
|
||||
<strong>This is a tall man with narrow features.</strong><br />
|
||||
<strong>He is wearing black, flowing robes. On his head he has a blue hat.</strong></p>
|
||||
<p>This allows for both very flexible and easy-to-update descriptions but also a way to handle freeform equipment and clothing. And you can of course use the nick system to pre-format the output</p>
|
||||
<p><strong>> nick setdesc $1 $2 $3 $4 = $1 + |/ + clothing + On his head he has a $4</strong></p>
|
||||
<p>This way you can clothe yourself in different outfits easily using the same output format:</p>
|
||||
<p><strong>> setdesc basic clothing hat</strong></p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>
|
||||
</pre></div>
|
||||
|
||||
<p>The multidescer is a single, self-contained command that is easy to import and add to your game as needed.</p>
|
||||
<p>... There's also plenty of bug fixes, documentation work and other minor things or course.</p>
|
||||
<p>Anyway, summer is now upon us here in the northern hemisphere so things will calm down for a bit, at least from my end. Have a good 'un!</p>
|
||||
|
|
@ -836,12 +929,8 @@
|
|||
<p>The HTML5 webclient has itself updated considerably. Most is happening behind the scenes though. Notably the webclient's javascript component is split into two:</p>
|
||||
<p><a href="https://1.bp.blogspot.com/-vx-uriUXOjI/V0If9Q3TcVI/AAAAAAAAEm4/35haAV1OyAoafjxwHP8wMcOad4CC4OpkQCLcB/s1600/evennia_screen.png"><img src="https://1.bp.blogspot.com/-vx-uriUXOjI/V0If9Q3TcVI/AAAAAAAAEm4/35haAV1OyAoafjxwHP8wMcOad4CC4OpkQCLcB/s400/evennia_screen.png" alt="" /></a></p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>evennia.js</strong>, acts as a library for handling all communication with the server part of Evennia. It offers events for a gui library to plug into and send/receive. It will also gracefully degrade from a websocket connection to AJAX/COMET long-polling if the player uses an older browser.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>evennia_gui.js</strong> is the default front-end and implements a traditional and stable "telnet-like" interface. The html part uses uses Django templating to make it easy to customize and expand. Since this simply makes use of the resources offered by evennia.js, one could pretty easily slip in some other gui library here, or set up calls to get all sorts of interesting information from the server (which talks back using inputfuncs).</p>
|
||||
</li>
|
||||
<li><strong>evennia.js</strong>, acts as a library for handling all communication with the server part of Evennia. It offers events for a gui library to plug into and send/receive. It will also gracefully degrade from a websocket connection to AJAX/COMET long-polling if the player uses an older browser.</li>
|
||||
<li><strong>evennia_gui.js</strong> is the default front-end and implements a traditional and stable "telnet-like" interface. The html part uses uses Django templating to make it easy to customize and expand. Since this simply makes use of the resources offered by evennia.js, one could pretty easily slip in some other gui library here, or set up calls to get all sorts of interesting information from the server (which talks back using inputfuncs).</li>
|
||||
</ul>
|
||||
<p>There are a truckload of more updates and features that are covered <a href="https://groups.google.com/forum/#%21category-topic/evennia/evennia-news/Ik8hi7ajZlI">on the mailing list</a>.</p>
|
||||
|
||||
|
|
@ -866,26 +955,20 @@
|
|||
<p>The first steps, which has been done a while was converting the SSH/SSL and IRC input/output protocols to use the new protocol infrastructure (telnet and websockets was done since before). That's just under-the-hood stuff though. Today I finished the changes to the Monitor/TickerHandlers, which may be of more general interest.</p>
|
||||
<p>With the changes to the the way OOB (Out-Of-Band) messages are passing through Evennia (see <a href="https://groups.google.com/forum/#%21category-topic/evennia/evennia-news/xWQu_YVm14k">this mailing list post</a> for more details), the <strong>OOBHandler</strong> is no more. As discussed there, the handling of incoming data is becoming a lot freer and will be easily expandable to everyone wanting to make for a custom client experience. The idea is thus for Evennia to offer <em>resources</em> for various input commands to make use of, rather than prescribing such functionality in a monolothic way in the OOBHandler. There were three main functionalities the OOBHandler offered, and which will now be offered by separate components:</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p><strong>Direct function callback.</strong> The instruction from the client should be able to trigger a named server-side function. This is the core of the inputfunc system described previously.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Field/Attribute monitoring</strong>. The client should be able to request <em>monitoring</em> of an object's database fields or Attributes. For example, the client may request to be notified whenever the Character's "health" Attribute changes in some way. This is now handled by the new <em>monitorhandler</em>. See below.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Non-persistent function repeats.</strong> One should be able to set up a repeating ticker that survives a server reload but does <em>not</em> survive a cold shutdown - this mimics the life cycle of server Sessions. Scripts could do this already but I wanted to be able to use the TickerHandler for quick assignment. Problem was that the Tickerhandler in master branch is not only always-persistent, it also only calls <em>database</em> <em>object methods</em>. So I have now expanded the tickerhandler to also accept arbitrary module functions, without any connection to a database object.</p>
|
||||
</li>
|
||||
<li><strong>Direct function callback.</strong> The instruction from the client should be able to trigger a named server-side function. This is the core of the inputfunc system described previously.</li>
|
||||
<li><strong>Field/Attribute monitoring</strong>. The client should be able to request <em>monitoring</em> of an object's database fields or Attributes. For example, the client may request to be notified whenever the Character's "health" Attribute changes in some way. This is now handled by the new <em>monitorhandler</em>. See below.</li>
|
||||
<li><strong>Non-persistent function repeats.</strong> One should be able to set up a repeating ticker that survives a server reload but does <em>not</em> survive a cold shutdown - this mimics the life cycle of server Sessions. Scripts could do this already but I wanted to be able to use the TickerHandler for quick assignment. Problem was that the Tickerhandler in master branch is not only always-persistent, it also only calls <em>database</em> <em>object methods</em>. So I have now expanded the tickerhandler to also accept arbitrary module functions, without any connection to a database object.</li>
|
||||
</ol>
|
||||
<h2>The MonitorHandler</h2>
|
||||
<p><strong>evennia.MONITOR_HANDLER</strong> is the new singleton managing monitoring of on-object field/attribute changes. It is used like this:</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>MONITOR_HANDLER.add(obj, field_or_attrname, callback, **kwargs)
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span> MONITOR_HANDLER.add(obj, field_or_attrname, callback, **kwargs)
|
||||
</pre></div>
|
||||
|
||||
<p>Here <strong>obj</strong> is a database entity, like a Character or another Object. The <strong>field_or_attrname</strong> is a string giving the name of a <strong>db_</strong>* database field (like <strong>"db_key", "db_location"</strong> etc). Any name not starting with <strong>db_</strong> is assumed to be the name of an on-object Attribute (like <strong>"health"</strong>). Henceforth, whenever this field or attribute changes in any way (that is, whenever it is re-saved to the database), the <strong>callback</strong> will be called with the optional <strong>kwargs</strong>, as well as a way to easily get to the changed value. As all handlers you can also list and remove monitors using the standard <strong>MONITOR_HANDLER</strong>.<strong>remove()</strong>, <strong>.all()</strong> etc.</p>
|
||||
<h2>The TickerHandler</h2>
|
||||
<p><strong>evennia.TICKER_HANDLER</strong> should be familiar to Evennia users from before - it's been around for a good while. It allows for creating arbitrary "tickers" that is being "subscribed" to - one ticker will call all subscribers rather than each object or function having its own timer.</p>
|
||||
<p>Before, the syntax for adding a new ticker required you specify a typeclassed entity and the name of the method on it to call every N seconds. This will now change. This is the new callsign for creating a new ticker:</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>TICKER_HANDLER.add(interval, callback, idstring="", persistent=True, *args, **kwargs)
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span> TICKER_HANDLER.add(interval, callback, idstring="", persistent=True, *args, **kwargs)
|
||||
</pre></div>
|
||||
|
||||
<p>Here**, interval,** like before, defines how often to call **callback(*args, <strong>kwargs)</strong>.</p>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -12,8 +12,100 @@
|
|||
<script src="../javascripts/scale.fix.js">
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 1.0 released!: <br>
|
||||
<!--meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 2.0.0 released today: <p><img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Field_Hamois_Belgium_Luc_Viatour.jpg" alt="screenshot" />
|
||||
<br></p>
|
||||
<p>As part of our new use of <a href="https://semver.org/">semantic versioning</a>, Evennia
|
||||
2.0.0 was released today. Evennia is a Python <code>MU*</code> creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, <em>maybe</em>. It depends on your use-case. Read on.</p>
|
||||
<p>In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.</p>
|
||||
<h2>New version of the ExtendedRoom</h2>
|
||||
<p>The main thing that <em>may</em> be backwards income is the <code>ExtendedRoom</code> contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the <code>ExtendedRoom</code> contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.</p>
|
||||
<p>Here are the <a href="https://github.com/evennia/evennia/discussions/3200">new features</a>:</p>
|
||||
<ul>
|
||||
<li>All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The <code>season</code> and <code>time_of_day</code> are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.</li>
|
||||
<li>Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute <code>desc_<roomstate></code> to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
<code>desc</code> Attribute is used.</li>
|
||||
<li>In the old contrib, you could add special tags, like <code><morning>...</morning></code>
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The <code>ExtendedRoom</code> understands the new <code>state</code> inline function. This
|
||||
can be used with <em>any</em> room state (including seasons and time-of-day). For
|
||||
example: <code>$state(morning, The morning sun is shining in.)</code> or
|
||||
<code>$state(burning, This place is on fire!)</code>.</li>
|
||||
<li>The room still supports <code>details</code> - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.</li>
|
||||
<li>The <code>ExtendedRoom</code> now also has simple support for echoing random messages now
|
||||
and then to the room.</li>
|
||||
</ul>
|
||||
<p>Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.</p>
|
||||
<p>Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the <code>ExtendedRoom</code> contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.</p>
|
||||
<h2>More on the Beginner Tutorial</h2>
|
||||
<p>Most of my time has been spent continuing to work on the new <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html">Beginner Tutorial</a>. Notably on <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html">part three</a>, where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on</p>
|
||||
<ul>
|
||||
<li>Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
<em>Knave</em> TTRPG ruleset).</li>
|
||||
<li>Organizing Player Character data, and character generation.</li>
|
||||
<li>In-game objects and items.</li>
|
||||
<li>Handling equipment and weapons.</li>
|
||||
<li>In-game rooms.</li>
|
||||
<li>Non-player characters.</li>
|
||||
<li>Two types of Combat systems (Twitch-based and Turn based).</li>
|
||||
</ul>
|
||||
<p>TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.</p>
|
||||
<h2>A truckload of new features!</h2>
|
||||
<p>As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.</p>
|
||||
<ul>
|
||||
<li><code>Containers</code> - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).</li>
|
||||
<li>The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).</li>
|
||||
<li>New <code>logger.delete_log</code> method for deleting log files from inside the server (aMiss-aWry).</li>
|
||||
<li>For those intending to override the <code>SessionHandler</code>, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).</li>
|
||||
<li>New <code>create_channel(attr=...)</code> keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in <code>settings.DEFAULT_CHANNELS</code> (me)</li>
|
||||
<li>Attributes will now properly save Python <code>deques</code> with <code>maxlen=...</code> set (me).</li>
|
||||
<li><a href="https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty"><code>TagCategoryProperty</code></a> - A new way to define tags with a particular category on a class at creation-time, without having to do so in the <code>at_object_creation</code> method (me).</li>
|
||||
<li>A lot of bug fixes; <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html">see the CHANGELOG</a> for all the details!</li>
|
||||
</ul>
|
||||
<h2>Continuing</h2>
|
||||
<p>Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the <a href="https://discord.gg/AJJpcRUhtF">evennia discord</a>, which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.</p>
|
||||
<p>In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)</p>
|
||||
<p>Have a nice summer!</p>
|
||||
...
|
||||
---
|
||||
Evennia is a modern Python library and server for creating text-based
|
||||
|
|
@ -49,6 +141,22 @@
|
|||
<div class="devblog-calendar">
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<a href="2023.html"> 2023 (1)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 2.0.0 released today</span>
|
||||
<a href="2023.html#2023-06-10-evennia-2.0.0-released-today"> Evennia 2.0.0 rel...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2022.html"> 2022 (4)
|
||||
|
||||
|
|
@ -56,26 +164,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!">Dec 3
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!"> Evennia 1.0 relea...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two">Sep 17
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two"> Project plans and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore">Jul 5
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore"> Tutorial-writing ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans">Jan 6
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans"> Into 2022 with th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -90,20 +198,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!">Nov 18
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!"> The blog moved!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?">Mar 21
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?"> Where do I begin?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!">Jan 1
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!"> Happy New Years 2...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -118,20 +226,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Nov 14
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Evennia 0.9.5 rele...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">Oct 20
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">On using Markdown ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Apr 14
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Spring updates whi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -146,44 +254,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Blackifying and fi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Jul 4
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Evennia 0.9 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">May 26
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">May 18
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">Podcast about Even...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Apr 25
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Steaming on Eating...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-01-02-into-2019">Jan 2
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<a href="2019.html#2019-01-02-into-2019">Into 2019
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -198,26 +306,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Evennia 0.8 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Aug 18
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Inline building in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Jan 27
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Kicking into gear ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff">Jan 5
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff"> New year, new stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -232,38 +340,38 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Oct 29
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Getting a MUD RP s...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Oct 1
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Evennia in Hacktob...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Sep 20
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Evennia 0.7 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app">Aug 25
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app"> Renaming Django's...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">Apr 23
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">The luxury of a cr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">News items from th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -278,44 +386,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Nov 30
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Birthday retrospec...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Oct 13
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Season of fixes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">Jul 1
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">The art of sharing...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">May 31
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">Evennia in Pictures
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!">May 22
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!"> Evennia 0.6!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Mar 24
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Technical stuff ha...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Feb 14
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Climbing up Branches
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -330,80 +438,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">Dec 17
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">A summary of a year
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!">Nov 12
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!"> MIT uses Evennia!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Oct 11
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Illustrations and ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-02-emoting-system">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<a href="2015.html#2015-10-02-emoting-system">Emoting System
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`">Sep 29
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`"> Evennia on `podca...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Sep 24
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Pushing through a ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">Aug 27
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">A wagon load of po...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve"">Jun 22
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve""> Announcing the Ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-15-need-your-help!">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<a href="2015.html#2015-06-15-need-your-help!"> Need your help!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-30-dreaming-big?">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<a href="2015.html#2015-05-30-dreaming-big?"> Dreaming big?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-11-things-goin-on">May 11
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<a href="2015.html#2015-05-11-things-goin-on">Things goin on
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">Documenting Python...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Jan 19
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Building Django pr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -418,44 +526,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Slowly moving thro...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Aug 4
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Dance my puppets
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Jun 30
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Webby stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Bringing back Pyth...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1">May 16
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1"> Imaginary Realiti...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Feb 8
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Moving from Google...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Jan 24
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Looking forwards a...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -470,32 +578,32 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Dec 16
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Imaginary Realitie...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Nov 28
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Out of band mergings
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">Oct 22
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">A list of Evennia ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-05-13-one-to-many">May 13
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<a href="2013.html#2013-05-13-one-to-many">One to Many
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Jan 29
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Churning behind th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -510,80 +618,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Oct 28
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Evennia changes to...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-05-community-interest">Oct 5
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<a href="2012.html#2012-10-05-community-interest">Community interest
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Aug 31
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Combining Twisted ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-16-taking-command">Aug 16
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<a href="2012.html#2012-08-16-taking-command">Taking command
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Jun 26
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Extending time and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Jun 11
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Coding from the in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things"> Dummies doing (ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Mar 26
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Shortcuts to goodn...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Feb 22
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Dummies doing dumm...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Feb 17
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Commands and you
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-...">Feb 15
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-..."> Such a small thin...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">About this dev blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks"> Evennia's open bo...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -663,26 +771,21 @@
|
|||
<h3>Briefly on Prototypes</h3>
|
||||
<p>The <em>Prototype</em> is an Evennia concept that has been around a good while. The prototype is a Python dictionary that holds specific keys with values representing properties on a game object. Here's an example of a simple prototype:</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span> {"key": "My house",
|
||||
|
||||
"typeclass": "typeclasses.houses.MyHouse"}
|
||||
</pre></div>
|
||||
|
||||
<p>By passing this dict to the spawner, a new object named "My house" will be created. It will be set up with the given typeclass (a 'typeclass' is, in Evennia lingo, a Python class with a database backend). A prototype can specify all aspects of an in-game object - its attributes (like description and other game-specific properties), tags, aliases, location and so on. Prototypes also support inheritance - so you can expand on an existing template without having to add everything fresh every time.</p>
|
||||
<p>There are two main reasons for the Prototypes existing in Evennia:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>They allow you to customize <em>individual</em> objects easier. For example you could have a 'Goblin' base prototype with inheriting prototypes Goblin Wizard" and "Goblin Chieftain" - all using the same Typeclass, but with different Attributes, equipment etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Prototypes can be manipulated and scripted by builders without needing full Python access. This means that while the Typeclasses are designed and supplied by the Python developer, the builders can then use that typeclass to make very different types of object instances in-game.</p>
|
||||
</li>
|
||||
<li>They allow you to customize <em>individual</em> objects easier. For example you could have a 'Goblin' base prototype with inheriting prototypes Goblin Wizard" and "Goblin Chieftain" - all using the same Typeclass, but with different Attributes, equipment etc.</li>
|
||||
<li>Prototypes can be manipulated and scripted by builders without needing full Python access. This means that while the Typeclasses are designed and supplied by the Python developer, the builders can then use that typeclass to make very different types of object instances in-game.</li>
|
||||
</ul>
|
||||
<h3>What's new</h3>
|
||||
<p>As said, Prototypes have been around for a good while in Evennia. But in the past they were either manually entered directly as a dict on the command line, or created in code and read from a Python module. The former solution is cumbersome and requires that you know how to build a proper-syntax Python dictionary. The latter requires server code access, making them less useful to builders than they could be.</p>
|
||||
<p><em>Note: If you are visually impaired, each image is also a link to a text-only version.</em></p>
|
||||
<p><a href="https://pastebin.com/raw/3YNtAdvz"><img src="https://2.bp.blogspot.com/-ht9SIPcUxfc/W3f0xcl2HdI/AAAAAAAAJIk/VSk4VaBMhTc3J8ZaTnar9X2Rws-LOMiqACLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B12-26-12.png" alt="OLC index" title="OLC index 1" /></a></p>
|
||||
<p>In Evennia 0.8, while you can still insert the Prototype as a raw dict, <strong>spawn/menu</strong> or the new <strong>olc</strong> command opens a new menu-driven interface.</p>
|
||||
<p><a href="https://pastebin.com/raw/4UbUNGmG"><img src="https://3.bp.blogspot.com/-tdauL-B6j1E/W3f01ltKlzI/AAAAAAAAJIs/Q5-cIY6AcGU_IXXasdzPWec7cxN061WrwCLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B12-27-37.png" alt="Select a prototype to load. This will replace any prototype currently being edited! ___________________________________________________________________________________________________ Select with <num>. Other actions: examine <num> | delete <num> Back (index) | Validate prototype | Quit 1: goblin_archer 5: goblin_archwizard 2: goblin_wizard 3: goblin 4: archwizard_mixin " title="Prototype loading" /></a></p>
|
||||
<p>In Evennia 0.8, while you can still insert the Prototype as a raw dict, <strong>spawn/menu</strong> or the new <strong>olc</strong> command opens a new menu-driven interface.<br />
|
||||
<a href="https://pastebin.com/raw/4UbUNGmG"><img src="https://3.bp.blogspot.com/-tdauL-B6j1E/W3f01ltKlzI/AAAAAAAAJIs/Q5-cIY6AcGU_IXXasdzPWec7cxN061WrwCLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B12-27-37.png" alt="Select a prototype to load. This will replace any prototype currently being edited! ___________________________________________________________________________________________________ Select with <num>. Other actions: examine <num> | delete <num> Back (index) | Validate prototype | Quit 1: goblin_archer 5: goblin_archwizard 2: goblin_wizard 3: goblin 4: archwizard_mixin " title="Prototype loading" /></a></p>
|
||||
<p>More importantly, builders can now create, save and load prototypes in the database for themselves and other builders to use. The prototypes can be tagged and searched as a joint resource. Builders can also lock prototypes if others are not to be able to read or use them to spawn things. Developers can still supply module-based "read-only" prototypes (for use as starting points or examples to their Builders, for example).</p>
|
||||
<p><a href="https://pastebin.com/raw/dUGiSLDL"><img src="https://2.bp.blogspot.com/-XFm3KqhLBwE/W3f93upyVLI/AAAAAAAAJJA/eZDWGPHM93MWvt2T5W8Ytr4cHstGg8iXACLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B13-04-48.png" alt="Found 1 match. (Warning: creating a prototype will overwrite the current prototype!) ____________________________________________________________________________________ Actions: examine <num> | create prototype from object <num> Back (index) | Quit 1: Griatch(#1)" title="Load prototype from object" /></a></p>
|
||||
<p>You can now also use the menu to search for and create a new Prototype based on <em>an existing object</em> (if you have access to do so). This makes it quick to start up a new prototype and tweak it for spawning other similar objects. Of course you could spawn temporary objects without saving the prototype as well.</p>
|
||||
|
|
@ -723,47 +826,31 @@
|
|||
<p>The last few weeks I have reworked the way <a href="http://www.evennia.com/">Evennia</a>'s startup procedure works. This is now finished in the <em>develop</em> branch so I thought I'd mention a little what's going on.</p>
|
||||
<p>Evennia, being a server for creating and running text-games (MU*s), consists of two main processes:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <em>Portal</em> - this is what players connect to with their clients.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <em>Server</em> - this is the actual game, with the database etc. This can be shutdown and started again without anyone connected to the Portal getting kicked from the game. This allows for hot-adding new Python code into the running Server without any downtime.</p>
|
||||
</li>
|
||||
<li>The <em>Portal</em> - this is what players connect to with their clients.</li>
|
||||
<li>The <em>Server</em> - this is the actual game, with the database etc. This can be shutdown and started again without anyone connected to the Portal getting kicked from the game. This allows for hot-adding new Python code into the running Server without any downtime.</li>
|
||||
</ul>
|
||||
<p>Since Evennia should be easy to set up <em>and</em> also run easily on Windows as well as on Linux/Mac, we have foregone using the linux process management services but instead offered our own solution. This is how the reload mechanism currently looks in master branch:</p>
|
||||
<p><a href="https://1.bp.blogspot.com/-U98LnVTJF7Y/WmzvHbQN2NI/AAAAAAAAH9U/10u8n91y56MdyW4Fmuv9k5Abk79TCCtUgCLcBGAs/s1600/portal_server_reboot_master.png"><img src="https://1.bp.blogspot.com/-U98LnVTJF7Y/WmzvHbQN2NI/AAAAAAAAH9U/10u8n91y56MdyW4Fmuv9k5Abk79TCCtUgCLcBGAs/s400/portal_server_reboot_master.png" alt="" /></a></p>
|
||||
<p>Here I've excluded connections irrelevant to reloading, such as the Twisted AMP connection between Portal and Server. Dashed lines suggest a more "temporary" connection than a solid line.</p>
|
||||
<p>The <strong><em>Launcher</em></strong> is the evennia program one uses to interact with the Server in the terminal/console. You give it commands like evennia start/stop/reload.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>When <strong>starting</strong>, the Launcher spawns a new program, the <em><strong>Runner</strong></em>, and then exits. The Runner stays up and starts the Portal and Server. When it starts the Server, it does so in a blocking way and sits waiting in a stalled loop for the Server process to end. As the Server and Portal start they record their current process-ids in <em><strong>.pid files</strong></em>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When <strong>reloading</strong>, the Launcher writes a flag in a little <em><strong>.restart</strong></em> <em><strong>file</strong></em>. The Launcher then looks up the Server's .pid file and sends a SIGINT signal to that process to tell it to gracefully shut down. As the Server process dies, the Runner next looks at the Server's .restart file. If that indicates a reload is desired, The Runner steps in its loop and starts up a new Server process.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When <strong>stopping,</strong> everything happens like when reloading, except the .restart file tells the Runner that it should just exit the loop and let the Server stay down. The Launcher also looks at the Portal's .pid file and sends a SIGINT signal to kill it. Internally the processes catch the SIGINT and close gracefully.</p>
|
||||
</li>
|
||||
<li>When <strong>starting</strong>, the Launcher spawns a new program, the <em><strong>Runner</strong></em>, and then exits. The Runner stays up and starts the Portal and Server. When it starts the Server, it does so in a blocking way and sits waiting in a stalled loop for the Server process to end. As the Server and Portal start they record their current process-ids in <em><strong>.pid files</strong></em>.</li>
|
||||
<li>When <strong>reloading</strong>, the Launcher writes a flag in a little <em><strong>.restart</strong></em> <em><strong>file</strong></em>. The Launcher then looks up the Server's .pid file and sends a SIGINT signal to that process to tell it to gracefully shut down. As the Server process dies, the Runner next looks at the Server's .restart file. If that indicates a reload is desired, The Runner steps in its loop and starts up a new Server process.</li>
|
||||
<li>When <strong>stopping,</strong> everything happens like when reloading, except the .restart file tells the Runner that it should just exit the loop and let the Server stay down. The Launcher also looks at the Portal's .pid file and sends a SIGINT signal to kill it. Internally the processes catch the SIGINT and close gracefully.</li>
|
||||
</ul>
|
||||
<p>The original reason for this Server-Portal-Runner setup is that the Portal is <em>also</em> reloadable in the same way (it's not shown above). But over time I've found that having the Portal reloadable is not very useful - since players get disconnected when the Portal reloads one can just as well stop and start both processes. There are also a few issues with the setup, such as the .pid files going stale if the server is killed in some catastrophic way and various issues with reliably sending signals under Windows. Also, the interactive mode works a little strangely since closing the terminal will actually kill the Runner, not the Server/Portal - so they will keep on running except they can no longer reload ...</p>
|
||||
<p>It overall feels a little ... fiddly.</p>
|
||||
<p>The original reason for this Server-Portal-Runner setup is that the Portal is <em>also</em> reloadable in the same way (it's not shown above). But over time I've found that having the Portal reloadable is not very useful - since players get disconnected when the Portal reloads one can just as well stop and start both processes. There are also a few issues with the setup, such as the .pid files going stale if the server is killed in some catastrophic way and various issues with reliably sending signals under Windows. Also, the interactive mode works a little strangely since closing the terminal will actually kill the Runner, not the Server/Portal - so they will keep on running except they can no longer reload ...<br />
|
||||
It overall feels a little ... fiddly.</p>
|
||||
<p>In develop branch, this is now the new process management setup:</p>
|
||||
<p><a href="https://4.bp.blogspot.com/-R0ziGF8cMPc/Wmz0ppbJkQI/AAAAAAAAH9o/2BNcUTEqvBwkmlZAy7Q74Xmww_LkpB3wgCLcBGAs/s1600/portal_server_reboot_develop.png"><img src="https://4.bp.blogspot.com/-R0ziGF8cMPc/Wmz0ppbJkQI/AAAAAAAAH9o/2BNcUTEqvBwkmlZAy7Q74Xmww_LkpB3wgCLcBGAs/s400/portal_server_reboot_develop.png" alt="" /></a></p>
|
||||
<p>The Portal is now a Twisted <a href="https://twistedmatrix.com/documents/current/api/twisted.protocols.amp.html">AMP</a> server, while the Evennia Server and Launcher are AMP clients. The Runner is no more.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>When <strong>starting</strong>, the Launcher spawns the Portal and tries to connect to it as an AMP client as soon as it can. The Portal in turn spawns the Server. When the Server AMP client connects back to the Portal, the Portal reports back to the Launcher over the AMP connection. The Launcher then prints to the user and disconnects.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When <strong>reloading</strong>, the Launcher connects to the Portal and gives it a reload-command. The Portal then tells the Server (over their AMP connection) to shutdown. Once the Portal sees that the Server has disconnected, it spawns a new Server. Since the Portal itself knows if a reload or shutdown is desired no external .restart (or .pid) files are needed. It reports the status back to the Launcher that can then disconnect.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When <strong>stopping</strong>, the Launcher sends the "Stop Server" command to the Portal. The Portal tells the Server to shut down and when it has done so it reports back to the Launcher that the Server has stopped. The Launcher then sends the "Stop Portal" command to also stop the Portal. The Launcher waits until the Portal's AMP port dies, at which point it reports the shutdown to the user and stops itself.</p>
|
||||
</li>
|
||||
<li>When <strong>starting</strong>, the Launcher spawns the Portal and tries to connect to it as an AMP client as soon as it can. The Portal in turn spawns the Server. When the Server AMP client connects back to the Portal, the Portal reports back to the Launcher over the AMP connection. The Launcher then prints to the user and disconnects.</li>
|
||||
<li>When <strong>reloading</strong>, the Launcher connects to the Portal and gives it a reload-command. The Portal then tells the Server (over their AMP connection) to shutdown. Once the Portal sees that the Server has disconnected, it spawns a new Server. Since the Portal itself knows if a reload or shutdown is desired no external .restart (or .pid) files are needed. It reports the status back to the Launcher that can then disconnect.</li>
|
||||
<li>When <strong>stopping</strong>, the Launcher sends the "Stop Server" command to the Portal. The Portal tells the Server to shut down and when it has done so it reports back to the Launcher that the Server has stopped. The Launcher then sends the "Stop Portal" command to also stop the Portal. The Launcher waits until the Portal's AMP port dies, at which point it reports the shutdown to the user and stops itself.</li>
|
||||
</ul>
|
||||
<p>So far I really like how this new setup works and while there were some initial issues on Windows (spawning new processes does not quite work they way you expect on that platform) I think this should conceptually be more OS-agnostic than sending kill-signals.</p>
|
||||
<p>This solution gives much more control over the processes. It's easy to start/stop the Server behind the portal at will. The Portal knows the Server state and stores the executable-string needed to start the Server. Thus the Server can also itself request to be reloaded by just mimicking the Launcher's instructions.</p>
|
||||
<p>The launcher is now only a client connecting to a port, so one difference with this setup is that there is no more 'interactive' mode - that is the Server/Portal will always run as daemons rather than giving log messages directly in the terminal/console. For that reason the Launcher instead has an in-built log-tailing mechanism now. With this the launcher will combine the server/portal logs and print them in real time to easily see errors etc during development.</p>
|
||||
<p>This solution gives much more control over the processes. It's easy to start/stop the Server behind the portal at will. The Portal knows the Server state and stores the executable-string needed to start the Server. Thus the Server can also itself request to be reloaded by just mimicking the Launcher's instructions.<br />
|
||||
The launcher is now only a client connecting to a port, so one difference with this setup is that there is no more 'interactive' mode - that is the Server/Portal will always run as daemons rather than giving log messages directly in the terminal/console. For that reason the Launcher instead has an in-built log-tailing mechanism now. With this the launcher will combine the server/portal logs and print them in real time to easily see errors etc during development.</p>
|
||||
<p>The merger of the develop branch is still a good bit off, but anyone may try it out already here: https://github.com/evennia/evennia/tree/develop . Report problems to the issue tracker as usual.</p>
|
||||
|
||||
<footer class="devblog-footer">
|
||||
|
|
|
|||
|
|
@ -12,8 +12,100 @@
|
|||
<script src="../javascripts/scale.fix.js">
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 1.0 released!: <br>
|
||||
<!--meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 2.0.0 released today: <p><img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Field_Hamois_Belgium_Luc_Viatour.jpg" alt="screenshot" />
|
||||
<br></p>
|
||||
<p>As part of our new use of <a href="https://semver.org/">semantic versioning</a>, Evennia
|
||||
2.0.0 was released today. Evennia is a Python <code>MU*</code> creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, <em>maybe</em>. It depends on your use-case. Read on.</p>
|
||||
<p>In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.</p>
|
||||
<h2>New version of the ExtendedRoom</h2>
|
||||
<p>The main thing that <em>may</em> be backwards income is the <code>ExtendedRoom</code> contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the <code>ExtendedRoom</code> contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.</p>
|
||||
<p>Here are the <a href="https://github.com/evennia/evennia/discussions/3200">new features</a>:</p>
|
||||
<ul>
|
||||
<li>All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The <code>season</code> and <code>time_of_day</code> are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.</li>
|
||||
<li>Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute <code>desc_<roomstate></code> to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
<code>desc</code> Attribute is used.</li>
|
||||
<li>In the old contrib, you could add special tags, like <code><morning>...</morning></code>
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The <code>ExtendedRoom</code> understands the new <code>state</code> inline function. This
|
||||
can be used with <em>any</em> room state (including seasons and time-of-day). For
|
||||
example: <code>$state(morning, The morning sun is shining in.)</code> or
|
||||
<code>$state(burning, This place is on fire!)</code>.</li>
|
||||
<li>The room still supports <code>details</code> - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.</li>
|
||||
<li>The <code>ExtendedRoom</code> now also has simple support for echoing random messages now
|
||||
and then to the room.</li>
|
||||
</ul>
|
||||
<p>Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.</p>
|
||||
<p>Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the <code>ExtendedRoom</code> contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.</p>
|
||||
<h2>More on the Beginner Tutorial</h2>
|
||||
<p>Most of my time has been spent continuing to work on the new <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html">Beginner Tutorial</a>. Notably on <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html">part three</a>, where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on</p>
|
||||
<ul>
|
||||
<li>Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
<em>Knave</em> TTRPG ruleset).</li>
|
||||
<li>Organizing Player Character data, and character generation.</li>
|
||||
<li>In-game objects and items.</li>
|
||||
<li>Handling equipment and weapons.</li>
|
||||
<li>In-game rooms.</li>
|
||||
<li>Non-player characters.</li>
|
||||
<li>Two types of Combat systems (Twitch-based and Turn based).</li>
|
||||
</ul>
|
||||
<p>TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.</p>
|
||||
<h2>A truckload of new features!</h2>
|
||||
<p>As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.</p>
|
||||
<ul>
|
||||
<li><code>Containers</code> - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).</li>
|
||||
<li>The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).</li>
|
||||
<li>New <code>logger.delete_log</code> method for deleting log files from inside the server (aMiss-aWry).</li>
|
||||
<li>For those intending to override the <code>SessionHandler</code>, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).</li>
|
||||
<li>New <code>create_channel(attr=...)</code> keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in <code>settings.DEFAULT_CHANNELS</code> (me)</li>
|
||||
<li>Attributes will now properly save Python <code>deques</code> with <code>maxlen=...</code> set (me).</li>
|
||||
<li><a href="https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty"><code>TagCategoryProperty</code></a> - A new way to define tags with a particular category on a class at creation-time, without having to do so in the <code>at_object_creation</code> method (me).</li>
|
||||
<li>A lot of bug fixes; <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html">see the CHANGELOG</a> for all the details!</li>
|
||||
</ul>
|
||||
<h2>Continuing</h2>
|
||||
<p>Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the <a href="https://discord.gg/AJJpcRUhtF">evennia discord</a>, which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.</p>
|
||||
<p>In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)</p>
|
||||
<p>Have a nice summer!</p>
|
||||
...
|
||||
---
|
||||
Evennia is a modern Python library and server for creating text-based
|
||||
|
|
@ -49,6 +141,22 @@
|
|||
<div class="devblog-calendar">
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<a href="2023.html"> 2023 (1)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 2.0.0 released today</span>
|
||||
<a href="2023.html#2023-06-10-evennia-2.0.0-released-today"> Evennia 2.0.0 rel...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2022.html"> 2022 (4)
|
||||
|
||||
|
|
@ -56,26 +164,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!">Dec 3
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!"> Evennia 1.0 relea...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two">Sep 17
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two"> Project plans and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore">Jul 5
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore"> Tutorial-writing ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans">Jan 6
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans"> Into 2022 with th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -90,20 +198,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!">Nov 18
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!"> The blog moved!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?">Mar 21
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?"> Where do I begin?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!">Jan 1
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!"> Happy New Years 2...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -118,20 +226,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Nov 14
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Evennia 0.9.5 rele...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">Oct 20
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">On using Markdown ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Apr 14
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Spring updates whi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -146,44 +254,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Blackifying and fi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Jul 4
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Evennia 0.9 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">May 26
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">May 18
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">Podcast about Even...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Apr 25
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Steaming on Eating...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-01-02-into-2019">Jan 2
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<a href="2019.html#2019-01-02-into-2019">Into 2019
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -198,26 +306,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Evennia 0.8 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Aug 18
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Inline building in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Jan 27
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Kicking into gear ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff">Jan 5
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff"> New year, new stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -232,38 +340,38 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Oct 29
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Getting a MUD RP s...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Oct 1
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Evennia in Hacktob...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Sep 20
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Evennia 0.7 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app">Aug 25
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app"> Renaming Django's...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">Apr 23
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">The luxury of a cr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">News items from th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -278,44 +386,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Nov 30
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Birthday retrospec...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Oct 13
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Season of fixes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">Jul 1
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">The art of sharing...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">May 31
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">Evennia in Pictures
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!">May 22
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!"> Evennia 0.6!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Mar 24
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Technical stuff ha...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Feb 14
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Climbing up Branches
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -330,80 +438,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">Dec 17
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">A summary of a year
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!">Nov 12
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!"> MIT uses Evennia!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Oct 11
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Illustrations and ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-02-emoting-system">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<a href="2015.html#2015-10-02-emoting-system">Emoting System
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`">Sep 29
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`"> Evennia on `podca...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Sep 24
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Pushing through a ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">Aug 27
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">A wagon load of po...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve"">Jun 22
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve""> Announcing the Ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-15-need-your-help!">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<a href="2015.html#2015-06-15-need-your-help!"> Need your help!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-30-dreaming-big?">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<a href="2015.html#2015-05-30-dreaming-big?"> Dreaming big?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-11-things-goin-on">May 11
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<a href="2015.html#2015-05-11-things-goin-on">Things goin on
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">Documenting Python...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Jan 19
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Building Django pr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -418,44 +526,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Slowly moving thro...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Aug 4
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Dance my puppets
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Jun 30
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Webby stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Bringing back Pyth...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1">May 16
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1"> Imaginary Realiti...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Feb 8
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Moving from Google...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Jan 24
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Looking forwards a...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -470,32 +578,32 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Dec 16
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Imaginary Realitie...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Nov 28
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Out of band mergings
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">Oct 22
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">A list of Evennia ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-05-13-one-to-many">May 13
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<a href="2013.html#2013-05-13-one-to-many">One to Many
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Jan 29
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Churning behind th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -510,80 +618,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Oct 28
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Evennia changes to...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-05-community-interest">Oct 5
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<a href="2012.html#2012-10-05-community-interest">Community interest
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Aug 31
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Combining Twisted ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-16-taking-command">Aug 16
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<a href="2012.html#2012-08-16-taking-command">Taking command
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Jun 26
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Extending time and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Jun 11
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Coding from the in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things"> Dummies doing (ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Mar 26
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Shortcuts to goodn...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Feb 22
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Dummies doing dumm...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Feb 17
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Commands and you
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-...">Feb 15
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-..."> Such a small thin...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">About this dev blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks"> Evennia's open bo...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -642,11 +750,14 @@
|
|||
</blockquote>
|
||||
<h2>On Black</h2>
|
||||
<p>Evennia's source code is extensively documented and was <em>sort of</em> adhering to the Python formatting standard PEP8. But many places were sort of hit-and-miss and others were formatted with slight variations due to who wrote the code.</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>
|
||||
</pre></div>
|
||||
|
||||
<p>After pre-work and recommendation by Greg Taylor, Evennia has adopted the <a href="https://pypi.org/project/black/">black autoformatter</a> for its source code. I'm not really convinced that black produces the best output of all possible outputs every time, but as Greg puts it, it's at least consistent in style. We use a line width of 100.</p>
|
||||
<p>I have set it up so that whenever a new commit is added to the repo, the black formatter will run on it. It may still produce line widths >100 at times (especially for long strings), but otherwise this reduces the number of different PEP8 infractions in the code a lot.</p>
|
||||
<h2>On Python3</h2>
|
||||
<p>Overall the move to Python3 appears to have been pretty uneventful for most users. I've not heard almost any complaints or requests for help with converting an existing game.</p>
|
||||
<p>The purely Python2-to-Python3 related bugs have been very limited after launch; almost all have been with unicode/bytes when sending data over the wire.</p>
|
||||
<p>Overall the move to Python3 appears to have been pretty uneventful for most users. I've not heard almost any complaints or requests for help with converting an existing game.<br />
|
||||
The purely Python2-to-Python3 related bugs have been very limited after launch; almost all have been with unicode/bytes when sending data over the wire.</p>
|
||||
<p>People have wholeheartedly adopted the new f-strings though, and some spontaneous PRs have already been made towards converting some of Evennia existing code into using them.</p>
|
||||
<p>Post-launch we moved to Django 2.2.2, but the Django 2+ upgrades have been pretty uneventful so far.Some people had issues installing Twisted on Windows since there was no py3.7 binary wheel (causing them to have to compile it from scratch). The rise of the Linux Subsystem on Windows have alleviated most of this though and I've not seen any Windows install issues in a while.</p>
|
||||
<h2>On Future</h2>
|
||||
|
|
@ -732,34 +843,24 @@
|
|||
<p>The parsing I made actually allows for a more complex syntax, but in the end this was all that was really needed, since the currently 'focused' object does not need to be specified. This is the process of using one object with another:</p>
|
||||
<p><strong>> examine key</strong></p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>~~ key (examining) ~~
|
||||
|
||||
This is a brass key.
|
||||
|
||||
|
||||
|
||||
(To unlock something with it, use insert into <target>)
|
||||
</pre></div>
|
||||
|
||||
<p><strong>> insert into door</strong></p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>You unlock the **door** with the **key**!
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span> You unlock the **door** with the **key**!
|
||||
</pre></div>
|
||||
|
||||
<p>(the <em>into</em> is optional). Here, we focus on the key. We get the key's description and a hint that you can <em>insert</em> it into things. We then insert it into the door, which is another object in the room. The <em>insert</em> command knows that we are focusing on the key already and that it should look into the room for an object door to use this with.</p>
|
||||
<p>Technically, these on-object 'actions' (like <em>insert</em> above), are dynamically generated. Here is an example of the key object:</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">Key</span>(EvscaperoomObject):
|
||||
|
||||
<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">at_focus_insert</span>(<span style="color: #008000">self</span>, caller, <span style="color: #666666">**</span>kwargs):
|
||||
|
||||
target <span style="color: #666666">=</span> kwargs[<span style="color: #BA2121">'args'</span>]
|
||||
|
||||
obj <span style="color: #666666">=</span> caller<span style="color: #666666">.</span>search(obj)
|
||||
|
||||
<span style="color: #008000; font-weight: bold">if</span> <span style="color: #AA22FF; font-weight: bold">not</span> obj:
|
||||
|
||||
<span style="color: #008000; font-weight: bold">return</span>
|
||||
|
||||
<span style="color: #008000; font-weight: bold">if</span> obj<span style="color: #666666">.</span>check_flag(<span style="color: #BA2121">"can_use_key"</span>):
|
||||
|
||||
obj<span style="color: #666666">.</span>handle_insert(<span style="color: #008000">self</span>)
|
||||
</pre></div>
|
||||
|
||||
|
|
@ -767,15 +868,10 @@ This is a brass key.
|
|||
<p>So when you focus on the key and give the <em>insert</em> command, the at_focus_insert method on the key will be called with a target to insert the key into_._ We search for the target (the door in the example), check if it even accepts keys and then pass the key to that object to handle. It would then be up to the door to figure out if this particular key unlocks it.</p>
|
||||
<p>I created a library of base objects that I can just use as mixins for the object I want to create. Here's an example:</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">evscaperoom</span> <span style="color: #008000; font-weight: bold">import</span> objects
|
||||
|
||||
|
||||
|
||||
<span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">Box</span>(objects<span style="color: #666666">.</span>Openable,
|
||||
|
||||
objects<span style="color: #666666">.</span>CodeInput,
|
||||
|
||||
objects<span style="color: #666666">.</span>Movable):
|
||||
|
||||
<span style="color: #3D7B7B; font-style: italic"># ... </span>
|
||||
</pre></div>
|
||||
|
||||
|
|
@ -785,61 +881,36 @@ This is a brass key.
|
|||
<p>I chose to represent states as Python modules in a folder. To be a state, each module needs to have a global-level class <strong>State</strong> inheriting from my new <strong>BaseState</strong> class. This class has methods for initializing and cleaning up the state, as well as was for figuring out which state to go to next. As the system initializes the new state, it gets the current room as argument, so it can modify it.</p>
|
||||
<p>This is a (simplified) example of a state module:</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #3D7B7B; font-style: italic"># module `state_001_start.py` </span>
|
||||
|
||||
|
||||
|
||||
<span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">evscaperoom.state</span> <span style="color: #008000; font-weight: bold">import</span> BaseState
|
||||
|
||||
<span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">evscaperoom</span> <span style="color: #008000; font-weight: bold">import</span> objects
|
||||
|
||||
|
||||
|
||||
MUG_DESC <span style="color: #666666">=</span> <span style="color: #BA2121">""" </span>
|
||||
|
||||
<span style="color: #BA2121">A blue mug filled with a swirling liquid. </span>
|
||||
|
||||
<span style="color: #BA2121">On it is written "DRINK ME" with big letters. </span>
|
||||
|
||||
<span style="color: #BA2121">"""</span>
|
||||
|
||||
|
||||
|
||||
<span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">Mug</span>(objects<span style="color: #666666">.</span>EvscapeRoomObject):
|
||||
|
||||
<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">at_focus_drink</span>(<span style="color: #008000">self</span>, caller, <span style="color: #666666">**</span>kwargs):
|
||||
|
||||
caller<span style="color: #666666">.</span>msg(<span style="color: #BA2121">f"You drink </span><span style="color: #A45A77; font-weight: bold">{</span><span style="color: #008000">self</span><span style="color: #666666">.</span>key<span style="color: #A45A77; font-weight: bold">}</span><span style="color: #BA2121">."</span>)
|
||||
|
||||
<span style="color: #008000">self</span><span style="color: #666666">.</span>next_state() <span style="color: #3D7B7B; font-style: italic"># trigger next state </span>
|
||||
|
||||
|
||||
|
||||
<span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">State</span>(BaseState):
|
||||
|
||||
|
||||
|
||||
hints <span style="color: #666666">=</span> [<span style="color: #BA2121">"You are feeling a little thirsty..."</span>,
|
||||
|
||||
<span style="color: #BA2121">"Drink from the mug, dummy."</span>]
|
||||
|
||||
|
||||
|
||||
next_state <span style="color: #666666">=</span> <span style="color: #BA2121">"state_002_big_puzzle"</span>
|
||||
|
||||
|
||||
|
||||
<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">init</span>(<span style="color: #008000">self</span>):
|
||||
|
||||
mug <span style="color: #666666">=</span> <span style="color: #008000">self</span><span style="color: #666666">.</span>create_object(
|
||||
|
||||
Mug, key<span style="color: #666666">=</span><span style="color: #BA2121">"wooden mug"</span>, aliases<span style="color: #666666">=</span>[<span style="color: #BA2121">"mug"</span>])
|
||||
|
||||
mug<span style="color: #666666">.</span>db<span style="color: #666666">.</span>desc <span style="color: #666666">=</span> MUG_DESC<span style="color: #666666">.</span>strip()
|
||||
</pre></div>
|
||||
|
||||
<p>In this simple state, a mug is created, and when you drink from it, the next state is triggered. The base object has a helper function to trigger the next state since I found that interactive with an object is almost always the reason for switching states.</p>
|
||||
<p>The state-class has a lot of useful properties to set, such as which the next state should be (this can be overridden in case of branching paths). You can also store</p>
|
||||
<p>a sequence of hints specific for that state.</p>
|
||||
<p>The state-class has a lot of useful properties to set, such as which the next state should be (this can be overridden in case of branching paths). You can also store<br />
|
||||
a sequence of hints specific for that state.</p>
|
||||
<h3>Informing the room</h3>
|
||||
<p>I wrote the content in second-person perspective (<em>"You open the door"</em>). This is however a multiplayer game and I didn't intially appreciate how many texts must also exist in a third-party form for the rest of the room to see (<em>"Griatch opens the door"</em>).</p>
|
||||
<p>As the amount of text grew (the Evscaperoom has close to 10 000 lines of code, a lot of which is content strings), it became clear that it would not be feasible to manually supply third-persion version strings as well.</p>
|
||||
|
|
@ -850,13 +921,12 @@ MUG_DESC <span style="color: #666666">=</span> <span style="color: #BA2121">&quo
|
|||
|
||||
<p>The ~ marks text that should be parsed for second/third-person use (I'll discuss the *door marking in the next section). This I then send to a helper method that either sends it only to you (which means it comes back pretty much the same, but without the special markers) or to you <em>and</em> to the room, in which it will look different depending on who receives it:</p>
|
||||
<p>I see</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>You<span style="color: #bbbbbb"> </span><span style="color: #008000; font-weight: bold">open</span><span style="color: #bbbbbb"> </span>the<span style="color: #bbbbbb"> </span><span style="color: #666666">[</span>door<span style="color: #666666">]</span>.<span style="color: #bbbbbb"></span>
|
||||
|
||||
<span style="color: #bbbbbb"> </span>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #bbbbbb"> </span>You<span style="color: #bbbbbb"> </span><span style="color: #008000; font-weight: bold">open</span><span style="color: #bbbbbb"> </span>the<span style="color: #bbbbbb"> </span><span style="color: #666666">[</span>door<span style="color: #666666">]</span>.
|
||||
<span style="color: #bbbbbb"> </span>
|
||||
</pre></div>
|
||||
|
||||
<p>Others see</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>Griatch<span style="color: #bbbbbb"> </span>opens<span style="color: #bbbbbb"> </span>the<span style="color: #bbbbbb"> </span><span style="color: #666666">[</span>door<span style="color: #666666">]</span>.<span style="color: #bbbbbb"> </span>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #bbbbbb"> </span>Griatch<span style="color: #bbbbbb"> </span>opens<span style="color: #bbbbbb"> </span>the<span style="color: #bbbbbb"> </span><span style="color: #666666">[</span>door<span style="color: #666666">]</span>.<span style="color: #bbbbbb"> </span>
|
||||
</pre></div>
|
||||
|
||||
<p>English is luckily pretty easy to use for this kind of automatic translation - in general you can just add an "s" to the end of the verb. I made a simple mapping for the few irregular verbs I ended up using.</p>
|
||||
|
|
@ -925,6 +995,9 @@ MUG_DESC <span style="color: #666666">=</span> <span style="color: #BA2121">&quo
|
|||
<p>I thought making a computer escape-room. Not only can you do things in the computer that you cannot do in the real world, restricting the game to a single room limits so that it's conceivable to actually finish the damned thing in a month.</p>
|
||||
<p>A concern I had was that everyone else in the jam surely must have went for the same obvious idea. In the end that was not an issue at all though.</p>
|
||||
<h2>Basic premises</h2>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>
|
||||
</pre></div>
|
||||
|
||||
<p>I was pretty confident that I would <em>technically</em> be able to create the game in time (not only is Python and Evennia perfect for this kind of fast experimentation and prototyping, I know the engine very well). But that's not enough; I had to first decide on how the thing should actually <em>play.</em> Here are the questions I had to consider:</p>
|
||||
<h3>Room State</h3>
|
||||
<p>An escape room can be seen as going through multiple <em>states</em> as puzzles are solved. For example, you may open a cabinet and that may open up new puzzles to solve. This is fine in a single-player game, but how to handle it in a multi-player environment?</p>
|
||||
|
|
@ -945,33 +1018,23 @@ MUG_DESC <span style="color: #666666">=</span> <span style="color: #BA2121">&quo
|
|||
<p>In principle you could try to 'clean' player inventories when they leave, but not only does it add complexity, there is another issue with players picking things up: It means that <em>the person first to find/pick up the item is the only one that can use it and look at it</em>. Others won't have access until the first player gives it up. Trusting that to anonymous players online is not a good idea.</p>
|
||||
<p>So in the end I arrived at the following conclusions:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>As soon as an item/resource is discovered, <em>everyone</em> in the room must be able to access it immediately.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>There can be <em>no inventory</em>. Nothing can ever be picked up and tied to a specific player.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As soon as a discovery is made, this <em>must be echoed to the entire room</em> (it must not be up to the finder to announce what they found to everyone else).</p>
|
||||
</li>
|
||||
<li>As soon as an item/resource is discovered, <em>everyone</em> in the room must be able to access it immediately.</li>
|
||||
<li>There can be <em>no inventory</em>. Nothing can ever be picked up and tied to a specific player.</li>
|
||||
<li>As soon as a discovery is made, this <em>must be echoed to the entire room</em> (it must not be up to the finder to announce what they found to everyone else).</li>
|
||||
</ul>
|
||||
<p>As a side-effect of this I also set a limit to the kind of puzzles I would allow:</p>
|
||||
<ul>
|
||||
<li><em>No puzzles must require more than one player to solve</em>. While one could indeed create some very cool puzzles where people collaborate, it's simply not feasible to do so with random strangers on the internet. At any moment the other guy may log off and leave you stuck. And that's if you even find someone logged in at the same time in the first place! The room should always be possible to solve solo, from beginning to end.</li>
|
||||
</ul>
|
||||
<h3>Focusing on objects</h3>
|
||||
<p>So without inventory system, how <em>do</em> you interact with objects? A trademark of any puzzle is using one object with another and also to explore things closer to find clues. I turned to graphical adventure games for inspiration:</p>
|
||||
<p><a href="https://1.bp.blogspot.com/-hTP1HlMck3c/XOA9-qVnrHI/AAAAAAAAKew/GOVcWIfwyZIr25CZj3VadztdjeVwmzl7gCLcBGAs/s1600/1569-4-secret-of-monkey-island-the.jpg"><img src="https://1.bp.blogspot.com/-hTP1HlMck3c/XOA9-qVnrHI/AAAAAAAAKew/GOVcWIfwyZIr25CZj3VadztdjeVwmzl7gCLcBGAs/s400/1569-4-secret-of-monkey-island-the.jpg" alt="Hovering with mouse over lens object offers action "look at lens"" title="Monkey Island GUI" /></a></p>
|
||||
<p>So without inventory system, how <em>do</em> you interact with objects? A trademark of any puzzle is using one object with another and also to explore things closer to find clues. I turned to graphical adventure games for inspiration:<br />
|
||||
<a href="https://1.bp.blogspot.com/-hTP1HlMck3c/XOA9-qVnrHI/AAAAAAAAKew/GOVcWIfwyZIr25CZj3VadztdjeVwmzl7gCLcBGAs/s1600/1569-4-secret-of-monkey-island-the.jpg"><img src="https://1.bp.blogspot.com/-hTP1HlMck3c/XOA9-qVnrHI/AAAAAAAAKew/GOVcWIfwyZIr25CZj3VadztdjeVwmzl7gCLcBGAs/s400/1569-4-secret-of-monkey-island-the.jpg" alt="Hovering with mouse over lens object offers action "look at lens"" title="Monkey Island GUI" /></a></p>
|
||||
<p><em>Secret of Monkey Island ©1990 LucasArts. Image from old-games.com</em></p>
|
||||
<p>A common way to operate on an object in traditional adventure games is to hover the mouse over it and then select the action you want to apply to it. In later (3D) games you might even zoom in of the object and rotate it around with your mouse to see if there are some clues to be had.</p>
|
||||
<p>While Evennia and modern UI clients <em>may</em> allow you to use the mouse to select objects, I wanted this to work the traditional MUD-way, by inserting commands. So I decided that you as a player would be in one of two states:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>The 'normal' state: When you use <strong>look</strong> you see the room description.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The 'focused' state: You focus on a specific object with the <strong>examine <target></strong> command (aliases are <strong>ex</strong> or just <strong>e</strong>). Now object-specific actions become available to you. Use <strong>examine</strong> again to "un-focus".</p>
|
||||
</li>
|
||||
<li>The 'normal' state: When you use <strong>look</strong> you see the room description.</li>
|
||||
<li>The 'focused' state: You focus on a specific object with the <strong>examine <target></strong> command (aliases are <strong>ex</strong> or just <strong>e</strong>). Now object-specific actions become available to you. Use <strong>examine</strong> again to "un-focus".</li>
|
||||
</ul>
|
||||
<p><a href="https://2.bp.blogspot.com/-E-J-PZZ2KbY/XOAWidK1Y_I/AAAAAAAAKek/mcWbgVNkvVkBBZEUpOuaaWyBVkNoE7K9gCEwYBhgL/s1600/Screenshot%2Bfrom%2B2019-05-17%2B11-41-50.png"><img src="https://2.bp.blogspot.com/-E-J-PZZ2KbY/XOAWidK1Y_I/AAAAAAAAKek/mcWbgVNkvVkBBZEUpOuaaWyBVkNoE7K9gCEwYBhgL/s400/Screenshot%2Bfrom%2B2019-05-17%2B11-41-50.png" alt="A small stone fireplace sits in the middle of the wall opposite the [door]. On the chimney hangs a small oil [painting] of a man. Hanging over the hearth is a black [cauldron]. The piles of [ashes] below are cold. (It looks like fireplace may be suitable to [climb].)" title="Examining a fireplace" /></a></p>
|
||||
<p>In the example above, the fireplace points out other objects you could also focus on, whereas the last parenthesis includes one or more "actions" that you can perform on the fireplace only when you have it focused.</p>
|
||||
|
|
@ -1006,6 +1069,9 @@ MUG_DESC <span style="color: #666666">=</span> <span style="color: #BA2121">&quo
|
|||
<p>But more importantly, I want players to explore and read all my carefully crafted descriptions! So I'd much rather prefer they take their time and reward them for being thorough.</p>
|
||||
<p>So in the end I give specific scores for actions throughout the game instead. Most points are for doing things that drive the story forward, such as using something or solving a puzzle. But a significant portion of the score comes from turning every stone and trying everything out. The nice side-effect of this is that even if you know exactly how to solve everything and rush through the game you will still not end up with a perfect score.</p>
|
||||
<p>The final score, adjusted by hints is then used to determine if you make it in time to the contest and how you fare. This means that if you explore carefully you have a "buffer" of points so eating a few pies may still land you a good result in the end.</p>
|
||||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>
|
||||
</pre></div>
|
||||
|
||||
<h2>First sketch</h2>
|
||||
<p>I really entered the game 'building' aspect with no real notion of how the Jester's cabin should look nor which puzzles should be in it. I tried to write things down beforehand but it didn't really work for me.</p>
|
||||
<p>So in the end I decided "let's just put a lot of interesting stuff in the room and then I'll figure out how they interact with each other". I'm sure this is different from game-maker to game-maker. But for me, this process worked perfectly.</p>
|
||||
|
|
@ -1056,8 +1122,8 @@ MUG_DESC <span style="color: #666666">=</span> <span style="color: #BA2121">&quo
|
|||
<div class="devblog-title-date">- April 25, 2019</div>
|
||||
</h1>
|
||||
<p><a href="https://3.bp.blogspot.com/-5Co5uPbwKTQ/XMF-PalVycI/AAAAAAAAKVU/EAtFXY2nqPUyecpTMagdIz1lsQwk55KVwCLcBGAs/s1600/2009-2211.jpg"><img src="https://3.bp.blogspot.com/-5Co5uPbwKTQ/XMF-PalVycI/AAAAAAAAKVU/EAtFXY2nqPUyecpTMagdIz1lsQwk55KVwCLcBGAs/s320/2009-2211.jpg" alt="" /></a></p>
|
||||
<p>In the last few months, development of the upcoming <a href="http://www.evennia.com/">Evennia</a> 0.9 has been steaming on. Evennia is, as you may know, a Python library for creating text-based multiplayer games (MUDs, MUSH etc).</p>
|
||||
<p>But it's not all backend work! There is also some sweet game-jamming going on, I get to that at the end.</p>
|
||||
<p>In the last few months, development of the upcoming <a href="http://www.evennia.com/">Evennia</a> 0.9 has been steaming on. Evennia is, as you may know, a Python library for creating text-based multiplayer games (MUDs, MUSH etc).<br />
|
||||
But it's not all backend work! There is also some sweet game-jamming going on, I get to that at the end.</p>
|
||||
<h3>Evennia progress towards Python3</h3>
|
||||
<p>The regular Evennia <em>develop</em> branch is now running completely in Python 3. Since we are using some new features of this Python release, we will be aiming for Python 3.7 as a minimum version once Evennia 0.9 goes stable. We will also use Django 2.1 and likely Twisted 19 - so we'll be pretty much up-to-date on all our main dependencies.</p>
|
||||
<p>Now, while the release of Evennia 0.9 is still some time away (there are a bunch of regular bug fixes and minor features that I want to get in there too (see the progress <a href="https://github.com/evennia/evennia/projects/8">here on the github 0.9 project page</a>), it's worth to consider how much work it'll be for you to migrate and if you should wait or jump in right now.</p>
|
||||
|
|
|
|||
|
|
@ -12,8 +12,100 @@
|
|||
<script src="../javascripts/scale.fix.js">
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 1.0 released!: <br>
|
||||
<!--meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 2.0.0 released today: <p><img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Field_Hamois_Belgium_Luc_Viatour.jpg" alt="screenshot" />
|
||||
<br></p>
|
||||
<p>As part of our new use of <a href="https://semver.org/">semantic versioning</a>, Evennia
|
||||
2.0.0 was released today. Evennia is a Python <code>MU*</code> creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, <em>maybe</em>. It depends on your use-case. Read on.</p>
|
||||
<p>In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.</p>
|
||||
<h2>New version of the ExtendedRoom</h2>
|
||||
<p>The main thing that <em>may</em> be backwards income is the <code>ExtendedRoom</code> contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the <code>ExtendedRoom</code> contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.</p>
|
||||
<p>Here are the <a href="https://github.com/evennia/evennia/discussions/3200">new features</a>:</p>
|
||||
<ul>
|
||||
<li>All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The <code>season</code> and <code>time_of_day</code> are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.</li>
|
||||
<li>Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute <code>desc_<roomstate></code> to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
<code>desc</code> Attribute is used.</li>
|
||||
<li>In the old contrib, you could add special tags, like <code><morning>...</morning></code>
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The <code>ExtendedRoom</code> understands the new <code>state</code> inline function. This
|
||||
can be used with <em>any</em> room state (including seasons and time-of-day). For
|
||||
example: <code>$state(morning, The morning sun is shining in.)</code> or
|
||||
<code>$state(burning, This place is on fire!)</code>.</li>
|
||||
<li>The room still supports <code>details</code> - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.</li>
|
||||
<li>The <code>ExtendedRoom</code> now also has simple support for echoing random messages now
|
||||
and then to the room.</li>
|
||||
</ul>
|
||||
<p>Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.</p>
|
||||
<p>Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the <code>ExtendedRoom</code> contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.</p>
|
||||
<h2>More on the Beginner Tutorial</h2>
|
||||
<p>Most of my time has been spent continuing to work on the new <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html">Beginner Tutorial</a>. Notably on <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html">part three</a>, where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on</p>
|
||||
<ul>
|
||||
<li>Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
<em>Knave</em> TTRPG ruleset).</li>
|
||||
<li>Organizing Player Character data, and character generation.</li>
|
||||
<li>In-game objects and items.</li>
|
||||
<li>Handling equipment and weapons.</li>
|
||||
<li>In-game rooms.</li>
|
||||
<li>Non-player characters.</li>
|
||||
<li>Two types of Combat systems (Twitch-based and Turn based).</li>
|
||||
</ul>
|
||||
<p>TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.</p>
|
||||
<h2>A truckload of new features!</h2>
|
||||
<p>As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.</p>
|
||||
<ul>
|
||||
<li><code>Containers</code> - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).</li>
|
||||
<li>The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).</li>
|
||||
<li>New <code>logger.delete_log</code> method for deleting log files from inside the server (aMiss-aWry).</li>
|
||||
<li>For those intending to override the <code>SessionHandler</code>, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).</li>
|
||||
<li>New <code>create_channel(attr=...)</code> keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in <code>settings.DEFAULT_CHANNELS</code> (me)</li>
|
||||
<li>Attributes will now properly save Python <code>deques</code> with <code>maxlen=...</code> set (me).</li>
|
||||
<li><a href="https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty"><code>TagCategoryProperty</code></a> - A new way to define tags with a particular category on a class at creation-time, without having to do so in the <code>at_object_creation</code> method (me).</li>
|
||||
<li>A lot of bug fixes; <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html">see the CHANGELOG</a> for all the details!</li>
|
||||
</ul>
|
||||
<h2>Continuing</h2>
|
||||
<p>Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the <a href="https://discord.gg/AJJpcRUhtF">evennia discord</a>, which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.</p>
|
||||
<p>In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)</p>
|
||||
<p>Have a nice summer!</p>
|
||||
...
|
||||
---
|
||||
Evennia is a modern Python library and server for creating text-based
|
||||
|
|
@ -49,6 +141,22 @@
|
|||
<div class="devblog-calendar">
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<a href="2023.html"> 2023 (1)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 2.0.0 released today</span>
|
||||
<a href="2023.html#2023-06-10-evennia-2.0.0-released-today"> Evennia 2.0.0 rel...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2022.html"> 2022 (4)
|
||||
|
||||
|
|
@ -56,26 +164,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!">Dec 3
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!"> Evennia 1.0 relea...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two">Sep 17
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two"> Project plans and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore">Jul 5
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore"> Tutorial-writing ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans">Jan 6
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans"> Into 2022 with th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -90,20 +198,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!">Nov 18
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!"> The blog moved!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?">Mar 21
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?"> Where do I begin?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!">Jan 1
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!"> Happy New Years 2...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -118,20 +226,20 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Nov 14
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Evennia 0.9.5 rele...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">Oct 20
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">On using Markdown ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Apr 14
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Spring updates whi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -146,44 +254,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Blackifying and fi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Jul 4
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Evennia 0.9 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">May 26
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">May 18
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">Podcast about Even...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Apr 25
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Steaming on Eating...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2019.html#2019-01-02-into-2019">Jan 2
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<a href="2019.html#2019-01-02-into-2019">Into 2019
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -198,26 +306,26 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Sep 30
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Evennia 0.8 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Aug 18
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Inline building in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Jan 27
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Kicking into gear ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff">Jan 5
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff"> New year, new stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -232,38 +340,38 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Oct 29
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Getting a MUD RP s...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Oct 1
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Evennia in Hacktob...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Sep 20
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Evennia 0.7 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app">Aug 25
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app"> Renaming Django's...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">Apr 23
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">The luxury of a cr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">News items from th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -278,44 +386,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Nov 30
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Birthday retrospec...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Oct 13
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Season of fixes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">Jul 1
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">The art of sharing...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">May 31
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">Evennia in Pictures
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!">May 22
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!"> Evennia 0.6!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Mar 24
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Technical stuff ha...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Feb 14
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Climbing up Branches
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -330,80 +438,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">Dec 17
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">A summary of a year
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!">Nov 12
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!"> MIT uses Evennia!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Oct 11
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Illustrations and ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-10-02-emoting-system">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<a href="2015.html#2015-10-02-emoting-system">Emoting System
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`">Sep 29
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`"> Evennia on `podca...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Sep 24
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Pushing through a ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">Aug 27
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">A wagon load of po...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve"">Jun 22
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve""> Announcing the Ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-06-15-need-your-help!">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<a href="2015.html#2015-06-15-need-your-help!"> Need your help!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-30-dreaming-big?">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<a href="2015.html#2015-05-30-dreaming-big?"> Dreaming big?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-11-things-goin-on">May 11
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<a href="2015.html#2015-05-11-things-goin-on">Things goin on
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">May 9
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">Documenting Python...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Jan 19
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Building Django pr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -418,44 +526,44 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Oct 2
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Slowly moving thro...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Aug 4
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Dance my puppets
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Jun 30
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Webby stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Jun 15
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Bringing back Pyth...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1">May 16
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1"> Imaginary Realiti...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Feb 8
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Moving from Google...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Jan 24
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Looking forwards a...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -470,32 +578,32 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Dec 16
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Imaginary Realitie...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Nov 28
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Out of band mergings
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">Oct 22
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">A list of Evennia ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-05-13-one-to-many">May 13
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<a href="2013.html#2013-05-13-one-to-many">One to Many
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Jan 29
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Churning behind th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -510,80 +618,80 @@
|
|||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Oct 28
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Evennia changes to...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-10-05-community-interest">Oct 5
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<a href="2012.html#2012-10-05-community-interest">Community interest
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Aug 31
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Combining Twisted ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-08-16-taking-command">Aug 16
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<a href="2012.html#2012-08-16-taking-command">Taking command
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Jun 26
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Extending time and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Jun 11
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Coding from the in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things">May 30
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things"> Dummies doing (ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Mar 26
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Shortcuts to goodn...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Feb 22
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Dummies doing dumm...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Feb 17
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Commands and you
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-...">Feb 15
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-..."> Such a small thin...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">About this dev blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">Feb 5
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks"> Evennia's open bo...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
|
@ -649,15 +757,9 @@
|
|||
<h4>EvMenu improvements</h4>
|
||||
<p><strong>EvMenu</strong> is a powerful system for creating in-game text menus.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <strong>EvMenu</strong> class was refactored to be easier to override. For example, all messages now go through <strong>EvMenu.msg</strong> which allows for easy customization. It also defaults to sending with a <strong>type</strong> of "menu", making it easier to redirect menus to seprate panes in the webclient.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In a node, EvMenu is now accessed via the much more logically named <strong>.ndb._evmenu</strong> instead of <strong>.ndb._menutree</strong> (the old name still works for backwards compatibility, but is deprecated).</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>New optional <strong>EvMenu template</strong> system for quickly building simpler EvMenus without needing so much code. This makes it easy to catch and parse arbitrary input from the user and redirect to the correct node as needed. Creating menu nodes as functions still work (and is a lot more powerful), this can be mixed with templating to create different effects.</p>
|
||||
</li>
|
||||
<li>The <strong>EvMenu</strong> class was refactored to be easier to override. For example, all messages now go through <strong>EvMenu.msg</strong> which allows for easy customization. It also defaults to sending with a <strong>type</strong> of "menu", making it easier to redirect menus to seprate panes in the webclient.</li>
|
||||
<li>In a node, EvMenu is now accessed via the much more logically named <strong>.ndb._evmenu</strong> instead of <strong>.ndb._menutree</strong> (the old name still works for backwards compatibility, but is deprecated).</li>
|
||||
<li>New optional <strong>EvMenu template</strong> system for quickly building simpler EvMenus without needing so much code. This makes it easy to catch and parse arbitrary input from the user and redirect to the correct node as needed. Creating menu nodes as functions still work (and is a lot more powerful), this can be mixed with templating to create different effects.</li>
|
||||
</ul>
|
||||
<h4>New settings</h4>
|
||||
<ul>
|
||||
|
|
@ -715,12 +817,8 @@
|
|||
<p>The bigger change with 0.9.5 is that we are moving to a new documentation system. The details of the long road to do this is documented in <a href="">my previous post</a>. The point is that we are stopping the use of the Github wiki in favor of statically generated documentation hosted on github pages. At the same time we also move the old evennia.com website from Google-sites to Github.</p>
|
||||
<p>Check it out:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>New evennia.com: <a href="https://evennia.com">https://evennia.com</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>New static documentation: <a href="https://evennia.com/docs/latest">https://evennia.com/docs/latest</a></p>
|
||||
</li>
|
||||
<li>New evennia.com: <a href="https://evennia.com">https://evennia.com</a></li>
|
||||
<li>New static documentation: <a href="https://evennia.com/docs/latest">https://evennia.com/docs/latest</a></li>
|
||||
</ul>
|
||||
<p>As for the docs, they will be maturing for a long time still. The old wiki will not be updated anymore, but it will also not be going anywhere in the short term. Version 0.9.5 of the docs is pretty much a copy of the wiki and I hope to not have to spend too much more work maintaining it since the wiki is still around.</p>
|
||||
<p>New updates and documentation features will primarily be happening in the 1.0-dev version of the documentation. This will include refactoring all pages as well as a new intro-tutorial and many other things.</p>
|
||||
|
|
@ -827,21 +925,11 @@
|
|||
<p>Our documentation will move away from our trusty <a href="https://github.com/evennia/evennia/wiki">Github wiki</a>. Instead we will convert the wiki into a static github page built from sources inside evennia/docs/.</p>
|
||||
<p>The advantage of the wiki is that it is a very low entry for people to contribute and fix things using Github's editing system. We have had a lot of use of this over the years and the wiki has served us well. The drawbacks are starting to get ever more noticeable, however:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Whereas the wiki is itself version-controlled, we cannot show multiple versions of the wiki at the same time. This makes it hard to update the documentation at the same time as non-released code is being written. This is probably my main reason for doing the change.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The wiki today consists of some 200+ pages. It is hard to get an overview of what is where and what needs to be updated.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The wiki word-search functionality is not really great.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>It's impossible to review changes before they go live, to check consistency and style. This has led to some documentation pages overlapping.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Building the documentation to local HTML or PDF is an archaic process that I doubt anyone but me has done with any regularity.</p>
|
||||
</li>
|
||||
<li>Whereas the wiki is itself version-controlled, we cannot show multiple versions of the wiki at the same time. This makes it hard to update the documentation at the same time as non-released code is being written. This is probably my main reason for doing the change.</li>
|
||||
<li>The wiki today consists of some 200+ pages. It is hard to get an overview of what is where and what needs to be updated.</li>
|
||||
<li>The wiki word-search functionality is not really great.</li>
|
||||
<li>It's impossible to review changes before they go live, to check consistency and style. This has led to some documentation pages overlapping.</li>
|
||||
<li>Building the documentation to local HTML or PDF is an archaic process that I doubt anyone but me has done with any regularity.</li>
|
||||
</ul>
|
||||
<p>The change so far planned is to switch to the <a href="https://www.sphinx-doc.org/en/master/">Sphinx</a> documentation build-system (same as Python/Django etc is using). We will use it with extensions that allows us to still use Markdown like in the old wiki. This also allows us to build a more comprehensive (and pretty) API documentation of the entire library. We have more options to add comprehensive online search functionality in this solution as well.</p>
|
||||
<p>Furthermore, will hopefully be able to set it up so that we can maintain and publish separate documentations for each forthcoming release. That is, you should be able to read the docs for 1.0, 1.1 or the latest master development as you like (similarly to how Django does it, although probably not as fancy from the onset).</p>
|
||||
|
|
@ -856,10 +944,10 @@
|
|||
<p>For the longest time, the Django-admin component has been somewhat on the back-burner. With the help of community contributors, this is improving so you will be able to do more work the Admin GUI related to creating and managing objects, tie puppets to Accounts etc.</p>
|
||||
<h3>API improvements</h3>
|
||||
<p>Whereas the last few months have been mostly spent fixing lingering bugs, one thing planned for version 1.0 is a general cleanup of legacy strangeness in the API. For example, certain methods can return a list or a single object depending situation, which makes it hard to generalize. There are a lot of small quirks like that which we hope to address and make more consistent.</p>
|
||||
<p>There has also been a recent flurry of contributor PRs intended to help decouple Evennia's systems and make them easier to replace for those inclined to do so. Many of this is still being worked on, but it's likely you'll be able to replace many more "core" components for 1.0 with your own variations without doing any hacking in upstream code at all.</p>
|
||||
<p>... Needless to say, this is an advanced feature that most developers will never need. But Evennia was always intended to be heavily customizable and having the option is a good thing!</p>
|
||||
<p>Another feature that will come for 1.0 is a REST-API, added by one of our contributors. This uses Django-REST-Framework and makes it easier for external programs to authenticate and fetch data out of the Evennia database (great both for external apps, websites or custom what-have-you).</p>
|
||||
<p>At this time you can only fetch database objects via this interface, you cannot perform Command-calls or "play the game" this way (REST is a stateless concept and Evennia Commands tend to retain state).</p>
|
||||
<p>There has also been a recent flurry of contributor PRs intended to help decouple Evennia's systems and make them easier to replace for those inclined to do so. Many of this is still being worked on, but it's likely you'll be able to replace many more "core" components for 1.0 with your own variations without doing any hacking in upstream code at all.<br />
|
||||
... Needless to say, this is an advanced feature that most developers will never need. But Evennia was always intended to be heavily customizable and having the option is a good thing!</p>
|
||||
<p>Another feature that will come for 1.0 is a REST-API, added by one of our contributors. This uses Django-REST-Framework and makes it easier for external programs to authenticate and fetch data out of the Evennia database (great both for external apps, websites or custom what-have-you).<br />
|
||||
At this time you can only fetch database objects via this interface, you cannot perform Command-calls or "play the game" this way (REST is a stateless concept and Evennia Commands tend to retain state).</p>
|
||||
<h3>Many other fixes and contributions</h3>
|
||||
<p>There's a truckload of stuff already available in master branch, but with the latest contributions of bigger code changes, we have started to use the Evennia develop branch again in earnest again. For a summary of the changes so far, check out the <a href="https://github.com/evennia/evennia/blob/develop/CHANGELOG.md">Changelog</a>.</p>
|
||||
<p>However, unless you want to contribute to Evennia itself (or really, really want to be on the bleeding edge), you are still recommended to use the master branch for now. A lot of work still to do, as said.</p>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
843
devblog/2023.html
Normal file
843
devblog/2023.html
Normal file
|
|
@ -0,0 +1,843 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<title>Evennia Devblog</title>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="../images/favicon.ico">
|
||||
<link rel="stylesheet" href="../stylesheets/styles.css">
|
||||
<link rel="stylesheet" href="../stylesheets/pygment_trac.css">
|
||||
<link href='https://fonts.googleapis.com/css?family=Open Sans' rel='stylesheet'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Arvo' rel='stylesheet'>
|
||||
<script src="../javascripts/scale.fix.js">
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<!--meta name="description" content="
|
||||
Latest Evennia dev blog: Evennia 2.0.0 released today: <p><img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Field_Hamois_Belgium_Luc_Viatour.jpg" alt="screenshot" />
|
||||
<br></p>
|
||||
<p>As part of our new use of <a href="https://semver.org/">semantic versioning</a>, Evennia
|
||||
2.0.0 was released today. Evennia is a Python <code>MU*</code> creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, <em>maybe</em>. It depends on your use-case. Read on.</p>
|
||||
<p>In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.</p>
|
||||
<h2>New version of the ExtendedRoom</h2>
|
||||
<p>The main thing that <em>may</em> be backwards income is the <code>ExtendedRoom</code> contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the <code>ExtendedRoom</code> contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.</p>
|
||||
<p>Here are the <a href="https://github.com/evennia/evennia/discussions/3200">new features</a>:</p>
|
||||
<ul>
|
||||
<li>All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The <code>season</code> and <code>time_of_day</code> are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.</li>
|
||||
<li>Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute <code>desc_<roomstate></code> to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
<code>desc</code> Attribute is used.</li>
|
||||
<li>In the old contrib, you could add special tags, like <code><morning>...</morning></code>
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The <code>ExtendedRoom</code> understands the new <code>state</code> inline function. This
|
||||
can be used with <em>any</em> room state (including seasons and time-of-day). For
|
||||
example: <code>$state(morning, The morning sun is shining in.)</code> or
|
||||
<code>$state(burning, This place is on fire!)</code>.</li>
|
||||
<li>The room still supports <code>details</code> - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.</li>
|
||||
<li>The <code>ExtendedRoom</code> now also has simple support for echoing random messages now
|
||||
and then to the room.</li>
|
||||
</ul>
|
||||
<p>Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.</p>
|
||||
<p>Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the <code>ExtendedRoom</code> contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.</p>
|
||||
<h2>More on the Beginner Tutorial</h2>
|
||||
<p>Most of my time has been spent continuing to work on the new <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html">Beginner Tutorial</a>. Notably on <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html">part three</a>, where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on</p>
|
||||
<ul>
|
||||
<li>Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
<em>Knave</em> TTRPG ruleset).</li>
|
||||
<li>Organizing Player Character data, and character generation.</li>
|
||||
<li>In-game objects and items.</li>
|
||||
<li>Handling equipment and weapons.</li>
|
||||
<li>In-game rooms.</li>
|
||||
<li>Non-player characters.</li>
|
||||
<li>Two types of Combat systems (Twitch-based and Turn based).</li>
|
||||
</ul>
|
||||
<p>TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.</p>
|
||||
<h2>A truckload of new features!</h2>
|
||||
<p>As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.</p>
|
||||
<ul>
|
||||
<li><code>Containers</code> - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).</li>
|
||||
<li>The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).</li>
|
||||
<li>New <code>logger.delete_log</code> method for deleting log files from inside the server (aMiss-aWry).</li>
|
||||
<li>For those intending to override the <code>SessionHandler</code>, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).</li>
|
||||
<li>New <code>create_channel(attr=...)</code> keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in <code>settings.DEFAULT_CHANNELS</code> (me)</li>
|
||||
<li>Attributes will now properly save Python <code>deques</code> with <code>maxlen=...</code> set (me).</li>
|
||||
<li><a href="https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty"><code>TagCategoryProperty</code></a> - A new way to define tags with a particular category on a class at creation-time, without having to do so in the <code>at_object_creation</code> method (me).</li>
|
||||
<li>A lot of bug fixes; <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html">see the CHANGELOG</a> for all the details!</li>
|
||||
</ul>
|
||||
<h2>Continuing</h2>
|
||||
<p>Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the <a href="https://discord.gg/AJJpcRUhtF">evennia discord</a>, which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.</p>
|
||||
<p>In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)</p>
|
||||
<p>Have a nice summer!</p>
|
||||
...
|
||||
---
|
||||
Evennia is a modern Python library and server for creating text-based
|
||||
multi-player games and virtual worlds (also known as MUD, MUSH, MU,
|
||||
MUX, MUCK, etc). While Evennia handles all the necessary things every
|
||||
online game needs, like database and networking, you create the game of
|
||||
your dreams by writing normal Python modules."> <!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js">
|
||||
</script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<header>
|
||||
<p>
|
||||
<img class="logo" src="../images/evennia_logo.png" alt="Evennia logo">
|
||||
</p>
|
||||
<h1 class="header">Evennia</h1>
|
||||
<p class="header header-text">The Python MU* Development Library</p>
|
||||
<div class="linksection">
|
||||
<ul>
|
||||
<div class="buttonsection">
|
||||
<li>
|
||||
<a class="buttons" href="../index.html">Back to Evennia</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="buttons devblog-calendar-tooltip"
|
||||
href="https://github.com/evennia/evennia/discussions">Discuss (GitHub)</a>
|
||||
</li>
|
||||
</div>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="devblog-calendar">
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<a href="2023.html"> 2023 (1)
|
||||
|
||||
<ul class="devblog-calendar-open">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 2.0.0 released today</span>
|
||||
<a href="2023.html#2023-06-10-evennia-2.0.0-released-today"> Evennia 2.0.0 rel...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2022.html"> 2022 (4)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||||
<a href="2022.html#2022-12-03-evennia-1.0-released!"> Evennia 1.0 relea...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two"> Project plans and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore"> Tutorial-writing ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans"> Into 2022 with th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2021.html"> 2021 (3)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||||
<a href="2021.html#2021-11-18-the-blog-moved!"> The blog moved!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||||
<a href="2021.html#2021-03-21-where-do-i-begin?"> Where do I begin?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||||
<a href="2021.html#2021-01-01-happy-new-years-2021!"> Happy New Years 2...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2020.html"> 2020 (3)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Evennia 0.9.5 rele...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">On using Markdown ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Spring updates whi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2019.html"> 2019 (7)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Blackifying and fi...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||||
<a href="2019.html#2019-07-04-evennia-0.9-released">Evennia 0.9 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">Creating Evscapero...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||||
<a href="2019.html#2019-05-09-podcast-about-evennia">Podcast about Even...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Steaming on Eating...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||||
<a href="2019.html#2019-01-02-into-2019">Into 2019
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2018.html"> 2018 (4)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||||
<a href="2018.html#2018-09-30-evennia-0.8-released">Evennia 0.8 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Inline building in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Kicking into gear ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||||
<a href="2018.html#2018-01-05-new-year,-new-stuff"> New year, new stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2017.html"> 2017 (6)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Getting a MUD RP s...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Evennia in Hacktob...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||||
<a href="2017.html#2017-09-20-evennia-0.7-released">Evennia 0.7 released
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app"> Renaming Django's...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">The luxury of a cr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">News items from th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2016.html"> 2016 (7)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||||
<a href="2016.html#2016-11-30-birthday-retrospective">Birthday retrospec...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||||
<a href="2016.html#2016-10-13-season-of-fixes">Season of fixes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">The art of sharing...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||||
<a href="2016.html#2016-05-31-evennia-in-pictures">Evennia in Pictures
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||||
<a href="2016.html#2016-05-22-evennia-0.6!"> Evennia 0.6!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||||
<a href="2016.html#2016-03-24-technical-stuff-happening">Technical stuff ha...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||||
<a href="2016.html#2016-02-14-climbing-up-branches">Climbing up Branches
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2015.html"> 2015 (13)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||||
<a href="2015.html#2015-12-17-a-summary-of-a-year">A summary of a year
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||||
<a href="2015.html#2015-11-12-mit-uses-evennia!"> MIT uses Evennia!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Illustrations and ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||||
<a href="2015.html#2015-10-02-emoting-system">Emoting System
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`"> Evennia on `podca...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Pushing through a ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">A wagon load of po...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve""> Announcing the Ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||||
<a href="2015.html#2015-06-15-need-your-help!"> Need your help!
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||||
<a href="2015.html#2015-05-30-dreaming-big?"> Dreaming big?
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||||
<a href="2015.html#2015-05-11-things-goin-on">Things goin on
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">Documenting Python...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Building Django pr...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2014.html"> 2014 (7)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Slowly moving thro...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||||
<a href="2014.html#2014-08-04-dance-my-puppets">Dance my puppets
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||||
<a href="2014.html#2014-06-30-webby-stuff">Webby stuff
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Bringing back Pyth...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1"> Imaginary Realiti...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Moving from Google...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Looking forwards a...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2013.html"> 2013 (5)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Imaginary Realitie...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||||
<a href="2013.html#2013-11-28-out-of-band-mergings">Out of band mergings
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">A list of Evennia ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||||
<a href="2013.html#2013-05-13-one-to-many">One to Many
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Churning behind th...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="2012.html"> 2012 (13)
|
||||
|
||||
<ul class="devblog-calendar-closed">
|
||||
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Evennia changes to...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||||
<a href="2012.html#2012-10-05-community-interest">Community interest
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Combining Twisted ...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||||
<a href="2012.html#2012-08-16-taking-command">Taking command
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||||
<a href="2012.html#2012-06-26-extending-time-and-details">Extending time and...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||||
<a href="2012.html#2012-06-11-coding-from-the-inside">Coding from the in...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things"> Dummies doing (ev...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Shortcuts to goodn...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Dummies doing dumm...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||||
<a href="2012.html#2012-02-17-commands-and-you">Commands and you
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||||
<a href="2012.html#2012-02-15-such-a-small-thing-..."> Such a small thin...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||||
<a href="2012.html#2012-02-05-about-this-dev-blog">About this dev blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks"> Evennia's open bo...
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
<section>
|
||||
<div class="devblog-rss">
|
||||
<a href="feed.rss">
|
||||
<img src="images/rss-icon.png" alt="RSS feed">
|
||||
</a>
|
||||
</div>
|
||||
<h1>
|
||||
<a name="evennia-mudmu-creation-system" class="anchor" href="#evennia-mudmu-creation-system">
|
||||
<span class="octicon octicon-link">
|
||||
</span>
|
||||
</a>Evennia Dev Blog<div class="sponsor">
|
||||
<div class="sponsor-column">
|
||||
<a href="https://www.patreon.com/griatch">
|
||||
<img class="patreon" src="../images/evennia_patreon_100x100.png" alt="Patreon">
|
||||
</a>
|
||||
<form action="https://www.paypal.com/donate" method="post" target="_top">
|
||||
<input type="hidden" name="hosted_button_id" value="YQDKB8JT2GXLS" />
|
||||
<input type="image" src="https://www.paypalobjects.com/en_US/SE/i/btn/btn_donateCC_LG.gif" border="0" name="submit" title="PayPal - The safer, easier way to pay online!" alt="Donate with PayPal button" />
|
||||
<img alt="" border="0" src="https://www.paypal.com/en_SE/i/scr/pixel.gif" width="1" height="1" />
|
||||
</form>
|
||||
</div>
|
||||
</h1>
|
||||
|
||||
<em>Various Evennia- and MUD-related musings by Griatch, the Evennia lead developer.</em>
|
||||
|
||||
|
||||
|
||||
<div class="blog_post">
|
||||
<h1 id=2023-06-10-evennia-2.0.0-released-today>
|
||||
Evennia 2.0.0 released today
|
||||
<a class="devblog-headerlink" href="2023.html#2023-06-10-evennia-2.0.0-released-today" title="Permalink to this blog post">¶</a>
|
||||
<div class="devblog-title-date">- June 10, 2023</div>
|
||||
</h1>
|
||||
<p><img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Field_Hamois_Belgium_Luc_Viatour.jpg" alt="screenshot" />
|
||||
<br></p>
|
||||
<p>As part of our new use of <a href="https://semver.org/">semantic versioning</a>, Evennia
|
||||
2.0.0 was released today. Evennia is a Python <code>MU*</code> creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, <em>maybe</em>. It depends on your use-case. Read on.</p>
|
||||
<p>In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.</p>
|
||||
<h2>New version of the ExtendedRoom</h2>
|
||||
<p>The main thing that <em>may</em> be backwards income is the <code>ExtendedRoom</code> contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the <code>ExtendedRoom</code> contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.</p>
|
||||
<p>Here are the <a href="https://github.com/evennia/evennia/discussions/3200">new features</a>:</p>
|
||||
<ul>
|
||||
<li>All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The <code>season</code> and <code>time_of_day</code> are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.</li>
|
||||
<li>Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute <code>desc_<roomstate></code> to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
<code>desc</code> Attribute is used.</li>
|
||||
<li>In the old contrib, you could add special tags, like <code><morning>...</morning></code>
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The <code>ExtendedRoom</code> understands the new <code>state</code> inline function. This
|
||||
can be used with <em>any</em> room state (including seasons and time-of-day). For
|
||||
example: <code>$state(morning, The morning sun is shining in.)</code> or
|
||||
<code>$state(burning, This place is on fire!)</code>.</li>
|
||||
<li>The room still supports <code>details</code> - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.</li>
|
||||
<li>The <code>ExtendedRoom</code> now also has simple support for echoing random messages now
|
||||
and then to the room.</li>
|
||||
</ul>
|
||||
<p>Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.</p>
|
||||
<p>Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the <code>ExtendedRoom</code> contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.</p>
|
||||
<h2>More on the Beginner Tutorial</h2>
|
||||
<p>Most of my time has been spent continuing to work on the new <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html">Beginner Tutorial</a>. Notably on <a href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html">part three</a>, where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on</p>
|
||||
<ul>
|
||||
<li>Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
<em>Knave</em> TTRPG ruleset).</li>
|
||||
<li>Organizing Player Character data, and character generation.</li>
|
||||
<li>In-game objects and items.</li>
|
||||
<li>Handling equipment and weapons.</li>
|
||||
<li>In-game rooms.</li>
|
||||
<li>Non-player characters.</li>
|
||||
<li>Two types of Combat systems (Twitch-based and Turn based).</li>
|
||||
</ul>
|
||||
<p>TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.</p>
|
||||
<h2>A truckload of new features!</h2>
|
||||
<p>As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.</p>
|
||||
<ul>
|
||||
<li><code>Containers</code> - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).</li>
|
||||
<li>The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).</li>
|
||||
<li>New <code>logger.delete_log</code> method for deleting log files from inside the server (aMiss-aWry).</li>
|
||||
<li>For those intending to override the <code>SessionHandler</code>, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).</li>
|
||||
<li>New <code>create_channel(attr=...)</code> keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in <code>settings.DEFAULT_CHANNELS</code> (me)</li>
|
||||
<li>Attributes will now properly save Python <code>deques</code> with <code>maxlen=...</code> set (me).</li>
|
||||
<li><a href="https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty"><code>TagCategoryProperty</code></a> - A new way to define tags with a particular category on a class at creation-time, without having to do so in the <code>at_object_creation</code> method (me).</li>
|
||||
<li>A lot of bug fixes; <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html">see the CHANGELOG</a> for all the details!</li>
|
||||
</ul>
|
||||
<h2>Continuing</h2>
|
||||
<p>Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the <a href="https://discord.gg/AJJpcRUhtF">evennia discord</a>, which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.</p>
|
||||
<p>In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)</p>
|
||||
<p>Have a nice summer!</p>
|
||||
|
||||
<footer class="devblog-footer">
|
||||
<span class="devblog-copyrights">
|
||||
<p>Image by Luc Viatour / <a href="https://lucnix.be">https://lucnix.be/</a>, released under Creative Commons.</p>
|
||||
|
||||
</span>
|
||||
<a class="devblog-to-toplink" href="2023.html#2023-06-10-evennia-2.0.0-released-today" title="Link to top of post">⇬(top)</a>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -70,6 +70,7 @@ class BlogPost:
|
|||
"""
|
||||
|
||||
title: str
|
||||
title_short: str
|
||||
blurb: str
|
||||
permalink: str
|
||||
pagelink: str
|
||||
|
|
@ -199,6 +200,12 @@ def md2html():
|
|||
image_copyrights = line[12:]
|
||||
image_copyrights = mistletoe.markdown(image_copyrights)
|
||||
|
||||
# merge two lines if they are not separated by a blank line
|
||||
# (this is to allow for markdown to be split over multiple lines)
|
||||
|
||||
lines = " ".join(lines)
|
||||
lines = lines.split("\n\n")
|
||||
|
||||
# get first paragraph as blurb
|
||||
markdown_blurb = "\n".join(
|
||||
[line for line in lines if line and not line.startswith("!")][:3]
|
||||
|
|
@ -213,8 +220,11 @@ def md2html():
|
|||
pagelink = OUTFILE_TEMPLATE.format(year=date.year)
|
||||
permalink = "{}#{}".format(pagelink, anchor)
|
||||
|
||||
shortlink_len = 18
|
||||
|
||||
blogpost = BlogPost(
|
||||
title=title,
|
||||
title_short=title[:shortlink_len] + "..." if len(title) > shortlink_len + 2 else title,
|
||||
blurb=blurb,
|
||||
permalink=permalink,
|
||||
pagelink=pagelink,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
title: Tutorial-writing and Attributes galore
|
||||
copyrights: [Alpha Stock Images](http://alphastockimages.com/) (released under [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) )
|
||||
copyrights: Image from [Alpha Stock Images](http://alphastockimages.com/) (released under [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) )
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -1,66 +1,66 @@
|
|||
title: Project plans and Splitting a Setting in two
|
||||
copyright: Image from [freeimageslive.co.uk](http://www.freeimageslive.co.uk/free_stock_image/pausebreakkeyjpg), released under CC Attribution 3.0. Image by freeimageslive - stockmedia.cc.
|
||||
copyrights: Image from [freeimageslive.co.uk](http://www.freeimageslive.co.uk/free_stock_image/pausebreakkeyjpg), released under CC Attribution 3.0. Image by freeimageslive - stockmedia.cc.
|
||||
|
||||
---
|
||||
---
|
||||
|
||||

|
||||
|
||||
As those following Evennia development should be aware of for now, we are approaching the 1.0 release of Evennia, the MU*-building framework.
|
||||
As those following Evennia development should be aware of for now, we are approaching the 1.0 release of Evennia, the MU*-building framework.
|
||||
|
||||
Thing is, that release has been coming 'soon' for quite a while now. Since some time you can already test Evennia 1.0-dev by checking out the Evennia `develop` branch ([here](https://github.com/evennia/evennia/discussions/2640) for help on how). Evennia 1.0-dev is still changing, but it's already stable enough that It's gotten to the point that people in chat now recommend new users to start fresh with 1.0-dev rather than the 'stable' version 0.9.5, which is now 1.5 years old and is not seeing more updates.
|
||||
Thing is, that release has been coming 'soon' for quite a while now. Since some time you can already test Evennia 1.0-dev by checking out the Evennia `develop` branch ([here](https://github.com/evennia/evennia/discussions/2640) for help on how). Evennia 1.0-dev is still changing, but it's already stable enough that It's gotten to the point that people in chat now recommend new users to start fresh with 1.0-dev rather than the 'stable' version 0.9.5, which is now 1.5 years old and is not seeing more updates.
|
||||
|
||||
## Changes to 1.0 release plans
|
||||
|
||||
### In short:
|
||||
I plan to pause the work on the new beginner tutorial and release 1.0 with that piece of the documentation unfinished. It still has a large swathes of useful info, but the new from-scratch game will not be ready.
|
||||
### In short:
|
||||
I plan to pause the work on the new beginner tutorial and release 1.0 with that piece of the documentation unfinished. It still has a large swathes of useful info, but the new from-scratch game will not be ready.
|
||||
|
||||
### Longer:
|
||||
One of the reasons for 1.0 not being released is that I have been working on a new beginner-tutorial to go with the new system. This involves making a full little MUD game from scratch, and I'm making a full system you can both follow lesson-per-lesson as well as implementing it for those that prefer to pull apart code.
|
||||
### Longer:
|
||||
One of the reasons for 1.0 not being released is that I have been working on a new beginner-tutorial to go with the new system. This involves making a full little MUD game from scratch, and I'm making a full system you can both follow lesson-per-lesson as well as implementing it for those that prefer to pull apart code.
|
||||
|
||||
Writing good code as well as full tutorial lessons is however a big, full-time job (next to my actual real-life full-time job) and thus I expect it will take a good while longer before the new tutorial is done. Worse, in the meantime I can't spend much time resolving the 1.0-dev bugs that has been reported by community testers and also block release.
|
||||
Writing good code as well as full tutorial lessons is however a big, full-time job (next to my actual real-life full-time job) and thus I expect it will take a good while longer before the new tutorial is done. Worse, in the meantime I can't spend much time resolving the 1.0-dev bugs that has been reported by community testers and also block release.
|
||||
|
||||
So I will map out the remaining pieces of the tutorial with informational "Work in progress" markers, merge what I have, and stop work on it for now.
|
||||
So I will map out the remaining pieces of the tutorial with informational "Work in progress" markers, merge what I have, and stop work on it for now.
|
||||
|
||||
I'll continue finishing the tutorial in smaller sub-releases after the main 1.0 release.
|
||||
|
||||
### What's left for 1.0-dev
|
||||
### What's left for 1.0-dev
|
||||
|
||||
So, with the main bulk of work (the beginner tutorial) on hold, what's left to do?
|
||||
So, with the main bulk of work (the beginner tutorial) on hold, what's left to do?
|
||||
|
||||
- Cleanup the rest of the docs! There's still much to do there, including removing old tutorials that are now covered in the parts of the beginner-tutorial already finished. Also need to connect all pages and structure the docs better.
|
||||
- Cleanup the rest of the docs! There's still much to do there, including removing old tutorials that are now covered in the parts of the beginner-tutorial already finished. Also need to connect all pages and structure the docs better.
|
||||
- Get into the bug backlog of Evennia 1.0-dev that people have reported. Also work to merge some outstanding PRs. I'll need to triage issues more, but hopefully I can get some help fixing simpler bugs during October's [Hacktoberfest](https://github.com/evennia/evennia/discussions/2858).
|
||||
|
||||
|
||||
## MULTISESSION_MODE changes (this will affect your current game!)
|
||||
|
||||
That said, now to some recent changes in 1.0-dev. This one is important since it affects your existing game.
|
||||
That said, now to some recent changes in 1.0-dev. This one is important since it affects your existing game.
|
||||
|
||||
### In short:
|
||||
The functionality of `MULTISESSION_MODE` has been broken into smaller sub-settings. This makes it a lot more flexible, but if you used the 'side-effects' of a higher `MULTISESSION_MODE` in your game, you now need to set a few other settings to get that back.
|
||||
### In short:
|
||||
The functionality of `MULTISESSION_MODE` has been broken into smaller sub-settings. This makes it a lot more flexible, but if you used the 'side-effects' of a higher `MULTISESSION_MODE` in your game, you now need to set a few other settings to get that back.
|
||||
|
||||
### Longer:
|
||||
The `MULTISESSION_MODE` is a long-standing Evennia setting. It controls how many sessions you can connect to the game at a time. In other words, how many game clients you can open against the same accoung login at the same time.
|
||||
### Longer:
|
||||
The `MULTISESSION_MODE` is a long-standing Evennia setting. It controls how many sessions you can connect to the game at a time. In other words, how many game clients you can open against the same accoung login at the same time.
|
||||
|
||||
- Mode 0: A single session. Connecting a new one will disconnect the previous one.
|
||||
- Mode 1: Multiple sessions can be connected. When you puppet a Character, each session will see the same output.
|
||||
- Mode 2: Multiple sessions can be connected. Each session can puppet one Character each.
|
||||
- Mode 1: Multiple sessions can be connected. When you puppet a Character, each session will see the same output.
|
||||
- Mode 2: Multiple sessions can be connected. Each session can puppet one Character each.
|
||||
- Mode 3: Multiple sessions can be connected. Multiple sessions can puppet a Character, each session will see the same output.
|
||||
|
||||
Thing is that for the longest time, this setting has _also_ controlled other things:
|
||||
Thing is that for the longest time, this setting has _also_ controlled other things:
|
||||
- Mode 0,1: A Character of the same name as the Account is auto-created when first connecting.
|
||||
- Mode 0,1: You auto-connect to your last character whenever you log in.
|
||||
- Mode 2,3: You don't get an auto-created character and end up in and OOC 'character' select screen when logging in.
|
||||
- Mode 2,3: You don't get an auto-created character and end up in and OOC 'character' select screen when logging in.
|
||||
|
||||
These things don't really belong together. For example, if you want players to be able to choose between multiple characters (a character selection screen) but only play one at a time (`MULTISESSION_MODE` 0 or 1), you'd need to work around Evennia's default.
|
||||
|
||||
As of today, I've merged a change to Evennia 1.0-dev (`develop` branch) which changes this.
|
||||
As of today, I've merged a change to Evennia 1.0-dev (`develop` branch) which changes this.
|
||||
|
||||
- `MULTISESSION_MODE` now _only_ controls how sessions connect and how they can puppet characters.
|
||||
- `MULTISESSION_MODE` now _only_ controls how sessions connect and how they can puppet characters.
|
||||
- `MAX_NR_SIMULTANEOUS_PUPPETS` is a new setting that controls how many puppets you can control for `MULTISESSION_MODE` 2 and 3. This will not change anything for modes 0 and 1 (always acts as 1 due to how those modes work).
|
||||
- `AUTO_CREATE_CHARACTERS_WITH_ACCOUNT` allows you to turn off the auto-creation of a character with the same name as the Account when you register. This used to be enforced as a part of `MULTISESSION_MODE` 0 or 1.
|
||||
- `AUTO_PUPPET_ON_LOGIN` controls if you will auto-connect to the last thing you puppet when you login, of if you'll end up OOC (by default at a character selection screen). Again, this used to be enforced by `MULTISESSION_MODE` 0 or 1.
|
||||
- `MAX_NR_CHARACTERS` existed before. It controls how many characters the default `charcreate` command will allow you to create.
|
||||
- `MAX_NR_CHARACTERS` existed before. It controls how many characters the default `charcreate` command will allow you to create.
|
||||
|
||||
By default these settings are all setup to mimic the old `MULTISESSION_MODE` 0, so you should not notice any difference in a fresh game.
|
||||
By default these settings are all setup to mimic the old `MULTISESSION_MODE` 0, so you should not notice any difference in a fresh game.
|
||||
|
||||
The drawback is that if you use a higher `MULTISESSION_MODE` in your existing game, you will need to tweak these settings to get back what you had before. Also, if you overrode `Account` or the default login commands, you may need to tweak things to match the new upstream default.
|
||||
The drawback is that if you use a higher `MULTISESSION_MODE` in your existing game, you will need to tweak these settings to get back what you had before. Also, if you overrode `Account` or the default login commands, you may need to tweak things to match the new upstream default.
|
||||
|
|
|
|||
|
|
@ -1,47 +1,47 @@
|
|||
title: Evennia 1.0 released!
|
||||
copyright: Griatch
|
||||
copyrights: Screenshot by Griatch
|
||||
|
||||
---
|
||||
---
|
||||
|
||||
|
||||

|
||||
<br>
|
||||
|
||||
As of today, [Evennia 1.0 released](https://github.com/evennia/evennia/discussions/3017)! This has been a long time coming. Not only were there a lot of fixes and features to add, we also moved to a completely new documentation system. With many moving parts and my wish to get as much as possible into this release, it took a while to get things aligned.
|
||||
As of today, [Evennia 1.0 released](https://github.com/evennia/evennia/discussions/3017)! This has been a long time coming. Not only were there a lot of fixes and features to add, we also moved to a completely new documentation system. With many moving parts and my wish to get as much as possible into this release, it took a while to get things aligned.
|
||||
|
||||
This release is also the first one where we distribute Evennia on Pypi, so you can install with `pip install evennia`. This also led to a lot of new work and documentation to write.
|
||||
This release is also the first one where we distribute Evennia on Pypi, so you can install with `pip install evennia`. This also led to a lot of new work and documentation to write.
|
||||
|
||||
That said, it would have taken even longer if I had been alone - and I was not. The Evennia community is growing ever more active, and we now have a regular influx of PRs. I even get help fixing bugs at times! Not to mention a bunch of very sweet new contribs and implemented features. It feels super-luxurious to wake up and find a bug has been fixed for me!
|
||||
That said, it would have taken even longer if I had been alone - and I was not. The Evennia community is growing ever more active, and we now have a regular influx of PRs. I even get help fixing bugs at times! Not to mention a bunch of very sweet new contribs and implemented features. It feels super-luxurious to wake up and find a bug has been fixed for me!
|
||||
|
||||
Thanks a lot, everyone!
|
||||
|
||||
## Moving forward
|
||||
|
||||
The linked announcement above covers the new features of 1.0. Check it out - there's a lot of fun stuff. In this dev-blog, I wanted to talk a little bit about the future instead.
|
||||
The linked announcement above covers the new features of 1.0. Check it out - there's a lot of fun stuff. In this dev-blog, I wanted to talk a little bit about the future instead.
|
||||
|
||||
### Main is where it's at
|
||||
### Main is where it's at
|
||||
|
||||
As usual when the `develop` branch merges, activity shifts. So moving forward, the `main` branch (which is now what we use instead of `master`) will be the 'active' branch.
|
||||
As usual when the `develop` branch merges, activity shifts. So moving forward, the `main` branch (which is now what we use instead of `master`) will be the 'active' branch.
|
||||
|
||||
All new PRs and features should now be made against `main`. The `develop` branch will likely make its return as the bleeding-edge, but I hope that it will be mainly for testing individual complex features rather than for a huge new version like in the past.
|
||||
|
||||
### Versioning
|
||||
### Versioning
|
||||
|
||||
In the past we have made big version changes: `0.5->0.6->0.7->0.8->0.9`. Then we got sort of stuck preparing for `1.0`, and there was an interim `0.9.5` release just to hold us over. In the end, `1.0` took almost two years to complete.
|
||||
In the past we have made big version changes: `0.5->0.6->0.7->0.8->0.9`. Then we got sort of stuck preparing for `1.0`, and there was an interim `0.9.5` release just to hold us over. In the end, `1.0` took almost two years to complete.
|
||||
|
||||
Having the `develop` branch open for this long is not good. Users of `0.9.5` were stuck with the old docs (just a plain import from the github wiki) since I couldn't maintain both. It meant stagnation for people downloading `master` branch. And while people in the know eventually switched to use `develop` branch (helping a lot of with testing!) it's still not an ideal state of affairs. I don't want something similar to happen leading up to 2.0.
|
||||
Having the `develop` branch open for this long is not good. Users of `0.9.5` were stuck with the old docs (just a plain import from the github wiki) since I couldn't maintain both. It meant stagnation for people downloading `master` branch. And while people in the know eventually switched to use `develop` branch (helping a lot of with testing!) it's still not an ideal state of affairs. I don't want something similar to happen leading up to 2.0.
|
||||
|
||||
So for that reason I plan to move Evennia to [semantic versioning](https://semver.org/) going forward. Semantic versioning means that we'll use `Major.Minor.Patch` versioning. For you as a developer of an Evennia game (using `pip install` - if you follow `main` on git, it's less relevant, you'll have bleeding edge), this versioning means
|
||||
So for that reason I plan to move Evennia to [semantic versioning](https://semver.org/) going forward. Semantic versioning means that we'll use `Major.Minor.Patch` versioning. For you as a developer of an Evennia game (using `pip install` - if you follow `main` on git, it's less relevant, you'll have bleeding edge), this versioning means
|
||||
|
||||
- `1.0.x` - changes (`1.0.1`, `1.0.2` etc) are _patches_. Bug fixes. Security fixes. Should always be safe to upgrade to without anything breaking.
|
||||
- `1.x.0` - changes (`1.1.0`, `1.2.0` etc) are _minor version changes_. This can introduce new functionality that is _backwards compatible_. So a new default command, a new contrib, stuff like that. Maybe bigger bug fixes and refactoring that don't change existing functionality. So Minor versions are also usually worthwhile to update to.
|
||||
- `1.x.0` - changes (`1.1.0`, `1.2.0` etc) are _minor version changes_. This can introduce new functionality that is _backwards compatible_. So a new default command, a new contrib, stuff like that. Maybe bigger bug fixes and refactoring that don't change existing functionality. So Minor versions are also usually worthwhile to update to.
|
||||
- `x.0.0` - changes (`2.0.0`, `3.0.0` etc) are _major version changes_. These versions include changes that are _backwards-incompatible_. The change may still be small! The gist of it is that they are changes that require you to take some action.
|
||||
|
||||
With semantic versioning, Evennia 2.0, 3.0 etc may happen sooner than you may think - even changing how a setting should be written is technically a backwards-incompatible change. I think this will help make those major versions be less daunting too - meaning we won't get stuck at 1.9.5 again.
|
||||
With semantic versioning, Evennia 2.0, 3.0 etc may happen sooner than you may think - even changing how a setting should be written is technically a backwards-incompatible change. I think this will help make those major versions be less daunting too - meaning we won't get stuck at 1.9.5 again.
|
||||
|
||||
### Finishing the beginner tutorial
|
||||
### Finishing the beginner tutorial
|
||||
|
||||
The new [Beginner Tutorial](https://www.evennia.com/docs/latest/Howtos/Howtos-Overview.html#beginner-tutorial) is not ready yet.
|
||||
The new [Beginner Tutorial](https://www.evennia.com/docs/latest/Howtos/Howtos-Overview.html#beginner-tutorial) is not ready yet.
|
||||
|
||||
As mentioned in my previous devblog, I had to pause work on it or 1.0 wouldn't get out this year. That said, I think the first two parts that are finished are already useful to newcomers. In the coming months I will continue with the tutorial-game and finish all the code. In the end I aim to have the reader make a complete little MUD from scratch if they follow the tutorial from beginning to end.
|
||||
|
||||
|
|
@ -49,6 +49,6 @@ As mentioned in my previous devblog, I had to pause work on it or 1.0 wouldn't g
|
|||
|
||||
After the 1.0 release we are now officially in the 'bug fix and cleanup' phase. So report all the issues you find - especially with the new docs!
|
||||
|
||||
So moving forward, I expect to mainly do patches and minor versions for a while. I don't intend to start any major work until after the beginner-tutorial is complete.
|
||||
So moving forward, I expect to mainly do patches and minor versions for a while. I don't intend to start any major work until after the beginner-tutorial is complete.
|
||||
|
||||
For now though, let's just be happy that 1.0 is out! :D
|
||||
For now though, let's just be happy that 1.0 is out! :D
|
||||
|
|
|
|||
112
devblog/_src/markdown/2023-06-10-Evennia-2.0-released.md
Normal file
112
devblog/_src/markdown/2023-06-10-Evennia-2.0-released.md
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
title: Evennia 2.0.0 released today
|
||||
copyrights: Image by Luc Viatour / [https://lucnix.be/](https://lucnix.be), released under Creative Commons.
|
||||
|
||||
---
|
||||
|
||||
|
||||

|
||||
<br>
|
||||
|
||||
As part of our new use of [semantic versioning](https://semver.org/), Evennia
|
||||
2.0.0 was released today. Evennia is a Python `MU*` creation framework and
|
||||
server. As the change of the major version indicates, this is a backwards
|
||||
incompatible change ... well, _maybe_. It depends on your use-case. Read on.
|
||||
|
||||
In this post I'll go over some of the new things since the release of Evennia
|
||||
1.0 some six months ago.
|
||||
|
||||
## New version of the ExtendedRoom
|
||||
|
||||
The main thing that _may_ be backwards income is the `ExtendedRoom` contrib.
|
||||
This contrib extends the standard room with the ability to look at 'details' and
|
||||
to have descriptions that change by season and by time-of-day in the game. I
|
||||
originally wrote the `ExtendedRoom` contrib more than a decade ago and it was
|
||||
in dire need to be recactored and cleaned up to use the modern tools available
|
||||
in Evennia. Not to mention make use of my additional years of experience since
|
||||
first creating it.
|
||||
|
||||
Here are the [new features](https://github.com/evennia/evennia/discussions/3200):
|
||||
|
||||
- All rooms can now have any number of "room states", like "burning", "flooded",
|
||||
"dark", "crowded" or what have you. The `season` and `time_of_day` are now just
|
||||
treated as any other room-states except that they auto-change with in-game time.
|
||||
- Rooms can have any number of swappable room-descriptions, just by adding an
|
||||
Attribute `desc_<roomstate>` to the room. This will be used when a given
|
||||
room-state is set on the room. If no room state matches, the traditional
|
||||
`desc` Attribute is used.
|
||||
- In the old contrib, you could add special tags, like `<morning>...</morning>`
|
||||
in your descriptions and have those parts of the texts only appear when it's
|
||||
morning in-game. This still works, but only ever supported time-of-day states.
|
||||
The new way is to make use Evennia's FuncParser to embed functions in the text
|
||||
directly. The `ExtendedRoom` understands the new `state` inline function. This
|
||||
can be used with _any_ room state (including seasons and time-of-day). For
|
||||
example: `$state(morning, The morning sun is shining in.)` or
|
||||
`$state(burning, This place is on fire!)`.
|
||||
- The room still supports `details` - the ability to look at things in the room
|
||||
without needing to create a new database object first. This hasn't changed.
|
||||
- The `ExtendedRoom` now also has simple support for echoing random messages now
|
||||
and then to the room.
|
||||
|
||||
Overall, the code was completely re-written and cleaned up, making use of the
|
||||
latest Evennia tooling. It also has much better unit-test coverage. All the unit
|
||||
tests of the old implementation passes for the new one, but the changes are
|
||||
so big that it's nevertheless possible people making heavy use of
|
||||
this contrib may see side effects from upgrading.
|
||||
|
||||
Now, a contrib is not part of the core, so it (potentially) being
|
||||
backwards-incompatible should normally not warrant a major version bump. But I
|
||||
feel the `ExtendedRoom` contrib is used by so many in the Evennia community that
|
||||
it's prudent to up the major version to let people know that they should
|
||||
keep an eye out when upgrading.
|
||||
|
||||
## More on the Beginner Tutorial
|
||||
|
||||
Most of my time has been spent continuing to work on the new [Beginner Tutorial](https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.html). Notably on [part three](https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Overview.html), where
|
||||
we are making a whole little Evennia MUD game from scratch. While still not
|
||||
done, I have now added detailed lessons on
|
||||
|
||||
- Creating RPG dice rollers and rule systems (in our example we are using the
|
||||
_Knave_ TTRPG ruleset).
|
||||
- Organizing Player Character data, and character generation.
|
||||
- In-game objects and items.
|
||||
- Handling equipment and weapons.
|
||||
- In-game rooms.
|
||||
- Non-player characters.
|
||||
- Two types of Combat systems (Twitch-based and Turn based).
|
||||
|
||||
TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some
|
||||
more bits and bobs. And of course a separate session on building the game world
|
||||
and tying all these systems together into a little example game.
|
||||
|
||||
## A truckload of new features!
|
||||
|
||||
As usual, the Evennia community ame through with a bunch of new useful stuff since
|
||||
the release of Evennia 1.0.
|
||||
|
||||
- `Containers` - A new contrib with a typeclass and commands to make and manage
|
||||
all sorts of containers, from chests to crates and jars, along with commands
|
||||
to put things in them and take things out of them. A great place to start
|
||||
tweaking for your own game implementation (InspectorCaracal).
|
||||
- The ANSI color fallbacks (for use when your client does not support XTerm256)
|
||||
were improved to make more sense (InspectorCaracal).
|
||||
- New `logger.delete_log` method for deleting log files from inside the server (aMiss-aWry).
|
||||
- For those intending to override the `SessionHandler`, it was cleaned up and
|
||||
refactored to make it less prone to cause circular import issues (Volund).
|
||||
- New `create_channel(attr=...)` keyword, for setting channel Attributes
|
||||
directly on creation, especially from channels defined in `settings.DEFAULT_CHANNELS` (me)
|
||||
- Attributes will now properly save Python `deques` with `maxlen=...` set (me).
|
||||
- [`TagCategoryProperty`](https://www.evennia.com/docs/latest/Components/Tags.html#tagcategoryproperty) - A new way to define tags with a particular category on a class at creation-time, without having to do so in the `at_object_creation` method (me).
|
||||
- A lot of bug fixes; [see the CHANGELOG](https://www.evennia.com/docs/latest/Coding/Changelog.html) for all the details!
|
||||
|
||||
## Continuing
|
||||
|
||||
Over summer, my development usually slows down a bit, but I plan to keep pushing
|
||||
on getting that Beginner tutorial done. We are also seeing more people joing
|
||||
the [evennia discord](https://discord.gg/AJJpcRUhtF), which means more eyes on
|
||||
the code and more bugs and edge cases being detected (and ironed out). So a lot
|
||||
of maintenance work to be done in the short term.
|
||||
|
||||
In the longer term, there are a lot of exciting plans for Evennia in the pipe,
|
||||
but we'll get there when we get there. :)
|
||||
|
||||
Have a nice summer!
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
<script src="../javascripts/scale.fix.js">
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<meta name="description" content="
|
||||
<!--meta name="description" content="
|
||||
Latest Evennia dev blog: {{ latest_title }}: {{ latest_blurb }} ...
|
||||
---
|
||||
Evennia is a modern Python library and server for creating text-based
|
||||
|
|
@ -57,8 +57,8 @@
|
|||
{% endif %}
|
||||
{% for blogpost in page.posts %}
|
||||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||||
<a href="{{ blogpost.permalink }}">{{ blogpost.date_short}}
|
||||
<span class="devblog-calendar-tooltip-text">{{ blogpost.title }}</span>
|
||||
<span class="devblog-calendar-tooltip-text">{{ blogpost.title }}</span>
|
||||
<a href="{{ blogpost.permalink }}">{{ blogpost.title_short }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
|
|
|||
2149
devblog/feed.rss
2149
devblog/feed.rss
File diff suppressed because it is too large
Load diff
|
|
@ -1 +1 @@
|
|||
2022.html
|
||||
2023.html
|
||||
|
|
@ -484,12 +484,12 @@ h1:hover > a.devblog-headerlink {
|
|||
}
|
||||
.devblog-calendar-tooltip .devblog-calendar-tooltip-text {
|
||||
visibility: hidden;
|
||||
width: 120px;
|
||||
background-color: #8e8e8e;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 5px 0;
|
||||
margin-left: 3px;
|
||||
margin-top: -3.5em;
|
||||
border-radius: 6px;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
|
|
@ -501,7 +501,8 @@ a[href="devblog-posts"]:focus {
|
|||
pointer-events: none;
|
||||
}
|
||||
.devblog-calendar-post {
|
||||
margin-left: 1em;
|
||||
list-style-position: inside;
|
||||
list-style-type: circle;
|
||||
}
|
||||
.blog_post > * > img {
|
||||
opacity: 1.0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue