The Python MU* Development Library
As part of our new use of semantic versioning, 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.
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:
season
and time_of_day
are now just
treated as any other room-states except that they auto-change with in-game time.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.<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!)
.details
- the ability to look at things in the room
without needing to create a new database object first. This hasn't changed.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.
Most of my time has been spent continuing to work on the new Beginner Tutorial. Notably on part three, where we are making a whole little Evennia MUD game from scratch. While still not done, I have now added detailed lessons on
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.
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).logger.delete_log
method for deleting log files from inside the server (aMiss-aWry).SessionHandler
, it was cleaned up and
refactored to make it less prone to cause circular import issues (Volund).create_channel(attr=...)
keyword, for setting channel Attributes
directly on creation, especially from channels defined in settings.DEFAULT_CHANNELS
(me)deques
with maxlen=...
set (me).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).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, 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!