Visit our site to listen to past episodes, sign up for our mailing list and support the show.
Summary
Griatch is an incredibly talented digital artist, professional astronomer and the maintainer of the Evennia project for creating MUDs in Python. We got the opportunity to speak with him about what MUDs are, why they’re interesting and how Evennia simplifies the process of creating and extending them. If you’re interested in building your own virtual worlds, this episode is a great place to start.
Brief Introduction
- Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
- Subscribe on iTunes, Stitcher, TuneIn or RSS
- Follow us on Twitter or Google+
- Give us feedback! Leave a review on iTunes, Tweet to us, send us an email or leave us a message on Google+
- I would like to thank everyone who has donated to the show. Your contributions help us make the show sustainable. For details on how to support the show you can visit our site at
- We are recording today on September 15th, 2015 and your hosts as usual are Tobias Macey and Chris Patti
- Today we are interviewing Griatch about the Evennia project
Interview with Griatch
- Introductions
- How did you get introduced to Python?
- Can you explain what MUDs are and what that has to do with Evennia?
- What is it about MUDs that keeps them interesting long after the technical restrictions that led to their creation are no longer present, especially in light of 3D multiplayer games like WoW and EVE Online?
- Can you give us a rundown of the various parts of Evennia (MUD engine, web interface, etc.) and how they fit together?
- How does Evennia handle the fact that a MUD world is comprised of many hundreds of objects containing various properties, maintaining consistent, persistent state as players interact with them?
- What concurrency tools or paradigms does Evennia use?
- During the height of MUDs popularity, one highly sought after feature was the idea of being able to have players travel from one MUD instance to another, would it be possible to implement this in Evennia?
- Has the Evennia core team given any thought to adding features to support a richer client interface? Graphical maps or the like?
- How difficult would it be to use Evennia to interface with something like Slack or Hipchat for a company-wide MUD? Have you ever heard of someone doing something like that?
- Are there any fully fledged running MUDs built with Evennia out in the wild?
Picks
- Tobias
- Chris
- Griatch
Keep In Touch
Links
Hello, and welcome to podcast.init, the podcast about Python and the people who make it great. You can subscribe to our show on iTunes, Stitcher, or TuneIn Radio, or you can add our RSS feed to your pod catcher of choice. You can also follow us on Twitter or Google plus with links on the site. And please give us feedback. Leave us a review on iTunes, tweet to us, send us an email, or leave us a message on Google plus I'd like to thank everybody who has donated to the show. Your contributions help us make the show sustainable. For details on how to support the show, you can visit our site at pythonpodcast.com.
We are recording today on September 15, 20 15, and your hosts, as usual, are Tobias Macey and Chris Patti. And today, we are interviewing Griatch about the Avenia project. Griatch, could you introduce yourself, please?
[00:01:00] Unknown:
Yeah. So hello. I'm Grij. I'm a Swedish Pythonista, I suppose. I, I am a scientist by profession, an astronomer and I use Python extensively at work. And, Yeah, that's, that's the basic thing, I think.
[00:01:20] Unknown:
That's great. How did you get introduced to Python?
[00:01:23] Unknown:
Yeah. So, as I said, I I do research in astronomy, and I do computer modeling of astronomical objects. And in this, you tend to use Fortran actually. And, Fortran is a very powerful language, but it's not very pretty to look at. And it's not very useful in some ways, like string manipulation and things like that. So I was recommended to try out Python. This was maybe 10 years ago or so. And I sat down and learned Python over Christmas. And what I did to do that was basically made a little choose your own adventure, text game in a terminal to so just to get the great scripts of the language.
And I started using Python in at work. And it turns out that Python interfaces brilliantly with Fortran. It's actually very, very nice to an easy to interface to. So, so these days I use Fortran for the heavy computing stuff and, Python for logics and disk IO and things like that. So, and, so for, eventually when I got into Avenia, it's a program it's a program created by a guy called Greg Taylor. And I took over development of that 5 years ago.
[00:02:48] Unknown:
And can you explain what MUDs are and what that has to do with Evenia?
[00:02:53] Unknown:
Right. So, MUD is, well, the the abbreviation stands for multi user dungeon or dimension maybe. But it's basically massive multiplayer text games. So these are forerunners to the MMORPGs of today. And, in fact, these games used to be called graphical NUDs at some point before this MMORPG abbreviation came fashionable. And the basic principle of a text game, or multi player text game, is that you interact with the world in text. So your input usually commands via text and you read descriptions of the environments and so on, And you do this together with other, other players as you would in, in any multiplayer game.
A mod is usually centered on role playing, but that's a bit, it can usually be, there can be many, many types of mods, from really action packed Twitchy PVP type things to very loose rule, shared storytelling experiences and things like that. So the, so mud in this respect is actually a really wide range of multiplayer text games. Evania, is, is a text game library. So it's, it's, game creation library and server in 1, you could say. And you and you can use this to create your own map games or text based multiplayer game in pure Python, which is the main, very premise of of Avenia.
[00:04:50] Unknown:
And what is it about MUDs that keeps them interesting long after the technical restrictions that led to creation are no longer present, especially in light of the modern 3 d multiplayer games like World of Warcraft and EVE Online?
[00:05:02] Unknown:
Well, it's no secret, of course, that mods are not as prevalent as they as they used to be. Right? I mean, the the games like, I should say, even line or Wow, or so on. I mean, they are, they are the, the, the what came after months, basically, in the technological arena. And I mean, I I love Eamon line, for example. So but, I should say it. I mean, I started playing text based games in 2, 008, 9, something like that. So I don't play these games out of sentimentality. I mean, it's not like I, you know, remember the good old days. I didn't play MUDs in their heyday. But I find that some things are I mean, this is a personal opinion, of course, but I I find that some things are just better in text than in graphics. I mean, there's some aspects like descriptions and and and making use of your imagination, and also freedom of of role play. I mean, personally, I'm an old school role player. I game mastered many a game, in all sorts of and I made my own rule systems and played, you know, paper and pen role playing.
But over time, as you get older, it's people just apart and move to different places. And I find it hard it gets harder to get a group together and and and play a role playing game and stuff like that. So so I looked around to to see what you can do online. And of course, you can do, you know, something like role 20, where you have an actual role playing game. But apart from that, I would say that MUDs are basically the best role playing you can get online today. The simply because the text allows you so much freedom to interact in game.
And also because of the depth you can produce when you don't have to create very heavy graphical assets. Also, from a development standpoint, they are, for you as a small dev team or hobby developer, for example, they require a lot less resources for you to to create and make content, as I said, rather than, you know, having having to make 3 d assets or graphical, assets and so on. So it means that you that these games tend to instead focus on complex gaming experiences. So you have deep, role playing systems, very deep interactions. And, also interactions where you have role playing in text, usually of course, where you simply can't reproduce in a graphical sense, where you have to present this with a graphical avatar of some sort. In the text form, you can actually have a lot more freedom in this sense.
So here you have a definite advantage over text games in my view. And also this is why many still play these types of games despite, the existence of games like Wow or Eve Online.
[00:08:22] Unknown:
Absolutely. I mean, I think I think a testament to that as well is the fact that interactive text based fiction games are still absolutely not just alive but thriving in there. You know, there's a whole competition around them, and there's it's a whole genre that hasn't been superseded simply because imagination is the best graphics engine that ever has or ever will exist. Right?
[00:08:46] Unknown:
Yeah. I mean, now the the if the interactive fiction, movement has really grown quite a lot, so this is sort of parallel, you would say to the multiplayer text game, genre, which, which I'm here talking about, but you've certainly correct them in the same way books are not going anywhere, even though there are films, available, the movies available, text games are not going anywhere either, even though you could imagine they may be that the young generation, simply not maybe catching them quite as easily as you would game with flash graphics. So
[00:09:29] Unknown:
And are MUDs, do they accommodate more of an asynchronous approach to gaming, allowing you to sort of interact with the game and then maybe focus on something else for a minute and then go back to the game versus the more real time characteristics of things like Wow or EVE Online?
[00:09:45] Unknown:
I would say that this depends on the game. Text games are just as varied as graphical games in that respect. As I said, they are really text games that requires you to be have really great reflexes. And you can't look away for a moment or you they brutally brutally murdered murdered or something. And then, of course, then are there are really games also that you have time to write, you know, really careful entries where you describe what you care to do with a lot of text. And, and really, you can really take the grid, the inner author in yourself. And then then the turn, so to speak, or the the flow of the game is much slower. And you're right. Then there are really people who, like, play the same game, and then they take it on different different computers or or tablets or something and and take it with them and play the same thing without stopping, so to speak.
So, yeah, you can really have, a very long experience and have a very different type of gaming experience if you choose that type of game.
[00:10:55] Unknown:
I was gonna say I've seen everything from real time space battles involving firing photon torpedoes to turn based games, like, you know, that require real real time interaction to games like Boggle and the like, where people might play a lazy game over the course of a day, taking a turn only every 5 or 10, 15, 20 minutes when they have a moment to to focus on it.
[00:11:17] Unknown:
Yeah. So, it depends very much on on what type of gameplay and style and mood. So, I mean, in some some gaming communities or, I mean, it tends to be a community, right, in many of these games. Mhmm. You you there there is there are various types of of ways to go about this and the quality of of text you you should write or or not, depending on the type of game.
[00:11:43] Unknown:
And can you dig into a little bit the, the mechanisms used for analyzing and responding to the textual input that people use for interacting with the game? Or, you know, sort of how the how the text is transformed into something meaningful to the game engine?
[00:12:05] Unknown:
In the sense of asking for the technical description how we do it in Avania? Or are you asking in the general sense on on how it's done in general from the user's perspective?
[00:12:17] Unknown:
I guess a bit of both. Whatever you feel more comfortable addressing.
[00:12:21] Unknown:
Okay. So basically, as in any game, you are inputting commands into the game. In the in, graphical game, these commands might be mouse clicks or joystick movements, or something like that. In a text game, it could be something like that. But in print usually, it's handled by you entering text commands. So this could be, you moving around. And this is also an interesting aspect because when you have text, you it's harder this is the drawback of text. It's harder to visualize, room placements. So spatial information. This is a natural thing when you have graphics to to see where you are in a room. Whereas in, in text, this is actually quite a problem because you say you're in a room, it can be quite require quite a lot of text if you really require detailed information of where the enemy is, for example, relative to you, if you are turned in the right direction or not. So usually, the traditional way to handle this is actually to abstract this.
So you have, the room is sort of a location. It's the name for general location. And when you move, you're actually moving between these abstract location, these abstract rooms, traditionally, by just north, south, east, west directions. And these are this is commands that you enter, and then you get a description of the location you're in. And that description usually includes things you can interact with in that room. For example, other other players, or objects or monsters or whatever. And, then you can via commands, you can, for example you can enter look at monster or look at troll or look at that cool player over there or whatever And they will get more information about that.
And notably, you can describe what your character is doing, for example. So you can describe in text that your character is standing around in his room, smoking a cigarette, or if it's a fantasy game, maybe, fiddling with their pet dragon or something. And, other players will see this and interact with you. Or if it's a more pvp experience, you might draw your swords and attack each other. And it's all handling and handling in commands. So, so from the server's perspective, from the game server, like Evania's perspective, what's coming in is text, and it's up to the parser to parse these texts to identify it as a as a command that the server understands and the game understands, and then spit back out some sort of response to this.
So, in more modern servers, like Evania, there are also other types of input coming from the game client. And that is, things which are not directly related to the to the text written sort of on the input line. But there could be other things going back and forth between the client, like updating a health bar or or, you know, varying dynamic things that that that doesn't require, the direct input of the, player. So and also, of course, the server will inform the player gradually if something changes without their inputs, of course, like, weather changing in the room or night setting and various players coming and going or other things happening.
[00:16:12] Unknown:
So can you give us a rundown of the various parts of Evenia, like the MUD engine, web interface, etcetera, and how they fit together?
[00:16:20] Unknown:
Right. So I think it's probably the easiest if I briefly show what what what you will see when you have a new, Evania install as a new wannabe, mod developer. So, first of all, say so once you have installed Evenya, so Evenia is a game library. So we install it, usually from our GitHub page, but you, we recommend that you install it, in a virtual environment and then use just just PIP to, to, to install it in there. And then you will have the Avinia command program available, in your, shell, in your bash shell or whatever. And, so what you do then is that you run Evenya init.
And that creates your own game folder. So that could be named whatever you want for your game. And that game folder has a range of empty templates, so Python templates. And basically, Python modules, with some instructions and empty classes for various game objects in there. You don't need to touch that. Initially, it's all set up to run. So you use Avania, again, the program Avania migrate, and that creates the database for your game. By default, this is, SQLite 3 database. But, since we are running on Django, you can actually use a wide wide range of different SQL, databases.
And finally, you do a venue start. And then your game is running. So you have a fully functioning online game. And that includes, web server. So you can at that point, you can go in your browser. You can connect to local hosts on the port 8, 000. And you will have a nice default website for your game. And you can click a button there and and have a HTML 5 web client to log into your game. And you can, of course, also use the traditional telnet, telnet client clients that that are haven't been available for many a year. So this is the traditional third party clients you can also connect your game with.
So, at that point you have a fully functioning game. It's very empty though. But it's working fine for for interacting with other players, chatting, things like that. So then the Sorry? I was gonna say you can run through the tutorial, etcetera, etcetera. Right. Yeah. You can run there is a tutorial world you can install with a with a single command. And also, out of the box, even you have some 90 commands, I think it is, which are, like, mostly admin commands, like things like administrating the server, kicking players, creating new objects.
So build some basic building and administration commands, which are, most games will need, but they're pretty dull to implement if you want to, if you are starting out. So you can a lot of basic but useful commands are available. What Avenia does not include by default are game systems that are unique for every game in a way anyway. So, like, combat character creation, you know, races, skill, skills, things like that, because we expect our users to want to make these things unique to the particular games. This is our target group. So to speak.
Generally, our people are the developers coming to Avenia are keen on making their dream games. And that is usually very custom. And and so we had we don't impose any of these game specific stuff. However, we do include with the distribution our contribution folder, which has more game specific things like dice rollers, more dice rollers, barter system, examples of, menus, how to have menu systems, and, various tutorial worlds and and systems like that. So these are just optional plugins. So you just import that and use it in your game. However you want. So this is mainly my stuff at the moment, but, we are, we are open to for more people to contribute, stuff to to the contribute folder for everyone to use.
So once you have this, so I have a now you have a running game, but very empty. So what you have now is is that the ability to put your own Python modules in your newly created game directory. And, so Avania is completely coded in Python modules, so outside the game. So we follow the principle that you're better off as a developer today within modern days to use your own professional text editor, with professional version control or whatever you want to put on your game design. So rather than a traditional way of many mods to code these things in some sort of internal language in the game.
So Avenia, the basic working of Avenia is to tell Avenia to import your modules like normal Python modules, and, and then you execute them. So, this makes it very easy to make very custom games because, of course, you have access to all the Python modules out there in the wild and can use them directly to whatever functionality you you want in your game. So you're not just depending on us producing, you know, stuff for you.
[00:22:40] Unknown:
That's great. How does Avenia handle the fact that the mud world is comprised of many hundreds of objects containing various properties maintaining consistent persistent state as players interact with them?
[00:22:53] Unknown:
Right. So, Django is what we use for the database back end of Avenia. So Django is perhaps most known as a web, framework, and we also use it as that. So Django is what is creating make it very easy for us to present our own website, for example, tied to the same database as the game itself. But it's Django also has a very stable or m. So for interacting with with database. So we use that. In actuality, as you said, there are lots of objects in the mud world, and, many of these are very different from each other. So how 1 way you could imagine doing this would be to to make different SQL database tables for, I don't know, say a share or a stool or a or a person or something like that.
And, keep adding new database, custom database tables or, say, Django models, which is the the Python representation of this in Django. And that would be pretty catastrophic in the long run and very hard to maintain. So Avenia does this by using very few database tables or, Django models. And these base models, so we won't we only have I think it's 4 core models. And that is the the object, the player, and then there are some also for for in in line, communication, like scripts and and channels. And I won't go into the there's there's a difference between player and character in Navania. You have, the player is the account which you connect to the game with. And the character is actually like any object.
That if you're puppeting as a player, you're puppeting character.
[00:24:54] Unknown:
So I, as a player, could have multiple characters in multiple role playing systems even in the same MUD if I wanted to, if that if the MUD supported it. If the MUD,
[00:25:06] Unknown:
chose to implement such a thing, yes, You could you could have the same account or same player account. So the player has your password, you know, and and and, you know, stuff like that. But you can connect and supports a lot of different modes in this. So you can con in the most generous mode, you can actually, connect to to your player account and control multiple characters, with multiple connections. So this is actually something requested by users, that we add this. So you have the ability, for example, to play the same character from different computers at the same time and also some multiple characters at the same time. Apparently, there are really game communities where this is common.
But anyway, so we have very few database tables. And, Venue uses a class, a Python class, which we call a type class, but it's basically a type and class, a Python class that hides, that saves itself to the database under the scene, behind the scenes. And it means that you, as a developer, you create a class and create an instance of that class. And when you create an instance of that class, that is actually saved to the database for you. You'd never need to actually deal with the database aspect of of this. So to take an example of this, let's say, we want to create a particular type of object called a car, so a weaponized car.
I I recently saw Mad Max. And, so how do you do that? So in invenia, you would what you would do is that you would use the child. You would make a new child class, a new Python class inheriting from the base object class of Avenia. So this is really like in your code, you have to import avenia, and then you inherit from avenia dot object, basically, or default object. And you call this new class Mad Max car, say. And this now has everything under the hood. It's using meta classes and and other things under the hood, but you don't need to know about this. You put helper methods on it, whatever you need to do to represent, you know, what you think of a Mad Max car, how that should be should be. And then he offers attributes, which are special database, models or objects that you just attach as properties on this class.
So, for example, you could have health or armor or speed. So this is just creating a foreign key relationship behind on the behind the scenes for you and allow you to customize your Mad Max car as much as you want, to make it specific to what what the, what you what this particular object should be able to do. And then you can do in this case, it's a car is a pretty complex thing. You will you will want to be able to drive it. You might have weapons on it, so you can fire the gun or launch missiles or something like that. So, as I said, all the input from the player are commands.
And in in Newenia, commands are also classes. And they are just so all the commands that are are available to you, none of that is hard coded in the engine. It's all freely available to you to modify as you see fit. And the so the normal commands, like look or get or drop, and the, they are basically as command objects stored on your character. Or in the case of admin commands, they might be stored on your player account object to make them available. So in this case, we create some new commands inheriting just inheriting from the command class of Evenya. So from Evenya import command and inherit from that.
And then you store so for example, we make a command fire or launch missiles or something like that. And in the in that class, we we have a we we define what happens when you do that. And then you store those commands on the Mad Max car and, set some, permissions on it to to make sure that these are only available to objects inside of the car. And, and you might also want movement commands. So, like, you know, move around or or move to the next room or or I don't know, honk the horn or whatever. And, so in the games, then now we have created a Python class, a Python module with these classes available. Now you just log in to your game and create a new object of the type mad max car. So you just use the create command, which comes with the venue, which you could also, in pre in principle, recreate or change as you want.
Just a command like any other, and you give the dot path to the class to that command, basically. So, you give the, like, yeah, pointing to the mad max car class. And, boom, then you have a new car, a new mad max car in the room. And it has all the functionality, of that you have coded for it. And if you did errors, then you you will see a nice trace back. You will this will not crash the server normally. But you can just fix your code and just reload the the code right in there. So that's really
[00:31:13] Unknown:
basically, unlike traditional MUD systems where builders or even programmers to use, like, Mux or Muz or things like that, The programming is all done outside of the mud environment. You're actually programming Python in your mud execution environment to affect the to create new classes of things in world.
[00:31:35] Unknown:
Yeah. So so, we we basically, Yeah. And and, the nice thing with this is that as you create this car, it's also now stored in the database because it's an instance of the class. So it's it's all created in the database, and you can shut down the server or whatever, and the car will still be there. And so now you just step into the car and can use all the commands and so on in it and drive around with it and so on. But, yes, you're you're quite correct. Normally, in in many traditional, sort of game game systems, There is a mini language or usually a custom sort of language where you can build these things in car in game.
Even if there's not prohibit this. I mean, you could have, for example, you could make a generic object, say, and allow you and create a slew of build commands for builders to use to populate that object, say, with names and various functionality and so on. So you could make what is equivalent to an in game, coding environment, or at least a very, very powerful build environment in game if you wanted to. We don't aim for that out of the box, though, because we feel like if you are if you sit here and you're coding the you're you're you're better off actually using a proper text editor and version control, and all the code help and functionality that's available to to you when you're dealing with proper Python modules, rather than us having some sort of in game, system that is sort of another high level language on top of Python.
[00:33:34] Unknown:
Absolutely. And in this day and age with disposable servers, it's not like it used to be where giving someone account on your box to SSH into and work on the mud is not is not the the
[00:33:47] Unknown:
the investment that it used to be. Right? So No. I mean, you the the what we recommend is that people I mean, even if if even if our development team wants to keep their stuff secret or something, then there there are free there are free repositories on Bitbucket, for example, which you can use. So everyone I mean, Evania works in such a way so that all the developers of of your game can can just pull down the current state and run their own debugging server on their own and push stuff down to the central repository than that you as the game owner or the group, that is running the game can then just accept them. And a normal professional game development or programming, workflow.
So, yeah, the, I think the advantages of having an in game coding environment. I mean, that that is not having to give up access, but that has diminished that advantage. And today, I think you are better off actually making use of modern technology.
[00:34:56] Unknown:
So what concurrency tools or paradigms does Evania use?
[00:35:01] Unknown:
So, all the networking of Evania, is done using Twisted. So Twisted is an asynchronous network, framework. And so this is the core game loop of Avenia. So Twisted is a way to allow a synchronicity in the same game process. So if any, it's all running is in the same in 1 process. There's no threading, needed in that sense. And so and it so this bypasses the the problem the problem that Python has with the dome. The gill? Sorry. The gill. Yeah. The lock the lock of the, interpreter lock, global interpreter lock. And the, so so instead of doing that, twisted basically, you could say chops off chops up the the execution of Python code into small snippets and lawn and execute them more and very efficiently.
So the effect of it of this that we get concurrency and all the all the users can can work together without waiting on each other. But we don't have the problems of of a thread a threading. And to be fair, a text server is not that heavily demanding in in in in the sense of a game. So, this generally works very well, unless it scales up, the user base to thousands of players. But you can you can supports a lot large range of of players. And we have tested it quite extensively in this. It's very efficient. Also, Twisted offers some easy ways to make connection protocols. I mean, it's a Twisted is a very extensive library.
So for example, it was pretty easy for us to implement Telnet. It is the mud traditional MUD interface, and also the various MUD extensions to Telnet that has evolved organically in the over the years. But we also have through the through Twisted, we can also support WebSocket, SSH, SSL. So and since the web server, which is a twisted web server runs in the same process, you can actually have easily link your Django website to the same database without any worries of caching conflicts and things like that. Yeah. And then also through twisted, you have a very nice way to interact with the web clients, our own web clients.
[00:37:55] Unknown:
In a way, Evenia is kind of the ultimate realization of what Glyph originally wrote Twisted for. Right?
[00:38:01] Unknown:
Yeah. He was he was quite excited, when when he heard that he someone actually used twisted for a mod style thing. I mean, he, he, as you say, he originally had ideas for, using it for a month. So yeah, he was quite I think he was quite, intrigued by the fact that it was actually being used for that.
[00:38:22] Unknown:
So during the height of Mudd's popularity, 1 highly sought after feature was the idea of being able to have players travel from 1 MUD instance to another. Would it be possible to implement this in Evenia?
[00:38:34] Unknown:
Yeah. This this question pops up now and then. The, personally, I'm a bit skeptical about the the practical use of it. But, I mean, you have issues like translating a character between game systems, for example, how do you do that? You need some sort of custom translation table and agreements between the mods, and so on. But if you wanted that really, I guess it would be possible. You would need to set up some sort of custom protocol to do, to do that, do it. And then you already linked, with external resources. I mean, you can do that rather easily, but no, there is no, you can't specifically travel between months in between, in that sense.
As I said, it's possible to do, but I don't think it's worth it, to be honest.
[00:39:28] Unknown:
Right. I had a couple of acquaintances who who actually did this once with old school MUDs. But by the time they did, they had kinda felt like the majority of the MUD world had shriveled up to a point where nobody cared. So it was kinda like it was such a it was such a big deal in its time. And now I, you know, I I tend to agree with you. I I kinda don't see it being worth the effort either. But,
[00:39:49] Unknown:
I think I think the I think it dilutes. I mean, it's just as well to create 2 accounts. It's so easy to do. So you can just as well play both worlds, both games and be happy doing that than having to synthetically move between them somehow. I mean, I guess if you have 2 sibling games that have very similar worlds or share the same world maybe and things like that, but it's so much easier to to just create 2 separate accounts and and run the things. So, yeah.
[00:40:25] Unknown:
And so we've talked a bunch about how interaction between different elements of the game happens. But how do you sort of describe and update and maintain the overarching narrative of the MUD environment? How does the story line of the game translated within the within the overall game environment? So what what elements of avenia or what elements of the MUD drive the storytelling element of the of the overall interaction?
[00:40:56] Unknown:
Well, for as far as Avenia is concerned, there are there is no no out of the box gameplay. And there is no narrative in that respect. And know that different traditional mud games do this in different ways. So some have, big staff that is running the meta game or the sort of the overall narrative of the world and what's happening and big big events going on. I mean, and whereas others, let it be more of a player driven, sort of gradually evolving open sandbox kind of thing. I think it's the same principle that you would use in a graphical game. It's that's no difference.
It's just different in in the type of discussion the type of stories and the detail, I think, of the stories that can be created. But but the basic principles are not different from from MMO RPG's game.
[00:41:55] Unknown:
Yeah. So so you can do like, what what Gaurav was just saying, that there are plenty of cases where pea there you basically just provide a framework for people to kind of open role play in. And there are other cases like what you're saying, Tobias, where it's kind of more like moving through an interactive fiction story where there is a consistent narrative and you're interacting with the mud in way in various concrete ways as you move through a story, you know, quests to solve, etcetera.
[00:42:22] Unknown:
And I mean, you should remember that the mud like, the World of Warcraft quest chain kind of thing. I mean, this is all originally created in muds. So the whole principle of questing and and and stuff like that and instances and all of this is just, this comes from the, from the text world and was refined, maybe in the, in the professional, in the graphical game world, but all the same things work at the same. You could could could apply the same things in principle if you wanted to have a more game driven or world driven experience or or, yeah, like quest or or things like that. So that would be basically the same thing, just with different graphics or lack of graphics in a sense.
[00:43:12] Unknown:
So so how would that work though to sort of expand on Tobias' question just a little bit? Let's say you have a quest where you have to uncover a key. You have to you have to, you know, solve a particular puzzle to gain access to a key, which is then used to unlock a crypt wherein you encounter some other some next part of the game, whether it's you meet an NPC that you either have to kill or work with to enable some further, you know, part of the puzzle or something like that. How does that kind of programmatic interaction in various parts of the world work?
[00:43:45] Unknown:
Yeah. So yeah. Right. So an example of this is used in, in the tutorial, actually, for Avenia. And, there you have an example where, you have you're looking for this a small adventure or test example game where you are looking for a particular crypt that is containing a magical weapon. And to get into that crypt, you have to look at an object elsewhere in the world. And that object is actually a custom, object. And every time we look at it, it shows a different scene. It's like an obelisk that shows magical scenes on it. And that scene you happen to see is the, is the, the crypt describes the, the fresco on the, on the crypt you have to go into.
Because if you pick the wrong wrong crypt, there's gonna be a trap and you you sort of get whisked off. So and so you need to, so how that work works programmatically is that every time you look at the the object, this obelisk, the object identifies that it's that it's being looked at. And, it is basically a hook. So your your loop command, it triggers a hook on on the object it's looking at. So that's simply, the the command has a call to the target of the look, and it calls the hook on that called at look. Simply. And the, so the Obelisk response, the, this, this thing is looking at me. So what I do then, okay, I check with this is a character looking at me.
Now I store a simple little flag, in this case, on on that object listing exactly what that character saw, which scene I happened to randomly show how they looked. And then when they eventually get to the crypt, or hand and gets to choose between a range of crypts, They go into 1 of these exits, and the exit itself checks this flag. Or it's not actual flag. It's actually, an actual identifier, on the character. And if that matches the the character, the exit they chose, then, okay. They went to the right 1 and they are happy and find good stuff. Otherwise, they are whisked off to, to to horror and death and stuff.
So, that's that's 1 way to do it. I mean, there are many other ways to do it. You could have you could use Evinias lock system, for example, to lock down, and door unless you carry a particular object, like a key, or you could actually implement custom, commands on, on the key to make sure that you have to, you know, put it in the door and turn the key if you which is usually kinda annoying to have to do, but you couldn't do that if you wanted.
[00:46:46] Unknown:
That's great. That's what I was curious about is just to get kind of an example to to sort of show people how how that would fit together.
[00:46:54] Unknown:
Yeah. I mean, we we had there is an another example in the tutorial with, with a wall, which is actually a particular exit. And that wall has a range of of, like hanging roots from it. And the the wall presents a range of of custom commands that are only available to you when you stand in front of the wall. And that allows you to, like, move the move these roofs around on the wall. It's a very simple little puzzle. So you basically move them aside. And then there is a button appearing, which you can, which you see in the middle of the, of the wall when they move away the roots. And then suddenly when that's available, then there's a button or press button command available to you. And you press that and the door and the exit opens, and then you can walk out.
So, you can do a lot of powerful things when you have the full power of Python available to you in your in your in game command objects and commands.
[00:47:54] Unknown:
Has the Avinia core team given any thought to adding features to support a richer client interaction, like graphical maps or the like?
[00:48:02] Unknown:
So, through the WebSocket protocol, we do support our own HTML client. This is, it's a JavaScript, web client. And this can not only receive text, but it can also receive any custom instruction sent from or to, the server from a venue. And it actually the same thing can be said about Telnet because these days, modern, third party, mother clients actually has a lot of extensions to the Telenor protocol to do the same thing. But in in our web client Transcate use JSON for for communicate for that type of communication. And this is called out of band communication. And that's that's that's used to do things without the user's direct input. So we can update health bars, maybe have a, a window with the inventory or, you know, like, maybe even a little graphic of of of the character, what they wear, for example.
You can, you could definitely have maps potentially, but there are none I know of in the works at the moment. But you could do stuff like that. Many of these things, are, are relatively game specific. You could imagine, but, yeah, we, we, we, we should probably also supply, stuff to extend the web clients. We control the web client. We have more flexibility there. So we should probably do more with that. Also the our existing web client is soonish to get an update. So we hope to make it a little bit easier to plug in your own functionality as very JavaScript plugins and easily receive data back and forth from Avenia that way.
[00:50:02] Unknown:
And how difficult would it be to use Venue to interface with something like Slack or HipChat for a company wide mud? And have you ever heard of some somebody doing something like that?
[00:50:12] Unknown:
So I haven't looked at looked into Slack or HipChat, but if any already interfaces with IRC, for example. So, you can chat to so for example, even even though you're in game, you can chat to people sitting in the IRC channel. We'll do this all the time in the development and support channel of Venue. So new development, games, they connect their own development games with the support channel. So they can literally chat with us, directly from inside game. That is really cool. And, yeah, it's it's very, this is something which is actually quite easy to set up in via twisted because twisted support have IRC, protocols.
So do we run that? And, also a Twitter, for example, you can, you can you can easily set up, we have instructions on how to run Twitter command. So you just enter a command in game, and it tweets to your preset, Twitter account, whatever you want to do to, like, updates for your game world or what. So, these things are are fully functioning as it is. But, so I don't think it would be too hard to write and have any protocols for something like Slack or HipChat as well. Maybe you would need to be a little bit careful if you want to have control from the other side, like being able to input commands or something that that you would need to somehow make sure that's secure.
But I would not be surprised if there are already fully functioning protocols for Twisted or at least for Python for these chat system. So
[00:51:58] Unknown:
There is. There's a I can see already there's a Python dash Slack real time module that interfaces Twisted with, the Slack rest API. Yeah. There you go. So,
[00:52:09] Unknown:
probably, you could just slot that in. And as with most other things, part Venue's, protocol systems are also completely pluggable. So you can plug in your own systems like that without touching the core library of Vania. So, you could in principle add this. But if you do, please contribute it so we can all enjoy it. Alright.
[00:52:33] Unknown:
And you you mentioning Twitter, raises an interesting possibility as well of, maybe having a MUD instance that anybody on Twitter can interact with by tweeting at a particular user account, and that that just raises some, some
[00:52:49] Unknown:
interesting ideas. I think there are a lot of possibilities here, which are still pretty unexplored. I mean, in a sense of I mean, 1 of the things with the venue is that we are using Django. Right? So that makes it very powerful to you to make a web environment or a web experience parallel to the game, because it's the same database. They use the same the game and the websites use the same database. So you could, for example, what a very basic example is, of course, to, to be able to see whom, how many people are in the game from the website, but you can also do stuff like potentially do stuff like logging in, do, character creation, maybe, set up meetings with people.
There are lots of good ideas. You could, you could, you could do with this kind of thing. And that's just staying within the web server, talking about you know, as I said, tweeting or doing Right. Stuff.
[00:53:51] Unknown:
Or even creating a, marketplace between characters in the game so that different players can potentially trade inventory items via the web interface?
[00:54:03] Unknown:
Yeah. I mean, any multiplayer game thrives on its community. So I think this is true for text games the same way as it is for graphical games. And, I think that, and all, all of these things and also of course that that might help also for, for beginners to, to get into game a little bit more and so on. So, yeah. So there are lots of possibilities here. And, I should say this is not, I mean, there are of course, mad games that use the web extensively. I mean, existing mud games. So if any, it's not at all, you know, unique, with with this possibility, but it's, it's out of the box doing it and that's, and it was using, very, quite, very modern, ways to do it. So I think in that sense, we are trying to make it easier for people to do this without having to hack things together themselves.
[00:55:03] Unknown:
Well, that's exactly that. That's exactly it. And that's honestly, that's 1 of the reasons I so very much wanted to talk to you and I appreciate you taking the time to talk to us is traditionally, MUDs, you know, because they were written a while ago, are these really kind of dense c or c plus plus code bases using things like Berkeley DB or other binary file system based databases as their persistence layer. And, you know, if you've ever read MUD source code, you know it it can get pretty pretty dense and pretty intense. It's not not for the faint of heart. Many of of the sis the the most used systems actually don't even use use a database, but they use flat files. Right. Right. That's exactly what I'm saying. Yeah. Exactly.
[00:55:45] Unknown:
Right. So, yeah. And as I say, I mean, they are they are many of them are relatively old or quite old actually, written in CC plus and have grown in many cases quite organically So over and changed hands many times and so on. So, yeah, it's it's it requires quite a lot of work in many cases to run, random is my impression.
[00:56:10] Unknown:
Right. So could you extend it a more traditional mud to interface with HipChat or Slack or or or Twitter or whatever the case may be? Yes, you absolutely could. And in the case of the more programmable ones like Moo as a for instance, people have done much those same kinds of things.
[00:56:27] Unknown:
People do remarkable things in soft code, like in the MOSH or in MOO. It's really remarkable stuff to do. Absolutely.
[00:56:36] Unknown:
But what's amazing, what I think makes, pardon me, makes Avenia really noteworthy is the fact that you don't have to learn an incredibly arcane programming language that's intrinsic to the mud in order to be able to do that. If you know Python and you know you you have access to all these APIs and you can just call them unmodified. So I think the ease with which you can create these integrations or make your own custom modifications is just is is really kind of groundbreaking and very cool.
[00:57:10] Unknown:
So, we actually have quite a lot of new, developers or at least wannabe developers, coming and talking to us in our community or development community of Evenya. And it's actually quite a considerable fraction, which are completely new to Python or and in some cases, completely new to programming overall. And, but he just always wanted to make a game. And text gaming, I mean, even if some really wanted to have played mods and really wanted to make their own mod that was better than the 1 they played. But some are really just wanting to make a game. And in that respect, also, if you are completely newbie, the text is actually very useful, to you because you as I said, it's much easier and cheaper to do, resources and do content to the game in that sense. It's still a lot of work. I mean, there's no denying that in any game engine. I mean, it's taking a lot of work to make a multiplayer game, text or graphics or not. But, it's still, in that sense, a slightly lower threshold. And and also text tends to allow you is my impression in a way to focus more on the core game experience. It's called the core game systems rather than the flashy because there's no flash above beyond how you process it.
[00:58:42] Unknown:
Absolutely. When when I first heard about Evenian and I I had, you know, gotten you to agree to come talk on the show, I actually posted a link to the project to a Facebook alumni group for this MUD that we've all been talking on for the last 15 years. And a lot of the, you know, dinos, which is MUD terminology for people who've been around for a really long time, were really excited. And a couple of them even said, you know, I've I've long said that Python would be an incredible teaching tool. Exactly what you said, when you think of a MUD as something that's a really exciting thing for a new programmer to be able to build. Like, hey. You can go create this multi user interactive game.
That gets people really excited about programming. It's a lot better than something dry like, you know, I don't know, here, construct this sort algorithm or something like that. It gets people excited.
[00:59:36] Unknown:
Yeah. I mean, the the core principle of Avenia is to remove all this boring, your networking stuff, database processing, all the stuff that you that every game needs. But if when if you're gonna start to do that from scratch, you are you're all your enthusiasm is, unless you're really, really keen on doing these things, from scratch, it will dry, drain your enthusiasm quite quickly. So the whole idea here is that we handle all this for you and try to actually hide away much of the I mean, you don't actually need to know Twisted, for example, to run Avenia or Django for that matter. You can dive into the depth into the, you know, into the metal if you really want and really know what you're doing.
So there's no there's no blocking or anything, but you could, in principle, code everything using basic pipe Python primitives, like, classes and functions. And you find that, as you say, this is actually potentially quite useful also for beginners or just trying to get into Python in general or coding in general. And we we get really get all kinds of people in our, support chat, from all everything from really old time or old timers who have, you know, played mud for 20 years to people who have just heard about mods and thought it's not cool. Just wanna try to do it again. So and, we have I should so maybe flag a little bit. We have, we have quite extensive documentation, which is also relatively unusual for mods in the mod world or in the text based world.
So we have, Wikipedia on GitHub is is considered, at least I've heard by by others, be pretty extensive and, lots of tutorials and information. So that's also helping, of course, people to to sort of get going, hopefully.
[01:01:41] Unknown:
So are there any fully fledged running MUDs built with Avenia out there in the wild that people can look at?
[01:01:47] Unknown:
So, at this point, I'm not aware of a fully running sort of production level game. There are a considerable amount of games in development, Some of which are actually uses, paid for coders, which is a big deal. So there are hopefully, I think the, the, the most promising ones I see are going to launch sometime in the beginning of next year. But, overall, there are large number of of thing projects in the in the works, but, none that I know that are in full production. We have actually initialized our own sort of, gaming project to, to call, I never, which are, which is meant to serve as a breeding ground for all these various code systems that could help to people who want a little bit more, code to work from than the relatively bare bones game that that the that the core of any offers.
But that that's a project that is ongoing.
[01:02:58] Unknown:
That's great. And 1 last thing. Is there are there any areas in particular in your project that you would like to welcome the community contribute to, areas that you could use some help?
[01:03:10] Unknown:
So, well, I should really be mentioning the community in general because of course you have lots of people who are involved in working on Evania. And, many have contributed a lot, a lot. In my case, I'm fine that I am not really that much of a web developer. I'm more of a core of a of a core coder, in that sense. So, people helping with, things like, the the interface in of of a default client or, you know, following proper web web standards in in in the in the files and so on that, that's something which is, highly appreciated. And I have gotten some, some good help with this, but it could really need more inputs from, web developers and people, you know, skilled with the use of proper modern techniques and so on in in creating web pages and, and so on. So that that's certainly a point which I noted, recognize my my own sort of lack of of experience.
[01:04:21] Unknown:
And so are there any questions that we didn't ask you that you think we should have or any topics that you wanted to bring up before we move to the picks?
[01:04:28] Unknown:
Well, yeah. No. So it's interesting because as me personally, I mean, I've quoted quite a lot in, in, in, professionally. I must say that at least for me personally, coding something like Avanya, it's actually very useful for me as well, also for helping my own private programming skills. Because in making code that is intended to be read by others, that is a very, very useful exercise. And, I mean, we have really tried hard to make Vania as PEP PEP 8 compliant as possible. We have comments on every function and class, and so on and so on. So we really tried hard to make the core of Avania as well documented and readable as possible. And this is I can really recommend this for for any anyone who want to to improve their their coding skills, just to make something that you expect others to, you know, look at and and try to understand.
So because, I mean, the this is all critical for for something like where you have the developers are supposed to look at your code and figure out how things hang together. And it also helps a lot for trying to not having to spend all the time explaining verbally what you actually were thinking when people want to use this. So that that's actually something which I really want to fight for to to for people to consider to make, something that people are intended to to actually read and understand. So that that's been very useful for me personally and professionally, to do that.
[01:06:20] Unknown:
So I guess with that, we'll move on to our picks. I'll start us off. So the first pick is 1 that I actually found today called libraries dot io, And it's a way for you to keep track of the various open source libraries that you either just want to stay up to date with or ones that you use in your projects. And it will actually let you know when there are new releases for those different libraries. So for instance, it would be a good way to upload or track all the libraries that you're using in your requirements dot text for a given project and get alerts whenever 1 of those whenever 1 of those dependencies has an upgrade.
My next pick is the JSON API spec. It's a very good spec that has a decent middle ground of good structure while also remaining flexible. So definitely worth checking out at JSONAPI dot org. And along with that, there's the Marshmallow marshalling library for Python that makes it really easy to create class instances that can have particular methods that will do various mutations or for serializing or deserializing your objects. So it makes it very easy to create an interface for a specific API. So that is it for me today. Chris, what have you got?
[01:07:40] Unknown:
So my first pick is the latest John Scalzi book in the Old Man's War series, which I really enjoy. It's good, entertaining science fiction. This book is called The End of All Things. If you like science fiction and you like science fiction with a wry sense of humor, you should definitely be reading this series. My next pick is a thing from a maker of teas and purveyor of teas called David's Tea which just recently came into the Boston area. I guess it's a Canadian chain, but you can buy this stuff online, too. And they make this incredible tea steeper.
It's this plastic, BPA free plastic thing. I don't quite know how to rephrase it, that fits over your teacup or mug or whatever or glass. And it can be used for making hot tea. You put loose tea in the top and then pour your water in. And there's like a little strainer that, works, when you lift lift the thing up. It's it's really it's a really clever mechanism. So you can you can sit it on your glass and let it steep. And then, when you're ready for it to pour, you lift up and the the, the stopper moves automatically. And the tea goes through it, a filter. The water goes through a filter, so you don't get any of the grounds. And the other amazing little thing about this is that it's equally awesome at making iced tea with your own tea on the fly.
So if you're like me and you drink a lot of different herbal teas, you can make an awesome glass of herbal iced tea with no muss, no fuss, just as easy as you would a glass of hot tea in a matter of a couple of minutes. It is delightful. My 3rd pick is, Tracy Osborne who we had here on the show previously, limedarling on on Twitter, is doing a kickstarter right now for a sequel book to her awesome Hello Web App book on learning the beginnings of of, Django for people who are not familiar with programming or web programming. I've been programming for years, but I am still have not been able to wrap my brain around web programming.
And Hello Web App is the closest I've come thus far. I really loved this book. It's very concise. It says exactly what you needed to say and does not take you on all kinds of tangents. It's just incredible. And she's doing a kickstarter for a sequel to that called Hello Web App Intermediate Concepts. I'm really excited. I backed the project and so should you because she's a great author and she does a lot for the community and she's doing great work. And that's about it for me. Grits, what do you have for us?
[01:10:29] Unknown:
Well, I well, if when it comes to Python modules, I I guess I should, I doubt that many people who are using Fortran in this user group, but, the F2 pi, library or module, it's actually something I recommend. If you ever want to deal with Fortran, this is the thing to do it and use it from, from Python. Also, to stick with the theme here. I have a, it's a book and if you are into text gaming or any sort of world design, you'll probably know this 1. But there, there is a book called, Designing Virtual Worlds by Rachel Bartle. So this is really something I recommend if you're at all interested in creating your own games. It not doesn't necessarily have to be mud, even though Richard Bartle is 1 of the co creators of the original game, Mud.
But this is really a lot of interesting stuff for anyone interested in creating an online world, virtual world of any form. It's a lot of inspiration to have there. And, finally, why not take a peek at the, at the various places that are dealing with with muds out in the wild. So, there is, for example, a place called imaginary realities, which is an e sign on mud design. And there's also something called optional realities, which is a mud development forum, which is relatively recently started. And it's it's I say it because it started by 1 of the people who are developing a game in the venue. So, I'm familiar with it. There are plenty of other mud related forums out there, but I should guess that should I guess shout out or people will wonder what I why I didn't mention.
[01:12:30] Unknown:
Excellent. Well, we really appreciate you taking the time to join us today. And for anybody who wants to keep track of what you are up to and what is happening with the avenia project? What would be the best way for them to do that?
[01:12:43] Unknown:
So the avenia.com website has, feeds from all the various aspects of, of Avania. So including, my dev blog, the latest forum discussions and updates in the code and issues and so on. Otherwise, the the code itself is available via GitHub, the repository on on GitHub. So, yeah. And also, of course, we we we are on IRC on I on this avenia at the free node IRC network. So drop in and say hi. It's usually people around.
[01:13:24] Unknown:
Well, thank you very much, and I'm sure everybody's gonna enjoy listening to this episode. And I, we appreciate you coming on the show. So hope you enjoy the rest of your day. No problem. Thank you.
Introduction and Hosts
Interview with Griatch
Griatch's Introduction to Python
Overview of Avenia and MUDs
The Appeal of Text-Based Games
Creating and Developing MUDs with Avenia
Technical Aspects of Avenia
Setting Up Avenia
Managing Game Objects and Persistence
In-Game Programming and Customization
Concurrency and Networking with Twisted
Inter-MUD Travel and Practicality
Maintaining Game Narrative and Storyline
Creating Interactive Puzzles and Quests
Rich Client Interaction and Web Integration
Integrating Avenia with Slack and Other Platforms
Potential and Future of Avenia
Comparing Avenia to Traditional MUDs
Community Contributions and Documentation
Current and Upcoming Avenia Projects
Areas for Community Contribution
Improving Coding Skills through Avenia
Picks and Recommendations