Creating a next-gen launch title sounds like a nightmare. Can you explain exactly the challenges you faced?
Mark Rubin: It is for our engineers, especially. Fortunately, both Xbox One and PS4 are very much like PC, more so than the last generation. That helped enormously. If the systems had their very peculiar architecture, like they did in current gen, this would have been a different conversation. But because of that the development this time around it was significantly easier. I have experienced the current-gen launch. I was at Infinity Ward for COD 2. When we launched it was just PC and Xbox 360, but that was our first console, period. There was a lot to learn leading up, but that was just one console, when all it was was PC and that new console. And that was an interesting challenge.
So to do PC, current-gen two SKUs and next-gen two SKUs, was a massive challenge. Working with the theoretical hardware would have been a disaster if... honestly, the hardest thing to deal with is not the architecture. It's the OS (operating system) of the systems. That's the thing that comes on the latest. The Xbox One's OS on their box versus the Sony OS, becomes the hardest. All the SDKs and stuff you have to work with - that's the stuff that changes, not the hardware itself.
What about the operating systems, exactly, is the problem?
Mark Rubin: There's stuff in the console's OS that interacts with the game. So, for instance, voice chat is often supported by the hardware manufacturer rather than the software, and you're just using their channel. When that stuff is changing - because they're developing it on their side - and the resources they're using are changing - your, from a game design standpoint, challenge is with trying to make enough room for those resources to be used but at the same time use as much resources as possible.
One of the greatest challenges the engineers have to deal with is memory management, or thread management. There are X number of threads in your CPUs. Where in those threads is the stuff that's Microsoft or Sony? Where does it fall? How does it work? We don't have the SDKs for those features yet, and then they come in and you go, okay, well it needs 3MB of RAM - oh, crap, we only allocated two! You can't just take a MB from anywhere. It's not like there's just tonnes of it just laying there. You have to pull it from something else. And now you have to balance that somewhere.
It becomes a massive change internally for our entire engine, if they add a few MB to the amount of resources they need, or if they require all their processes to be on one thread. If it's not multi-threaded then we have to put it on one thread. Now we have to find space on one thread, where that can live, that it's not creating a traffic jam on that thread. Sometimes we have to be like, okay, we have to move all this stuff over to a different thread and then put that in to that thread, just to manage traffic.
That's what engineers are often doing: managing the traffic of CPU threads and memory and where that's going, allocating memory, what kind of memory is it? Is it dynamic? Sometimes what has to happen is we have to allocate the 3MB straight off the bat and just say, these 3MB, specifically, these actual memory addresses, have to be used for this. They can't be used anywhere else. Whereas dynamic, it's like, okay, I need 3MB but it doesn't matter where those 3MB come from.
So all that stuff can change on the fly. And you're trying to develop your system to match with that, and it's two systems, now, not just one: Sony and Xbox. That creates a massive engineering nightmare.