Evennia
Out-of-the-box Evennia setup (Linux) | |
| Developer(s) | Griatch, Evennia development community |
|---|---|
| Initial release | November 20, 2006 |
| Stable release | 0.5
/ November 15, 2015 |
| Written in | Python and Javascript |
| Engine | |
| Operating system | Windows, OS X, Linux/Unix[1] |
| Type | Text-based Game engine |
| License | BSD 3-clause |
| Website | www |
Search Evennia on Amazon.
Evennia is an open-source game engine for creating text-based MMORPGs similar to traditional MUD or MUSH. The engine is written entirely in Python, with Javascript used for the web game client. Evennia runs as a server, managing the game's network and database needs. Evennia also defaults to launching its own web server for the game's website. Networking and client protocol support makes use of the Twisted event-driven Python framework. Database handling and web integration use the Django web framework.
Overview
The core function of Evennia is to enable developers to create, launch, and maintain a persistent, online game world, primarily interacted with through text. Developers utilize Python to work with the utilities and building blocks provided by the Evennia API. These can be combined with any third-party packages from the Python ecosystem.
Upon installation and startup, Evennia creates a fully functional, yet empty, online game. The database initially contains a single "room" representing an abstract location in the game world. The server is distributed with approximately 90 default in-game commands used for administration, world-building, and basic operations.[2] Evennia itself is agnostic to the game world's genre or style. The developer is responsible for designing the world, its rules, the objects within it, and the available commands.[3]
Evennia includes a Javascript HTML5 web client. It uses websockets to exchange JSON data with the running game server. Customizing the client involves directly modifying the Javascript code. Evennia also supports simultaneous connections from traditional Telnet third-party MUD clients. [4] Through JSON and supported telnet-based Out-of-band data protocols like GMCP or MSDP, [5] the client interface can be extended with a richer GUI, complementing textual game representation with other media such as images and music.[6]
The Evennia project utilizes GitHub for source distribution. The wiki contains approximately 100 pages of documentation and tutorials.[7] The comment-to-code ratio of the Evennia source is estimated at 45%.[8]
Example Usage
A common way to build the game world is through online creation:
> @tunnel n = Circus tent You created Circus tent. Exits north/south were added. > north Circus tent > @desc The tent is nearly empty. Description was set. > look Circus tent The tent is nearly empty.
In this example, the developer has previously logged into a running Evennia game with a privileged account. The default command @tunnel is used to create a new game location Circus tent in the northern direction. This automatically adds the north command. Moving to the tent, the developer customizes its appearance and then views the results.
More complex game development is done offline in Python modules. Evennia imports these at runtime. Below is an example of defining a new functional object type:
import evennia
class CmdSqueeze(evennia.Command):
# Command for squeezing the nose
key = "squeeze"
aliases = ["squeeze nose", "honk", "honk nose"]
def func(self):
self.caller.msg("HONK!")
class ClownNoseCmdSet(evennia.CmdSet):
# All commands must be contained in a command-set.
def at_cmdset_creation(self):
self.add(CmdSqueeze())
class ClownNose(evennia.DefaultObject):
# A functioning clown nose one can squeeze.
def at_object_creation(self):
# Add the command-set to the nose.
self.cmdset.add_default(ClownNoseCmdSet)
This defines a Clown nose object with a command that allows it to be "squeezed" by players nearby. Because it inherits from Evennia's DefaultObject class, each new ClownNose instance is automatically stored in the database, making it persistent across server reboots.[9]
The developer could now log into the game and create a nose using the default @create administrative command:
> @create/drop Clown nose:path.to.module.ClownNose
Above, the developer tells Evennia the Python path to the new ClownNose class to instantiate. One could also have created the nose outside the game, in raw Python:
import evennia
# find the Circus tent in the database
circus_tent = evennia.search_object("Circus tent")
# create the new object "Clown nose" in the "Circus tent" location
new_nose = evennia.create_object("path.to.module.ClownNose", key="Clown nose", location=circus_tent)
Either way, players in the Circus tent location will be able to manipulate the nose using default commands and also squeeze it.
> get clown nose You pick up Clown nose. > squeeze nose HONK!
History
Evennia was initially created by Greg Taylor in 2006 to build MUSH-style games with Python. The desire to build and maintain complex game systems in MUSH's traditional softcode was seen as unnecessarily difficult. Shifting from MUSH's custom language to using external Python modules allowed developers to leverage standard third-party tools and version control workflows. The Evennia project eventually expanded to accommodate any type of text-based multiplayer game, not just MUSH.[10]
Greg named the project "Evennia" arbitrarily, drawing from a character in the Guild Wars game franchise. It also served as a way for Greg to learn the Twisted and Django Python libraries in more depth. Development progressed in phases until 2010, when the project was taken over by the current maintainer, Griatch, who has since maintained a consistent development pace.[11] Evennia was originally distributed under the Artistic License, but switched to the more permissive BSD license in 2012.
Use in academia
Researchers at MIT published the article Language Understanding for Text-based Games using Deep Reinforcement Learning[12] at the 2015 Empirical Methods in Natural Language Processing conference. The researchers used Evennia-created game worlds to train an AI deep neural network to play. The article details using a simplified game world to train the network before testing it on Evennia's publicly available Tutorial world.[13] The computer received no information about the underlying game state, only textual feedback to determine progress. Different algorithms were tested on a specific task: crossing a bridge within the game world. The deep learning network solution outperformed other algorithms in their study.[14]
Criticisms
A criticism of Evennia is its lack of default content. Compared to many traditional MUD servers, Evennia requires significant developer effort for initial game creation.[15] To address this, the Evennia development community includes a contrib/ folder with example code, but this is still limited.[16] Some members of the MUSH community have also noted the absence of a default in-game softcode language.[17]
References
- ↑ "Requirements". Evennia. Retrieved 2015-11-15.
- ↑ "Default commands A-Z". Evennia. Retrieved 2015-11-15.
- ↑ "Evennia Introduction". Evennia. Retrieved 2015-11-15.
- ↑ "Protocols supported". Evennia. Retrieved 2015-11-15.
- ↑ "OOB support". Evennia. Retrieved 2016-01-28.
- ↑ "Evennia graphical client example". Ricard Pillosu. Retrieved 2015-11-15.
- ↑ "Documentation wiki index". Evennia. Retrieved 2015-11-18.
- ↑ "Openhub code stats". openhub.net. Retrieved 2015-11-18.
- ↑ "Typeclasses". Evennia. Retrieved 2015-11-18.
- ↑ "Softcode overview". Evennia. Retrieved 2015-11-15.
- ↑ "Griatch on Evennia". podcast.__init__, a podcast about Python. Retrieved 2015-11-15.
- ↑ "Language Understanding for Text-based Games using Deep Reinforcement Learning" (PDF). Narasimhan et al. 2015. Retrieved 2015-11-15.
- ↑ "Tutorial world overview". Evennia. Retrieved 2015-11-15.
- ↑ "Learning language by playing games". MIT News. Retrieved 2015-11-15.
- ↑ [citation needed]
- ↑ "Layout of contrib folder". github.com. Retrieved 2015-11-15.
- ↑ "Evennia - a Python-based MU* server". MuSoapbox. Retrieved 2015-11-15.
External links
This article "Evennia" is from Wikipedia. The list of its authors can be seen in its historical. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
