Hi! In our latest blog post, we outlined the tasks we would start working on to publish the playable demo ofOuter Wonders on itch.io on April 2nd. We also mentioned that we want this demo to support 2 platforms: Windows and Linux. This week's blog post explains how we will make it possible!
Challenges of building a game for multiple platforms
Making a game for multiple platforms requires the gameplay mechanics and technology to be able to handle numerous cases:
- hardware-wise: multiple screen sizes and resolutions, various input methods (game controller, keyboard, mouse, touch screen), and hardware specifications (CPU, RAM, graphics card, etc.);
- software-wise: this is probably less known, but the game has to support various operating system versions (Windows 10, Windows 8, Windows 7, Ubuntu 20.04, Ubuntu 18.04, etc.), as well as various system component versions (DirectX, OpenGL, Vulkan, etc.), all of which are connected to the hardware specifications.
Supporting various hardware requires designing the game's mechanics properly, as well optimizing and testing thoroughly on each of the target platforms. But Outer Wonders is such a simple game that it is quite naturally fit for running on various platforms.
When it comes to the software aspects, though, the challenges are all about technology. In order for a game to run on a given platform, the game has to use the features provided by this platform. However, the diversity of platforms creates a diversity of features.
For example, a game released on Steam will most likely use Steam's own achievement and saving features. If the game is released for a console, it will probably use this console's saving features instead.
Overall, we could say each platform speaks its own language. However, we aim to make a single game that can run on all of these platforms! It is therefore necessary to speak all of these languages somehow, although implement this is very time-consuming.
Getting a game to run on multiple platforms
If you are to support multiple platforms, then it is best to consider it soon in the project. There are multiple tools for this, such as SDL2, that allow developers to use a single language for all platforms, but in order to so, you have to use this language from the very beginning, otherwise you will have to switch languages during the making of the game. Such tools, referred to as abstraction layers, are used as middlemen to translate requests expressed in this common language to each of the platform-specific languages.
In some situations, this may not be enough, though. Even if the core features necessary for all games (graphics, sound, etc.) are exposed by abstraction layers most of the time, some other features are still absent from these tools; in such situations, it is often necessary to deal with the nitty-gritty yourself, which means creating a new abstraction layer for the missing feature, by speaking each of the platform-specific languages directly.
We had to resort to this for some minor features of Outer Wonders, such as retrieving the list of languages spoken by the user, which is necessary to display the game's interface in a suitable language automatically (this means that, if your system's language is set to french, the game's interface will be automatically shown in french without having to go to the game's settings!).
As of today, we are able to run Outer Wonders on many different Windows-powered computers, including those running… Windows Vista. Yes, you've read that correctly. Here's a screenshot of the game running on a Windows Vista-powered computer dating from 2007.
It turns out that, on Windows, Outer Wonders speaks a language that Windows Vista could already understand back when it was released (for instance, the game can use Direct3D 11 for rendering), making it compatible with this operating system.
We've also worked on Linux support. We still have a bit of work left to do here, but testing on Ubuntu showed that we already have basic support implemented for such systems.
And this concludes this blog post! Follow us on Twitter, Facebook and Instagram to read our news and play weekly puzzles! Subscribe to our RSS feed to keep informed about our latest blog posts. A Discord community server is also on the way.
See you soon!