diff --git a/loader/src/platform/windows/main.cpp b/loader/src/platform/windows/main.cpp index dd02a901..1bc8e251 100644 --- a/loader/src/platform/windows/main.cpp +++ b/loader/src/platform/windows/main.cpp @@ -138,11 +138,29 @@ void* mainTrampolineAddr; #include "gdTimestampMap.hpp" unsigned int gdTimestamp = 0; +// In case the game is launched from a different directory through command line +// this function will set the current working directory to the game's directory +// to avoid the game crashing due to not being able to find the resources +static void fixCWD() { + char cwd[1024]; + DWORD size = GetModuleFileNameA(NULL, cwd, sizeof(cwd)); + if (size == sizeof(cwd)) return; + for (int i = size - 1; i >= 0; i--) { + if (cwd[i] == '\\') { + cwd[i] = '\0'; + break; + } + } + SetCurrentDirectoryA(cwd); +} + int WINAPI gdMainHook(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { // MessageBoxA(NULL, "Hello from gdMainHook!", "Hi", 0); updateGeode(); + fixCWD(); + if (versionToTimestamp(GEODE_STR(GEODE_GD_VERSION)) > gdTimestamp) { console::messageBox( "Unable to Load Geode!",