Skullgirls Mobile

Skullgirls Mobile is a whole new handheld fighting game experience in the universe of the hit PC and console game! It is a true fighting game experience on your mobile device - one that’s easy to pick up for casual players, but still challenging for fighting game experts.

Skullgirls’ unique art style hearkens back to classic 2D fighting games, while boasting high-fidelity and lush graphics for modern-day hardware. The mobile game’s graphics pack the same punch as the original - spare no expense!

The mobile game brings a rich fighting system to touch screens with a variety of combos, special moves, and “blockbuster” super moves. It also introduces RPG elements, such as leveling up, evolving fighters, equipping moves, and applying status effects that can give you the edge in battle.

Skullgirls Mobile, is available on the Apple App Store and Google Play Store.

Development

Skullgirls Mobile began development in January 2015, and it was launched in early 2017. As a “games as a service” title, it is still being updated to this day.

I served as the lead programmer on Skullgirls Mobile. One of my first tasks was to implement a “proof of concept” demonstrating that it was possible for this type of game to run on mobile. This was a success, which allowed us to move forward with full development.

Early on, I ported many features from the console game, including 2D art rendering and loading, fighter state and transition system, collision detection, and a custom scripting language used to implement fight logic. But as development went on, we also developed a lot of new and novel features that make the mobile game unique.

2D Art on Mobile

When we started work on Skullgirls Mobile, we didn’t know whether it would even be feasible for the game’s graphics to decompress and render on mobile platforms, due to both the memory overhead of the high-resolution 2D art and the CPU overhead required for on-the-fly artwork decompression.

My very first responsibility was to implement a “proof of concept” with the 2D art rendering running at 30-60FPS on mobile devices. We found this achievable, but only after applying a few optimization strategies.

Skullgirls Gameplay

Art decompression is a potentially time consuming task - we initiate decompression as early as possible in a frame. Decompression is performed on multiple background threads. The actual decompression logic is highly optimized and makes use of C# “unsafe” code to perform operations as quickly as possible.

We also use a custom rendering plugin that achieves more efficient GPU texture uploads by only updating portions of the texture that have actually changed. Skullgirls Mobile makes use of texture atlas system, and based on how much data was decompressed for a frame, we only needed to update a certain percentage of the entire atlas.

Asset Portability

My goal was to make porting of assets between the console and mobile game fairly simple. This included many assets: art, state machine data, sound and music, 2D art for story/dialogue, and fight stages.

I believe we have largely succeeded in defining straightforward pipelines that allow such assets to be easily shared. As a result, bugs fixed and improvements made in the PC/console game can be easily used on mobile and vice-versa.

We have also been able to share assets between versions of the game. For example, a character or stage developed for the console version was able to be ported to the mobile game without too much additional work.

Abilities and Modifiers

The mobile game also has features that weren’t in the console game. Perhaps the most complicated framework I developed was our “ability” system, which allows fighters to react to certain game events, under certain conditions, to apply one of many modifiers (such as bleed, health regen, armor, etc) to one or more fighters in the game.

I’m quite proud of this system’s modularity and extensibility - it has been used to implement hundreds of unique behaviors for the game’s fighters and moves. It is also heavily data-driven, so designers can usually dream up new abilities and modifiers without requiring coding support.

Network Request Framework

Skullgirls Mobile is an “always online” experience, where most in-game actions result in network requests being sent to backend servers to validate and actually perform actions.

Though C# has built-in support for HTTP, it was lacking features such as retries, success/failure callbacks, and parsing of binary and JSON bodies. To combat this, I implemented an efficient intermediate network request framework that allowed most game code to make requests and get a response without worrying about any internal complexity or error-handling.

Full Stack Development

To efficiently implement features on SGM, all engineers are “full stack” - meaning they are responsible for implementing a feature’s code on the client (Unity), on the server (Java), in the database (MongoDB), and on the infrastructure (AWS). Because one engineer is capable of doing everything, we’re able to very quickly and efficiently implement new features with excellent conceptual integrity and fewer bugs during integration.

As a full stack engineer, I’ve been responsible for implementing many systems. Here are a few:

  • A modular authentication framework, which allows users to login to the game using Facebook, Google, LINE, or in-house implementations for email/password login or guest login. I’m particularly proud of the password system, which had to be secure and store password data responsibly.

  • A modular purchase validation and tracking system that currently supports Apple App Store, Google Play, and Huawei AppGallery purchases.

  • An offer trigger system that catches various game events and uses a data-driven approach to conditionally trigger special purchase offers for players. For example, a player who just got a rare character might be interested in a sale offer related to that character’s moves.

  • A realtime matchmaking system for our async competitive game modes.

Realtime Synchronous PvP Gameplay

Quite a large undertaking that I focused on for several months was realtime synchronous fights. To do this, we integrated the GGPO rollback netcode system.

Rollback netcode requires that the entire game is deterministic. Though we planned for this from the start, there were many changes and fixes we had to make once we actually needed determinism for the game to function correctly. For example, we needed to refactor most of the game to use a fixed-point math system that guaranteed deterministic results.

Implementing this in a mobile game was also more complex than on PCs or consoles due to the lack of underlying platform (such as Steam or PSN) to handle network traversal. As a result, I was responsible for implementing a custom NAT-punchthrough solution as well as logic to fall back on a set of relay servers (hosted by Photon if a direct connection couldn’t be made.

Cellular connections were also an interesting challenge: extremely variable speeds, sometimes moving around the world in cars or trains, and often using IPv6 connections. We did our best to make the gameplay resilient to poor connections, and of course GGPO is great at handling poor connections too.

Conclusion

Skullgirls Mobile was a huge technical challenge that I’m very proud to have in my portfolio. The engineering team on this project was never that large - maybe three to six people depending on the time. But we accomplished a lot, and usually in fairly short time frames.

It was a wonderful opportunity to learn about a variety of game development topics. I learned a lot about free-to-play game architecture, server programming, backend infrastructure, and networking. The novel rendering techniques used were quite enlightening in fully understanding 3D rendering. I felt that my professional development during this project was explosive.