Have you ever had a good idea and started working on it? I did, back on May 18, 2012. I had read several quotes from Jay Wilson, then-director of Diablo III, where he had said—and I’m paraphrasing here— “we’re not officially doing a console port.” I started writing a post about how Diablo III was made for consoles, but ultimately I decided to scrap it; honestly, who would have wanted to read about that?
As the year went on, I would revisit the draft and add a few notes, but shelve it again. “Diablo III is old news,” I told myself, “No one cares if it comes to console or not. It’s not as if anyone will read this anyway. You’re wasting your time.” If you’re a longtime reader of the site, you might recall we weren’t good with putting content out consistently in our first year. Lack of self-confidence (and procrastination) was a huge issue for me.
Fast forward to a few nights ago when Sony announced the PlayStation 4. During the presentation, Blizzard’s Chris Metzen came out on stage and said Diablo III was going to be released for both PS3 and PS4. As you can imagine, I am kicking myself right now for not putting this post together sooner. What’s particularly frustrating for me is discovering this article was 80% done when I dusted it off after Chris Metzen left the stage. All I was missing were images.
But enough about how I dropped the ball on this one. Let me tell you how Diablo III might work on the PS3. I’m willfully ignoring the PS4 because I haven’t thoroughly reviewed the system specs, but the increased memory will definitely help.
Refining Diablo III’s User Interface
The user interface (UI) is the most logical place to start this discussion. The UI informs the player about their character and their surroundings. In Diablo III, the most important information the player is exposed to pertains to their current health and resources; these are represented by the red and white orbs at the bottom of the screen. The color of the resource orb changes depending on the player’s class.
At the bottom, we can also see the player’s experience bar. Any beneficial or harmful effects (buffs and debuffs) currently affecting the player would be found above the experience bar. Underneath the experience bar, players can see what skills they have active, the cooldowns of those skills, as well as the number of health potions in their inventory. There are also several buttons to open different interface panes, as well as a latency indicator.
Mousing over any of these UI elements exposes even more information about them. For example, doing so on the resource orb in the screenshot above would display 5/100. A tooltip would also appear when mousing over a skill on the action bar or a buff. Again, in the screenshot above, hovering over the third skill—Serenity—would inform you that there are 10 seconds on the cooldown. However, you don’t need to mouse over every element for more information; the grayed out skills require more Spirit before they can be used.
Any element exposing information on mouseover, be it in a tooltip or displaying text, would need to be reworked in a mouseless environment. Say, for example, on a console. Most of Diablo III’s UI elements wouldn’t translate well to a console. It could work, but it would not be optimal. Some elements such as the latency indicator, which changes to red if the ping exceeds 1000 milliseconds, would translate well to console. 1 However, information about buffs and debuffs would need to be shuffled around or adapted to some other display. It would need to be baked into another information window, converted to a text display, or placed in some other clunky solution. Let’s look at the other half of the screen now because I’m starting to get tunnel vision.
At the top of the screen, players can see information about the monster currently beneath the mouse cursor. This includes the name, a health bar, and what type of monster it is. What’s missing from this display is how much health the monster has. Piecing together the floating health bar over the Dark Cultist, we know it has 1017/1781 health left, or 57%. The information shown is incomplete and scattered.
In the top right corner of the screen, we can see the name of the area the player is in, the current time, and a minimap. Underneath the minimap is the quest tracker, which keeps the player reminded of their current task and any objectives. The time display is rather extraneous on a console. Computers are usually stashed in an office, and users usually rely on the clock in the corner of their desktop screen. However, this clock is hidden when playing a game in fullscreen, meaning it is very easy to lose track of time. By contrast, consoles are typically set up in a living room where there are a multitude of clock displays: the TV, the DVR, the clock mounted on the wall, the dog’s LCD fur clock, the phone on the table, etc. The UI clock is simply unnecessary when playing on a console.
In the top left corner of the screen, we can see information about our party. These unit frames are only displayed if the player is playing co-op, and thus are not visible in a solo game. We can see character portraits, instantly conveying what class the player is playing, as well as any buffs they have. The crown icon next to a portrait indicates who is hosting the current game. Additional portraits are shown for any characters currently following the player. Portraits of summons, as well as any disembodied heads the player might be carrying, are also shown. I’m not sure this needs to be reworked in any significant way; the unit frames display the player’s BattleTag instead of their character name, but I’m getting ahead of myself.
The UI is built for playing on a computer with a mouse. The mouse reveals informational tooltips that explain every element of the UI, no matter how big or small. However, the mouse isn’t required for shops and inventory management. Well, a mouse is required on the PC, but it wouldn’t be required on the consoles; the player just needs to be given a selector. Everything associated with inventory management is grid based, so using a selector makes perfect sense here. Highlighting an item would then display its tooltip. Simple!
How the player interacts with the UI in a console environment is important, but let’s talk about how the player interacts with the world as a whole.
Interacting with Sanctuary
Let’s talk about buttons. On the PlayStation 3 controller, there are four face buttons, four shoulder buttons, four directional buttons, three system buttons, and the two thumbstick buttons—I have to wonder if there is a formal name for pressing the thumbsticks down as a button. In total, there are seventeen buttons. Unlike a more complex game like Assassin’s Creed, which used a modifier system wherein players could hold down R2 (RT on the Xbox 360) to change the behavior of the face buttons, Diablo III would not require this treatment.
If you’ll indulge me for a moment, I’m going to talk about World of Warcraft. No, it still wouldn’t work on consoles and I doubt Blizzard is going to try to port it to the PlayStation 4.
However, in that article I had mentioned how WoW has a lot of skills and abilities available. If you were playing World of Warcraft with an Xbox 360 controller, you would have to utilize the macro modifers (mod:shift and mod:ctrl) in order to access the full breadth of your skills, much like you were emulating Assassin’s Creed. The left and right triggers would have to be used like the shift and control keys, thus turning your four face buttons into a set of sixteen virtual buttons. You’d have access to forty virtual buttons if you use the d-pad and bumpers too, which is far more buttons than you’d need even if you were playing a Beast Mastery Hunter. Granted, in practice, you won’t need more than eight buttons—maybe ten—because you only have to use a small subset of your skills to perform your role in combat. Assassination Rogues, for example, only need seven buttons to do their job: Stealth, Garrote, Slice and Dice, Mutilate, Envenom, Rupture, and Dispatch. Seasoned WoW players will note this doesn’t include cooldowns, AOE damage, or any situational abilities. Experienced WoW players will note that many of these skills can be combined into a single macro, thus reducing the number of buttons required.
However, since World of Warcraft does not support controllers natively, you would require an external program that translates thumbstick input to keystrokes. You’d also want something to emulate mouse input as well, since the WoW UI, being a PC game, is heavily dependent on the mouse. Lastly, you’d have to use quite a few addons to modify the UI so that you can reduce your dependency on the mouse.
Diablo III doesn’t require over four dozen keybinds. There are four action skills. There is a primary attack and a secondary attack. There is a hotkey for potions and a keybind to open a portal back to town. The only thing missing is being able to pick up loot and interact with objects, but there’s more than enough free space on the controller to create a new button action for that. Only nine buttons are needed to interact with the world. Again, the PS3 controller features a total of seventeen buttons, so there are eight buttons available for things like opening the inventory, pulling up the map, or pausing the game. It is as if the commands were designed with controllers in mind.
Did you know there are quick chat options? On the PC, you can bind keys to ten voiced commands like “follow me,” “wait,” “no,” and “I’m going back to town and disenchanting all of the gear that would benefit you, jerk.” Okay, one of those is fake. (It was the first one.) If console Diablo III is going to be anything like PC Diablo III, then it will be possible to join public games. Because we’re all anti-social at heart, no one will want to use their headset to speak to each other. Therefore, being able to use those quick chat options will definitely help, and it’s likely to be something that would be bound to the d-pad.
Movement is likely to be bound to the left thumbstick. A smart design would put the four action skills on the shoulder buttons. After all, you can’t have both thumbs on the thumbsticks and press the face buttons at the same time.2 The most puzzling thing to me is what Blizzard could do with the right thumbstick. Traditionally, action games use the right thumbstick for manipulating the camera. In Diablo III there is some ability to pivot the camera around your character and zoom in, but it’s still a fixed overhead camera. One possibility is that the right thumbstick could be bound to attacking in a given direction with a primary attack, much like a twin stick shooter (a la Big Sky Infinity) plays. This would allow players to click the right thumbstick to use their secondaryThis would attack, or their action skills on the shoulder buttons, all without losing their facing.
A Blizzard press release states that there will be a new dynamic camera system. This lends credibility to my speculation, because giving the player control over the camera when there is so much action going on is a mistake. I do not believe they are using dynamic to mean “less rigid than the PC version.”
That same press release also revealed local co-op play, as well as Blizzard’s intent at redesigning the UI to be console friendly. I didn’t actually watch the event stream because, well, if you were watching it you’d have noticed how bad the connection was. It was like Diablo III’s release night all over again, except Error 37 wasn’t trending on Twitter last night.
The dynamic camera is likely tied to the local co-op system. It’s unlikely that Blizzard will attempt split screen co-op for Diablo III. That will not work because each screen will be too small to read the silhouettes. (See figure 1.) They’re going to have to keep all four players on the same screen, like online co-op in Fable 2. It is my hope that Blizzard learned from Lionhead’s mistake and the dynamic camera system makes it possible for players to not be trapped in an alcove by the camera frustum. (See fig 2.)
I’ve talked about the problems with the UI. I’ve talked about how easily Diablo III’s controls can be adapted to a controller—it’s almost as if it was being designed with controllers in mind the whole time! I’ve talked about the issues with doing co-op on a console. Now, it’s time I talked about the final piece of the puzzle: How in the Burning Hells do people interact with the world?
Interacting with the Real World through Cyber Space
I had mentioned earlier that the party unit frames display a player’s BattleTag rather than his or her character name. This is not a problem. For starters, it’s likely local co-op will use the character name. Let’s talk about online play, because speculating about online interaction is more fun than thinking about all the fun I could be having if I had friends to invite over for some local co-op.
BattleTags won’t be a problem because Blizzard is going to be bringing their Battle.net service to the PlayStation Network. There is some precedence for this when Valve brought Steamworks over for Portal 2. Now, this is a bit of conjecture on my part, but I suspect the reason why Blizzard was being coy about console deployment last year is because they were figuring out what to do about Battle.net.
Microsoft is notoriously strict about how Xbox Live can be used. Microsoft made all sorts of special exceptions for Minecraft because that was a cultural phenomenon. Mojang and 4J Studios are able to provide free content updates regularly, rather than be limited to a single free update and forced to charge for the rest. Additionally, Mojang had access to sales data the first day instead of having to wait one month, unlike “lesser” developers such as Polytron.
By contrast, Valve is a proven developer. With Steam, it’s an industry giant in its own right! Despite its success, even it was unable to bring Steamworks, and thus free content updates, to the Xbox 360. It’s a closed system and Microsoft doesn’t want to play ball. If Valve couldn’t do it, then Blizzard wouldn’t be able to do it either. I am confident this was Blizzard’s main issue with a console port.
There’s no doubt in my mind that Microsoft would want a cut from the Real Money Auction House as well. Battle.net might have let Blizzard bypass the Xbox Live marketplace, thus cutting Microsoft out of its, er, cut. Microsoft definitely would not have taken kindly to that.
Sony will play ball. Steamworks is available to PSN users, so Battle.net will be coming, too. BattleTags won’t be an issue for Diablo III. That’s a good thing, because it could enable Blizzard to have cross-platform play. Imagine sitting in your living room playing Diablo III on your PS3. You’re connected to your friend who is playing Diablo III on her PS4. You’re both playing with two more of your friends who are on PC/Mac. It would all be possible with Battle.net.
Speaking of the RMAH, I’m interested in how that will work. Diablo III will have been out for about 18 months by the time it launches on Sony’s hardware. If Battle.net is going to unify the game across platforms the way I think it can, then there will likely be a shared auction house. PC players have several tonnes of gold amassed. There are thousands of high quality items on the auction houses. How can new players brought in from the PlayStation compete?
I don’t understand economics, so I don’t know. Let’s talk about Sony’s hardware, instead. Or rather, how well Diablo III will run on the PS3.
Diablo III Runs in Single File
Here’s a general idea of how Blizzard’s game data is engineered. Blizzard packs everything into a MoPaQ archive, or MPQ. These are encrypted archives with a listfile, which is exactly what it sounds like: a plaintext file that lists every file inside of the archive. When the game is started, all of the MPQs are opened and the listfiles are combined into a single master file. For Diablo III, the size of the listfile would be 6621 kilobytes of data, or 154,506 lines of files.
At runtime, the game client will load some files. Let’s assume we’re starting a new game with a female Barbarian. The game will start on the outskirts of New Tristram, which means many files need to be loaded. The first will be a file indicating that you’re starting Act I, followed by the world graph trOUT_Town.wrl for a total of 500 bytes. It’ll fire up the generic Barbarian cutscene, the music, the female voiceover, and any sound files missing from the soundtrack.
Next up is the heavy lifting. There are a dozen files composing the ground under New Tristram. There are a hundred props, markers, and doodads—each of which will pull the associated texture and any animation data when the model is loaded—to decorate the town and the surrounding area; there are innumerable files loaded from this chain. Your customized banner is built from a dozen files. Visual effects are loaded so your Barbarian looks good when she’s smashing the baddies. Sound files, for everything from footsteps to the wind-rustled bushes, will all be loaded. Let’s not forget the music, either.
UI, the scripts that run it, and the textures to dress it up, are loaded next. Skills, shaders, lights, and more are pulled in. We haven’t taken a single step, yet the game has already loaded several hundred files. There may easily be over 256 megabytes worth of data loaded into memory already, most of it being model, texture, animation, and sound, but there’s no way for us to know for sure. As we approach the gates of New Tristram, monsters, NPCs, encounters, and more will still be loaded.
Leaving New Tristram, the various props we can’t see are unloaded to make space. Carts, NPCs, books, and other hallmarks of civilization are also purged from memory. In their place come wretched mothers, destroyed farmhouses, cobblestone walls, graves, and other ruins. We’re in the wild lands now, where the environment is randomized. A new world graph has been loaded for the Festering Woods. No matter how far from New Tristram we travel, significant parts of it will remain loaded into memory for whenever we suddenly return via teleport to make it as instantaneous as possible.
It turns out there is a way for us to know how much memory Diablo III uses: extract all of the files called in the listfile. The bulk of the memory is used by the environment and textures. New Tristram uses 80 megabytes on its own. Our Barbarian’s model, with all of her animations and visual effects, consumes no more than 13 megabytes of memory. Each creature uses about 6 megabytes, and there tend to be no more than six different creature types on screen at a given time. Creatures account for about 30 megabytes total. Music and sound effects, which are typically bulky files, don’t add much more than 10 megabytes; see figure 3.
However, between the efficiency of Blizzard’s internal tools and the visual resolution of the game, the files are going to be smaller than what is typical. Furthermore, Blizzard cut corners when it built the assets for the game, as you can see demonstrated in fig 4. I estimate that, in a heavy combat scene, Diablo III uses no more than 130 megabytes, which would fit well within the PS3’s 256 MB.3
I believe it works this way because of how the game is structured. If you were in the bottom of the Old Tristram Cathedral, and I was in Leoric’s Manor, I could teleport to you rather quickly. There is a brief cast time on the town teleport, but then I would be in town. I could click your banner and be in the action. There is a very miniscule load time, making it almost instant. What I think happens is your game client would be communicating with the Battle.net server, which is in turn telling me where you are.
Do you remember the camera frustum from earlier? There’s a similar frustum surrounding the player. It’s much larger than the camera—probably about three times the size of it. It would be best to call this the world frustum, as it keeps track of what parts of the world are kept in memory. Battle.net is providing me with your world frustum, and my game client is loading data for it as you play, and vice versa. Thus, we’re able to teleport to each other almost instantly. This would have to happen for every player.
The great thing about a system like that is, once I teleport from Leoric’s manor to the cathedral, I can’t teleport back. The game would have to purge the manor from memory because it’s no longer being used.
Now, the big question is: how is the PS3, which has only 256 MB of GDDR3 RAM, supposed to run Diablo III? There are two ways to do this, and one is better than the other is. The first way is to remove the caching, so that a player’s console keeps track of his or her own world frustum. This allows them to travel to and from town as quickly as normal, with a short delay as data is loaded when traveling to another player. The second way is to remove the need for such a caching system by keeping players together on the same screen. Hey, it worked for Fable 2! (It did not work.)
Diablo III was clearly built for consoles from the start. Even the auction house, which is sketchy at best, was designed to work on a console. Many options can be set in the search UI to refine the results. If I want to find some pants with Spirit Regen, Dexterity, gem sockets, and a price point under 2000 gold, then I can search for all of those parameters. All of these options are built as controller-friendly toggles and drop-down lists.
Contrast that to World of Warcraft’s auction house, which is woefully dependent on both mouse and keyboard. I would need to search for pants, and I would need to know I’m looking for the “Illuminating” prefix and the “of the Hawk” suffix. If you’re not familiar with how WoW’s auction house works, it does a whole match. A search for “illuminating hawk” will return no results because there would not be any items with that name. You’d have to search for “illuminating leather pants of the hawk” if you wanted everything, and then sort those results by price. This design would not have translated well to a console at all.
Although Blizzard is redesigning the UI for console play, the UI as it is still works, but it’s not optimal. However, the big, bright icons and graphical elements would translate well to a TV. Additionally, there is a big display mode tucked away in the options which increases the size of text elements specifically so they can be read on a TV.
The camera is kept close to the player, allowing them to see their own character, their immediate surroundings, and all of the gory visuals. There is clarity to the visuals, making them easy to read on a TV across the room. However, the camera is kept far enough away so that silhouettes are more important than details, and the game’s aesthetic was designed with this in mind. Everything, from the character designs to the environment, was built to be as small as possible to fit as much content as possible in a small amount of memory.
Everything about the game was designed with consoles in mind. The only question left for us to ask is why it has taken so long for the game to be ported over. I don’t have the answer , and I suspect Blizzard won’t be telling any time soon.
- On an unrelated note, latency in Diablo III is actually measuring how long it takes your client to send an action to the game servers and have the processed information sent back. If the game servers are under heavy load, such was the case on release night, then this can affect the ping. This sounds like a no-brainer, but games typically monitor just the time it takes packets travel between you and the server; standard latency meters don’t factor in server processing time. ↩
- You can, but it’s uncomfortable. You use your index finger to the face buttons. This technique is called “clawing,” most likely because of the resemblance to a raptor talon. Gamers aren’t very good at naming things. ↩
- Diablo III uses far more than 130 megabytes at runtime. Most of the memory likely isn’t actually being used, but is pre-allocated by the game. Think of it this way: when the game starts up, it lays claim to as much RAM as it can. It might not actually be using all of it, but when it does need that memory, it won’t have to fight another application for it. Thus, it can never run out of memory and subsequently crash.
Well, that’s how it’s supposed to work. If you have faulty RAM like the sticks in my tower, then you might run out of memory regardless. ↩