Posted On May 26, 2014
First off, sorry that it has been a while since I blogged. But here’s what I’ve been up to:
- Designing and prototyping
- Trying get trademark stuff in motion
- Banging my head against the wall with all this controller support mischief.
As I mentioned last time, I had been playing with a Unity plugin trying to get the multi-controller stuff working. In its defense, InControl does exactly what it advertises: It standardizes input mappings for various platforms for common controllers. Unfortunately it’s built on top of what Unity provides, which is broken and incomplete on multiple platforms.
Unity does a lot of really great stuff. The tools are amazing and cross platform support is awesome. But in this one area, it is sadly lacking. It’s sad for me specifically, as this is the area that is most important for what I’m trying to do: Local multiplayer. So I’m back to square one.
Square one in this case is writing a library to support multiple controllers reliably, even if in a very basic way. At a bare minimum, I need to be able to run through a list of connected controllers, and check the buttons and sticks of each one. I can do all the button down/up/hit checking myself if I have to. I can do all the button mapping myself if I have to. But I have to be able to use the controllers that are plugged in reliably.
The challenge here is split into two parts:
- Getting old reliable USB controllers supported
- Getting fancy newer controllers working (ie Xbox 360 controllers)
The short version is, Microsoft created a totally new way to support controllers for the Xbox 360 and naturally wanted Windows to support this as well. Unfortunately for everybody, the old way of doing things isn’t supported any more and the new way, XInput, doesn’t allow for more than 10 buttons, more than 4 axes, or POV. Worst of all, it doesn’t allow more than 4 controllers, which is really a sad limitation on the Windows platform. Why make a new standard that is less capable and not backwards compatible with the old standard?
So while of course I want my game to support the super comfy and well designed Xbox 360 controllers, I can’t ignore all the USB controllers out there and I really want to support more than 4 players locally. This means I can’t release on Windows store (they only support XInput) and I have to do more work to make all these controllers play nice.
Why isn’t this on the Unity team’s radar? Well it is, but it’s a small blip, and they have a lot of larger, multi-platform fish to fry. Compound all the trouble it is to do this right on Windows with trying to support Linux, Mac, Android, iOS, Windows Store, Blackberry, Web, PS3/4/Vita, Xbox 360/One, WiiU and 3DS and I can understand why this may not be their favorite issue to work on.
The bigger question is why Microsoft would make the Windows platform more limited than it used to be.