-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Durazno does not work on Metro Exodus. #52
Comments
For Durazno to work, the game has to use the XInput API to get input information. I've been having troubles even with Unity games as their input system might try XInput to see if there's a controller there, but the actual input information is then aquired through a HID interface bypassing the API. I would guess Metro Exodus is not using XInput directly at least, probably the Steam input API and maybe some exclusive HID code for the DualSense. If it's using the Steam input API though, you can customize your input from Steam itself, it's something at least. |
Can it be that OP is using the UWP version of the game binary? How those fare with DLL injection nowadays? |
I've found out that Metro Exodus, is PS5 DualSense compatible only on the Enhanced edition, but still the normal installation of the game, has the option to select either Automatic, Xbox, PS4 or Switch controller inputs and changes the button prompts accordingly, so you're definitely right, they must be using some kind of exclusive code, like you've said, which I believe has back-fired a little, since the game feels unresponsive and has terrible input lag while opening the weapon or item menus. Even if you compare it to the other 2 franchise games, that had big problems with controller implementation also. You had to use only the second controller profile and crank the sensitivity to maximum, in order for the FOV to turn in a satisfying speed. I can't believe how they've managed to migrate the same buggy behavior, on their 3rd game. It does seem to use the Steam input API, but as much as I've tried, I was never able to recreate the low Deadzones(5%-6%) feel, and I believe there is no way to achieve the results you have, while cranking negatively the Linearity option on Durazno, so I don't use it and favor Durazno instead. What does using the UWP version of the game binary mean? What I now find disheartening, is that they are changing the way they are implementing controller input/output, to cater to more Official controllers support on PC. Will this be something, that will drastically limit the abilities/compatibility/functionality of Durazno, in the future maybe? |
Definitely. To me, Durazno has been useless since quite some time. The solution I use currently is ViGEm as I only have a cheap USB controller without XInput support. This tool creates a virtual controller and you gotta make a client to fill its input data with, I gain XInput support and also support in games that use USB HID directly. You also need another driver/filter to hide the source controller and avoid double input in some games. So I think that's where the solution is, driver based customization as games have moved to use HID for specific controller support.
Games on the Windows Store are UWP applications, Universal Windows Platform application using the WinRT API. It used to be quite the secure environment in how to handle games to the point of making them impossible to mod, or very hard to. I remember some old talks about relaxing the restrictions a bit to allow for some modding in the future, but I don't know how it's been. Maybe they just allow WinAPI as well in the Store, but UWP versions would still be restricted? No idea. Anyhow, if you had been using the UWP version, that would've been it. |
I'm a bit gutted, that is bad news for me. I always gave each game some borrowed time, to see if I would like the default settings, and most of the time, I ended using Durazno. Not only that, but I love the simplicity it has, I tried Durazno2, but found the extra settings a fuss to master, and eventually not substantial, for the simple task I wanted them for. The solution you describe is a bit tech-savvy for me, but from what I understand, the solution would be to manipulate the input before it reaches the Game Engine. What can you do, I hope that alternative solutions to Durazno, that apply to the majority of games will come up, because I have never coped well, with the default settings of games, and not being able to manipulate that, ruins the experience each one has, a lot.... |
Hello again. I did some tests with the "Dependency Walker" tool, to find out the changes made to the Metro Exodus Xinput9_1_0.dll file, while using Durazno on it, maybe you can detect what the problem is? Those are the results on the Metro Exodus.exe file, without any Xinput wrapper: Those are when I "paste" the latest Durazno version with all the DLL files, but the ones that come as default on the zip file, not the ones that are in the x64 folder. It clearly detects a problem as it becomes red and does not recognize it as a x64, which I understand is normal: And those are the results when I "paste" the DLL files onto the games' directory, from the x64 folder on the zip file instead: It looks like it is seemingly working. The problem is that as soon as I "paste" the x64 DLL files to the game's folder, I see that on Durazno's test option, the upper screen(the one that shows the real controller input) stops working. This doesn't happen when I "paste" the default DLL files from the zip file, like I mentioned earlier. Could that be where the problem originates and not on the game itself? For other references, here is the Metro Exodus game with x360ce attached to it, which works just fine: The Xinput1_3.Dll entry on "Metro Last Light"(the previous Metro game) before Durazno: And after Durazno, which works just fine: Please, I would appreciate it, if you looked into it, when you find the time. |
I'm afraid the only useful information is that x360ce seems to work, it is a more advanced program though. The GUI tool not working is because it looks for So just to be clear, the issue is Metro Exodus or Metro Exodus Enhanced Edition, or both? Does x360ce works well in both? A log from it might be useful. Otherwise, I would need to run them in a debugger and I don't even have the specs for that. I guess I could take a look at the exe files, try uploading them and I'll see if I understand anything. |
So what you are saying is, that even if the GUI on the test option is not displaying something, it has nothing to do with whether it will work or not, it will just not display the default inputs? I have only Metro Exodus installed, I don't have the PC "horsepower" for the Enhanced Edition. For some reason, only the TocaEdit version of x360ce works, It detects all the changes, but since I use an Xbox one controller, it has the known problem with the triggers not registering, when both of them are pressed simultaneously. Another Xinput wrapper that works is XinputPlus. I've tried Durazno^2 and Jocys.com x360ce also, but neither of them work. For the last subject. I've sent you an email, on the address you have disclosed here. |
XInputPlus is quite the advanced wrapper and like x360ce also have some tricks to increase compatibility, like hooking. Durazno is a trival thing in comparison. Odd that only the TocaEdit version of x360ce works, github shows all its changed have been merged upstream after all. Maybe there's something interesting there.
Yup. The GUI tool only uses
I gave it a look and the XInput usage is quite simple, but the input function has a Steam function right in the middle of it and that's all I can make sense of it. So maybe there's something tricky going on with that and the hooking methods of XInputPlus and x360ce make it work. |
Yeah, but none of them have the minus/plus linearity option like Durazno has. To tell you the truth, I had a lot of problems with Jocys.com x360ce, and I never finished the process, to see if it will eventually work with it. It needs to first download the Virtual Gamepad Emulation Bus and the HID guardian, and afterwards the color of the controller it detects remains yellow, and it doesn't let me map the buttons at all... So I stopped messing with it, since the settings are identical with the TocaEdit version, and they didn't satisfy me at all. Last night, I was experimenting with Deadzone, Antideadzone and Custom curves on Steam, and I had left it with those settings on. I just removed everything that has to do with controller settings from steam, and emailed you the new link of the *.exe file again, hope this solves that problem. By the way, Steam settings are garbage, even with a 0,02% Deadzone, 20% Antideadzone and a more responsive thumb-stick curve, it feels mushy. Lastly, you didn't specify what log you need me to send. |
The input function that deals with XInput seems to be the same in the new file you sent, so no change there. Was it supposed to be a previous version? If so, I saw no difference.
That's what I've been doing manually for myself. I remember latest x360ce moved to that solution but there should be a previous version still available with the old wrapper.
Anything the tool you're using has to offer. You would need to check its documentation and see how to enable logging and where it places the file, etc. Set it to maximum level, start the game and reach a menu or something and exit. That should be enough I think. |
While |
I only ran it a few times but I remember thinking it was quite the featured tool. There's some graph to edit the axes perhaps? |
You don't adjust the axis parameters via a mouse-driven graph no, but there's a real-time display of the input and output gamepad data in the form of a circular joypad: It also can load x360ce DLLs via proxy as seem in the screenshot. Screenshot is from my real usage of "Tomb Raider Legend" that I was playing not too long ago using a "Logitech Rumblepad 2" and x360ce as DInput proxy. |
When I first sent you the *.exe file, I had Steam's "Xbox Configuration Support" enabled, in the Metro Exodus steam menu I had "Steam Input enabled" for the Game, and I had made changes from the Steam "controller configuration", on the Deadzone, Antideadzone and had customized the thumb-stick's curvature. In the second file I've sent you, I had reverted all the changes to default, disabled the in-game "Steam Input enabled", but now I see I've forgotten to disable Steam's general "Xbox Configuration Support". Do me a favor, I am going to send you the Metro Exodus.exe file again, now I have disabled everything that has to do with Steam. I am going to send you the Metro Last Light.exe file also, Durazno works fine with it, and I have now the same Steam settings for both games. If you still find the presence of Steam you've mentioned, on Metro Exodus but not on Metro Last Light, then that must mean, that steam has changed its settings for handling controller implementation on newer games, that in some way prohibits Xinput wrappers from working, without having to hook on the game first, in order to bypass it. The Jocys.com x360ce uses Virtual Gamepad Emulation Bus and the HID guardian, the TocaEdit x360ce is the older version and does not. I used "Dependency Walker" on Metro Exodus, and saved it on *.dwi format. I've sent it to you, via an email, with the link to download the Dependency Walker program, if you do not have any other way to open the file. Furthermore, It has the option to save it as a Text( *.txt), Text with Import/Export lists( *.txt) and Comma Separated Values( *.csv). I've sent all those files to you also. |
Garoto: As I've said, I mess with the default controller settings only for FPS games. With the settings I've mentioned on Durazno, I can Quick-Scope effortlessly, as I can perform with it perfect small circles and micro-adjustments on the fly. Unfortunately, I could not replicate the same results with any other wrapper, I've tried. |
I think you've been sending me the very same As for a difference with the other |
OK, I was indeed under the assumption, that changing the Steam settings would somehow change the *.exe file. The encryption part got me thinking, and after some search I found out, that Metro Exodus was using Denuvo, the anti-tamper software when it first launched but has since dropped it. Maybe now they are using some other kind of encryption method of their own? But again, the question is, how does x360ce and XinputPus manage to bypass it? |
Didn't seem like it, the platform DRM would be good enough at that point I think.
Probably hooking, that's why I was interested in logs. |
If you eventually find anything of help, with the logs I've sent you, notify me, please. I know you've said that Durazno is useless to you for quite some time, and implementing a hooking method on it, will be a bit difficult, since you don't know the process yet. |
By logs you've sent, do you mean the "Dependency Walker" data? If so, I'm afraid that's of no use. It's a useful tool to check if you're missing some file or similar. What I was interested in was logs from the tools that worked for you, x360ce and XInputPlus. I don't even know what logs can those tools provide but at most it would only help to confirm if hooking was needed, that is all.
Learning hooking has been on my todo list for ages, but there's always something else that takes its place. In the case of this issue though, I would need to run Metro Exodus myself to see what it does and if whatever I'm doing works. That's another problem as not only I don't have the game, I wouldn't have the space to install it nor the specs to even reach the menu (has a fancy 3d menu it seems), if it could run at all. So the chances of me working on it are very low, and if it happens it would be in a long time. Thus, I suggest you try and make other tools work, XInput Plus seems the better fit. You could even try and bite the bullet with ViGEm and HID Guardian, which new x360ce uses I think. This creates a new virtual x360 controller, so your customization could be applied globally without having to tinker with each game. |
Excuse my ignorance, I thought those files would help. I found out that x360ce keeps all the log files to "c:\ProgramData\X360CE", but because I have experimented a lot, with both the x360ce versions and did not know what action I did had eventually worked, I decided to remove all the files that were inside the folder, to monitor what the two different versions of x360ce create inside it. And somehow I am currently not able to make any of the two versions work with Metro Exodus. I will continue experimenting, to find out what it needs to work. On the other hand, I found what makes XinputPlus work: This should theoretically work, but it does not. You need to also go to the "DirectInput" section and tick enable DirecInput Output and press Apply again. This creates two extra files in the games' folder, named Dinput.dll and Dinput8.dll. Those two files are the key factor. Since I cannot find any info where XinputPlus creates any log files, I've sent you all the files that it created inside the Metro Exodus Folder, hope I won't waste your time again, and they will be of some use. For some reason, It cannot currently remap buttons on the controller, but the Thumb-stick modifications work just fine in the game. |
What I would like to say is, do not abandon Durazno altogether. In my opinion, it is a great app that has made my, and I believe other users gaming experience a lot better, and I know that I tend to repeat myself, but out of all the Xinput wrappers I've tried, I had the best results with it... For me, It has worked fluently for years, it just needs a little refreshment, to catch up with the changes the new games have done, and maybe try to find the time to learn how to apply a hooking method to it. From what I see, it would be preferable to take the Xinput Plus implementation as an example, because it was very easy for me to make it work with Metro that is a game made in 2019. The x360ce method needs to install a Virtual Device and HID Guardian, but still did not work right away, I have to search now what extra steps it needs to work like it did before.
You are right, I have a fairly old system too, and I can only play it on 1600x1900 with a lot of Graphics set to low, and it needs to install around 77,7GB on the drive. |
The files you sent are just the files needed for XInputPlus to work. A log file is usually just a text file, maybe with a I did remember with the ini file that you can specify a proxy dll file as @garoto mentioned previously. It's meant for x360ce it seems but maybe you could try and point it to Durazno instead. The Durazno dll file should be in another path but I think the
It's the most bulletproof solution but the most tricky and expensive to create (it's an actual driver for once and it also requires a costly signature). And so with the hard work already done by ViGEm, the customization is then done through a client program. I've made a client for myself, it works, but is completely user unfriendly and unusuable beyond my setup. I was thinking about making a client others could use but their new and improved hiding tool requires Windows 8.1+, the latest driver requires Windows 10 and I'm still using Windows 7 so that was that. |
I apologize again, I have no implementation or IT knowledge whatsoever...
I will try to experiment into that direction today when I find the time. Maybe @garoto if you are still with us in the discussion, you can describe the process a bit, if you remember it?
To my narrow knowledge as a user and nothing more, when I tried it on x360ce, it isn't user-friendly and hasn't worked for what I needed it, up to now. Do you know what the Dinput.dll and Dinput8.dll files stand for? Maybe if you implemented Durazno to create, read and use those files to its advantage, it would be a first step in that direction? Up to now, I never needed hooking for any game, but I have older games in my Library and the only new one is Metro Exodus, which has that problem I've described, But hooking on it doesn't work, and those two files work, so I don't have a formed opinion. Durazno^2 has some kind of hooking mode, but it doesn't work also.
Microsoft used to offer Windows 10 to all people that had older Windows versions. I had Windows 7 too and upgraded to Windows 10 with this offer and have them now registered free to my name. I very recently read that although the offer has officially "ended", some users can do this up to today. It is also rumored that Windows 11 will provide the same offer to older Windows users. (Microsoft is going to do a presentation for Windows 11 today at some time in the US). Although Windows 7 and 8, had far more complex capabilities and were not spying the user so much, so do a research for your favorite apps before upgrading... |
No problem. Other than reporting if a game doesn't work there ain't much a user can do unless you go down the rabbit hole. And even then, it would only be to say "Yup, won't work."
But it does have a UI, it does let you configure some things, it's usable with more than a single particular controller and... doesn't BSOD your computer. I think that counts as quite user friendly to me.
Those are the dlls for the DirectInput API an older and more complex API to handle input, it was set aside in favor of XInput when it showed up. While XInput is quite simple since it's meant for Xbox controllers, DirectInput was used for all sort of control types like wheels and HOTAS setups. Supporting controllers could get complicated since even rumble would depend on the device driver installed which would most likely lie about effects supported and whatnot. Anyhow, the answer is no, I intentionally went with XInput since I just wanted to customize the x360 controls. DirectInput is too generic of an API for what I wanted to do, and nothing was using it anymore anyway. Again, any work at all would require testing the game and looking into what its doing and that's not gonna happen anytime soon.
I know, I have a license. I've tried it after every major update but always end up having to go back to W7, it just kept getting in the way. Last time, I remember wondering why my test program wouldn't do anything, an update disabled the error message box. Linux has been getting more usable to me than Windows 10 so far. |
Today, I confirmed your hypothesis about Steam having an input function right in the middle of it. And it works without a problem. So Steam's input function is indeed the culprit. The problem is that I discovered that presumably, Steam has made the change you've detected, in all the games created from 2019 and after, and I believe that Durazno, and all the other Xinput wrappers, presumably have stopped working on newer Steam games altogether, because of this. I've tested it on one of the most recent of the games I have available on my Steam Library, "Wolfenstein: Youngblood", which was created in 2019, around the same time with Metro Exodus, and it does not work either, although, Durazno works on all the previous Wolfenstein games. I presume you won't get any help from this again, but I will send you the "Metro Exodus" EXE files, of both the Steam And GOG versions, to see how the file is supposed to behave and what changes Steam has made. I will send you the "Wolfenstein: Youngblood" EXE file also, that has the same Steam restrictions, to have a broader view of the said problem. I know, as you've said, without having the games you cannot do much. But at least now you will know what the problem is, and were to look, if you decide to find a solution for it, some time in the future. Keep also in mind, that the only way I've found up to now, in order to bypass the restrictions that Steam implements, on the EXE file, is to enable the **XinputPlus "DirectInput Output" function, that creates the Dinput.dll and Dinput8.dll files, on the EXE file's location folder... |
That makes me think it's probably how Steam is able to provide input customization, by doing the wrapper thing itself and bypassing classic wrappers while at it. Quite the annoying thing. |
Greetings, I being using Durazno for quite some time, and I am very satisfied with it. I have a prefixed profile that is working perfectly, with just about every FPS game I've tried it on. I recently started playing Metro Exodus, and unfortunately Durazno doesn't seem to work/affect the game at all.
I tried the process with the latest v0.6-43 version and as I always do, I pasted the files “Durazno.exe, Durazno.ini, xinput1_1.dll, xinput1_2.dll, xinput1_3.dll, xinput1_4.dll, xinput9_1_0.dll, xinputuap.dll” in the games Executable folder.... I always paste, all the .dll files, as I cannot distinguish/understand what each game needs. Likewise, I also tried the x64 version with no results.
I've just read, that the game's PC version has compatibility with the PS5 DualSense as well as with the Switch controller, can this be related to the problem I am facing?
I would appreciate it, if you could help me find a solution.
Thank you.
The text was updated successfully, but these errors were encountered: