A "new stock" for a classic MUD, updated for a new(ish) millennium
Report Bug
·
Request Feature
Table of Contents
The last official release of Rivers of MUD II (ROM) was 2.4b6, circa 1998. It has been the basis of countless other MUDs over the last couple decades. Over those years, however, it has gotten increasingly more difficult to build with modern compilers without numorous errors and warnings. This project aims to be a viable starting point for future MUDs by updating the code base to modern standards.
Mud98 has the following improvements:
- ROM 2.4b6 base with Lope's ColoUr and OLC 2.1.
- Cross-platform compilation with CMake.
- Builds without errors or warnings in GCC, Clang, MSVC, and Cygwin.
- Compiles with
-Wall -Werror -Wextra -pedantic.
- Compiles with
- Continuing implementation of modern C (including newer C standards).
- Secure telnet with TLS and password digests provided by OpenSSL.
- User-defined, shareable color themes.
Other than the improvements listed above, Mud98 intends to be true to the spirit of the original ROM as possible; to be a tabula rasa on which other, more modern MUD's can be built.
Here are some of the novel improvements to Mud98 over stock ROM:
While Mud98 still supports legacy MobProgs, it has a much more powerful alternative: the Lox scripting language. This fast bytecode-interpreted language supports both Object-Oriented and Functional Programming, and is a first-class citizen in Mud98, far beyond what MobProgs was capable of.
OpenSSL provides secure sockets to Mud98. You can configure Mud98 to run TLS in tandem with clear-text telnet, or by itself.
Mud98 implements the MUD Client Compression Protocol (MCCP2 & MCCP3), the MUD Server State Protocol (MSSP), and the MUD Server Data Protocol (MSDP) through Scandum's MUD Telopt Handler (MTH). GMCP is also implemented.
Most settings in Mud98 can be configured in mud98.cfg, which resides in the root folder. This includes telnet/TLS settings, MTH/MCCP/MSDP/MSSP settings, file settings, and a growing list of gameplay customization options.
You can toggle between legacy OLC-formatted area and data files, or JSON via the Jansson library. (documentation)
Part of an on-going effort, Mud98 applies "modern" C best practices to ROM's legacy C code. This is a multi-prong effort:
- Reorganization for smaller, focused code files with an eye toward Single Responsibility Principle.
- Scrupulous application of more constistent (though admittedly opinionated) naming, syntax, and structure.
- Removal of legacy code that is unlikely to ever see usage on modern systems.
Players can create new color themes and share them publicly with other players. Mud98 supports traditional ANSI, extended 256 color, and 24-bit true color. True color support covers both standard SGR format (Mudlet) and xterm format (TinTin++).
Mud98 has a robust quest system that is tightly integrated with Mob Progs and OLC. Unlike earlier quest systems for ROM, this is a zero-code solution that can be built along with the areas they belong to.
In Mud98, you can designate whole areas as multiple-instance, which in the parlance of MMORPGs means that players (and their parties) who enter the zone are playing in their own sandbox. This is useful for low-competition starting zones, chatty story-bound NPC's, and whole dungeons spun up just for the player and their friends.
Mud98 adds OLC editors for the following:
- Classes
- Color themes
- Quests
...and more.
- Mud98 docs index
- WorldEdit builder guide
- Project map
- Coding guide
- Glossary
- Engineering notes
- Unit test guide
You can build and run Mud98 on virtually any desktop or server platform.
The following libraries and utilities are required to build Mud98:
- CMake 3.12 or higher.
- Pthreads (Linux, Cygwin)
The following are optional, but highly recommended:
- OpenSSL 3.x+.
- Required for TLS server capability.
- A certificate signed by a legitimate Certificate Authority (if you don't want users getting warnings about self-signed certificates).
- ZLib (for MTH/MCCP/MSDP/MSSP).
See the Getting Started guide for in-depth information on how to build on the platform of your choosing.
Mud98 supports several CMake options to customize your build:
Persistence Formats:
ENABLE_JSON_PERSISTENCE(default: ON) - Build JSON persistence support (requires Jansson)ENABLE_ROM_OLC_PERSISTENCE(default: ON) - Build ROM-OLC legacy text format support
You can disable persistence formats you don't need to reduce binary size and compilation time:
# JSON-only (modern format)
cmake -DENABLE_ROM_OLC_PERSISTENCE=OFF ..
# ROM-OLC only (legacy format)
cmake -DENABLE_JSON_PERSISTENCE=OFF ..
# Both formats (default, required for tests)
cmake -DENABLE_JSON_PERSISTENCE=ON -DENABLE_ROM_OLC_PERSISTENCE=ON ..Note: Persistence tests require both formats enabled for round-trip testing. Disabling either format will skip those tests.
Once Mud98 is built, it can be run from the command-line like so:
# Run the game server
./bin/Mud98
# Or use the helper script (auto-detects build config)
./run [debug|release|relwithdebinfo]
# Run unit tests (separate executable)
./bin/Mud98Tests
./run test
ctest --output-on-failure # From build directory
# Run benchmarks (separate executable)
./bin/Mud98Benchmarks
./run benchUse the -d argument to specify the folder containing mud98.cfg if you don't run from the base folder.
- Reload data
- Help files
- Rooms
- Areas
- Other data
- Time-of-day room descriptions
- Day-cycle events
- Functional seams for testing
- Persistence
- RNG
- Combat
- Hit/miss resolution
- Damage calculation
- AC/Defense
- Skill checks
- Magic spells
- Status effects
- Action economy
- Stats/attributes
- Memory allocation
- Unit tests
- Lox scripting
- Events
- Player commands
- Wiz commands
- Combat skills
- Thief skills
- Magic skills
- Bots for stress-testing
- Combat simulator for play balance
- Loot-table system
- Crafting materials
- Crafting
- Recipes
- Crafting
- Random resource nodes
- Ore
- Herbs
- Wood
- Fish
- Professions
- Resource gathering
- Mining
- Herbalism
- Fishing
- Crafting
- Leatherworking
- Cooking
- Blacksmithing
- Alchemy
- Enchanting
- Tailoring
- Resource gathering
- Randomized areas (dungeons, overland, etc.)
- Navigation skills for randomized areas
- WorldEdit off-line GUI editor
- Web-enabled WorldEdit
- Integrated webserver with embedded MUD-client
- Player-run clans/guilds
- Player/Clan housing
- Remort system
- Alternative, selectable combat engines
- 3.5 SRD
- 5E
Please, please feel free to add this project. Or take it and do something completely different with it. ROM was responsible for my learning to love code in my youth, and I believe it yet has more to teach. Make it your own!
How to contribute:
- Clone the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the Diku, Merc, and ROM licenses. See LICENSE.txt for more information. I make no assumptions as to their enforceability (or even the feasibility of compliance); use at your own risk.
Brandon Felger - bfelger@gmail.com
Project Link: https://github.com/bfelger/Mud98