How to make a malicious random number generator

Nethack players, really experienced Nethack players, know that nothing is more cruel and unusual than the Random Number Generator. It is capricious and can either grant you great powers and wisdom (I remember being astonished at finding Grayswandir on level 4 of the Dungeons) , or can instantly kill you (“An endless stream of snakes flows from the fountain! The water moccasin hits… you die…”)

As part of our ongoing work with beta testing, we discovered that users never really felt compelled or pushed forward to keep moving, or to find some sort of pace. We looked at this, and decided that our best approach would be to implement something similar to the Director system that Valve uses for Left 4 Dead. For those of you who haven’t seen this, L4D measures player “experience intensity”, and then spawns mobs or allows for cooldowns based on this information. It’s crude, but it works. We therefore decided to try lifting it, with reasonable success. If your gameplay experience is not intense enough – i.e. you’re not Having Fun, the game will ratchet up the monster spawns in your area. If you’re having too much Fun, the game will give you a breather. We also track reward in the same manner; we will spawn more rewards if you haven’t been rewarded frequently enough, or we wlil spawn a really big reward. Similarily, if you’ve been getting too many items the item supply may dry up a little.

So, yes. We really *do* have a random number generator that cares. Is this entirely in line with the Roguelike philosophy? Maybe, maybe not. At the heart of the game the spawns are still random. We simply generate the contents of a room only when it first becomes visible and bias how many items/how many monsters are in a given room, as well as the spawning of other things (new monsters spawned post level creation, quests, et cetera.) So far it’s working out well and it will be interesting to see how we proceed from here.

Posted in Uncategorized | Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *