diff --git a/game_payload/blob/core.o b/game_payload/blob/core.o index b4e13ed..56fe10e 100644 Binary files a/game_payload/blob/core.o and b/game_payload/blob/core.o differ diff --git a/game_payload/include/core.h b/game_payload/include/core.h index 46e33c7..ff92423 100644 --- a/game_payload/include/core.h +++ b/game_payload/include/core.h @@ -6,4 +6,4 @@ void core_setup_patcher(struct game_data *game, HMODULE baseModule, wchar_t *txFile); -void *core_perform_tx(size_t *outLength); +void *core_perform_tx(struct game_data *game, size_t *outLength); diff --git a/game_payload/src/main.c b/game_payload/src/main.c index c0d6d79..0cb9e93 100644 --- a/game_payload/src/main.c +++ b/game_payload/src/main.c @@ -26,15 +26,11 @@ void unload_ctr_dec() { } void request_restart() { - HANDLE hRestartFlag = OpenFileMappingA(FILE_MAP_ALL_ACCESS, FALSE, "Global\\JadeiteRestartFlag"); - int *restartFlag = MapViewOfFile(hRestartFlag, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(int)); - if (!restartFlag) { - msg_err_a("Could not map shared memory to set restart flag"); - } + wchar_t restartFlagFile[MAX_PATH]; + GetTempPathW(MAX_PATH, restartFlagFile); + wcscat(restartFlagFile, L"jadeite\\restart_flag"); - *restartFlag = 1; - - UnmapViewOfFile(restartFlag); + HANDLE hRestartFlag = CreateFileW(restartFlagFile, FILE_WRITE_ACCESS, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); CloseHandle(hRestartFlag); } @@ -63,7 +59,7 @@ static void _run_tx(struct game_data *game, wchar_t *txFile) { // ...more magic size_t tableSize; - void *table = core_perform_tx(&tableSize); + void *table = core_perform_tx(game, &tableSize); // Save to file utils_create_dir_recursively(txFile); diff --git a/injector/src/dll.c b/injector/src/dll.c index e1857ce..6aa4c75 100644 --- a/injector/src/dll.c +++ b/injector/src/dll.c @@ -61,13 +61,10 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved) { MessageBoxW(NULL, L"Could not find wine_get_unix_file_name! Wine version too old?", J_MB_TITLE, MB_OK | MB_ICONWARNING); } - // Create shared memory for the restart flag - HANDLE hRestartFlag = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(int), "Global\\JadeiteRestartFlag"); - int *restartFlag = MapViewOfFile(hRestartFlag, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(int)); - if (!restartFlag) { - MessageBoxW(NULL, L"Failed to create shared memory!", J_MB_TITLE, MB_OK | MB_ICONERROR); - exit(1); - } + // Get restart flag file path + wchar_t restartFlagFile[MAX_PATH]; + GetTempPathW(MAX_PATH, restartFlagFile); + wcscat(restartFlagFile, L"jadeite\\restart_flag"); do { // Start the game @@ -102,8 +99,8 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved) { size_t payloadSize = (size_t)&_binary_game_p_o_p_game_p_bin_size; inject(pi.hProcess, payloadStart, payloadSize, injectDll); - // Clear the restart flag - *restartFlag = 0; + // Remove the restart flag file + DeleteFileW(restartFlagFile); // Optional: wait for user input before resuming (useful for debugging) char *waitEnabled = getenv("WAIT_BEFORE_RESUME"); @@ -118,7 +115,7 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved) { // The launcher process should now hang untill the game terminates WaitForSingleObject(pi.hProcess, INFINITE); - } while (*restartFlag); + } while (GetFileAttributesW(restartFlagFile) != INVALID_FILE_ATTRIBUTES); return TRUE; }