briankendall / devreorder

A utility for reordering and hiding DirectInput controllers
315 stars 30 forks source link

Device order not working - but hidden/visible working... #46

Open IstanbulRed opened 2 years ago

IstanbulRed commented 2 years ago

Thank you so much for this great bit of code. This has long been problem for many people, including myself, so I was delighted when I finally came across a solution such as yours.

I do have a bit of a problem though, so I hope you can help.

Nothing was working at all, so I went through the steps of applying to entire system (ie editing the ownership of the DLLs etc). This then made the visible/hidden section work correctly.

Specifically, I am trying to get this to work in Retroarch using the Retrobat front end. I have placed the 64bit dinput8.dll in the folder with Retroarch.exe as well as the main Retrobat and EmulationStation folders just in case.

I have many controllers but I am testing with 3 - a PS4 controller (wireless but connected via USB), an 8BITDO SN30 Pro and a generic USB Gamepad wired. The PS4 controller always reverts to P1 in Retroarch no matter what I do.

I have tried using both the device names and the GUIDs in the devreorder file. It doesn't appear to make a difference to functionality. I am using Windows 10 Pro 64bit.

If you can offer any advice as to what I am doing wrong, I would be much appreciated. I feel I am so close to solving a problem that has plagued me for years, but am obviously doing something wrong as many people have had great success with your code. Thank you for your time and help.

IstanbulRed commented 2 years ago

I do apologise. Your code works brilliantly. It works for everything except Retrobat - Retrobat (using EmulationStation) seems to totally ignore DEVREORDER for some reason. I am trying to get to the bottom of it. I have no idea why it does this. But DEVREORDER is working very well on everything except Retrobat - thank you for this excellent piece of code.

briankendall commented 2 years ago

Thanks for the complement, and sorry to hear it's not working in one critical app on your system. Many users have reported the odd app or game not being affected by devreorder, even after installing it system-wide, and so far I haven't been able to find a method to support them.

Just to get simple explanations out of the way, Is it possible that Retrobat / EmulationStation is trying to read your controllers using XInput instead of DirectInput? I know that's unlikely for PS4 controllers, since they usually don't appear as XInput controllers without extra software such as DS4Windows, but I thought it would be good to eliminate that possibility first.

IstanbulRed commented 2 years ago

Hi Brian, thank you for the help. This is something I will look into. I confess to not knowing much, but I am eager to learn. I believe Retrobat/Emulation station uses SDL2 to manage inputs? Does that make any sense?

I have also posted here on the Retrobat forum if this is any help; https://retrobat.forumgaming.fr/t947-retrobat-emulation-station-overriding-retroarch-controller-settings#5399

Retro gamers love having a million different controllers and inputs to make everything feel that little bit more authentic, so I think DevReorder and Retrobat would almost be the killer app for retro gaming if I can get it working together. Add in the emergence of Windows based handhelds like the Steamdeck and it becomes even more important, especially if the user wishes to deploy those devices as 'home console' type devices as well.

briankendall commented 2 years ago

It using SDL2 makes sense, yes, and I took a quick peak at the source code for EmulationStation to see if I could gleam anything from it, but from a cursory glance I'm not sure if it's using DirectInput or XInput. SDL2 supports both, but I think it's DirectInput, and I believe other games that use SDL have worked with devreorder before.

Since you're eager to learn, I can add that DirectInput and XInput are the two main ways that games read input from a controller. DirectInput is the older way that's still supported by Microsoft, and it allows reading buttons, joysticks, d-pads and such from a very wide variety of controllers with any number of layouts. XInput is meant specifically for controllers that have the same kind of layout as an Xbox controller, and not every controller supports it. XInput tends to work better with controllers that do support it, since their order is usually easy to predict -- the first controller that gets turned on is controller 1 consistently. DirectInput is the one that has the issue with everything always getting mixed up and out of order.

Hopefully someone in the forums can give you some good advice on how to get things working. If you do find something, I encourage you to share it here since I'm hoping the issues here can double as a sort of knowledge base, for when others have the same problem as you.

woshiagan commented 1 month ago

Hello, I have a question. If I am running multiple games, can I use different controllers to control different windows

briankendall commented 1 month ago

@woshiagan If you have a question that's unrelated to this issue, please open a new issue. I think what you want is possible and I'd be happy to discuss it in the appropriate place.