Hi, I’m Simon Fox, lead engineer on the Single Player Mode for SimCity, and I’m here to tell you more about how we engineered Offline gameplay for SimCity.
When the game released, our fans were calling for Offline. I rallied the team to start making that happen as soon as practical after launch.
REENGINEERING A CREATIVE VISION
The original creative vision for SimCity was to make a game where every action had an effect on other cities in your region. As such, we engineered the game to meet this vision, setting up the player’s PC (client) to communicate all of its information to the servers. That means that our entire architecture was written to support this, from the way that the simulation works to the way that you communicate across a region of cities. So yes, while someone was able to remove the “time check” shortly after launch, they were unable to perform key actions like communicating with other cities that they had created locally, or with the rest of their region(s), or even saving the current state of their cities.
My team did, however, see a path forward towards Offline, one that would maintain the integrity of the simulation. Lucy once said that Offline wouldn’t be possible “without a significant amount of engineering work”, and she’s right. By the time we’re finished we will have spent over 6 ½ months working to write and rewrite core parts of the game to get this to work. Even things that seem trivial, like the way that cities are saved and loaded, had to be completely reworked in order to make this feature function correctly.
REWRITING KEY PIECES
I wish it were as simple as flipping a switch and telling the game to communicate with a dummy client rather than our server, but it’s more than that. Entire calculations had to be rewritten in order to make the game function correctly.
SimCity was written to rely on the servers. The game routinely pings the servers for critical pieces of data (region status, workers, trading etc.) and it relies on that information to keep the simulation moving. This meant rewriting the entire system, which previously existed in Java, and putting it into C++. We’ve had to knock out the internet pipe stuff. There’s lots of code that hits the servers looking for information. We’ve had to write a lot of code to produce that data locally, specifically for region information.
Our game routes pieces of data from one city to another as data flows through the regions. All of that code exists on the server, and now we’ve brought all of that down into the client. The client processes the region box, which is what all of the cities pushes their data into. We’ve brought that down into the client as well.
And now, all of the regional simulation needs to be done locally. The algorithms governing trading between cities needed to be retuned in order to make the behavior between cities more responsive for this type of play. This in itself required major optimizations in order to run the simulation locally. We have an obligation to make the game fun and functional on all specs of machines. We wouldn’t want someone who was enjoying the Multiplayer game to find the Single Player game crippled due to poor optimization.
And it’s not just adding, we had to remove parts of the game for it to function properly as well. This means removing lots of code integral to Multiplayer include code and UI supporting Trading, Social Features, Global Market, Leaderboards and Achievements. And, all without crippling the Multiplayer game.
So where are we at right now? We’ve been working on this since August and now, we’ve hit Alpha and are in the final stages of testing before we release it as part of Update 10 in the future. On behalf of the engineering team, thank you for your patience on this one. We know you want Offline play in SimCity and we are really happy that we are finally getting ready to deliver it to you.