Monday, July 30, 2012

Just a reminder that there will be a quest tonight, in 90 minutes of the time of this posting.

It's gonna be a good one but we need a good turnout, so make it if you can!


Friday, April 27, 2012

Fixing What Ain't Broke

We rolled out a bunch of new code during the middle of this past week, and the change I posted contained these lines:
The following features have been rewritten but should behave identically to how they always have behaved. Please report any abnormalities with them:

1. all damage-over-time spells (necro spells, headache, poison, plague)
2. unholy fire, reflect (does anyone still have this spell?), and strawberry fulfillment
Upon reading this, a very astute player asked a very sensible question: "When you say DOTs have been rewritten but act the same, why rewrite them?"  After all, if the code ain't broke, why fix it?

While I cannot discuss the specific case of the recently rewritten DOT spells (I rewrote them as a part of a still-secret new feature), I'll use another recently rewritten spell to illustrate.  Back in early April I rewrote the mirror images/astral projection/shield of skulls spells.  Briefly, the reasoning was this:
  1. We were going to make pinch always land.  This prompted a rewrite of pinch
  2. Pinch is effectively a DOT spell; it wakes you up on the tick by dealing a small amount of damage to you
  3. Pinch did this damage by calling the damage() routine, whose function is to apply damage to a victim after checking for sanctuary, magic ward, resists, vulns, and most importantly, mirror image
  4. Since pinch did such little damage to begin with, it would sometimes not wake you up if you had sanc/ward/etc and they reduced pinch's damage to 0*
  5. I changed pinch from using damage() to raw_damage(), a routine that does damage but ignores most other factors like sanc, ward, and mirrors.
  6. Because we still wanted pinch to hit mirrors like poison did, I had to add special code into the pinch spell to make it destroy images in the same way that it does from within the damage() routine
To achieve this, I had to figure out how the mirror images code in damage() actually works.  When I opened up the file, I found this:

if (IS_AFFECTED2(victim, AFF_MIRROR))
  {
    for (paf=victim->affected; paf != NULL; paf = paf->next)
      {
        if (paf->type == gsn_mirror)
          break;
      }
    if (paf)
      {
        imagehit = number_range(0,paf->modifier);
  
        /* mirrors exempt */
        if( dt == gsn_backstab ||
            dt == gsn_blister ||
            dt == gsn_decay ||
            dt == gsn_atrophy ||
            dt == gsn_wilt )
          {
            imagehit = 0;
          }
            
        if (imagehit != 0)
          {
            act("$n hits an image of $N",ch,0,victim,TO_NOTVICT);
            act("$n DESTROYS an image of you!",ch,0,victim,TO_VICT);
            act("You DESTROY an image of $n!",victim,0,ch,TO_VICT);
            paf->modifier--;
            if (paf->modifier == 0) 
              { 
                affect_strip(victim,gsn_mirror);
                REMOVE_BIT(victim->affected_by2, AFF_MIRROR);
              }
                
            return FALSE;                                                                        
          }
      }
    else
      {
        bug( "Damage: Mirror Image failure.", 0 );
      }
  }
In English, the code essentially does this:
  1. Check to see if the target of the damage() is affected by mirror images.  If he is, 
  2. Figure out how many images they have left.  If we can find this out,
  3. Determine the % chance of this damage hitting a mirror image:
    • if the damage is being done by backstab, blister, decay, atrophy, or fester, the chance of hitting an image is 0% (these skills/spells will never hit images)
    • otherwise, the chance of hitting an image is N/(N+1), where N is the number of images the victim has left
  4. If an image is hit,
    1. Send messages to the victim, the attacker, and the rest of the room,
    2. Reduce the number of images on the victim by one,
    3. and if the number of images is now 0, strip off the aff entirely so the victim can re-cast them
While the above code certainly works, it was written in a painfully verbose manner.  Every aspect of mirror images' behavior is checked separately and there are four levels of nesting in the logic.  Because the code is so drawn out and wordy, it's difficult to just glance at the code and see exactly what factors into the mirror image calculation.

Trying to extend and modify code like this to add new features is similarly difficult; not only do you need to figure out how it works, but you need to figure out at what level in the logic the new feature needs to be added.  And wouldn't you know it, huge swaths of the game's code are written in a similar fashion.  Either a lot of code is used to accomplish something very little (which makes the code hard to maintain, extend, or modify), or too little code is used to accomplish something very big (in which case the code causes the game to crash whenever someone does something out of the ordinary).

I suspect that most of the game's past coders weren't thinking about how easy their code would be to maintain in five or ten years, and that mentality resulted in a lot of garbage piling up without anyone cleaning up**.  Such an approach to code development is not sustainable though, and that approach usually leads up to a major breaking point.  In my mind, Dark Risings reached that breaking point right around the same time I took over as coder and the game was crashing on a daily basis.

Although I have no formal training in anything having to do with programming, computer science, IT, or anything like that, my programming mantra is to do things the "right" way rather than the "easy" way.  Given our game's code, this results in a significant amount of my time on the game being spent on code maintenance rather than development.  While I never go into the code with the intent of just rewriting things, it winds up happening when I need to modify or add a new spell or feature that is tied into a gnarly piece of code from years past.  What starts out as a five-minute change can turn into literally days of restructuring and testing.  And the real kicker here?  Provided I did a good job, nobody will ever notice that I did anything.

This is all part of the job involved in maintaining our Frankenstein code though, and I've put in my share of bad code too.  I just thought it might be insightful to get a peek at what coding at Dark Risings entails.

And for those who are interested, I replaced the old mirror image code (above) with this version which does the same thing in a much more concise fashion:
if ( IS_AFFECTED2(victim, AFF_MIRROR)
&&  (paf = affect_find(victim->affected, gsn_mirror))
&&  number_range(0,paf->modifier)
&&  dt != gsn_backstab
&&  dt != gsn_blister
&&  dt != gsn_decay
&&  dt != gsn_atrophy
&&  dt != gsn_wilt )
{
  act("$n hits an image of $N",ch,NULL,victim,TO_NOTVICT);
  act("$n DESTROYS an image of you!",ch,NULL,victim,TO_VICT);
  act("You DESTROY an image of $n!",victim,NULL,ch,TO_VICT);
  if ( --paf->modifier == 0 )
    affect_strip(victim,gsn_mirror);
  return FALSE;
}
Much simpler, right?


* This is not the whole story, but it's close enough
** Also not entirely true.  My predecessor, Kesavaram, did a lot of cleaning up.  As far as I can tell, nobody else did.

Wednesday, April 25, 2012

A Case Study

Recently we had a complaint come in regarding a possible multikill rule violation. It was a very interesting case with a lot of points to consider, so we thought it might be interesting to use it as sort of a “case study” to give players an idea of how these kind of investigations are conducted, and why we make the kind of rulings we do. All names have been changed to protect the innocent!

As with all such complaints, we talked with all parties involved, reviewed both the rule itself and timestamped logs from the shell, and also took into consideration other relevant factors, such as if anyone involved was a newbie and how likely each participant was to have been aware of his options at the time. As always, our goal is to make a ruling that is fair for all parties involved, and which overall is best for the game as a whole.

First, we reviewed the rule itself, as it currently stands:
Once a character is KO'd, they should not be KO'd again until they have reached sanctuary and are out of fight lag. They also cannot be KO'd after coming back for the items on their corpse if they have been murdered. This rule does not apply if they enter the combat again after being KO'd. See help etiquette for some finer points on this subject.
We then looked at objective facts about what happened, which all parties agree on:

  • Bob and Dan start to fight. Another one of Bob’s enemies, and Dan’s ally, Jim logs on during the fight but does not interfere.
  • Bob is knocked out by Dan and lightly looted of five items.
  • Dan then goes safe and does not participate further.
  • After awakening from stupor, Bob checks the who list and sees Jim is still around. 
  • Bob considers going safe but instead decides to go to Thalos.
  • Jim trails Bob to Thalos but does not attack.
  • Bob runs into a ghost in Thalos and gets back into fightlag. Jim may or may not be aware of this.
  • Bob leaves Thalos and goes through Arinock to the Void. He chooses not to stop in safe along the way.
  • Jim follows Bob to the Void. 
  • At this point almost three full minutes have passed since Bob awoke from Dan’s stupor, double the 90 seconds required by fightlag. Bob has re-equipped and is missing only a light, head slot, and weapon.
  • Jim attacks and knocks Bob out.

The first thing we do after gathering the facts is return to the rule. Bob was not murdered by Dan, so the part about coming back to his corpse for items does not apply. Since Bob wasn’t the one to start combat with Jim, the part about the victim entering combat again doesn’t apply. The only part to consider is: Once a character is KO'd, they should not be KO'd again until they have reached sanctuary and are out of fight lag.

Bob’s point of view is that since he did not reach sanctuary and was only out of fightlag for a few seconds before Jim attacked, he feels the rule was clearly violated.

On the other hand, Jim is positive Bob was out of fightlag since Jim was careful to count seconds, tacking on an additional 45 seconds past the 90 fightlag count just to be sure, and feels it is not his fault that Bob chose not to get safe when he had plenty of chances. Since Bob could easily have gotten safe and was, without question, out of fightlag, he feels the rule was clearly NOT violated.

Applying the rule (as it is currently written) is certainly problematic in this case because it assumes that the victim of a KO will attempt to get safe immediately after awakening from stupor. Bob could have done this, but he also states that he made a conscious decision not to. What if Bob never went to safe again after the initial knockout? Would Jim never be able to attack him again? Obviously that’s not fair; the line has to be drawn somewhere.

Further muddying the waters is this: Bob was not in fightlag in Thalos, and only got back into fightlag because he ran into an aggressive mob. If he had not run into that mob, then his own estimation of having been out of fightlag for “a few seconds” would have to include “a few seconds + the 90 seconds I was in fightlag from the mob”, which means by his own estimation he absolutely was out of fightlag from the first fight by the 90 seconds required by the rule, plus those few seconds in the Void, plus the time it took him to go from the area where he was KO’d initially by Dan to Thalos: a total of almost three full minutes by the game logs.

So to reiterate:

Dan knocked out Bob. Bob spent almost three minutes being shadowed by Jim (who is allied with Dan, but was not working with Dan). Jim counted the time required by the rule to give Bob time to get safe, and added extra time just to be sure. Bob chose to avoid safe. Jim attacked and KO’d Bob.

What makes this case messy is how tight the time is. 90 seconds is not that long. 3 minutes is not that long. In a different recent case, we had Roy the rogue fail a steal on new player Pete, who responded by trying to push Roy away repeatedly. Roy knew the rules extremely well and ducked into safe for 93 seconds, and then immediately went back to Pete who was still trying to push him away. Roy then used the psteal rule to KO Pete and loot heavily. In that case, we ruled against Roy for two reasons. First, the psteal rule states that the rogue must CLEARLY have gotten out of fightlag. 93 seconds is not clear to a new player who may or may not be aware of what fightlag even is. Although it’s not up to Roy to know who is and is not a new player, he should know better than to race back to a PK just seconds out of fightlag and try to get attacked so that he can KO that player. Roy should have waited long enough for Pete to realize that they were no longer fighting. 93 seconds is not long enough to be CLEARLY sure someone has gotten out of fightlag.

In the case with Jim and Bob, both players are pros, and Jim consciously waited out the fightlag time and added extra time to be absolutely sure Bob was out of fightlag. So where Roy did NOT try to make sure that the fightlag time was CLEARLY up, Jim did. 

Once a character is KO'd, they should not be KO'd again until they have reached sanctuary and are out of fight lag.

After deliberating the facts in this case, the admin team decided that although Bob did not reach sanctuary, he could have easily and it was HIS choice not to try, which therefore exempts him from the protection that part of the rule (reaching sanctuary) provides. Therefore the question is whether or not Jim violated the fightlag portion of the rule. Given that Jim waited not only the 90 seconds the rule demands, but well past that, it seems clear that all parties involved had a reasonable chance to be sure that Bob was not still in fightlag from the fight with Dan when Jim initiated the second attack on Bob that day. Therefore we ruled that in this case no rule was broken, and the situation was not multi-kill.

The rule as it stands is badly worded, since it assumes the KO’d player will automatically get safe after a KO when clearly that’s not always the case. It’s also a little vague about what fightlag is: Is it reasonable to expect Jim to factor in fightlag from mobs Bob may or may not be fighting? Should Bob be able to kill a mutt every 85 seconds, stay in fightlag forever, and expect all his enemies to be aware of his fightlag state? Obviously not. For these reasons, we will be revising this rule for clarity.

We thought players might find it interesting to see the thought process behind rules calls. We are also interested to hear from those who think there may be factors we overlooked, but we ask those who may recognize this case (or think they do) to keep identifying factors out of it for the sake of the players involved.

Thursday, April 19, 2012

New Vorpal Functionality

Verghazrin was kind enough to host a battle royale PK quest last night which was a great testing grounds for the new functionality we gave vorpal.  It generated a fair bit of discussion both last night and this morning, but some of the suggestions or criticisms seem to be rooted in misconceptions on how vorpal weapons now work.  So as to make it unambiguous, here's how everything is laid out:

Class Recharge Spell Relative
Damage
Damage
Potential
Mage 2 acid blast 10 5.0
Cleric 2 smite 8.3 4.2
Monk 3 lightning bolt 1.3 0.44
Warrior 4 fireball 2.7 0.66
Barbarian 5 N/A N/A N/A
Psionicist 2 mind blast 8.3 4.2
Druid 2 natures wrath 7.1 3.6
Ranger 5 lightning bolt 1.3 0.26
Rogue 3 N/A N/A N/A
Bard 3 deathsong 7.1 2.4
Wildmage 2 wildfire 4.9 2.5
Warlock 3 ravage 7.1 2.4
Necromancer 2 decay 6.3* N/A
Templar 3 flamestrike 4.6 1.5

Recharge is the time (rounds of combat) it takes for the vorpal to "recharge."  Once a vorpal weapon is recharged, it will discharge (cast its spell) on the next hit, then recharge again.
Relative Damage is a figure of merit expressing how much damage each class's vorpal spell will do.  The higher this number is, the more damage a single vorpal discharge will do.
Damage Potential is the Relative Damage divided by the recharge time.  It gives you an idea of how much damage a class's vorpal spell will do over time.  Necromancers' Damage Potential is a bit trickier to calculate since their spell does damage over time.

Whenever a vorpal weapon discharges (mind you, "discharge" is a term I just made up now), it casts your class's vorpal spell at the level of the weapon and won't discharge again until the recharge time is up.  However, this recharge time is attached to the character, not the weapon, so a dual-wielding ranger will not get double discharges, and swapping out vorpal weapons very quickly in combat will not let you get a bunch of free spell casts.  Incidentally, a side-effect of these new vorpal spells is that other special weapon properties (chill, flame, shock, poison, and others) are now also limited by each class's recharge time.  This side-effect will be removed soon so that chill/flame/shock/poison/etc work the way they used to.

We are fairly confident in how this new vorpal is working for the time being and we do not consider the feature to be still in the testing stage.  We aren't looking for unsolicited feedback on what classes should get what spells or recharge times or anything like that; however, we will be keeping an eye on how vorpal weapons get used and, if necessary, can tweak things.

With that being said, we are considering tweaking necromancers after last night's quest.  One of the leading suggestions was to make necromancers' vorpal be like judgment but with necro spells instead of maledictions.

Monday, April 16, 2012

Wednesday Night Quest!

Verghazrin is holding a Battle Royale PK quest on Wednesday night (April 18) at 8pm Standard Time.

This quest will test out the shiny new Vorpal flag for quest weapons, which is designed to be the equivalent for magic classes what Sharp is for fighter classes.

Stop in, grab a weapon, and join the fun!

Love,
the staff

Monday, April 9, 2012

A few new changes

We've got a stack of new changes going in, but we have opted to delay rolling out the new changes (and any possible bugs included with them) until after the big event that's happening tonight happens.  So as to not let anyone who follows our Dark Risings twitter feed feel like we've been leading anyone on, I figured it would be appropriate to reiterate that big new changes are going in.  Here's a taste of what's going to happen:

  1. Poison will no longer break sleep, but pinch/haunt will now always work.  There are a bunch of auxiliary changes accompanying this too.  For example, we are working to replace all current poison-giving items (moldy bread, vial of the undead) with pinch/haunt equivalents, sleep's duration is now much shorter, and things of that nature.
  2. People were complaining about protection of peaches being undispellable, so we've made it possible to dispel, but not quite as easily as sanctuary.
  3. Monks will now get divine focus (the templar ability) at level 15.  This is in addition to their frenzy spell, so it should give monks a nice boost.
  4. Lots of changes have been made to the prompt.  You now have to manually color %h, %H, %m, %M, %v, and %V, %l will now show the exact number of seconds left in latelog, %f will now show the exact seconds left in fightlag (this is pretty huge!), and some other stuff.
  5. Ticks will have randomized lengths to curb unfair practices that certain script-happy pkers have been abusing.
There are a lot more intermediate changes going in too; the brawler board will be sorted now, various code has been added to support the new tradeskill we'll be putting in, and a lot of (mostly) transparent bug fixes are going in.  For example, sand spirits and desert scorpions should no longer be holding hundreds of fossilized shells, the 'info' command will now work properly in creation, and harm touch will now depend on your skill% in it.

The complete details will be posted as a change in the game once the new code is actually in play.  Hopefully they are received well!

Saturday, April 7, 2012

Monday Night Quest!

Hello everyone,

This is just a quick note to get the word out: we are planning a big event for the evening of Monday, April 9. We'd love to see a good turnout and are more than happy to offer bribes in the form of quest eq and prizes :)

You won't want to miss it!

Love,
the staff

Sunday, March 18, 2012

Cast 'Dispel Stagnation'

Hello everyone.

It's a beautiful spring afternoon here. The sun is streaming in through the windows, a sweet breeze is blowing, and I am listening to Fleetwood Mac's Rumours. What better time possible to address some of the concerns which have been circulating?

The biggest one, clearly, has been the recent and almost total lack of activity in the game. Since early December, DR has just been slowing down, to the very sluggish state it's in right now. I think it's worth explaining what's been happening behind the scenes, both then and now: what led to this state, and what we're doing to fix it. Just a warning though: I ramble a lot in this post.

The way Dark Risings is designed, it is extremely dependent on having an active staff to keep things moving. For better or for worse, guild immortals are vital to their guilds, and not just as automatons guilding in whomever the players have vouched. Guild immortals are the ones responsible for following the stories of their guild members, for enhancing and building on them, for bringing to admin's attention the ones that require further support in the way of coding or building.

In many ways guild imms are the conduits of player story lines, because most players do not record their own stories or tell the admin staff about them. We have staff policies designed to enhance player privacy, and I think that's a good thing; the downside of that is that admin doesn't often know what's happening in the player world. We need people to keep us informed, and most of the time, those people are the guild immortals. Providing enhancement and support for character stories is also pretty time intensive, so having an active staff means that there is a team working towards a common goal. Without that team, running the mud is impossible.

So what happened?

It started with our decision to ask one imm to step down, followed shortly by having two imms quit. These are delicate situations where it's easy for players to make assumptions based on biased and incomplete information. Whenever an imm quits (or is asked to step down), or a player is penalized, or anything of that nature, that person tends to tell his or her side of the story. And certainly I understand that -- that's such a normal thing to do. The trouble is that our side of the story is almost never told. We hold back, and for several reasons. Part of it is that we understand that people need to save face, that people need to vent. Part of it is that we think the classy thing to do is not to sink to a level of he-said/she-said bickering in an environment where we hold the power (though dang, it's sometimes hard to stick to that high road). Part of it is to protect other people involved in the situation. Part of it is to protect the very person who is telling everyone what he or she sees as the truth.

How much to divulge about this type of decision is something I struggle with in all of these situations. Older players may remember one very infamous episode in DR history where Player X was in a pk with a character who was suspected to be one of Mark's alts (Mark being an implementor at the time, along with Andy and Dan). Player X had Mark's alt slept without poison, and out of nowhere, a "someone" (ie a wizi imm) cast Pinch on him, waking him up. Obviously, that looks horribly like Mark used his imm character to cheat, and Player X went on a huge smear campaign to try to have Mark discredited and thrown out of the game by the other imps. A lot of players heard Player X's story and concluded that Mark MUST have cheated, and it did a lot of damage to the game environment that lasted for years.

I was an imm when that happened and none of us were told anything about it, except that it wasn't what it looked like and that we should trust the imps to handle it. That was all the players got too. That didn't sit well with pretty much everyone. It wasn't until years later when I was an imp, when I had the ability to check the facts, that I got the real story. Pinch was at that time brand new -- I think it had gone in just a day or two before -- and one of the other imms was just being goofy and messing around with it. He didn't know that Mark's character was in a PK, and just to be funny, he cast it on that character. The timing couldn't have been worse, and it sparked this huge, huge, mess which was really devastating in a lot of ways. So everyone on the imp staff was silent about what really happened, to protect the imm who had screwed up with such a simple little thing, a harmless little thing (or at least it would have been, if Mark's character hadn't also been in a PK with probably the worst possible player for this to happen with), and a huge amount of distrust was fostered. And Mark's own personality made matters even worse, because he is the kind of person who, if misjudged, says 'You seriously think this bad thing could be true about me? Screw you, I'll show you bad," and then goads the hell out of the person who misjudged him to start with. And he was really insulted by this -- not so much the assertion that he would cheat, but the assertion that he would cheat in such an obvious, ridiculously blatant way. And so Mark, who has done so much for DR, is still reviled by a large number of old players, for many incidents very similar to this.

So what should we do? In that situation, should they just have thrown the imm who made the mistake under the bus? Were they wrong to expect the players to just accept that no wrongdoing actually took place, regardless of how it looked from Player X's perspective and his many theories about it?

As imps, should we go out of our way to explain our decisions about difficult topics, even if it means outting other people's alts or giving away game secrets that players have worked for months or years to develop, just so that we can clear our names? I guess for us, the answer is clearly 'No.' We would rather take the bullet. When we have asked staff to step down or change something they were doing, it wasn't done out of petty personal self-interest. We have done it because as implementors we see a full picture of the game that no one else has, with the benefit of having more experience running the game than any other implementors in DR's history, and, even more, the added benefit of being able to learn not only from our own mistakes, but the mistakes of everyone who came before us.

Maybe it was a mistake given how it all turned out not to be up-front in divulging what happened in the above situation, but I admire Mark for taking the heat and protecting his staff. I think that took a lot of grit. This is not to say that the staff member got a free pass -- he got a royal chewing out, and all subsequent imms got a big lecture about how immortal powers are NOT toys and shouldn't be used to dick around, because you never know when some innocent goofy prank can have drastic consequences.

In any case, I remain the optimist. I think we must ask staff to believe in us, to believe that our fundamental goal is to make a great game, and if they can't do that, then they probably should not be part of our team and leaving the staff is the right decision for them to make. We aren't looking for a team of yes-men -- the point is we want staff who will come to us when they see problems and work them out with us, not just passively seethe about it in silence or rant about it to players. To us, a team works together towards a common goal, and undercutting members of the team is not going to produce a win.

The point is, it isn't enough just to have bodies on staff. For this game to work, for it to be really great, we need people who have faith in us, and in whom we have faith. And we want DR to be great. We think it has achieved a level of greatness that makes us extremely proud to be a part of it, and we want to keep that going for as long as possible, whether it's us at the wheel or whoever takes over after us. And we will take quality staff members over a quantity of poor ones every day of the week.

So, back to the point: we lost three staff members. Inferno is mortal-run, so that leaves six guilds: doing the math, we lost half our staff within a few months. During that time we also hired one new imm and closed down one guild, leaving us with five guilds who needed immortals, and four people to fill the slots.

That's when things got really bad. Of the four people we had, all four had real life suddenly rear its ugly head, and their time and ability to play DR was suddenly non-existent. Obviously I'm not going to detail the private lives of the staff, but for each one of them, the reason was a very good one, unavoidable, and, while it was long-lasting, temporary. One of the four was me, and while my real-life issue was much shorter than the others, I came back to a mud with no staff support whatsoever.

I have said this before and I'll say it again: it is not possible to run Dark Risings without staff. Just completely not possible at all. For one person to try to do it is a fool's errand. I have heard people assert how easy it is to hire staff, and for other muds that may be true. But it isn't true for -this- mud, at least not at this stage of the game. Hiring a new staff member is a huge investment in time and effort for admin, because of the standards we ask staff to meet and the ways in which we do things. I have seen dozens of imms hired, back in the day, and thrown into a guild they had never even had a mortal in, and left to sink or swim. Most of them sank. It's done very differently now, because want to do everything we possibly can to help new imms prosper, and it takes time. It also helps to have an active staff when hiring new staff members, because we can be a team and work together to teach the new imms everything they need to know: how to make their equipment and token and poofs and room and rank and pretitle and all the other things new imms have to make; the transmission of almost 14 years of guild histories, policies on guilding and ranking and eq, not to mention the story lines; what imm commands they now have and the rules we have about using them -- and all of this is just the tip of the iceberg. It's a lot, both for the new imm and for the current staff.

So when I came back and the staff was still absent, I lost interest myself. Plus, not gonna lie: I had just gotten Skyrim and was totally addicted. It was easy to ignore Dark Risings, because nothing was happening and I didn't have much help to make things happen. The staff would be coming back, I knew, and so I didn't want to replace them. One guild, Covenance, was completely without an imm, but Parviane dragged out one of his old Covenance immortals and was covering there as best he could given how little time he had for DR. Life trumps the game, and that's how it should be, but dang. Tough times for DR.

I often just have to laugh when I hear people with little-to-no imming experience talk about what they think imms do or how easy it is to hire/be staff. I do understand it -- Parviane and I are the only implementors in DR history who started out as players first, and over the years I have been increasingly stunned to realize just how much immortals do that players don't realize, how much admins do that imms don't realize, how much imps do that admin don't realize. It's like an ant climbing to the top of an anthill about which he knows everything, only to have the camera draw back to reveal a whole field of anthills he never knew existed.

And that feeling has intensified over the years, as we have tried to refine the DR gaming experience from one that appealed to 14-year-old boys, to one suitable for our current 20-40 age group made up pretty equally of men and women. Imming at DR is a vastly different experience now from what it was when I was brought on as staff in the spring of 2002. (Holy crap. In two months I will have been a DR staff member for a solid decade.) The game is very different now, and while there are certainly people who will always mourn for the good old days when they played important characters and were known throughout the mud, I am proud of what we've built it into: a unique, original, and cohesive world built out of incongruent sources; a game based on the tenets of fair play, respect for players and their stories (past and present), and balanced mechanics. DR really is a magical place.

Anyway, I think the players saw the lack of staff and thought that since we weren't there to make the magic happen, they had no reason to be there either. And while it is possible to play DR and make magic happen without the presence of a staff, it's a lot less fun that it should be. And what is a game supposed to be, if not fun?

So we stagnated. We were in the position of having very few regular players logging, and possibly having to start from scratch with staff, and not even having much of a pool of players who had shown any interest in being staff to pick from.

I'll admit, I got disheartened. When we came back from our absence a few years ago, DR was in a similar state and we brought it back to life then, through a lot of hard work and constant effort. The thought of doing that again was, for a while, pretty overwhelming. I thought about possibly writing an ending for the DR story, having a set date on which the mud would close and staging a series of climactic events to culminate in one big bang, with the ending determined by player actions along the way. I would rather give the game closure and go out with a bang than just have it waste away to nothing. I even went to the extent of asking a few players if that's something they would like to see, and while they agreed it would be better than letting the game die quietly, they said both options were less desirable than having the game pick back up again.

And isn't that what I want too? It so is. DR can be a frustrating, exhausting creature sometimes. But I love it. I have loved it for ten years. And I want it to be awesome, to give it life, to make it soar.

So.

We are making changes. Of the three staff who had their time sucked away, two are back. We have also hired three new staff members, and the plotting has been fast and furious. I can't tell you how great it feels to have people to conspire with again. We have a ton of great stuff planned and I am really hoping that the resurgence in active staff is going to bring the players back. You have all been sorely missed.

Since it is going to take a few weeks for the new staff to get ready and go vis, I thought I would write this post to let you know that we're focused again, we're taking big steps to fix the horrible problem with stagnation, and we're very excited about the future of the game.

Come back, beloved players: it's about to get good :)