x360ce / x360ce

Primary repository for the x360ce library, front-end and tools.
2.57k stars 482 forks source link

New ScripthookV for GTA V uses dinput8.dll which breaks x360ce controller combining #66

Open Goliatron opened 9 years ago

Goliatron commented 9 years ago

The fundamental part of current mods for GTA V has released a new version, ahnd instead of using the old dsound.dll, it now uses dinput8.dll... The file is required to be in the GTA V directory, and with it there, I can only use one controller at a time via x360ce. Just yesterday I had it working wonderfully.

Perhaps a dll renaming workaround is possible?

Nucleoprotein commented 9 years ago

I dont think that dinput8.dll is even required by GTA V, it only required when game requires HookLL.

Goliatron commented 9 years ago

Like I said, it is the file required to run ScripthookV, which is the basis for script modding in GTA V. If I take it out of the directory, I can properly combine controllers, but I cannot use mods. If I leave it in the directory, it interferes with controller combining. I can only use one controller at a time, but I can use mods.

On Sun, May 3, 2015 at 3:46 AM, Robert Krawczyk notifications@github.com wrote:

I dont think that dinput8.dll is even required by GTA V, it only required when game requires HookLL.

— Reply to this email directly or view it on GitHub https://github.com/x360ce/x360ce/issues/66#issuecomment-98467241.

Nucleoprotein commented 9 years ago

You misunderstand me. I dont think that dinput8.dll from x360ce is required by GTA V. dinput8.dll only loads xinput.dll from game directory, ie. forces it's loading for games that load xinput.dll after initializing devices so it can be correctly detected by game. As do I know, GTA V does not require this, but maybe I wrong, wait for Squall-Leonhart.

Goliatron commented 9 years ago

I don't misunderstand you. Whether or not the vanilla GTA V needs the dinput8.dll or not is meaningless in this conversation. The newest version of ScripthookV (required for mods) requires that its own version of dinput8.dll to be in the GTA V folder.It is not a standard dinput8.dll; it is a 128K file. Previously Scripthook used dsound.dll as its main file, but it changed.

The presence of this new dinput8.dll keeps my controllers from combining. I can only use one or the other. I don't know how many more ways I can say the same thing. The dinput8.dll is not required by GTA V; it is required for ScripthookV.

On Sun, May 3, 2015 at 4:31 AM, Robert Krawczyk notifications@github.com wrote:

You misunderstand me. I dont think that dinput8.dll from x360ce is required by GTA V. dinput8.dll only loads xinput.dll from game directory, ie. forces it's loading for games that load xinput.dll after initializing devices so it can be correctly detected by game. As do I know, GTA V does not require this, but maybe I wrong, wait for Squall-Leonhart.

— Reply to this email directly or view it on GitHub https://github.com/x360ce/x360ce/issues/66#issuecomment-98471937.

Nucleoprotein commented 9 years ago

Can you check if this works:

  1. Rename ScripthookV dinput8.dll to asiloader.dll
  2. Add to x360ce.ini: [DINPUT8] ChainLoadFileName = asiloader.dll
  3. Use this dinput8.dll: http://www3.zippyshare.com/v/fewmi5zs/file.html
Squall-Leonhart commented 9 years ago

The existence of dinput8.dll from another developer should have no effect on the games ability to load xinput1_3 from its own directory, unless the dinput8 dll is loading a hardcoded path for the system xinput1_3.

This doesn't seem to be our problem at all.

Our dinput8.dll was never needed for combining to work, as all the loading is handled virtually, and internally in our xinput files.

Nucleoprotein commented 9 years ago

Yes, I think the same, but we should add chaining support to dinput8.dll. Can you test somehow above dll (it is x64)?

Nucleoprotein commented 9 years ago

Any news ?

EJocys commented 9 years ago

Shouldn't we move all these settings to GDB file and link them to executables?

[game.exe] Name=Game Name ; enum: D:\Projects\TocaEdit\x360ce.Engine\Common\Enum\HookMask.cs HookMask=0x00000000 ; Used by application only (XML settings version) to pick correct XInput dll version and platform ; enum: D:\Projects\TocaEdit\x360ce.Engine\Common\Enum\XInputMask.cs XInputMask=0x00000000 ; Used by application to use correct dinput8 version and platform ; enum: None = 0x000, DInput8_x86 = 0x01, DInput8_x64 = 0x0100, DInputMask=0x00000000 ChainLoadFileName=asiloader.dll ; Other optional Settings FakeVID=0x045E FakePID=0x028E Timeout=0

Nucleoprotein commented 9 years ago

Yes. One this I do not like is ChainLoadFileName, maybe RealDinput8Dll or something like that.

EJocys commented 9 years ago

Ok then. Maybe "DInputFile=" to match with "DInputMask="? I will update application before next public release.

Nucleoprotein commented 9 years ago

PR #86

reddevilrulez commented 9 years ago

Hi tapcio, I did the following:

  1. Rename ScripthookV dinput8.dll to asiloader.dll
  2. Add to x360ce.ini: [DINPUT8] ChainLoadFileName = asiloader.dll
  3. Use this dinput8.dll: http://www3.zippyshare.com/v/fewmi5zs/file.html

And Happy to report that GTA V no longer crashes on startup and the native trainer (GTA5 ScriptHookV_1.0.350.2a) along with x360ce (3.0.6.39 (2015-05-16) 64-bit). Although one hiccup that my gamepad (logitech wingman cordless rumblepad) loses controls, like going forward did not stop or like game-pad became unresponsive for a few seconds after i use the trainer for the first time and randomly became ok after a few minutes of playing on keyboard.

And got below error after exiting the game: Problem signature: Problem Event Name: APPCRASH Application Name: GTA5.exe Application Version: 1.0.350.1 Application Timestamp: 5540c256 Fault Module Name: dinput8.dll Fault Module Version: 6.1.7600.16385 Fault Module Timestamp: 4a5bdecf Exception Code: c0000005 Exception Offset: 0000000000021b52 OS Version: 6.1.7601.2.1.0.256.1 Locale ID: 1033 Additional Information 1: 6668 Additional Information 2: 6668516d7fa2979580a3451e1c8cf30d Additional Information 3: 0be5 Additional Information 4: 0be5710438aa7bb84db46a822f9d72e0

Using win 7 64-bit ultimate. Let me know if you want to test anything else.

And finally my huge thanks for the solution (went nuts past few days). Regards, MaKS

jtgibson01 commented 9 years ago

I've also tested this and can largely confirm the same occurs on my end: the DLL swap works, and works well, but locks up and crashes both Grand Theft Auto V and its launcher on exit -- requiring a Ctrl+Alt+Del to kill the application.

This seems like an acceptable price to pay (emulating the G27 as a 360 controller works even better than the native support in GTA IV worked), but there is one point that has me a little worried: it forces a logout when the application crashes, too, with the prompt that your Rockstar Games Social Club login is being used elsewhere (...!). While I doubt that is actually the case, it sows just enough of a seed of doubt to make it disquieting.

In other words, although I'm sure it could be debated until one is blue in the face as to whether a steering wheel controller is an unfair advantage in multiplayer (I think it isn't), the possibility of someone being banned from Online for running what amounts to an Xbox 360 controller has me a little worried. The ASI loaders normally disable themselves before switching to online, but the renaming method has me a little worried that somehow it's going astray and not doing it.

I haven't actually tried going online, in any case. I've got a single directory setup with a couple RPF modifications (i.e., not online safe) and I'll report back once I've had a chance to create a proper online-safe clone. Even if I do get banned (what I would assume is temporarily), it's a small loss, though -- aside from the little fun roleplay stuff online like emotes and smoking cigarettes that I really wish made it over to single player, the single player experience is otherwise largely better in my eyes, so I could take one for the team in the interests of science. =)

Squall-Leonhart commented 9 years ago

we know about the crash, happens in our xinput lib, we know why it occurs, just have to look into ways to fix it.

jtgibson01 commented 9 years ago

All righty, so I've discovered something a little sad -- the OpenIV utility (which modifies RPF (game data) files) is incompatible with this setup. OpenIV's modified RPFs only work if it can run its dinput8.dll ASI loader directly -- if daisy-chained as asiloader.dll via x360ce's dinput8.dll, it will work only if the end-user has made no modifications to any of the game's RPF files. If there are any modifications, GTA V will complain of corrupted data files (and won't if OpenIV can run its own ASI loader dinput8.dll directly).

In other words, at the moment we're stuck with a tradeoff of either playing with an emulated controller or being able to modify data files. Nasty tradeoff, since both are amazingly good. =) Still entirely possible to run script mods alongside x360ce, so it's not as terrible as it sounds, but texture mods and handling mods are verboten at the moment.

Is there any other DLL that can be hooked for loading x360ce's stuff? (GTA V correctly uses Raw Input these days.) That way we can run the ASI loader from OpenIV and the controller emulation of x360ce together, which is definitely a have-cake-eat-too scenario.

Nucleoprotein commented 9 years ago

Then ask OpenIV/ScripthookV authors about chain loading custom dinpiut8.dll. so you can load x360ce dinput8.dll from asiloader.

jtgibson01 commented 9 years ago

Already did. I've asked in all three places in case someone might have a better line-in. I suspect this will be a case of back-and-forth, though, with each party thinking someone else has the responsibility or ability to do it. ;-)

http://openiv.com/?p=1082&cpage=2#comment-54213 http://gtaforums.com/topic/788343-vrel-script-hook-v/page-92

[edit]Aha, Alex (Script Hook V) pointed out an alternate ASI loader based off of dsound.dll, which works perfectly. I have cake, am eating it too, and two worlds have collided! (Well, except for the crash on exit, but you guys already know about that one.)

Cheers and thanks for your patience with my near-spam. ;-)

giova-fr commented 7 years ago

May you please give us the link to this alternate ASI Loader?

From 2 hours now i try with no success to use both asi mods AND X360ce controler.... Solution given above didn't work for me.

jtgibson01 commented 7 years ago

Hi @giova-fr ,

Are you planning on using this for a steering wheel or other sort of simulation peripheral (which is why I was using it myself)? A mod now reads most steering wheels natively, https://www.gta5-mods.com/scripts/manual-transmission-ikt . You can turn off the manual transmission features if they aren't your thing and still have full steering wheel gameplay. GTA V otherwise supports Xbox 360 controllers natively, although obviously without the fuller range of x360ce's awesome features. For that reason I no longer use x360ce for GTA V.

If you have some other use in mind, the link to the dsound.dll was in my post a little further down on the page on the gtaforums.com topic I linked above, http://gtaforums.com/topic/788343-script-hook-v/page-92#entry1067500740 , but here's a direct link anyway: https://www.dropbox.com/s/fn85czusjzw46v3/dsound.dll?dl=1

Note that OpenIV will complain until it's blue in the face that you don't have an ASI loader installed if you're using this DLL -- you'll have to ignore it. Actually running with both this loader and OpenIV's loader will crash the game, too, so use one or the other. (Since OpenIV's loader never worked for me in the first place, I still use this one.)

[edit] Heh, two years later, what are the odds that I use "blue in the face" twice in the same thread?