At the moment there are a number of things that are occupying me with regards to Epitaph. Playing is taking up a reasonable chunk of my available allowance of my free time[1], and fixing the issues that get raised as a result of that playing takes up much of the rest. The most productive I can be when working on Epitaph is in long stretches – weekends are pretty much the only periods whereby I can sink the needed hours into making significant progress. Easter is coming up though and I am going to enjoy having the free time to put some very serious polish on the game.

My time outside these longer stretches is more difficult to allocate efficiently – my time is very ‘bitty’ at the moment. I have an hour here and an hour there in the evenings but not enough to do much except gear myself up and then idle myself down. During those times, I like to focus on ‘low impact’ changes that don’t need me to really invest the whole of my concentration. One of those things is in the area of what I’m terming ‘mud aesthetics’

Many MUDs look alike – there’s a good reason for that, most of then stem from a handful of common bases. The words may change, the descriptions may alter and the game experience might be different, but there’s also a powerful sense of deja vu. I’ve written in the past about how this is often a good thing because people don’t want to stray too far from what’s familiar. If you want to create a sense of distinctiveness and coherence about your environment though, it can be a problem.

As time goes by, people add to the base they used to build their game, and often when they do they are not particularly disciplined at the aesthetics of input and output. Thus, in one part of the game you might have ‘nhewbie’, ‘hachievements’ and ‘hskills’ – three separate commands giving you a history of your interactions with a particular topic. In another you might have ‘achievements list’, ‘achievements details’ and ‘achievements categories’. Three separate commands with three separate names versus one command with multiple possible execution paths. The former are shallow commands (each doing one small thing) and the latter are deep commands (each command doing a lot of different things). I don’t believe one is inherently better than the other[2], but I do think it is inconsistent and confusing to blend the two approaches so that you don’t know which one is appropriate in which context[3].

Similarly for MUD output – in some places it may be in tabular form and in others as a comma separated list. Sometimes it’ll be coloured for headings, and other times it won’t. Some things will be linked with MXP, others will be raw text. There’s nothing inherently wrong about this, but it does make the aesthetics of the game a little muddled and limits the effectiveness with which you can make usability improvements. Good usability follows the ‘principle of least astonishment’, and when you have genuine incoherence in your interface it can be difficult to determine what ‘least astonishment’ means. At best, you look undisciplined. At worst, your interface is quantitatively more difficult to use.

So, one of the things I’ve looked to do in the smaller chunks of time I have available is to make the interface a little more consistent. It started really with our finger command – I was stripping out a lot of the hard coding from the finger daemon, making it so the code was shared more cleanly between the MUD and the web, and as I did I reflected upon the way in which it was presented and how ‘DW libby’ it was:

 Login name: Drakkos       Real name: Michael James Heron
 E-mail: drakkos@imaginary-realities.com
 Home directory: /w/drakkos 
 Location: Canterbury, Kent
 Home Page: http://www.monkeys-at-keyboards.com
 Drakkos is a High Lord.
 Roles: Administrator and Domain Leader.
 Domains: Leader of the Admin domain.
 Leader of the Cemetery domain.
 Leader of the Game domain.
 Leader of the Support domain.
 First logged on Thu Dec 17 22:29:05 2009.
 2 years, 258 days, 13 hours, 46 minutes and 10 seconds old.
 On since Sat Mar 9 23:55:27 2013 (6 seconds).
 ::ffff:151.230.134.210 (::ffff:151.230.134.210)
 Idle for no time at all.
 47 mail messages.
 Project:
 > bone some gnomes 
 You know what? No.
 > just start nailin' tiny bitches
 Plan:
 For a' that, an' a' that, it's coming yet, for a' that

It’s fine and all, there is nothing specifically wrong with it. It’s just that elsewhere in the game, such as with our ‘score’ command, we use a more tabular view:

  Wellbeing           Ox 1000 (1000), Th 1000 (1000), En 1000 (1000), Hu 1000 (1000), He 1000 (1000), 
                      St 1000 (1000), Re 1000 (1000)
  Profession          Soldier, level 262, Highest Title: Lieutenant, Post-Nominals: None
  Accomplishments     101 (954) Achievement Points, 44 (844) Quest Points, 23588 Rating
  Burden              Current Burden 36%, Current Inventory Weight: 16 kg, Maximum Weight: 40 kg
  Age                 2 years and 320 days old, logged in 10535 times
  Mortality           10 (10) doses of vaccine, 0 (5) lucky escapes, 2 (2) second winds
  Stats               S (15), W (10), I (5), D (10), C (10)
  Alignment           Charmed Life (out of alignment)
  Morality            Violence: 5891, Order: -5957, Justice: -5963, Loyalty: 8859
  Points              0 Command Points, 3707 Knack Points, 90702 XP
  Elo Rankings        Playerkilling (1466)
  Roleplaying         Prestige: Incredibly Low, Available Points to Spend: 25, Points Awarded to you: 0

The differences between these two started to annoy me a little, so I restructured the display on both the MUD and the web to give a more coherent look:

Personal Information for Drakkos
  
  Login Name          Drakkos
  Real Name           Michael James Heron
  Email               drakkos@imaginary-realities.com
  Location            Canterbury, Kent
                      
  Classification      High Lord
  Leader Of Admin     Patient Zero
  Leader Of Cemetery  Waiting out the clock
  Leader Of Game      The Dread Pirate Drakkos
  Leader Of Support   Writing the book on LPC
                      
  Facebook            https://www.facebook.com/michaeljamesheron
  Google+             https://plus.google.com/106439314266347882734/posts
  Linkedin            http://www.linkedin.com/profile/view?id=48918383&trk=tab_pro
  Twitter             https://twitter.com/drakkos
  Homepage            http://monkeys.imaginary-realities.com
  Epitaph Web         http://drakkos.co.uk/~drakkos/index.html
                      
  First Logged On     Thu Dec 17 11:29:05 2009
  Age                 2 years and 320 days
  On Since            Fri Mar  8 02:43:18 2013
  Time On             1 day, 9 hours, 14 minutes and 12 seconds
  Idle For            0 seconds
  Last IP             ::ffff:151.230.134.210 (::ffff:151.230.134.210)
  Mail                52 mail messages.
  
  Project             
  'The enemies of Scottish Nationalism are not the English, for they ever were a great and generous folk, quick to respond when justice calls. Our real enemies are among us - Scots born without imagination' - Robert Cunninghame Graham (1852-1936) 
  Plan                
  It is difficult to get a man to understand something, when his salary depends on his not understanding it - Upton Sinclair 

(I also added in a few more bits of information to reflect the new world of social networking).

This is what I mean by MUD aesthetics – I want Epitaph to look as if it’s been designed from start to end by a single coherent team rather than something that was hewn from the rock of the erratic[4] DW Lib. Similarly with how ‘uptime’ worked:

Epitaph has been up for approximately 13 days and 8 hours. The load average is
 0.00 cmds/s, 114.19 comp lines/s. This has taken 6.27% of the CPU and 369.70MB
 of the memory.

And now:

Mud Name             Epitaph Black Ops
Mudlib               Epiphany v0.9.1 [development]
Uptime               4 days and 2 hours
Load Average         0.00 cmds/s, 259.64 comp lines/s
Average CPU Usage    4.91%
Recent CPU Usage     3.10%
Memory Usage         189.49 MB

I think the latter has benefits behind simply the coherence of the UI though – I think it makes it much easier to identify pertinent information. Since these tables are all constructed through a common sfun, it also means that if we want to seriously change the ‘look and feel’ in the future, we can do that without needing to do a lot of tiresome re-engineering. As with much on Epitaph, I spend a lot of time trying to route functionality through a handful of choke points to increase the impact when bugs are fixed and features are added. The end goal though is not one of maintenance but one of aesthetics – to make it look like everything in Epitaph was designed to mesh together. That’s true of all our game systems, but it’s not even close to being true of the mudlib code we inherited from the DW lib. As time goes by, we invest the time and effort to ensure that it *becomes* true.

Another example of the ‘Epitaph Aesthetic’ is down to our use of MXP – we’ve threaded this through every element of the MUD, and we continue to expand and add to it as we go along. My eventual desire is that you can play a perfectly effective session of Epitaph using nothing more than your mouse if you so desired[5]. As such we have right click menus on all objects in the game, and we construct contextual MXP commands based on the type of object. You can greet and quiz NPCs with a couple of clicks, and you can pick up, drop, wear, read, activate powered items and so forth based on what is appropriate for that object. This, like much of Epitaph, needed restructuring compared to what we had originally. The DW Lib uses a more rigid ‘master list’ of MXP commands for objects, whereas ours is more CPU intensive to generate but also much more responsive. I love MXP, and the more we incorporate it into the game the more it becomes a ‘must have’ feature for those wanting to play[6]. As I played about with it though, there came an obvious problem – there was no way to perform MXP commands on yourself or your room because those are never objects which you are presented as tangible interactive targets in the game. So, Epitaph Aesthetics – I added in an ‘MXP toolbar’ you could switch on which would give you access to the context menus for yourself, your room, and a few other categories. So with a click, you can check your buffs and debuffs, finger yourself[8], recap your dynamic help and so on. This adds a very distinctive ‘look and feel’ to the game. All of this is active only on Epitaph Black Ops for now, and I’m now struck quite a bit when I log into the live world as to just how different it looks.

None of these things take a long time to do, but they add a lot to the polish and that’s where so much of the real work still to be done on Epitaph remains. Every day I get a little bit happier with how the game plays, and a little bit more confident in the robustness of the code[9]. Those days when I can’t devote serious time to improving the gameplay, I can spend an hour or so increasing the consistency of the interface and still call it a good investment of my effort.

Drakkos
[1] I finally feel secure enough in my character to venture outside Alphabet Street without squealing and running back in at the first opportunity, although I still die whenever I get careless.
[2] That’s a lie – I think deep commands are better because they place a lower burden on memory. I doubt the difference is all that pronounced though – perhaps there is SCIENCE TO BE DONE.
[3] To get around this to some degree, I’ve implemented ‘pseudo commands’ here – essentially lightweight commands that do nothing but redirect input – ‘list achievements’ will get internally converted into ‘achievements list’ for example.
[4] Albeit *likable*. Of all the LPC libs out there, even now I wouldn’t dream of starting a new MUD (if Epiphany was unavailable) using anything other than the DW lib.
[5] This isn’t just a usability goal, but an accessibility goal.
[6] I am seriously considering making the MUD impossible for people to log into if they’re not using MXP.[7]
[7] Move with the times, people.
[8] Oooh now, *behave*
[9] When we did our first closed alpha, everything run timed all the time. Now, run times are very, very rare. So rare that I can have them announce to me every time they happen[10] without being spammed.
[10] ‘hidden’ run times are problematic – when things don’t load or when commands fail without doing anything other than printing that fact to a log file. Now I know instantly when things have caused a problem and I can fix them equally quickly.