How to Develop for Cross-Platform

Hey guys,

the current work on our learning AI for Project Aleron is coming along nicely, but we won’t have anything exciting to show you until next month. We have a big update coming!
In the meanwhile, we want to bust a common myth in game development: “Cross-platform development is expensive”.

This is incorrect and we want to give you insights on how to support multiple platforms (desktop, mobile and console) without large costs and why people think that cross-platform development is expensive.
In the second half we offer testing advice and recommend cheap hardware.

 

Ports are Dangerous

Most developer develop their game for a single system and begin “porting” it when it is nearly finished. This introduces new requirements at the end of development. A (not so) secret knowledge of software engineers and project managers is that late requirements can destroy any project.

Graph showing the steep cost increase for requirement changes in later development stages.

Many games have fell into this pithole after announcing a linux release. GauntletDivinity: Original Sin and Contagion are recent examples of games which had problems completing their linux versions due to various reasons. After all, these studios have years of windows experience but cross-platform is completely new terrain for them.

We want to help you avoid these traps and help you begin your successful cross-platform journey 🙂

The Cross-Platform Mindset

When you plan to develop a cross-platform game, you should use a game engine which can cross-compile to your target platforms. Furthermore, you must pay attention to a some points.:

  • Aspect Ratio – You will encounter anything from 4:3 to 21:9
  • Screen Size – Smartphones, tablets and desktops. 4 inches to 40+ inches.

These two points can easily be covered by emulating different screen sizes.

  • Audio & Video Codecs – The supported codecs differ by platform.
  • Platform-Specific Social Features – The interfaces and functionality differ by platform.

Desktop

Thanks to Valves SteamPlay, it has become more common to release for the three common desktop platforms. While it’s out of question, that Windows has the largest market share, OSX und Linux users prefer to buy games for their platform to support the development.

The input methods are nearly identical among the three platforms.  However you must pay close attention to the compatibility of third party plugins and frameworks. Apart from that, the important differences to test are:

  • Filesystems differ by platform. Even the path syntax is unique for windows.
    • Windows – case-insensitive, home directory: C:\Users\Dude\
    • OS X – case-insensitive, home directory: /Users/Dude/
    • Ubuntu/SteamOS – case-sensitive, home directory: /home/Dude/
  • GPU Drivers – Intel, AMD and nVidia drivers differ by platform. You must test the functionality (e.g. shader model version) and compatibility early (we’ll cover testing later). Testing compatibility & performance too late can result in a case like the Linux version of “Middle-earth: Shadows of Mordor”, which only supports nVidia GPUs.
  • Does your game integrate into the platforms’ window managers correctly? (minimize, fullscreen)

Mobile

On mobile you will face other input methods, which you must bring together with the desktop input. This category has the most versatile display types you will see. Here are the special differences between mobile platforms:

Consoles

Disclaimer: Everything regarding the console devkits is under NDA. Thus we cannot tell you if we ever had any console devkits. All information we are giving you here is publicly available. We will decline any questions about devkits. Sorry 🙂

The current console generation has hardware similar to desktop computers, but an app-ecosystem similar to mobile devices. We will talk about devkits in the testing section below.

The console platforms have the following differences:

  • The consoles support different shader languages:
    • Xbox One: HLSL (Direct X 11)
    • PlayStation 4: PlayStation Shader Language (GNM, GNMX)
    • Wii U: ??? (GX2)
      Unity only: GLSL shaders cannot be cross-compiled
  • Games usually run in a sandbox, which limits your filesystem access rights
  • Don’t forget unique periphery, such as Wii controllers

Cross-Platform Playtesting

Devices are expensive. Especially as an indie developer, buying all possible systems is just not possible when you start. However, if you follow the tips we gave you above, you only need a minimal testing environment at first.

If you are not developing native cross-platform multiplayer (floating point synchronisation), you only have to make sure that your game starts properly on all systems at first.

If you use Unity, Java or other cross-platform environments, you can assume that the cross-compilation / virtual machine will keep your game logic consistent across the supported platforms (unless you are doing something very exotic).

It’s good practice to randomly choose which system you test a new feature on, because the platform should not matter for testing game logic.

Before releasing any version of your game, you should definitely test it on each target platform. It’s quite embarassing to forget a small dependency which makes your game crash.

Minimal Testing Environment

Disclaimer: We are located in germany, so all prices are based on german retail prices (updated october 2015).

Let’s assume that we are developing a game with Unity 5, which takes care of many cross-platform issues (e.g. different texture formats).

Our potential target platforms are:

  • Desktop – Windows, OS X, Ubuntu/SteamOS (Linux)
  • Mobile – iOS, Android, Windows Phone 8.1
  • Consoles – Xbox One, Playstation 4, Wii U

We want to reduce the amount of devices which we have to buy, but still be able to playtest our game properly. By using the tips from above we will recommend you an initial testing environment for less than 200€ (Hardware listed in the next sections).

Desktop

These platforms are somewhat similar. If you follow our advice from above, you can use your development machine for testing at first. You can install linux on your Windows (or OS X) computer to test your game on a case-sensitive and a case-insensitive system. You should also make sure that your game runs on Windows (or OS X) and Ubuntu Window Managers correctly (minimizing, fullscreen).

These platforms offer similar periphery, supporting keyboard/mouse as well as controller input. We recommend buying an Xbox 360 controller due to the “plug’n play” support on Windows & Linux systems. For a Mac, you will need a driver.

Recommended “initial” desktop setup (30€):

  • Your development computer (If it runs on low graphics, its enough)
  • Xbox 360 Controller (~30€ new)

Mobile

While mobile devices all share the same touch-based periphery and sensors, their OS differ greatly: File system access differs between iOS, Android and Windows Phone, so you want to test all of your file operations before publishing.

In order to get started, we recommend buying the cheapest touch device available with a qualcomm quad-core cpu and 1GB of RAM.

Recommended “initial” mobile setup (70 – 150€):

  • Windows Phone – Microsoft Lumia 532 (We bought one new for 70€)
  • Optional: The cheapest Android tablet is the Amazon Fire (75€)

Consoles

When you are developing a game for consoles, you should be fine with a computer and a controller (Xbox 360 controllers work on Windows and Ubuntu/SteamOS out of the box).

A common topic is the price of console devkits. While Sony and Nintendo keep quiet on prices for PlayStation 4 and WiiU Devkits, the Xbox One Devkit is available free of charge if Microsoft approves your game idea.
We recommend first applying for a free XBox One Devkit and then grab the other Devkits later (Devkits are usually pricey).

Console manufacturers will expect you to sign a contract along with an NDA. Read these two documents very carefully. The contract might include information on how long you may have a Devkit and other important information about your game’s release and publishing!

Complete Test Environment

Before you release your game on all platforms, we have to test it on real hardware. The following setup will cost around 2350€ including Apple OS X and iOS. Of course you can save money by abusing your friends’ systems for occasional testing, especially Apple hardware! 🙂

For comparison, the Windows-only version of our complete desktop setup only saves the 500€ for the Mac Mini.

Recommended “complete” desktop hardware (~ 1630€):

  • PC with an AMD A10 CPU with integrated GPU with Dual Boot: Windows 10 & Ubuntu 14.04 (~ 400€ new)
  • PC with an Intel CPU + integrated GPU + dedicated nVidia GPU with Dual Boot: Windows 10 & Ubuntu 14.04 (~ 500€ new)
  • Mac Mini (MGEM2D/A) (~ 500€ new)
    • If you are really rich, get one Mac with an nVidia GPU (1500€+ on ebay) and one with an AMD GPU (~ 2000€ new)
    • “Hackintoshs” are illegal. No discussion needed.
  • Xbox 360 Controller (~ 30€ new)
  • Two Windows 10 licenses for the PCs (~ 200€)

Windows 7 and Windows 8.1 will continue to have a great marketshare, so you should make sure that your game starts and runs on these older OS too.

Recommended “complete” mobile hardware (~ 695 €):

  • Windows Phone: Microsoft Lumia 532 (We bought one new for 70€)
  • Android: Motorola Moto G first generation (~ 150€ new)
    Windows only: You can purchase a Nexus 5 for better driver support (~ 320€)
  • The cheapest Android tablet is the Amazon Fire (75€)
  • iOS: iPad mini 4 (~ 400€)

By purchasing the Lumia 532, Moto G, the Kindle Fire and the iPad mini 4, you can test on the most important aspect ratios and screen sizes, while also covering all major mobile OS. Keep in mind that most workflows require a Mac to deploy for iOS.

Conclusion

When we first began developing cross-platform software and games, we were surprised by the benefits for our codebase, because cross-platform code contains less assumptions about the underlying operating system. With modern engines like Unity 5 cross-platform development is more accessible than ever before.

Feel free to ask us questions about cross-platform development or linux development in thecomments section below or in social media 🙂

Benjamin Justice

I am a software developer, currently working for swiss web agency Namics. As for game development, I am very interested in the graphical bits such as shaders & co. Fluent in Java and C#, I also know basic web development and maintain our website. Furthermore I enjoy making music and create songs for our games on rare occasions.

zanval has 16 posts and counting. See all posts by zanval

5 thoughts on “How to Develop for Cross-Platform

  • October 28, 2015 at 10:42 pm
    Permalink

    Question: Why Windows 10 for testing setups? Shouldn’t testing pc have also Win8 and even Win 7 ?

    • October 29, 2015 at 7:54 am
      Permalink

      If you understand enough about computer to install 3 Windows Versions next to eachother, then yes, definitely!

      However, some people might find this difficult, so we recommend testing Windows 7 and Windows 8 on friends’ computers.
      It should be enough to test the major features once on the old versions and see if the frameworks behave well.

      We believe the most recent OS version is the most important when it comes to longterm stability.

    • October 29, 2015 at 8:01 am
      Permalink

      We do not have experience with Xamarin development. Using it for cross-platform apps sounds tricky, because mobile users expect native look and feel.
      However, this does not apply to games 🙂

      I believe that the cross-compiling of Xamarin works well and the output is reliable, so go for it!
      It’s most important that you feel comfortable with your development environment.

  • October 29, 2015 at 9:00 am
    Permalink

    Hi Benjamin! We’re starting out gamedevs from South Africa, just wanted to say hi and I really enjoyed this article. Sadly we’ll pay quite a bit more here in SA for a full development setup like you mentioned above, but it’s nice to see what you can make do with 🙂

    We also develop in Unity, which makes it technically really easy to push to lots of platforms, but yes, you need something to test it on…

    Cheers from SA!

Leave a Reply