diff options
author | Barnaby <22575741+barnabwhy@users.noreply.github.com> | 2024-08-23 21:05:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-23 22:05:54 +0200 |
commit | 9615ba206d47c00414c47402ba6880d08cc6c76a (patch) | |
tree | af293313261fa8826fd9e5073718a9131a6623d5 | |
parent | bebda79491b11a74195f79a80e0b929ef6edf2b1 (diff) | |
download | NorthstarLauncher-9615ba206d47c00414c47402ba6880d08cc6c76a.tar.gz NorthstarLauncher-9615ba206d47c00414c47402ba6880d08cc6c76a.zip |
Try loading XInput 1.4 before trying to load 9.1.0 (#769)
XInput 9.1.0 has some limitations to do with XInputGetCapabilities that may make the game behave differently when we use it as a replacement for XInput 1.3
XInput 1.4 doesn't have this issue, which means that if it works correctly we should always prioritise using this version over 9.1.0
-rw-r--r-- | primedev/windows/libsys.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/primedev/windows/libsys.cpp b/primedev/windows/libsys.cpp index dc699b84..501eae68 100644 --- a/primedev/windows/libsys.cpp +++ b/primedev/windows/libsys.cpp @@ -56,15 +56,27 @@ HMODULE WINAPI WLoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags // replace xinput dll with one that has ASLR if (lpLibFileName <= lpLibName && !strncmp(lpLibName, XINPUT1_3_DLL, strlen(XINPUT1_3_DLL) + 1)) { - hModule = o_LoadLibraryExA("XInput9_1_0.dll", hFile, dwFlags); + const char* pszReplacementDll = "XInput1_4.dll"; + hModule = o_LoadLibraryExA(pszReplacementDll, hFile, dwFlags); if (!hModule) { - MessageBoxA(0, "Could not find XInput9_1_0.dll", "Northstar", MB_ICONERROR); + pszReplacementDll = "XInput9_1_0.dll"; + spdlog::warn("Couldn't load XInput1_4.dll. Will try XInput9_1_0.dll. If on Windows 7 this is expected"); + hModule = o_LoadLibraryExA(pszReplacementDll, hFile, dwFlags); + } + + if (!hModule) + { + spdlog::error("Couldn't load XInput9_1_0.dll"); + MessageBoxA( + 0, "Could not load a replacement for XInput1_3.dll\nTried: XInput1_4.dll and XInput9_1_0.dll", "Northstar", MB_ICONERROR); exit(EXIT_FAILURE); return nullptr; } + + spdlog::info("Successfully loaded {} as a replacement for XInput1_3.dll", pszReplacementDll); } else { |