<< June 2020 | Home | August 2020 >>

MUD, MUSH, MOO, MUX ... what?

Spent an afternoon with Battletech MUX

One afternoon I found myself with some time on my hands. This is a rather unusual experience. After mindlessly reading some news I began yearning for simplier times. At some point I found myself remembering early gaming experiences. Perhaps not my very earliest, but a period from my days at university where my grades suffered a little from how much time was being spent playing text based games. In particular and assortment of MUDs, MUSHes and MUXes collectively referred to as MU*.

For the uninitiated these games have a fair claim to being the precursors to the current day MMOs. Unlike modern MMOs they are entirely text based. The different flavours of MU* tended to emphasize different features or gamestyles, and consequently audiences. The engines powering these games were mostly open source and shared freely. This meant people could very easily start their own games, and within the scene, this paradigm evolved quickly into a large taxonomic tree of text based games. Some where very heavily focussed on roleplaying and player interaction to create the game world, others had sophisticated coded mechanics and in many ways gameplay resembled the grinding aspect that one might find in a modern day MMO. A handful of games had mechanics and gameplay that were incredibly ambitious, world spanning, complex economies, factions and thousands of players simultaneously, playing and building together. All achieved despite the software oftentimes being buggy and held together with duct tape. It was glorious. Some of the best would rival even todays MMOs in nuance, balance, faction management and gameplay.

These games had a golden era in the mid to late 90s where you had a cornucopia of choice, and rival MU* admins would attempt to woo players to their work of art, competing for audience. The most popular often had the solid unique features or did something really well, be it strict adherence to in character role play or blood thirsty automated combat.

Much of the "language of the internet" or internet slang that we now take for granted was birthed into the world in these games. Turns of phrase we might think of as being more recent were in fact in common use in these text based terrariums of imagination.

Richard Bartle, who with Roy Trubshaw is widely credited with developing the first ever MUD, interviewed years later, made the following assertion. "Text is more expressive than graphics. It's also more descriptive, there are no smells in EverQuest. With text, I can talk to the mind. With graphics, I can only talk to the senses." Certainly they were very popular for a time, and some still exist today.

Of the many choices, the flavour that sequestered more of my time than any other were a slew of Battletech based games.

MUShes (multi-user shared hallucination), MUSE (multi-user shared environment), MUX (mult-user shared eXperience) all got Battletech modifications at some point or another. The modifications were largely "hardcode" which in the case of these MU* meant C and/or C++. In the parlance of MU*, "hardcode" is the code of the base system, of the MU* itself, and "softcode" is written in a higher level interpreted language that runs within the MUD software itself. Over time the most mature Battletech hardcode coalesced around the MUX codebase. This eventually was homed and maintained in a sourceforce project called Btech-Online Battletech MUX. It was in development for many years but at some point, it seems to have petered out. There have been no recent commits.

Recently I really wanted to play one of these Battletech text based games again so I decided to try out the code and see if I could get any enjoyment from it. It wasn't that hard to get going, and before I knew it, I was running around on a game map.

Satisfied with that experience for the time being I took a closer look at the code, build system and started trying to understand how it hung together. The code compiled with a lot of warnings, which felt a little unhygenic to me to so I went about examing all the warnings and fixing the issues discovered. I found that cathartic, considering my mood, so I kept going. Before I knew it, I had cleaned up the entire codebase and now had a bunch of changes on disk.

I thought about sending the patches back to the sourceforge project, but considering the mailing list was full of spam and it seemed like everything was completely quiet I decided instead to import the code into my own github.

A few nights later I wanted to have another go at the Battletech MUX and thinking about the compile warnings I had cleaned up earlier I wondered what I would discover running the codebase in Valgrind. I suspected this had never been done. Valgrind is brutal and I figured the codebase would be in much better shape if Valgrind had ever actually been near it. I spent a little while trying to get Valgrind running on my Mac. I gave up in short order. Valgrind has never really agreed with OSX and it seemed on that occasion that was true again. Valgrind as of this writing has not yet been updated to run on my current version of OSX (10.15.6). I turned my attentions to other tools like the clang sanitize checker.

Switching some of these on I immediately found issues just starting up the MUX server. I fixed them and committed the fixes to the github repository. I found myself wondering what am I doing? Don't get sucked down this rabbit hole. No, no I justified to myself. I am maintaining I game I rather enjoyed and maybe I'll improve it a little along the way; for fun I guess. If you're interested in the code you can find it here. It seems very possible I will continue cleaning it up and improving the build system, code and documentation.