Wednesday, 3 August 2016

Steering Wheel Support in Forza Motorsport 6: Apex (and any other UWP application)

Since Turn10 released the Forza Motorsport 6: Apex demo, there has been quite a lot of noise, rumors, and opinions about the lack of support for steering wheels like Logitech G27, G29, Fanatec, and so on.

Sites like this or even the official Forza forums have tough debates about the issue. Some users complain about Microsoft not caring about PC gamers, or even talking about a conspiracy to force us to renew our controllers (or to buy XBox Certified devices). Leaving conspiracies aside, most people wonder why a PC game has no support for steering wheels, when the controller is perfectly detected and configured in Windows.

Truth is there is no conspiracy... The answer is simple: UWP

What is UWP and why should I care? 

UWP stands for Universal Windows Platform.

Apps developed as UWP can run in any device (PCs, XBox, Phones, ...) and can be published in the consolidated Windows Store. You know, the famous convergence:one OS, one Store... So, it has its advantages (big advantages, to be honest).

Why does that affect to Forza? Guess... Forza 6: Apex has been developed as an UWP. Probably as part of a marketing campaign to push the platform forward, or maybe because Turn10 really saw the benefits of UWP. Who knows.

The thing is that UWP-compatible APIs currently offer no single way to do proper controller input, besides Gamepads. And that's probably the main reason why Forza 6 has been released as BETA until now. Because they knew they didn't have a chance to offer support for steering wheels.

See? No conspiracy. It's just a technical limitation.

So, will it be fixed?

Short answer: yes.

Long answer: a bit of history first...

To make your apps compliant with UWP, you cannot use certain old technologies that don't follow some of the current standards. One example of those technologies that are no longer valid is DirectInput.

DirectInput is a quite old piece of technology that hasn't received updates for many many years. And yet it has been the only way to get decent access to certain types of controllers, until now.

Even the Logitech Developer Labs has been using DirectInput to build their SteeringWheel SDK up to date (this screenshot has been taken today):

As a developer that has been working with DirectInput for more than a decade, I have to say that it had its charms: it was extremely open to literally ANY kind of device. But it had its drawbacks too (like a quite difficult learning curve). So I agree it needed a replacement that complies with current development standards.

That's what Microsoft has been trying in the last few years: to find a decent replacement for DirectInput. With no luck, I have to say. They created XInput, which was meant to be that replacement. Or at least that's what they promised, but the truth is that it never received enough attention to become that. It never got any kind of support for game controllers besides Gamepads. So, it never was an option for Joysticks or RacingWheels.

Some time ago, we heard about a new API called Windows.Gaming.Input. And again, it was described as the way to go now.

We (developers) were a bit skeptical about that, because it sounded too familiar after the XInput promises. And things got only worse when we could start testing it out, and again it only offered support for Gamepads.

That has changed now with the release of the Windows 10 Anniversary Update. and the corresponding Windows 10 SDK - build 14393. Both publicly released today.

So, is it fixed yet?

No, but at least the tech bits needed are there.

The Windows.Gaming.Input namespace now includes all the classes necessary to read from a wider selection of devices, including ArcadeSticks, Gamepads, HeadSets and RacingWheels (surprisingly no Joysticks by now).

I´m sure that now that the update has been released, and UWP apps can read from Steering Wheels, Turn10 will release an update to Forza 6 soon. Maybe it even exits the BETA stage, who knows.

What Steering Wheels will Forza Support?

As far as I know, Forza should support the same range of devices supported by the API. And according to the API documentation, the currently supported list of steering wheels is:

Supported Devices

RacingWheel supports any Xbox One certified or Xbox 360 compatible racing wheel without force feedback support.
Force feedback is supported on the following device models:
MOMO Force Feedback Racing Wheel
RGT Force Feedback
HID-mode for the Xbox One
So, the wait should be over soon! 

Be patient, and wait for the Forza update... 


1 comment:

Huli NationLLC said...

Great post, I've been searching high and low for information about the new UWP steering wheel/Ffb situation. I finally ran into the API documentation earlier and then your post. I have a Xbox one app I want to attempt making that would need access to forcefeedback through I believe the above API's but it was very unclear as what the current status truely is. There is a page right after the one you site on the API that says that Force feedback wheels are currently not compatibly with windows 10. But I know that Forza 6 apex just got forcefeedback wheel support. I have a Xbox one compatible Logitech 9290 I plan to test and base my app off of but Im just not sure if it's possible yet to truely access the force feedback motor and its properties on a "Xbox one" UWP app yet or not??? The way Microsoft wrote those remarks about compatibility are very vague and seemingly contradictory to each other. Plus they may be old and need to be updated if they actually do now work. Any thoughts?? Thanks