Doing a thorough analysis before starting the porting process

If you have recently logged into the PlayStation versions Spelunky or Fez, then you will probably recognize the orange logo of Blitworks. Miguel Angel Horna, the co-founder and chief programmer of BlitWorks gave a presentation at GDC Europe last week about the technical problems BlitWorks had in working with Polytron to make Fez compatible with PSN. I was curious to know why he did it, and we had a fascinating back-and forth about the business of BlitWorks. Developers take note:

Horna also shared valuable insights on how game creators can make it easier for their games to be ported to other platforms. Companies such as Epic and Unity have tried to take advantage of this problem by expanding their engines in order to porting video games support cross-platform development. Horna and my email conversation also covered how this impacts BlitWorks’ future plans.

BlitWorks, which would later become BlitWorks, was started by a friend of mine and me. We both have long experiences writing arcade and console emulators. Our hobby brought us into contact with Sega personnel and we grew our relationship over the years. Due to our experience with consoles, Christian Whitehead offered us the opportunity to port the Sonic CD remake. BlitWorks was born when we joined forces with some friends. After Sonic CD, we built Jet Set Radio first using our emulation technology. We demoed the product to Sega. Although they were keen to have Jet Set Radio updated, there were many changes needed to make the emulated game meet current-gen standards (HD graphics; trophies; leaderboards etc.).

We began thinking of a new approach that would be based on the original code. We used all the knowledge and experience gained from the Dreamcast to build a new hybrid technology which allowed us run the old code on current-generation consoles. Jet Set Radio’s final approach was to use an emulator as well as a full port. Jet Set Radio received more inquiries. It was clear that there was a need. So we decided to concentrate on game porting. This was done with the two core values that made the initial ports successful: console knowledge and strong programming skills. That’s how it all started.

We faced the biggest challenge when the original Fez was written in C#. However, there was no C# Support for PlayStation Platforms at the time that we started the port. This forced us to make the huge decision to either port the Mono runtime to C++ or convert it to C#. C# would cause CPU performance problems as the original Xbox 360 game also experienced slowdowns. However, although it was tedious and lengthy, the conversion of the Monogame game code to C++ would have provided us with unique optimization opportunities. In order to get the best portability, we decided to use C++.

Graphics performance was another major problem. Fez worlds, which look simple in 2D, have a complex 3D design (pictured). You might even find pixel-sized Polygons. While the PC version was used for the port, graphics performance on current video cards was fine. But shaders and geometry were a problem when running on portable or older-gen consoles. We had to revise some of the drawing code and adjust a few shaders for each console. Smoothness was achieved by combining the GPU optimizations and the CPU optimizations.