Category Archives: Basternae and ModernMUD

Posts about the Basternae MUD and/or the ModernMUD codebase.

A New Save System – Easy Save To The Rescue

With Into The Inferno development, I reached the point where it was time to get a better save-game system than the existing hacked-together-in-an-hour XML file. It had been on my to-do list for a while as part of evolving past the “you get one save slot, and that’s it” stage.

I have a ton of experience with C#, so throwing something in an XML file is second nature. That’s not necessarily a good or bad thing, but some of the legacy bits are strongly disrecommended by Microsoft at this point (BinaryFormatter for example).

I decided to “do what everyone else does” and get a copy of Easy Save from the Unity Asset Store. It’s immensely popular and highly recommended and it seemed like it’d be the shortest time-to-implement of the available options.

Fast-forward 8 hours later. I have a working save system with three save slots and it’s better in every way than the previous system. I was able to re-use a lot of my existing data code, rewrote some of it to be cleaner, and have “summaries” that are saved as part of the game saves that say where and who the party was at the time of save, and the interface changes necessary to support all of this.


Into The Inferno Main Menu Load Game - Before

Loading From the Main Menu – Before

Into The Inferno Save Game - Before

Saving At The Inn – Before\

As you can see, there’s just “Load Game” but you have no idea what you’re loading. Similarly, saving the game is just “Save Game” with nothing beyond that.

After implementing Easy Save, this is what I have:

Loading From the Main Menu - After

Loading From the Main Menu – After

Into The Inferno Save Game - After

Saving At The Inn – After

The first screenshot shows what comes up after you click “Load Game” on the menu. The summary text is localized in realtime, so in Spanish you’ll see that Archie is a “nivel 1 guerrero” even if you saved the game in English.

The second screenshot is saving the game from the inn. Saves at this point are an intentionally-limited resource (for better or worse), but at least now you have more control over them, and it’s easy to customize the number of slots that there are.

In the future I’d like to add Steam cloud save synchronization, but I have no idea how tough that will be. In any case, Easy Save made what I thought was a 40-hour task into a single day project, testing and UI changes included, and I definitely recommend it.

Coming Full Circle With Game Development (Unity)

The very first programming I ever did was game programming.

It started with my Commodore VIC-20 in 1984. The computer’s manual had some BASIC programs you could type in and run. One was a Space-Invaders-type game.

Well, naturally, after typing in this game and playing it for a bit, I wanted to start making changes to enemy colors, speed, and score values. This was how I started programming.

It continued when I got a Tandy 1000 EX that ran MS-DOS and started writing games in GW-BASIC. By now I was coding much more detailed and complex programs. They were still text-only (ASCII), but I was creating them from scratch, and they had much more detailed mechanics.

I remember well a text-based gladiator combat tournament game that I spent the better part of a year working on, at about age 10, in addition to a few text-based adventure games.

Later, as the Internet started to grow, I became interested in multi-user dungeons. There were various codebases — Diku, Merc, Envy, Circle, and others. Not only did I work on some existing games, I also created my own, starting with Illustrium Arcana, and later with the Basternae  rewrite, Basternae 3: Phoenix Rising. If you look at the “Basternae and ModernMUD” topic on this blog, you’ll see that I was working on them well into 2013.

When I was finishing my college degree in 2004, I took some classes for credit at The Game Institute and got a job with a company working on simulators for the US Army (among other government contracts). It was basically a video game company, but replace “fun” with “realism”. I didn’t really work on any graphics code, and ended up specializing in audio and network communications. This was the first and last job I had in video games.

My strong knowledge of audio programming and networking protocols took me on to develop parts of the Authentic8 SILO browser, work on a home automation system, and build the various audio applications I released as Zeta Centauri.

Now I’m returning to my roots and learning Unity. It’s incredibly intuitive, and the programming is easy and natural thanks to the many years I spent writing C# code.

I’ve started with the “Complete C# Unity Game Developer 2D” course available through Udemy. I’m about 50% of the way through, and the deep, thorough coverage coupled with real hands-on coding projects has been great for the learning process. I’m definitely going to take more of the courses because they really know how to teach.

Old Basternae Blog Posts Imported

I ran a blog for about seven years at It was almost entirely about Basternae MUD and the evolution of the ModernMUD codebase, but also included a lot of general programming-related entries. I’ve imported all of the previous posts from that blog for the sake of preserving history, though many of them will no longer be relevant. Even so, there may be information that is helpful for people who want to make use of the ModernMUD code to build their own multi-user dungeon.

New Editor Builds

For this build, version 0.59, the name has been changed from “Basternae Editor” to “ModernMUD Editor”. This is because I’m in the process of open-sourcing the codebase, and the editor will work not only for Basternae, but any MUD based on the same codebase.

Other than the name change, there are a few stability fixes, and probably some new bugs. Download links for Windows and OSX/Linux are on the right side of the blog. Enjoy!

The Magma Codebase Is Worth Millions!

I love how Ohloh estimates the value of open source projects. For instance, here’s their take on the Magma MUD codebase:

I believe Envy is just over 100k lines of code. At the average developer salary of $91,000/year, about $1 million in “value” was created by the Basternae II rebuild team. Value that, due to the DikuMUD license, could never actually be “claimed” through any means.

Just a curiosity, really, but still fun.

Sniktiorg’s Zones

Sniktiorg, one of the most creative and prolific zone creators in the world of MUDs, has granted Basternae 3 permission to use his areas. Woohoo!

I’ll attach them as I get them converted to the new format and figure out where in the world they should go.

Preserving Newlines in XML Serialization

With .NET’s XML serialization, it kills newlines when you serialize XML to disk. More specifically, it converts a CR+LF into just an LF (\r\n becomes just \n).

This was causing annoyances with the spell editor, since you can edit source code for spells with it, but the code would appear all on one line after saving and reloading.

The fix was to declare XmlWriterSettings with a newline preference.

The code was this:

         public void Save()
             XmlSerializer serializer = new XmlSerializer(GetType());
             Stream stream = new FileStream(FileLocation.SpellDirectory + FileName,
                 FileMode.Create, FileAccess.Write, FileShare.None);
             serializer.Serialize(stream, this);

And now it’s this:

        public void Save()
            XmlWriterSettings ws = new XmlWriterSettings();
            ws.NewLineHandling = NewLineHandling.Entitize;
            XmlSerializer serializer = new XmlSerializer(GetType());
            Stream stream = new FileStream(FileLocation.SpellDirectory + FileName,
                FileMode.Create, FileAccess.Write, FileShare.None);
            XmlWriter writer = XmlWriter.Create(stream, ws);
            serializer.Serialize(writer, this);

I can have my newlines and eat them too. Oh joy!

Magma MUD Codebase Now on Github

The Magma MUD codebase, last updated in 2008, is now on Github:

I’ve cleaned up the build a little bit, but it’s still the same old Magma that was used to start Basternae 2, warts and all.

If you feel like cleaning up any bugs (there are plenty) or adding any improvements, go ahead.  If you want to send a pull request I’m Xangis on Github (as you can probably tell from the URL).

Client Version 0.24 Released

I’ve released version 0.24 of the Basternae Client.  Use the download link on the right side of the blog or on the front page to get it.

This release mainly has cosmetic changes:

  • Changed the font for most things from Segoe UI to Verdana.  It just looks better.
  • Added “show group” and “show equipment” settings to the settings dialog so you can have those always show up when you start the client if you like.
  • Improved the look of the menu bar a little.
  • Reworked the settings dialog so it looks a little more organized.
  • Fixed a crash that would happen if you open and close the about box twice in a row.
  • Improved the layout of the status window.

There’s nothing groundbreaking or particularly complex about this release, it’s mainly just a small update to get me used to the code again, since I’ve been away from it for a while.

ANSI drawing and parsing glitches remain, and that’s the main thing that needs work right now.

Goodbye FindMUD

For a few years I ran It was mainly an exercise in customizing Drupal, but there was no real need for it. The Mud Connector filled the mud listing and community need quite nicely.

FindMUD is gone now. It was time that it was put out to pasture. It was fun while it lasted.

New Client Artwork From John Baker

John Baker, a friend of mine for a long while, did some work creating graphics tiles for me. It was intended for use in two old-style RPG projects I’m gradually working on. I’m sure you’ll hear about them later as they develop. Neat thing is, they were designed with both those projects and the Basternae client in mind.

Expect to see them in future posts and/or releases of the client. Stay tuned.

For now, check out his site:

You Can Now MUD on webOS (TouchPad)

Much of my not-at-work development time has been spent on webOS lately.  The TouchPad and webOS version 3.x are great fun to work with and the only mobile devices that have APIs that don’t suck to develop for (I’ve worked with Android, iOS, and Win7 and none of them are fun from a C++ developer’s perspective).

Today my Telnet application was published in the catalog.  It’s still not perfect yet, but thanks to that application it’s now possible to MUD on the TouchPad.

Client Update: Now With Alias Support

I’ve pushed another update to the Basternae client today, version 0.23.  Download is available on the sidebar, as always.

Here’s what’s changed:

  • Alias support has been added.  Usage is #alias <keyword> <text that replaces the keyword>.  Aliases are saved when you click File -> Save Settings and loaded at startup.
  • Rendering of surface map sections with T-facing-right road pieces is fixed.
  • Fixed a glitch with closing and then reopening the status, group, equipment, hotkey, and map windows.
  • Improved the initial opening position of the equipment and group windows.

Give the client a try and let me know if and how aliases need to be improved (as in, what you typically do in WinTin or ZMud that doesn’t work here yet).  I used to use aliases, but I never did anything all that complex.  Typical aliases I used were “gc” = “get all corpse”, “ik” = “cast ‘ariek’ thri-kreen”, and the like.

Also note that the client doesn’t nag you about updates.  If you want an update you have to come here looking for it.

Map Improvements

It took a while, but I have the road tile changes done and in place.

In addition, the surface map shows markers for the following zones that were attached but didn’t have markers:

  • Autumnglen (Centaur Hometown)
  • Court of the Muse
  • Sarmiz’Duul
  • The Minotaur Stronghold
  • The Ice Tunnel Shaft

The client still has a few map rendering glitches that need to be cleared up — for instance, things get wonky if there’s a T-intersection with roads going north, south, and east on screen.