aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarnaby <22575741+barnabwhy@users.noreply.github.com>2024-08-23 21:05:54 +0100
committerGitHub <noreply@github.com>2024-08-23 22:05:54 +0200
commit9615ba206d47c00414c47402ba6880d08cc6c76a (patch)
treeaf293313261fa8826fd9e5073718a9131a6623d5
parentbebda79491b11a74195f79a80e0b929ef6edf2b1 (diff)
downloadNorthstarLauncher-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.cpp16
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
{