6.2 KiB
title: Evennia 2.0.0 released today copyrights: Image by Luc Viatour / https://lucnix.be/, released under Creative Commons.
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.
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:
- All rooms can now have any number of "room states", like "burning", "flooded",
"dark", "crowded" or what have you. The
seasonandtime_of_dayare 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 traditionaldescAttribute 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. TheExtendedRoomunderstands the newstateinline 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
ExtendedRoomnow 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. 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
- 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_logmethod 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 insettings.DEFAULT_CHANNELS(me) - Attributes will now properly save Python
dequeswithmaxlen=...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 theat_object_creationmethod (me).- A lot of bug fixes; see the CHANGELOG 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, 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!
