How are video games ported?
You may have seen the burnt orange logo from Blitworks if you’ve recently played the PlayStation versions Spelunky, Fez, or Jet Set Radio. Miguel Angel Horna, co-founder and lead programer of BlitWorks, gave a talk this week at GDC Europe about the technical difficulties BlitWorks encountered in working with Polytron on rebuilding Fez so it would work with PSN. We had a very informative conversation about BlitWorks’ business practices when I met up with him last Wednesday to discuss why. Attention developers:
Horna also provided valuable insight on how game developers can make it easier to port their games to other platforms. Companies like Epic and Unity are working to make this a less difficult process by expanding their engines to allow cross-platform development. Horna and me also discussed how this affects BlitWorks future plans in the following email how much does a port cost conversation. It has been edited for length.
BlitWorks was founded by a friend and I, who both had long-standing experience in writing arcade and console emulators. Through our hobby work, we were able to get in touch with Sega employees and our friendship grew. We were able to port the Sonic CD remake, which was being done already by Christian Whitehead, because of our console expertise. We decided to team up with friends and create BlitWorks. We built Jet Set Radio with our emulator technology, and demoed it at Sega. The Sega team was very interested in Jet Set Radio being refreshed. However, the emulated game needed a lot more work to meet current-gen standards (HD graphics and leaderboards, trophies etc.).
So we began to think about a different approach, which was based on the original source codes. We used all of our Dreamcast experience to create a hybrid technology that would allow us to run the code on current-gen consoles. The final approach to Jet Set Radio was halfway between an emulator and a complete port. Jet Set Radio saw more inquiries so we knew there was a need. We decided to focus on game porting using the same values that made our initial ports successful: good programming skills and console knowledge. This is how it all began.
The most challenging challenge was that the original Fez game was written using C#. There was no C# support on PlayStation platforms at the time we started the port. So we had to make the difficult decision of whether to port the entire Mono runtime or convert the game to C++. We would have CPU performance issues if we kept using C#. Even the Xbox 360’s original game experienced slowdowns. Converting the Monogame code to C++, as well as the Monogame itself, was a tedious and time-consuming task that would give us unique optimization possibilities. We decided to go with C++ because we wanted the best port possible.
Graphics performance was another problem. Fez worlds are not a 2D game. They have a complex 3D structure (pictured). There could be even pixel-sized polygons. The PC version was used as the base for the port. Graphics performance was good on the platform, as current video cards can handle the workload. However, the shaders, geometry and performance issues on older-gen consoles or portables caused some problems. We had to rewrite parts of the drawing code, and optimize some shaders to fit each console. We were able to achieve the smoothness by optimizing both the GPU and CPU optimizations.