/r/Evennia

Photograph via snooOG

Evennia is an open-source library and toolkit for building multi-player online text games (MUD, MUX, MUSH, MUCK and other MU*). You easily design your entire game using normal Python modules. Apart from supporting traditional clients, Evennia comes with both a game web-client and a web-server out of the box.

Welcome to /r/Evennia, a community for the Evennia MUD codebase.

If you are new to Evennia, see the Introduction.


Player Links


Developer Links

To get started developing with Evennia, see Getting Started.


Community Links


Subreddits you may like

/r/Evennia

457 Subscribers

9

Evennia in HacktoberFest again!

I'm a little late in pointing this out, but like every year Hacktoberfest is going on throughout October - and Evennia is participating!

Make 4 quality PRs against an OSS repository (like Evennia) to help out the open-source community and gain internet cred!

If you want to help out Evennia, you can grab any ticket you want, but here are a few specifically suitable: https://github.com/evennia/evennia/issues?q=is%3Aissue+is%3Aopen+label%3Ahacktoberfest+

Hack on!

0 Comments
2024/10/07
12:45 UTC

2

Question: Configure SSL for port 4001

Hey everyone!

I’ve recently set up Evennia on an Ubuntu server, and it’s up and running smoothly. I can connect to it and play the game in the browser without any issues.

However, I’ve been struggling for the past two days trying to configure SSL for port 4001, which should be handling the secure connections. SSL is already installed and working fine on the domain, but it seems like I might have misconfigured something in `settings.py`.

When I try to run Evennia on port 4001 alongside port 443, I can access the directories, but the game itself isn’t showing up.

Any insights or suggestions on how to get SSL working correctly for port 4001 would be greatly appreciated! Thanks in advance! 😊

2 Comments
2024/08/23
08:27 UTC

13

This is amazing

This is an appreciation post.

Just started my gamedev journey - I’m planning to create a relatively elaborate browser text-based RPG and stumbled upon Evennia when looking up some mechanics.

I’m a Django developer and I before I discovered this gem I thought I’ll have to figure out most of the mechanics myself. Even though I might not implement Evennia 100% (I will definitely skip telnet, for example), I will read the entire documentation from cover to cover several times because it’s just that good!

Thank you for the hard work - the documentation is absolutely amazing and sheer amount of knowledge in the HowTo section is extremely valuable!

I hope to make at least a semi-successful game just so I could tell more people about Evennia. I also hope to be able to contribute once I get properly settled in.

Thanks again!

5 Comments
2024/07/02
17:19 UTC

6

Writing-games.com's interview about Evennia

0 Comments
2024/04/13
21:42 UTC

17

Evennia 4.0.0 released!

Evennia 4.0.0

March 17, 2024

Major release. Check out for backwards-incompatible changes below.

Version updates

  • Feature: Support Python 3.12 (Griatch). Currently supporting 3.10,3.11 and 3.12. Note that 3.10 support will be removed in a future release.
  • Feature: Update evennia[extra] scipy dependency to 1.12 to support latest Python. Note that this may change which (equivalent) path is being picked when following an xyzgrid contrib pathfinding.

Backwards incompatible changes

  • Feature: Backwards incompatible: DefaultObject.get_numbered_name now gets object's name via .get_display_name for better compatibility with recog systems.
  • Feature: Backwards incompatible: Removed the (#dbref) display from DefaultObject.get_display_name, instead using new .get_extra_display_name_info method for getting this info. The Object's display template was extended for optionally adding this information. This makes showing extra object info to admins an explicit action and opens up get_display_name for general use.
  • Fix: (partly Backwards incompatible depending on your usage): DefaultObject.get_numbered_name used .name instead of .get_display_name before, which broke recog systems.

New features

  • Feature: Add ON_DEMAND_HANDLER.set_dt(key, category, dt) and .set_stage(key, category, stage) to allow manual tweaking of task timings, for example for a spell speeding a plant's growth (Griatch)
  • Feature: Add ON_DEMAND_HANDLER.get_dt/stages(key,category, **kwargs), where the kwargs are passed into any stage-callable defined with the stages. (Griatch)
  • Feature: Add use_assertequal kwarg to the EvenniaCommandTestMixin testing class; this uses django's assertEqual over the default more lenient checker, which can be useful for testing table whitespace (Griatch)
  • Feature: New utils.group_objects_by_key_and_desc for grouping a list of objects based on the visible key and desc. Useful for inventory listings (Griatch)
  • Feature: Add DefaultObject.get_numbered_name return_string bool kwarg, for only returning singular/plural based on count instead of a tuple with both (Griatch)

Bug and security fixes

  • Fix Removed the @reboot alias to @reset to not mislead people into thinking you can do a portal+server reboot from in-game (you cannot) (Griatch)
  • Fix: Refactor Clothing contrib's inventory command align with Evennia core's version (michaelfaith84, Griatch)
  • Fix: Limiting search by tag didn't take search-string into account (Griatch)
  • Fix: SSH connection caused a traceback in protocol (Griatch)
  • Fix: Resolve a bug when loading on-demand-handler data from database (Griatch)
  • Security: Potential O(n2) regex exploit in rpsystem regex (Griatch)
  • Security: Fix potential redirect vulnerability in character page redirect (Griatch)
  • Doc fixes (iLPdev, Griatch, CloudKeeper)
0 Comments
2024/03/17
14:02 UTC

3

Question about contrib.simpledoor

Hi all, I'm new to Evennia, and I thought I would use the SimpleDoor contribution to create exits that include doors, gates, etc.

The problem I'm having is that I can't figure out how to use it with directional commands. I've tried a few different ways:

First I tried:

u/open east:contrib.grid.simpledoor.SimpleDoor = #115

That works for one end of the connection, but it creates an exit named "east" in the destination room (if there is already an "east" exit then it overwrites it). In other words, you can move "east" to the other room, but you can't move "west" to return to the room you were in--you have to move "east" again instead.

What I'd like it to do is to create a "west" exit, or at least allow me to define the name of the return exit.

Then I tried doing it through code. The function is long, so I won't post it all here. The end result, though, is that it manually creates a SimpleDoor with the desired exit names ("east" to move east; "west" to move west), and if you examine them then they seem like they should work:

u/examine east

------------------------------------------------------------------------------------------

Name/key: east (#182)

Aliases: east

Typeclass: SimpleDoor (evennia.contrib.grid.simpledoor.simpledoor.SimpleDoor)

Location: The Meadow (#114)

Home: Limbo (#2)

Destination: Entry Way (#115)

Locks: traverse:false()

Stored Cmdset(s):

evennia.commands.cmdset.CmdSet [ExitCmdSet] (Union, prio 101, duplicates: T)

Merged Cmdset(s):

evennia.commands.cmdset.CmdSet [ExitCmdSet] (Union, prio 101, duplicates: T)

Commands available to east (result of Merged Cmdset(s)):

east

Persistent Attributes:

door_name=a sturdy door

return_exit=west [type: <class 'evennia.contrib.grid.simpledoor.simpledoor.SimpleDoor'>]

------------------------------------------------------------------------------------------

However, when I try to move east from the room I'm in, or when I teleport to the other end of the connection and try to move west, it says the command is not available:

[ Exits: east(#182) ]

east

Command 'east' is not available. Maybe you meant "@typeclasses", "setobjalias" or "setdesc"?

Am I doing something wrong?

1 Comment
2024/02/05
22:33 UTC

12

Evennia 3.0.0 released!

https://github.com/evennia/evennia/discussions/3020#discussioncomment-7912729

A lot of new features, and a truckload of nice contributions from the community!

4 Comments
2023/12/20
22:54 UTC

6

Coders? Builders?

Hello! So, we are starting up a modern nights Vampire: The Masquerade (5th edition) Mu*! The game is going to take place in Prague. For now, we are going with Vampire and Mortals classes, until we get more settled and have the proper staff for such. As of now, we are still in the building/coding stage of things. We are looking/needing coders and builders! The codebase is evennia. Currently, there are three of us and we are all neew to evennia's codebase so whatever help we can get, we will take! Feel free to log on and hit Kaos up: beckon.vineyard.haus port 6666

0 Comments
2023/10/01
13:25 UTC

6

Evennia in Hacktoberfest 2023!

Like every year, Evennia - the Python MU creation framework - is taking part in Hacktoberfest. Make 4 PRs against Evennia (or any other participating OSS project) to win prices!

Click here for how to get going helping Evennia this year!

It's a great excuse to get your feet wet with OSS development while helping the MU* community all at once!

0 Comments
2023/10/01
10:26 UTC

9

Evennia 2.2.0 with AI support for NPCs

Evennia 2.2.0 is out! Mostly bug fixes, but also a new optional contrib for making your NPCs more talkative by having them use an LLM (Large Language Model).

https://github.com/evennia/evennia/discussions/3020#discussioncomment-6652965

0 Comments
2023/08/06
22:06 UTC

18

Evennia 2.0.0 released

Since Evennia uses semantic versioning, the change of the major version indicates a (potentially) backwards-incompatible change. So keep an eye out when updating to the latest. But it's worth it, because there are a lot of changes introduced over the last few months! Check out the dev blog with more details here.

If you have more questions, jump into our very active discord and join the Evennia community. :)

0 Comments
2023/06/10
16:42 UTC

1

Hosting options or recommendations?

Hi just wondering what are peoples hosting recommendations? I am novice level familiarity with AWS EC2 which was an option Ive considered. Mainly because I do not have a computer that is running 24/7 and dont really want to leave my computer publicly accessible. As usual I am looking for the most cost effective solution that I can safely allow people to contribute to the game as it is in pre alpha developmental stages. What is everyones experience with this? I plan on using Git for updating code as well as allowing builders to just build within game using build commands. TIA

5 Comments
2023/04/12
14:18 UTC

1

Is it just me? Terminal cursor adding spaces every few seconds?

Hi, I am new to Evennia and Python in general. I am usually a Linux user but am using this Mac atm and have setup Evennia on locally to run and learn. Does anybody know why my terminal cursor keeps adding a space every few seconds after I connect to Evennia server? Even in the ipython environment, it just keeps adding spaces. Outside of Evennia, when I am not connected, using "nc localhost 4000", it behaves normally. TIA

https://preview.redd.it/hsj2q352zwra1.png?width=739&format=png&auto=webp&v=enabled&s=f7fe79e00cb752512639608056ce351487853ba6

Edit: The issue is from using "nc" (which is mac default) Solved by installing Telnet and using that instead.

6 Comments
2023/04/04
18:49 UTC

2

How hard would this be?

I'm sure that this is possible, but I'm looking for some input on how hard an idea I have for a game would be. I'll start by saying I've probably been a beginner programmer over 15 times, but never really getting deep enough to not consider myself a beginner. I would say I could be a novice scripter, mostly in Tintin or bash. I've done some python introductions a few times in the past, but never used it consistently enough for it to stick. I've played a few different muds, and help admin one, so I have a rough idea of that side of things as well.

I'm exploring the idea of creating a game that is about my family history, where players (all relatives) play themselves and time travel around the world to visit ancestors. Each player would have a pedigree chart as a main item and try to fill in all the gaps, maybe have a quest mob that says something like "find your mother's mother's father" or something similar.

I feel like making the people isn't going to be the issue (although figuring out how to import from a GEDCOM file would speed things up quite a bit) but I'm not sure how to deal with time and people. I would rather not have to write a room for every different time period, but rather have the people load only if they were there at that time. So visiting a town in England only for example in 1900 would have different people than if I went in 1850.

So how hard would it be to do something like this in Evennia?

1 Comment
2023/02/08
00:09 UTC

22

Evennia 1.0 released!

As of today, Evennia 1.0 develop branch merged into main!

Evennia is a Python server and framework for creating MUD/MU-style text-based multiplayer games.

1.0 was a lot of work! Thanks everyone who helped and contributed! As usual, report bugs in the issue tracker.

If you are already using Evennia, this is the key documentation to read:

Some Evennia 1.0 Release notes

This is just a brief summary. See the Changelog for the full list.

Major new features compared to 0.9.5

  • Evennia is now on PyPi and is installable as pip install evennia.
  • A completely revamped documentation at https://www.evennia.com/docs/latest. The old wiki and readmedocs pages are closing.
  • Evennia 1.0 now has a REST API which allows you access game objects using CRUD operations GET/POST etc. See doc page for more information.
  • Evennia<>Discord Integration between Evennia channels and Discord servers.
  • The FuncParser centralizes and vastly improves all in-string function calls, such as `say the result is $eval(3 * 7)` and say the result `the result is 21`. The new parser can handle both arguments and kwargs and are also used for in-prototype parsing as well as director stance messaging, such as using `$You()` to represent yourself in a string and having the result come out differently depending on who see you.
  • Revamped In-game Channel system.
  • The Help System) was refactored and sped up. Apart from auto-generating command-help from the command code itself and adding entries to the database, one can now also load external files to use as help entries.
  • Rework of the Web-component (website, webclient), into a much more consistent structure that should be easier to expand on.
  • New AttributeProperty, TagProperty along with `AliasProperty` and `PermissionProperty` allows managing Attributes, Tags, Aliases and Permissios on typeclasses in the same way as a model field, but dynamically.
  • Much more flexible MULTISESSION_MODEs for controlling how many clients can puppet a given character, how many they can control at a time and so on. See Connection-Styles for a detailed explanation.

Contribs

Contribs are optional, more game-specific code contributed by the Evennia community - useful to build from or use as inspiration.

The `contrib` folder structure was changed from 0.9.5. All contribs are now in sub-folders and organized into categories. All import paths must be updated. See the new Contribs overview.

  • New Traits contrib, converted and expanded from Ainneve project. (whitenoise, Griatch)
  • New Crafting contrib, impelenting a full crafting subsystem (Griatch)
  • New XYZGrid contrib, adding x,y,z grid coordinates with in-game map and pathfinding. Controlled outside of the game via custom evennia launcher command (Griatch)
  • New Command cooldown contrib for making it easier to manage commands using dynamic cooldowns between uses (owllex)
  • New Godot Protocol contrib) for connecting to Evennia from a client written in the open-source game engine Godot (https://godotengine.org/) (ChrisLR).
  • New name_generator contrib for building random real-world based or fantasy-names based on phonetic rules (InspectorCaracal)
  • New Buffs contrib for managing temporary and permanent RPG status buffs effects (tegiminis)
  • The existing RPSystem contrib) was refactored and saw a speed boost (InspectorCaracal, other contributors)

There's a lot more, apart from the changelog, it's summarized in the release notes.

4 Comments
2022/12/03
17:11 UTC

5

A few noob questions

Hello, everyone!

Hopefully, my questions are not too obvious.

I'm not a computer programmer, nor an IT professional, but I have an interest in Text Adventures and a familiarity with Python. I have a few questions about Evennia.

I'm interested in Evennia mainly for two reasons: (1) It's Python, (2) I found this quote in the inform7 cookbook that made me realize it is not the tool for me:

Story files produced by Inform tend not to contain elaborate typographical effects. They would only distract. Like a novel, a classic work of IF is best presented in an elegant but unobtrusive font.

And I don't wanna write a novel, I wanna make a text game! This attitude makes it clear to me that inform7 will not easily provide many

I want a text adventure

  1. First, is it possible or advisable to make a single-player game with Evennia?
  • would I be able to distribute it in a self-contained file?
    • assuming it has support for audio or images, would I be able to distribute those along with the game?
  1. How much of a programmer should I be to make a single-player game with Evennia? What about online? Is it accessible to a non-programmer regular computer nerd?
  2. How would it compare to inform7 for a single-player game?
  3. If I decide to make an actual online MU*, would I have to learn webhosting, server administration, etc?
  4. Would Evennia help me achieve things that are generally reserved for MUD client functionalities, like a map (or even facilities to help me make and manage ASCII maps?), or a "hud" health/combat/other information?
  5. Does Evennia have a parser? How does it work?
  6. Was Evennia translated into Portuguese? If not, how hard would it be for me to translate? And how would that affect the text-parsing functionality?
2 Comments
2022/10/26
19:15 UTC

6

Evennia in Hacktoberfest

As we have done for the last six years or something like that, Evennia is again taking part in Hacktoberfest - make four PRs against Evennia (or another participating OSS repo) during the month of October and win a T-shirt!

Take the chance to get involved in Open source, MUD-library creation and Python, all at once!

2 Comments
2022/10/02
08:13 UTC

1

Error initializing game.

So I'm trying to get this thing running and I'm getting an error when I run evennia --init mygame

I keep getting a traceback error talking about _getfullpathname needs to be a string, bytes, or os.pathlike, not noneType... I followed the instructions and didn't get any errors otherwise. Help?

1 Comment
2022/09/21
22:49 UTC

6

Evennia Devblog changed location

https://www.evennia.com/devblog/

I've used Blogger/Blogspot for many years, but I wanted to write my dev blogs in Markdown like I do for other texts in Evennia land. So I wrote my own little blog platform for my own needs.

If you used RSS with the old dev blog, you need to update your feed.

0 Comments
2021/11/21
10:36 UTC

6

Python ROM vs Evennia?

I'm mostly curious if someone has implemented a combat system with the complexity/balance to put combat front and center of the experience and eventually, enable PK in a way that will feel familiar to ROM/Diku/Merc. In my mind, I currently imagine evennia in the mud space next to RPIs, but maybe I am not thinking about it right. My background in MUDs started with lambdamoo & foomoo back in the day, but have I helped build 3-4 different ROM based muds as well.

As I look to kick off my next project, I want to start hacking on something that combines an RP world with strong PK balance, but building a PK system from scratch is fairly daunting and usually requires an active playerbase to see which combinations are over or underpowered. The vast majority of PK systems I've seen were in fact ROM extensions and not completely original combat systems.

There is a ROM 2.4 to python that Davion at Mudbytes released a while back. I got both that and Evennia running last night on my local machine and have been debating pros/cons of each. I want to build in python because that's where the dev community is and I want to see if I can get a few collaborators.

My goal is not actually to run a mud but rather to put together an MVP for a PK/RP mud and then see if I can get other developers/builders interested. I want to have fully functional (if boring) areas, balanced race/class combos, functioning PK and PvP systems (arena, capture the flag, looting, etc), and a solid OLC/Prog system, which for me would be MVP.

My gut tells me that Python ROM will get me where I want faster. Its missing OLC, and I would want to write a different prog system I think, but its a functioning mud in a similar style to the one I plan to build. On the other hand, using Evennia would give my project more legs/reach with developers and a better long term runway.

I'd be very curious to hear anyone's experience trying to build ROM-like classes & combat systems into evennia and if there are any functioning muds that have done so. I didn't see any modules for things like this as well, which made me curious.

2 Comments
2021/04/29
14:54 UTC

8

Is Evennia a suitable base if you want to create a lot of custom systems? Turn-based combat, custom stats, custom class system etc, or would you have to start with ripping a lot of things out?

Making my own MUD has been my white whale since 1995. I've been involved in making other MUDs, but I've never successfully made my own. And since I wrote an article about making a MUD specifically targetting the visually impaired users who use a screen reader, I've once again (sigh) become obsessed with the idea.

The thing is, I have specific ideas of how I want to do things. I don't want a traditional 2 second tick real-time combat system. Instead, I want a turn-based system where all combatants have 30 seconds to decide on their action, and then the turn is resolved and the result displayed for everyone. And I also have fairly specific ideas of how levels, skills and classes should work. My point is, even if the code base I start with has support for all these things, I'd probably have to start by going all around the codebase, ripping out things, which could become a nightmare if everything depends on everything else. I'd rather not have to do that. And doing everything from scratch myself isn't appealing either.

A few years ago, I went to PyCon Sweden where the maintainer of Evennia held a very interesting talk about it, which made me aware of its existence. So now, my question is - how modular is Evennia? Would it be a pain for me to rip out a bunch of systems to make room for my own, or would it be fairly straight forward? Because if it's not, I think I'd rather go look for something smaller where there's less to rip out.

My previous MUD coding experience is mostly with LPMUDs of different kinds. And I know if I were to start with one of those, I'd have to lots of stuff to painfully rip out (they usually come with pretty much everything ready to go and hard-coded into the game, making it hard to remove).

6 Comments
2021/04/12
15:16 UTC

11

Coming from diku, I have many questions

I promise I looked through the documentation and tried to get some answers, but I've come up short either because it's simpler than I think or my unfamiliarity with python.

  1. I get that if I wanted my own look command, I need to override it by declaring it again somewhere like commands.py. However, what if I just want to recolor the room names, or, say, add some other field that is displayed in look? I found CmdLook but it calls another function at_look and I looked at it, but neither of them looked like they were printing the format I am seeing when I do look ingame.
  2. If I make a new folder in the game directory or add a new .py file, where do I add the imports at so that code is brought in when the game starts?
  3. I'm a bit confused about how rooms work. In diku based, I made an area with a set of vnums, went to the first vnum and started building. That area was separate from other areas unless you directly connected the vnums. How do areas work in evennia? I'm not sure how to make two separate groups of rooms that aren't connected.
  4. How and where would I go about adding game update functions, like a hunger value that decreases every so often. or a tiredness value that decreases when a character moves? I see the script functionality but I wasn't sure if that was a good place for that or if scripts were just a replacement for "mob programming" softcode type stuff.

edit: For number four, if I do use scripts for that purpose, where can I attach every new character with the update scripts? The tutorial on scripts shows a lot of detail on how to randomly run them in game but not how or where to attach them permanently

5 Comments
2020/12/07
20:34 UTC

Back To Top