[Filesystem] Use info from launcher (#440)
* [Filesystem] Use info from launcher
This commit is contained in:
parent
bea07f6df2
commit
ed617dc879
@ -243,9 +243,9 @@ namespace Components
|
|||||||
|
|
||||||
void FileSystem::RegisterFolder(const char* folder)
|
void FileSystem::RegisterFolder(const char* folder)
|
||||||
{
|
{
|
||||||
std::string fs_cdpath = Dvar::Var("fs_cdpath").get<std::string>();
|
const auto fs_cdpath = Dvar::Var("fs_cdpath").get<std::string>();
|
||||||
std::string fs_basepath = Dvar::Var("fs_basepath").get<std::string>();
|
const auto fs_basepath = Dvar::Var("fs_basepath").get<std::string>();
|
||||||
std::string fs_homepath = Dvar::Var("fs_homepath").get<std::string>();
|
const auto fs_homepath = Dvar::Var("fs_homepath").get<std::string>();
|
||||||
|
|
||||||
if (!fs_cdpath.empty()) Game::FS_AddLocalizedGameDirectory(fs_cdpath.data(), folder);
|
if (!fs_cdpath.empty()) Game::FS_AddLocalizedGameDirectory(fs_cdpath.data(), folder);
|
||||||
if (!fs_basepath.empty()) Game::FS_AddLocalizedGameDirectory(fs_basepath.data(), folder);
|
if (!fs_basepath.empty()) Game::FS_AddLocalizedGameDirectory(fs_basepath.data(), folder);
|
||||||
@ -323,6 +323,12 @@ namespace Components
|
|||||||
Utils::Hook::Call<void(void*)>(0x4291A0)(iwd);
|
Utils::Hook::Call<void(void*)>(0x4291A0)(iwd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* FileSystem::Sys_DefaultInstallPath_Hk()
|
||||||
|
{
|
||||||
|
static auto current_path = std::filesystem::current_path().string();
|
||||||
|
return current_path.data();
|
||||||
|
}
|
||||||
|
|
||||||
FileSystem::FileSystem()
|
FileSystem::FileSystem()
|
||||||
{
|
{
|
||||||
FileSystem::MemAllocator.clear();
|
FileSystem::MemAllocator.clear();
|
||||||
@ -370,6 +376,9 @@ namespace Components
|
|||||||
|
|
||||||
// Handle IWD freeing
|
// Handle IWD freeing
|
||||||
Utils::Hook(0x642F60, FileSystem::IwdFreeStub, HOOK_CALL).install()->quick();
|
Utils::Hook(0x642F60, FileSystem::IwdFreeStub, HOOK_CALL).install()->quick();
|
||||||
|
|
||||||
|
// Set the working dir based on info from the Xlabs launcher
|
||||||
|
Utils::Hook(0x4326E0, FileSystem::Sys_DefaultInstallPath_Hk, HOOK_JUMP).install()->quick();
|
||||||
}
|
}
|
||||||
|
|
||||||
FileSystem::~FileSystem()
|
FileSystem::~FileSystem()
|
||||||
|
@ -116,5 +116,7 @@ namespace Components
|
|||||||
static int LoadTextureSync(Game::GfxImageLoadDef **loadDef, Game::GfxImage *image);
|
static int LoadTextureSync(Game::GfxImageLoadDef **loadDef, Game::GfxImage *image);
|
||||||
|
|
||||||
static void IwdFreeStub(Game::iwd_t* iwd);
|
static void IwdFreeStub(Game::iwd_t* iwd);
|
||||||
|
|
||||||
|
static const char* Sys_DefaultInstallPath_Hk();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -106,13 +106,18 @@ namespace Utils
|
|||||||
|
|
||||||
void SetEnvironment()
|
void SetEnvironment()
|
||||||
{
|
{
|
||||||
wchar_t exeName[512];
|
char* buffer{};
|
||||||
GetModuleFileNameW(GetModuleHandle(nullptr), exeName, sizeof(exeName) / sizeof(wchar_t));
|
std::size_t size{};
|
||||||
|
if (_dupenv_s(&buffer, &size, "XLABS_MW2_INSTALL") != 0 || buffer == nullptr)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto* exeBaseName = wcsrchr(exeName, L'\\');
|
const auto _0 = gsl::finally([&] { std::free(buffer); });
|
||||||
exeBaseName[0] = L'\0';
|
|
||||||
|
|
||||||
SetCurrentDirectoryW(exeName);
|
std::string dir{buffer, size};
|
||||||
|
SetCurrentDirectoryA(dir.data());
|
||||||
|
SetDllDirectoryA(dir.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
HMODULE GetNTDLL()
|
HMODULE GetNTDLL()
|
||||||
|
Loading…
Reference in New Issue
Block a user