Releasing a Windows Universal Platform (UWP) Game for Xbox One


#1

Hi all,

We are working on porting a game that was originally developed for the Objective-C version of Cocos2d to Cocos2d-x and we plan to release it for Xbox One as a Windows Universal Platform (UWP) app. Our game concept has been approved by Microsoft under the ID@Xbox Program, which permits the use of a few additional Xbox Live features than are available under the Xbox One Creators Program.

I have spent the better part of the last two weeks investigating environment, build, configuration, and feature support that is available when using Cocos2d-x for UWP apps which I’ll share below, since I believe this is helpful for other developers with the same objective of using Cocos2d-x to power their UWP apps/games.

UWP apps are sometimes referred to in Microsoft’s documentation and elsewhere as Windows Store apps or Windows RT apps.

Looking for Advice/Help

First of all, I am looking for advice/help from existing developers who have commercially released a Windows 10 or Xbox One UWP app to understand if these apps have passed Microsoft’s certification testing and if there are any additional issues or considerations they encountered that I haven’t covered below.

Cocos2d-x Project and Build Environment

First of all, you should theoreticaly be able to use Visual Studio 2015 for all your development work, but this did not work for me. I discovered that deploying a Cocos2d-x UWP app to Windows 10 locally worked fine, but this version of Visual Studio would stop responding when deploying to the Xbox One.

The only configuration which worked (for me) was to first install Visual Studio 2015, then install Visual Studio 2017, open the proj.win10 cocos command-line generated sample app with VS 2017, retarget the solution for Windows SDK 10.0.14393, and keep the Platform Toolset as v140. Upgrading the Platform Toolset to v141 resulted in build errors.

It’s important to note that you must set the Solution Platform to x64 (64-bit architecture) as 32-bit builds (designated as win32 or x86, depending on the project configuration) are no longer accepted for UWP app submissions. Source: https://docs.microsoft.com/en-us/windows/uwp/xbox-apps/frequently-asked-questions

Xbox One Controller Support

I spent a fair amount of time investigating how to add controller support for UWP games using Cocos2d-x. There are a number of options, but for 64-bit UWP builds, the following solutions I came across have their own particular issues. This may not be a complete list, it simply represents those I attempted to use:

  1. GLFW - No plans to support UWP apps. https://github.com/glfw/glfw/issues/942. Also no gamepad rumble support, although it’s on the feature roadmap.

  2. Gainput - Currently no support for UWP apps. https://github.com/jkuhlmann/gainput/issues/34

  3. SDL2 - There is some UWP/WinRT support, I believe worked on by David Ludwig. https://discourse.libsdl.org/t/sdl2-build-windows-store-app-for-windows-8-x-10/21902

I opted instead for implementing custom controller code that uses the UWP APIs directly. A great place to start for those who want to get up and running quickly is: https://docs.microsoft.com/en-us/windows/uwp/gaming/gamepad-and-vibration.

For a working example, check out the GamepadUWP solution within the https://github.com/Microsoft/Xbox-ATG-Samples repository.

Xbox Live Integration

The best place to start for working examples on integrating Xbox Live support into your Cocos2d-x UWP game are the Xbox Live Samples: https://github.com/Microsoft/xbox-live-samples. The samples have all been recently updated to work with Visual Studio 2017, credit to Jason Sandlin for that.

Be careful with some of the other samples out there, even those referenced in Microsoft’s official UWP documentation, as I’ve found some that don’t deploy and work with the Xbox One properly. For example: https://github.com/Microsoft/Windows-appsample-marble-maze/issues/3

Durango (Xbox One XDK) SDK Support

Please note that the Xbox One XDK SDK, which is available to licensed AAA and Independent Xbox One developers, is not compatible with Cocos2d-x as it does not support OpenGL or OpenGL ES.

On the contrary, UWP (Windows Store) apps support OpenGL ES through the ANGLE project (https://github.com/Microsoft/angle) which Cocos2d-x already uses for API translations to DirectX.

Performance Considerations

UWP apps and games for Xbox One are not provided the full system resources that are available to games built directly for DirectX 12 using the Durango (XDK) SDK. This is an important consideration when evaluating the minimum performance requirements for your game.

UWP apps for Xbox One share resources with the system and other apps. The relevant details can be found here: https://docs.microsoft.com/en-us/windows/uwp/xbox-apps/system-resource-allocation

Additional Resources

Most of samples located at https://github.com/Microsoft/Windows-universal-samples should also work with Cocos2d-x x64 UWP games/apps, with a full disclaimer that I haven’t tried them all.

As discussed earlier, another great resource for Xbox One samples is: https://github.com/Microsoft/Xbox-ATG-Samples

Feedback Welcome

I’d love to hear comments from other developers who found this useful (or not) and also please let me know if I’ve made any errors, omissions, or misstated any facts.


Windows10 and cocos2dx-3.16
#2

@stevetranby do you have a few minutes to help out with this?

@rusty might you have a few minutes as well?


#3

That’s a lot of info. Probably nothing I know or have that could add to that. I have only released a game into the Windows Store, not the XBox store. I have run a few games and tests on the XBox One, and the latest updates should be such that the ANGLE renderer is fast enough for most of the games usually built with cocos2d-x.

If you have a specific question, I’ll track this thread.


#4

There was guys - who was making game on xbox and pc - they posted there greenlight also - cant remember them right now. Dark theme game :slight_smile: try to search in forum to try found them - using xbox keyword.