Why 'Diablo II' Keeps Screwing Up Players' Games
Earlier this month Diablo II: Resurrected kept going down, much like everyone's respect for Blizzard since they were accused of fostering an abusive and discriminatory workplace. The latest tired re-release from this aging gaming has-been has suffered from criticism that it's adhered too closely to the roots of the 20-year-old classic. But I don't remember the classic servers falling over multiple times in a weekend and losing progress for players around the world.
If you're playing Diablo II: Resurrected, you're probably wondering what the heck happened. And if you read their technical explanation without working in tech in the last few years, you probably came away more confused than you went in. But that's why I'm here- Cracked's resident nerd (and that is a competitive category) will explain why you don't have the Zod rune that dropped on October 10th. It won't make the rune come back, but at least you'll know it's not your fault.
Blizzard's technical explanation is full of quotes like, "we also saw we could make configuration improvements to our database event logging, which is necessary to restore a healthy state in case of database failure," which sound good but are what we in the coding biz call "bandaids." Is this a good thing to do? Sure. Was this the reason everyone's game died that weekend? No.
So why did everything fall apart? Well, there are two big issues that Blizzard has to fix.
They Backed Up Your Character Wrong
Blizzard stores your character in two different places- your regional database and a global database. If you read their technical brief, you may be a bit confused as to which is more important. They call their global database "the single source of truth for all your character information," and yet they also say, "most of your in-game actions are performed against regional database… and your character is 'locked' there to maintain the individual character record integrity." So there's one source of truth… but it's not where most of my actions are saved? And the other source has more character integrity? Doesn't that make the other source … the truth about my character? Huh?
You're confused because this architecture is confused. Basically, when something happens in your game (like you pick up the Zod rune), Blizzard saves it to your regional database. Then, at some point later, the regional database saves it to the global database. You might say, "Sure sounds like the regional database is the source of truth, and the global database is a backup," and friend, it sure as hell does. Blizzard mentions at the end of their post-mortem that they're going to work on this, but to be absolutely frank, this is a pretty rookie architecture mistake for modern web-dev.
The disconnect between the regional database and the global database is why you lost progress. When the two servers disagreed, Blizzard had to choose whether to respect the global database (which, again, they say is not the most up-to-date with your character's actions) or the regional database (which reflects what you saw happening in your game) and they …
They said they didn't want to interrupt people playing the game. This is baffling because then they basically had a situation where people were allowed to keep grinding away at the Catacombs, but none of that progress was saved. Cool. Way to be in touch with your players, Blizzard.
Bad Code is Bad
In DII: Resurrected, there is apparently one service that handles showing you the list of games, making a new game, and allowing you to join a friends' game. Blizzard devs dumped too much work on this part of code in much the same way that the DFEH lawsuit says they dumped their work on their women engineers while their male engineers drank and caroused in the office.
Blizzard says this piece of code is responsible for "game creation/joining, updating/reading/filtering game lists, verifying game server health, and reading characters from the database." That's basically everything but telling Baal to attack you. Well, no problem, right? Just like they have multiple databases, they can run a bunch of versions of this code and then scale it up with players!
Wrong-o. Blizzard designed this service so they could only have one of them. Why? So that all players in a region would see the same list of games when logging in. If you haven't played Diablo II, that might seem like a good reason. But I can tell you from experience you never look at the list of games unless you're going to troll. If you want to play, you make your own game and invite a friend. If you're looking to play with a friend, then you ask them the name of the game and the password. Almost everything else is unnecessary.
So that code couldn't keep up with "modern player behavior" (AKA, playing the game), and now Blizzard is slowing down how often people can make games until they can actually go in and fix their bad code. Maybe they shoulda spent less time in the Cosby Suite and more time, IDK, coding?
Top Image: Activision