In the early years of the video games industry, the number of platforms that you could use for gaming was very limited. Currently, with the rise of the smartphone industry, many homes already have a powerful device that can run games, in addition to that, “new” technologies such as VR are starting to build momentum. For game developers, releasing games in many platforms can improve visibility and increase revenue.
In this article we will talk about the process and the technical challenges of porting games to different platforms. We will cover the following topics:
- Initial assessment of the port with a focus on user controls.
- Challenges of building and compiling the game for the target platform.
- Challenges of running the game on the target platform.
- Performance optimisation.
- UI, localisation, TRC and new game features.
Before starting the process of porting, we first assess if the port is technically feasible. Initial assessment can cover many areas such as performance, used technologies and game features… but one of the first things we look into is user controls. Game developers initially design their games for a specific family of platforms, for example if the target platform is the PlayStation 5 or an Xbox Series X, game developers will make sure that the game can support controllers, if the target platform is a PC, the game should support at least a mouse or a keyboard.
The majority of mobile phones players don’t have a controller, so if you decide to port your game from home consoles or PC to mobile or vice versa you will have to investigate the possibility of adapting the controls of your game to the target platform (the question to answer is, will my game still feel and play the same when using touch screen instead of a controller or vice versa?). The controls of the majority of games can be adapted to the target platform, but if you want to port your game to a mobile device, some complex controls can be hard or impossible to adapt, in this case and depending on how far you want to go, the opposite can be done, which is adapting the whole game to simpler controls.
Once we finish the initial assessment of the game and we decide that it’s feasible to port it to a specific platform, we start the porting.
Building and compiling the game:
The first step of porting a game to a different platform is to first make it run on the target platform. What we mean here by running, is to have the game loop working with a minimal number of features (e.g. load one character and draw it on screen without any other assets). But before reaching this step you have to first build your game for the target platform.
Some game developers use commercial engines such as Unreal Engine or Unity, and others use their own inhouse engines. Even though many of the commercial engines support multi-platforms, the majority of the challenges of porting games will be the same as when using inhouse engines.
Building your game for your target platform can be laborious if you are using an inhouse engine that doesn’t support the platform. If that's the case, you have to first implement an abstraction layer (if it doesn’t already exist) and then implement all low-level layers (This is usually done in iterations, initially you only start with the bare minimum needed to have something showing on screen). This is where using multi-platform inhouse or commercial engines can be helpful, the low-level layer is already implemented in these engines however this only solves part of the problem. Even if your engine is multiplatform you will still need to fix build issues related to the game.
Other problems that arise at this stage are the use of plugins and third-party libraries that don’t support the target platform, you will either have to find alternatives, implement your own plugins/libraries or port them to the target platform… your options depend on the licence of the plugins, availability of source code, performance, functionalities… and many other factors related to your game. The problem with plugins can be tackled later if none of them are mandatory for a very basic version of the game.
Another problem that you can face is when your game relies on some specific hardware features that are not available on the target platform, we will not go into much detail about this problem but depending on how heavily these features are used in the game, you can either implement a very basic version at the beginning or tackle the problem properly later…
There are tons of problems that can arise when trying to compile and build your game for the target platform, but we will stop here to move to the next step.
Running the game:
Once all build errors are fixed, it’s time to run the game. Highly likely you will end up with crashes all over the place that can block you from running the game loop.
Porting to a different platform can also expose hidden bugs. Issues that used to happen randomly and rarely can start to happen more frequently. For example, porting your game from x86 to ARM architecture can expose issues related to memory ordering, another example is that you can get away with code that causes undefined behaviour in some GPUs whilst in others you will get a GPU hang… In general, a different platform means different rules, and things that you got away with in some specific architectures can get exposed and cause bugs and crashes when moving to a new platform.
A very major step in games porting is performance optimisation. The objective of performance optimisation is to make the game run at a target FPS, loading time, memory usage, latency or disk usage… without reducing the quality. An optimised game can look more beautiful because the game was optimised to have more draw calls, sophisticated materials and a wide range of optimised post processing effects. If you look at the market you will find that many games that have very simple graphics and gameplay run with a bad framerate or consume a lot of memory, when others that are far more complex run at a good framerate in the same hardware.
Optimising your game can help you reach a larger audience which can be millions of new players. For example, you can optimise your mobile game to support more devices. A non-optimised game will struggle to run even on high end devices when an optimised game can run on very low specs.
A low framerate or a lot of stuttering and hitching can affect the user experience heavily even if your gameplay is good. Users may not download your game if the disk usage of your game is high, and long loading times again affect the user experience and could make you lose many players.
Optimisation is not about reducing quality. Optimisation is about understanding your hardware and the limitations you have and then implementing algorithms and techniques around these limitations and around the needs of your game. Many game developers jump straight into reducing quality without profiling which is wrong, reducing quality should be a last resort, and if it’s going to happen it should be driven by profiling to avoid decreasing quality without getting any performance gains. Optimisation can range from adapting assets to the target platform to changing a whole subsystem of the game engine.
Optimising a game that you are porting from a less powerful platform to a more powerful platform can sound straightforward but in reality, you can still end up with lower frame rate or higher memory usage... Techniques and algorithms used when creating the game for the original platform can be less optimal for the new architecture which can result in bad performance.
As highlighted earlier, optimisation can target framerate, loading time or disk usage… But one thing that developers overlook is latency. Latency in video games is the time it takes from pressing an input to seeing a corresponding image on the screen. This time should be as small as possible to get a responsive game. Games that are running at the same steady refresh rate can have different latencies. If your gameplay relies on responsiveness, optimising latency should be a priority.
Optimisation is a very complex topic. Different games have different problems and different constraints, what can improve the performance of one game can decrease it for another.
UI, Localisation and TRC:
UI, Localisation and TRC are all areas that can be time consuming when porting a game. Supporting new screen ratios, sizes and resolutions… can be the source of many problems when porting UI, adapting user controls often requires creating new UI elements... Supporting new regions can mean adding support to new languages, this can also create new challenges like adding support to new fonts... TRC differs from one platform to another so care should be taken to conform to the rules of the target platform.
Adding new features to the port:
On top of porting the game to the target platform, adding new features to the port can be a good addition to distinguish the game from the original version or to take advantage of specific features of the target platform, for example if you are porting from PC to mobile you can add specific levels that will require using the gyroscope…
We've barely touched the surface of video games porting in this article. Porting your game to different platforms means that more players can enjoy it. If care is taken when porting your game, you can end up with a product that doesn’t sacrifice the quality nor the fun of the original game.
We are a London based video games studio specialising in porting games to different platforms, performance optimisation, and co-development. We are expert in different areas of video games development including computer graphics and engine programming. We have the knowledge and the expertise to port your games to different platforms efficiently, and to help you develop state of the art techniques.