Quote: " if you want to support any controller, you need to make a control setup screen where you can specify which buttons do what, maybe even allow analogue axis controls or hat controls; digital controllers might not use standard joystick X and Y variables. "
Configuration screen is the best method for widest range of support.
Quote: "I think it's worth gathering as many USB controllers as you can and testing them, you'll soon work out what the common properties are, and what has to be specified by the user."
I like the configuration screen idea better.
That way, you don't have to own any of those controllers to support all of them.
Let your program and the user do all the work for you.
There are only 9 possible inputs for the joystick/gamepad anyway, being the Joystick directions (4 way) and 5 buttons.
So, the code necessary should not be long or complex.
Quote: "digital controllers might not use standard joystick X and Y variables. Take iCade controllers for example, like those mini arcade cabinets for iPad - they have a mind-numbing control method where pushing right for example mimics a single key press, and releasing right mimics a different keypress - so you have to use control states which can be tricky and would certainly require specific programming and data handling."
Detecting key presses is easy.
Quote: "... and dare I say it, iCade and other controllers have their users out there searching just for games that support it, and will buy a game based on that, disregarding even the worst review scores."
I was unaware of this, because I have never used iCade.
This is very interesting, and warrants further investigation, because this could offer a solid selling point.
Coding things my way since 1981 -- Currently using AppGameKit V2 Tier 1