How do you avoid database bloat aka database deflation in a MMO or MMORPG? Wouldn't it be great if you could get rid of old stuff that nobody uses and trickle in new items instead? Wouldn't it be great if you could do this in a way that didn't make the players angry? There is a solution, and I call it "Game Content Deprecation" as it can be applied to anything and not just items.
This is my suggestion, please note this is just a rough pseudo-code (not based on any particular programming language) of how to do this in a programming kind of way as this article is mostly of interest for developers but I hope the regular player understands what I'm talking about as well.
This article is (c) by Roger Hågensen 2009, and hereby placed in the Public Domain. As this is public Domain there is no need to credit me, but if possible please credit where you got the idea out of courtesy. Why? Because I believe that ideas should be credited but not protected, while actual implementations should be protected. Sadly the patent system does not fulfill this any longer, and should be deprecated. *laughs*
Now for our example of an automated cleanup routine of old game or MMO items. It will delete deprecated items that is not used (equipped or worn) by active players, and replace them with a reimbursable pile of junk. It will delete deprecated items that is used (equipped or worn) by dormant players for over a year, and replace them with a reimbursable pile of junk.
item="big sword" item_lifespan=365 days item_replacement="pile of junk that used to be a sword" item_replacement.description="Due to wear and tear and lack of maintenance your sword has turned into a pile of junk. However all is not lost, you could take the pile to the blacksmith and maybe for a small fee he could maybe make a replacement with similar features."
if player.item=item
if deprecated AND (player.item.notworn OR player.lastplayed>item_lifespan) player.item=item_replacement player.item.description=item_replacement.description endif
endif
This was just an example, other criteria or checks can also be used, and different types of junk piles or replacements should also be considered. And when it comes to other non wearable and non-equippable items, there is always the possibility of your home/house flooding, burglars, and so on.
Examples:
item="TV set insurance card" item_replacement.description="Oh no! Looks like somebody broke in and stole your TV set, you'd better hurry to the Police/Insurance company and report it, and maybe get it reimbursed."
item="couch, or aa wet moldy lump that used to be your couch" item_replacement.description="Oh great! A water leak has ruined your couch, you'd better hurry to the Insurance company with it and maybe get it re-imbursed."
The possibilities are endless, and obviously this works best with item groups or item types since you can use a generic description for all swords for example, no need to clutter the database with unique descriptions right?
Why deprecate items? Well, for one if no active players uses an item any more it's just wasting database space, cluttering loot tables (as nobody wants it), cluttering shops, or players have to delete or drop it to get rid of them etc. A check is needed to check that nobody is using it (worn/equipped), if it is then removal is skipped for that player.
As soon as they un-equip or un-wear it gets removed and an extra check is needed to handle deprecation of items being worn by dormant characters. In both cases something is left behind as a replacement, to both explain what happen but also to allow the player to reimburse the item in some way.
A pile of junk that either has some monetary value, or that can be handed in to some NPC for monetary or item exchange. In most games it would fit within the world that stuff breaks/wears out, get stolen, or similar.
The game world seems more dynamic/living. Artists/maintainers can make a new sword for example, which is designed to be the new "old" sword, ones that is patched in they simply need to mark the old as deprecated, and it is automatically removed if not in use by active players or a year later (or less) it is automatically removed from all players for example.
This keeps the game economy going, people get to renew their character, artists get to create replacement stuff, database bloat is avoided.
As new and better "gear" is added, the old can be phased out. In concept it is similar to a floating level as mentioned by Raph Koster, but in this case applied to items, allowing you to cut off the bottom as you add to the top. |