Recently I posted an article poking fun at Blizzard’s decision to force single-player Diablo 3 sessions to depend on the battle.net servers. In the article I implied that Blizzard’s decision was a result of technical incompetence—that somehow programming a non-networked game is more difficult than programming a client-server game, and Blizzard developers had failed to crack the problem. Diablo 3′s “networked standalone” (clearly an oxymoron) campaigns aggravate me as a player because they make it harder for me to get into the game, stay in the game, and enjoy a smooth experience within the game. I felt that Blizzard deserved some ribbing for sacrificing the quality of my single-player experience in the name of keeping everything networked.
But as a game programmer with experience developing massively multiplayer games, I do understand why Blizzard took their decision.
It’s all about security and the real money auction house.
The Diablo 3 real money auction house is where players trade in-game weapons and artifacts for—you guessed it—their bona fide hard-earned cash. Blizzard gains a portion of that cash, and judging from the amount they’ve spent on Diablo 3 servers, they clearly projected for those earnings to be a major source of revenue.
But players won’t spend their money unless they believe they’re buying something valuable. The items for sale in the real money auction house have to be powerful, game-changing, and unique (or at least rare), or no one will pay a penny.
It’s the good ol’ Supply-Demand-Price triumvirate. An item’s power and prestige defines its demand. Its rarity defines its supply. The intersection of these factors define its price.
Blizzard’s goal is to create a market where the prices are as high as possible. Therefore they must drive up demand and drive down supply. How are they to do it?
Driving up demand is already built into the game. The Diablo franchise has always revolved around the concept of randomly-generated weapons and armor, each having a greater or lesser degree of “oomf”. Players want the items with the most “oomf”—the most “wow”. They want to beat their enemies with them. They want to show them off to their friends. Ever since the original Diablo, every item has come attached with a certain degree of demand.
But what about supply? That’s where it gets tricky.
If you assume that no player ever cheats at Diablo, then supply is also controlled by the game. The game itself generates items randomly according to an algorithm that Blizzard controls. This determines the rarity of items of a given quality.
The quantity of items is also tightly controlled. The game generates items whenever a monster is killed, so the number of items that a player can generate in an hour is a function of the number of monsters that the game generates, the distance between monsters, the speed of the player, and the speed with which the player can kill monsters. So if the only software that can generate Diablo items is an honest, unmodified copy of the Diablo 3 game, then Blizzard controls both quantity and quality—that is, the supply.
The problem—as we discovered at Origin in the early days of Ultima Online—is that there is no such thing as a reliable client. There is nothing that you as a developer can do—no copy-protection, no DRM, no encryption, no code signing—that can prevent a user from modifying or even replacing your client software.
Think of it this way. Imagine that the battle.net servers trusted Diablo 3 clients to inform them when a player gained some new piece of equipment. Maybe the Diablo 3 clients send a certain network packet—a NEW_EQUIPMENT_GAINED packet, let’s say—that informs the server that a new item was generated, what kind of item it is, what features it has, and how valuable it is. So the server listens patiently for clients to send these packets, trusting that they are being created in an honest manner whenever the player actually kills a monster in the game. It then credits the user’s online account with owning that particular item.
Now when the user visits the real money auction house, they can flog this item for a price. If it’s a rare and powerful item, they might get a high price for it, and the user and Blizzard are happy.
But then some enterprising user comes along with a wicked idea. He uses network packet sniffing tools—readily available—to study the dialogue between a real Diablo 3 client and the battle.net servers. Soon he has learned their language—the ports, the passwords, the protocols, the packets—and gains the ability to imitate it. Now he writes a new application that looks nothing like Diablo 3 to a human, but looks just like it to the server. His application is capable of imitating Diablo 3 in an important way: it can sending packets just like a Diablo 3 client. This application is a cuckoo bird, pushing its bogus packets into the server’s trusting nest.
The developer of this bogus client can now do anything. He can claim, “I just got an Assailing Rune Sword of Blight!” He can claim similar items ten times a second.
What if Blizzard adds checks to the server to validate new item claims—to make sure they seem reasonable? After all, a player finding ten Assailing Rune Swords per second can hardly be on the up and up. So Blizzard can detect and limit the number of high-powered items.
But the cheater has a counter-tactic. He can, with care, nudge his client to create items that sit right inside the legal limit. Maybe he gets an awesome weapon just once per minute or once per hour. Maybe he reports to the server a broader, more plausible mix of item quality.
This clever, naughty little user has just hit the jackpot. He has created a way to generate valuable items quickly, automatically, with minimal time, effort, and luck. He now takes those items to the real money auction house, sells them to someone, and takes their real money.
Now, so long as only a few users do this, Blizzard loses nothing. But when many cheaters use bogus clients to flood the auction house with “rare”, powerful items—well, pretty soon, rare is commonplace and valuable is cheap. Auction house prices take a dive, and the entire economy shuts down.
To keep the auction house vibrant, Blizzard must control supply. To control supply, Blizzard must control the generation of items. To control the generation of items, Blizzard must generate them only on their own, trustworthy servers. They cannot trust clients to do it, because clients may do anything.
Therefore, every Diablo 3 campaign that is capable of generating items that may be sold in the auction house must be played entirely on the battle.net servers.
This must include single-player campaigns. Blizzard wants as many users as possible participating in the auction house, so naturally Blizzard wants to include single-player campaigns in the economy. Therefore single-player campaigns must be played online.
That’s why Blizzard makes you play your standalone games on the network even though it harms your play experience. It’s the reason LocalServer technology isn’t a question of technical difficulty. It’s a question of users—at least the ones like me who don’t care about buying or selling in the real money auction house—demanding it.
Because in fact, if Blizzard wanted to, they could make single-player campaigns run independently of the server simply by making items that are gained in a single-player campaign ineligible for trade in the auction house. I, for one, wish they would give us that option.