diff --git a/game_payload/blob/core.o b/game_payload/blob/core.o index d366e71..65bf621 100644 Binary files a/game_payload/blob/core.o and b/game_payload/blob/core.o differ diff --git a/game_payload/include/ace.h b/game_payload/include/ace.h index 60437b9..58aff1b 100644 --- a/game_payload/include/ace.h +++ b/game_payload/include/ace.h @@ -2,7 +2,9 @@ #include +#include + void ace_fake_driver_files(); -HMODULE ace_load_base_module(const char *exeName); +HMODULE ace_load_base_module(struct game_data *game); HMODULE ace_load_driver_module(); diff --git a/game_payload/include/game.h b/game_payload/include/game.h index c238b7a..322f976 100644 --- a/game_payload/include/game.h +++ b/game_payload/include/game.h @@ -22,9 +22,8 @@ typedef void (*unityplayer_callback_t)(HMODULE unityModule); struct game_data { enum game_id id; // Temporary - const char *name; + const char *base_module_name; const char *assembly_name; - const char *tp6_section_name; // Unused for now const char *tvm_section_name; unityplayer_callback_t unityplayer_callback; diff --git a/game_payload/src/ace.c b/game_payload/src/ace.c index 88064ab..8675f2e 100644 --- a/game_payload/src/ace.c +++ b/game_payload/src/ace.c @@ -70,10 +70,9 @@ static HMODULE _load_module_patched(wchar_t *path) { return module; } -HMODULE ace_load_base_module(const char *exeName) { +HMODULE ace_load_base_module(struct game_data *game) { wchar_t baseModuleName[MAX_PATH]; - swprintf(baseModuleName, MAX_PATH, L"%sBase.dll", exeName); - wcslwr(baseModuleName); + MultiByteToWideChar(CP_UTF8, 0, game->base_module_name, strlen(game->base_module_name) + 1, baseModuleName, MAX_PATH); return _load_module_patched(baseModuleName); } diff --git a/game_payload/src/hi3.c b/game_payload/src/hi3.c index dfd1467..22f0da8 100644 --- a/game_payload/src/hi3.c +++ b/game_payload/src/hi3.c @@ -3,9 +3,8 @@ #include -const char *HI3_NAME = "BH3"; +const char *HI3_BASE_MODULE_NAME = "BH3Base.dll"; const char *HI3_ASSEMBLY_NAME = "UserAssembly.dll"; -const char *HI3_TP6_SECTION_NAME = ".bh3"; const char *HI3_TVM_SECTION_NAME = ".tvm0"; struct crc_id_pair { @@ -39,9 +38,8 @@ void hi3_fill_data(struct game_data *buf) { } buf->id = id; - buf->name = HI3_NAME; + buf->base_module_name = HI3_BASE_MODULE_NAME; buf->assembly_name = HI3_ASSEMBLY_NAME; - buf->tp6_section_name = HI3_TP6_SECTION_NAME; buf->tvm_section_name = HI3_TVM_SECTION_NAME; buf->unityplayer_callback = NULL; diff --git a/game_payload/src/hsr.c b/game_payload/src/hsr.c index f253b40..f855362 100644 --- a/game_payload/src/hsr.c +++ b/game_payload/src/hsr.c @@ -4,9 +4,8 @@ #include -const char *HSR_NAME = "StarRail"; +const char *HSR_BASE_MODULE_NAME = "StarRailBase.dll"; const char *HSR_ASSEMBLY_NAME = "GameAssembly.dll"; -const char *HSR_TP6_SECTION_NAME = ".ace"; const char *HSR_TVM_SECTION_NAME = ".tvm0"; struct crc_id_pair { @@ -85,9 +84,8 @@ void hsr_fill_data(struct game_data *buf) { } buf->id = id; - buf->name = HSR_NAME; + buf->base_module_name = HSR_BASE_MODULE_NAME; buf->assembly_name = HSR_ASSEMBLY_NAME; - buf->tp6_section_name = HSR_TP6_SECTION_NAME; buf->tvm_section_name = HSR_TVM_SECTION_NAME; buf->unityplayer_callback = &_unityplayer_callback; diff --git a/game_payload/src/main.c b/game_payload/src/main.c index 51804ff..0c4718d 100644 --- a/game_payload/src/main.c +++ b/game_payload/src/main.c @@ -42,7 +42,7 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) { ace_fake_driver_files(); // Load both ACE modules - HMODULE baseModule = ace_load_base_module(game.name); + HMODULE baseModule = ace_load_base_module(&game); ace_load_driver_module(); // ...magic