Skullgirls 2nd Encore

Skullgirls 2nd Encore is a stylish, creative, and critically acclaimed fighting game that evokes classic arcade titles with lush, vibrant 2D graphics and tight controls. It’s available on Steam (Windows, Mac, and Linux), PS4, PS5, Xbox One, Xbox Series, and Nintendo Switch.

My Contributions

Skullgirls 2nd Encore began development long ago, and was originally released in the early 2010s. Hidden Variable took over development in early 2020, with the goal of adding new content and platforms.

My role, starting in 2020, was to lead a modernization and “resurrection” effort for the project. I was responsible for a number of improvements and augmentations that I’ll highlight next!

CMake Integration

One of the first things I did was convert SG2E to use CMake. Originally, SG2E maintained separate IDE project files for each platform, which was error-prone and difficult to maintain. By using CMake, we were able to configure all platforms in a central place, and we were able to generate IDE project files on-the-fly rather than committing them to version control.

It’s hard to overstate how critical this change was to future development. The existing IDE project files both duplicated data while also having slight inconsistencies. The game could only be opened in an old version of Visual Studio, and automated upgrading was not working. By taking the time to get CMake working, we enabled development with the latest versions of Visual Studio as well as developer-preferred IDEs on Mac and Linux.

Network Code Refactor

When we took over SG2E development, the lobby and network code was very complex and difficult to change. I was tasked with fixing a few lobby bugs, but it was very difficult to fix anything without breaking something else. Chunks of code were also duplicated across platforms, meaning that fixing the bug on one platform might leave the same bug still lurking elsewhere.

To alleviate this, I overhauled the network code to create a much clearer architecture and delineation between class responsibilities. Code that wasn’t platform-specific was consolidated to remove duplication. The entire system was carefully commented and organized.

The result of this effort was a higher quality online experience. Fixing network and lobby bugs became much more straightforward, AND those fixes would usually apply to all platforms without additional effort. The number of complaints and bug reports we received about online play dropped significantly. Furthermore, the updated architecture made the system easier to extend - this helped us quite a bit when we needed to add Xbox One and Nintendo Switch support.

Graphics Refactor

Similar to the network code, the 3D rendering implementation in SG2E was fairly difficult to maintain. Rather than graphics calls being abstracted behind an interface, platform-specific code was scattered throughout the codebase, often with significant duplication.

To alleviate this, I implemented a “graphics” interface that allowed the game to manipulate 3D rendering without having specific knowledge of the underlying system in use. This allowed 99% of the codebase to use graphics capabilities without worrying about whether the game was specifically using DirectX or OpenGL or Vulkan or something else.

Gameplay Screenshot

This refactor proved absolutely vital when we later implemented Xbox One and Nintendo Switch versions of the game, which required us to add DirectX 12 and Vulkan support respectively. If we hadn’t chosen to make this change, adding these platforms would have simply accumulated more technical debt in the engine.

Resurrecting PS4

Though SG2E had previously launched on PS4, it had not been maintained for several years. I took on the task of “resurrecting” it: updating to the latest SDKs, refactoring various systems, adding DLC, adding achievements, fixing bugs, and integrating some new features.

Since PS5 is backwards compatible with PS4, we also ensured PS5 compatibility at this time.

This was a very cool experience, and I learned a lot about PS4 development along the way! Developing a game for a PlayStation platform has long been a goal of mine, so I was glad to have the opportunity.

Xbox One

SG2E released on Xbox 360 long ago, but it never released on Xbox One or Xbox Series consoles. I was responsible for porting the game to Xbox One, which would in turn run on Xbox Series consoles due to backwards compatibility.

This involved implementing the Xbox variants of various systems, such as DLC, achievements, and networking with Xbox Live. However, by far the most involved aspect was re-implementing graphics in DirectX 12.

Though I curse Microsoft for not simply allowing DirectX 9 to run on Xbox One (which would have made development way easier for this port), I am glad in hindsight to have had the opportunity to learn the new “modern” approach to graphics represented by DirectX 12.

Vulkan

Since I already had reps refactoring the graphics system and implementing DirectX 12, I went ahead and also added Vulkan support when the Nintendo Switch port required it.

Conclusion

Skullgirls 2nd Encore is a special game that has enjoyed more than a decade of commercial and critical success. It’s a super unique IP dripping with personality and sporting a strong and dedicated fanbase. I feel quite honored and privileged to have been able to contribute to its ongoing development and success.

For my professional development, SG2E was most valuable as a way to gain a ton of experience with Steam, Sony, Microsoft, and Nintendo development and publishing. I also learned a lot about legacy and modern graphics APIs. Finally, it gave me plenty of valuable experience in C++. As with SGM, my professional development exploded while working on this project.