mudpy¶
The mudpy project aims to create a simple, generic, cross-platform, freely-redistributable MUD core engine which can be easily understood and extended. It is written in pure Python 3 and has only pure Python dependencies. All configuration and data are stored in consistently-formatted plain text (YAML 1.1) files for ease of administration. The core engine is unicode-clean internally and supports UTF-8 encoding for input and output of extended text characters.
The mudpy program and sample content are released under a free and open license, and any bug reports, criticisms, ideas, patches, content submissions or other offers of collaboration are wholeheartedly welcome.
what’s missing¶
This project is still very much a work in progress, and is unlikely to be suitable for anyone who isn’t willing to put in a bunch of work (help implementing features upstream is welcome, of course!). Here’s a non-comprehensive list of missing things most folks are likely to expect in a MUD:
interactive objects/props
inventory/equipment management
non-player characters
a default combat system
sample races/classes and spells/skills
example implementation of character stats/progression
closeable/lockable portals
ability to change randomly-generated avatar names
pagination of the output stream
what’s included¶
The fundamentals of a multi-user service are in place, and foundations are laid on which the missing features above can be built. Here are some highlights of what’s been implemented so far:
the beginnings of a MUD framework
account creation, authentication and lobby menus
movement between rooms/locations with inferred portals
in-room communication between users
setting and viewing user preferences
an integrated command help system
world creation and introspection commands for admins
live reloading of configuration and source code
a full-featured Telnet service with a focus on IETF RFC compliance
RFC 854 Telnet protocol
RFC 856 binary mode
RFC 857 echo control
RFC 858 go-ahead suppression
RFC 885 end-of-record transmission
RFC 1091 terminal type
RFC 1073 window size negotiation
RFC 1184 line-at-a-time input mode
RFC 1143 “Q method” negotiation state engine
mature development practices
traditional Python distutils/setuptools/pip packaging
comprehensive regression and style testing
minimal runtime dependencies
extensive logging
flexible, generalized data model
in-repository documentation