From 344bf4d530b562df02001bfe40ac25f00134c38f Mon Sep 17 00:00:00 2001 From: Akasaka Ryuunosuke Date: Wed, 29 May 2019 06:54:05 -0700 Subject: [PATCH 1/7] Add some interesting constants --- DivaHook/src/Constants.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/DivaHook/src/Constants.h b/DivaHook/src/Constants.h index 3e595af..7a4355f 100644 --- a/DivaHook/src/Constants.h +++ b/DivaHook/src/Constants.h @@ -4,6 +4,8 @@ constexpr uint8_t NOP_OPCODE = 0x90; constexpr uint8_t RET_OPCODE = 0xC3; constexpr uint8_t JMP_OPCODE = 0xE9; +constexpr uint8_t JNE_OPCODE = 0x85; + constexpr uint64_t ENGINE_UPDATE_HOOK_TARGET_ADDRESS = 0x000000014018CC40; constexpr uint64_t ENGINE_UPDATE_INPUT_ADDRESS = 0x000000014018CBB0; @@ -31,4 +33,8 @@ constexpr uint64_t PLAYS_PER_SESSION_GETTER_ADDRESS = 0x000000014038AEE0; constexpr uint64_t UPDATE_TASKS_ADDRESS = 0x000000014019B980; constexpr uint64_t GLUT_SET_CURSOR_ADDRESS = 0x00000001408B68E6; constexpr uint64_t CHANGE_MODE_ADDRESS = 0x00000001401953D0; -constexpr uint64_t CHANGE_SUB_MODE_ADDRESS = 0x0000000140195260; \ No newline at end of file +constexpr uint64_t CHANGE_SUB_MODE_ADDRESS = 0x0000000140195260; + +constexpr uint64_t CHECK_SOMETHING_SET_MODULE_ADDRESS = 0x0000000140581C78; +constexpr uint64_t MODULE_TABLE_START = 0x00000001411A8990; +constexpr uint64_t MODULE_TABLE_END = 0x00000001411A8A0C; From 270b3112e8ce266c89a7bf345bd890db3af0b150 Mon Sep 17 00:00:00 2001 From: Akasaka Ryuunosuke Date: Wed, 29 May 2019 06:56:58 -0700 Subject: [PATCH 2/7] Allow for module selection --- DivaHook/src/Components/PlayerDataManager.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/DivaHook/src/Components/PlayerDataManager.cpp b/DivaHook/src/Components/PlayerDataManager.cpp index 42bf953..cf2f0f7 100644 --- a/DivaHook/src/Components/PlayerDataManager.cpp +++ b/DivaHook/src/Components/PlayerDataManager.cpp @@ -54,6 +54,13 @@ namespace DivaHook::Components *(uint8_t*)(SET_DEFAULT_PLAYER_DATA_ADDRESS) = RET_OPCODE; } VirtualProtect((void*)SET_DEFAULT_PLAYER_DATA_ADDRESS, sizeof(uint8_t), oldProtect, &oldProtect); + + // allow player to select the module + VirtualProtect((void*)CHECK_SOMETHING_SET_MODULE_ADDRESS, sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &oldProtect); + { + *(uint8_t*)(CHECK_SOMETHING_SET_MODULE_ADDRESS) = JNE_OPCODE; //je to jne + } + VirtualProtect((void*)CHECK_SOMETHING_SET_MODULE_ADDRESS, sizeof(uint8_t), oldProtect, &oldProtect); } void PlayerDataManager::LoadConfig() @@ -107,6 +114,13 @@ namespace DivaHook::Components setIfNotEqual(&playerData->skin_equip, customPlayerData->SkinEquip, 0); setIfNotEqual(&playerData->btn_se_equip, customPlayerData->BtnSeEquip, -1); setIfNotEqual(&playerData->chainslide_se_equip, customPlayerData->ChainslideSeEquip, -1); + + playerData->use_card = 1; // required to allow for module selection + + //1411A8990..1411A8A0C + for (uint64_t i = MODULE_TABLE_START; i <= MODULE_TABLE_END; i++) { + *((byte*)i) = 0xFF; + } if (customPlayerData->PlayerName != nullptr) { From a25c4d2d1df1f2a762e7ecf87772296e53066362 Mon Sep 17 00:00:00 2001 From: Akasaka Ryuunosuke <656194+vladkorotnev@users.noreply.github.com> Date: Thu, 30 May 2019 06:08:55 -0700 Subject: [PATCH 3/7] More constants to the god of constants --- DivaHook/src/Constants.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/DivaHook/src/Constants.h b/DivaHook/src/Constants.h index 7a4355f..b02fd9f 100644 --- a/DivaHook/src/Constants.h +++ b/DivaHook/src/Constants.h @@ -35,6 +35,10 @@ constexpr uint64_t GLUT_SET_CURSOR_ADDRESS = 0x00000001408B68E6; constexpr uint64_t CHANGE_MODE_ADDRESS = 0x00000001401953D0; constexpr uint64_t CHANGE_SUB_MODE_ADDRESS = 0x0000000140195260; -constexpr uint64_t CHECK_SOMETHING_SET_MODULE_ADDRESS = 0x0000000140581C78; -constexpr uint64_t MODULE_TABLE_START = 0x00000001411A8990; -constexpr uint64_t MODULE_TABLE_END = 0x00000001411A8A0C; +constexpr uint64_t MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS = 0x00000001405869AD; +constexpr uint64_t MODSELECTOR_CLOSE_AFTER_MODULE = 0x0000000140583B45; +constexpr uint64_t MODSELECTOR_CLOSE_AFTER_CUSTOMIZE = 0x0000000140583C8C; +constexpr uint64_t MODULE_TABLE_START = PLAYER_DATA_ADDRESS + 0x140; +constexpr uint64_t MODULE_TABLE_END = MODULE_TABLE_START + 128; +constexpr uint64_t ITEM_TABLE_START = PLAYER_DATA_ADDRESS + 0x2B8; +constexpr uint64_t ITEM_TABLE_END = ITEM_TABLE_START + 128; From 17dee0735a19f500e7eaef626b2d4cde772bb26d Mon Sep 17 00:00:00 2001 From: Akasaka Ryuunosuke <656194+vladkorotnev@users.noreply.github.com> Date: Thu, 30 May 2019 06:10:12 -0700 Subject: [PATCH 4/7] Module selector now FULLY working --- DivaHook/src/Components/PlayerDataManager.cpp | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/DivaHook/src/Components/PlayerDataManager.cpp b/DivaHook/src/Components/PlayerDataManager.cpp index cf2f0f7..f947c4a 100644 --- a/DivaHook/src/Components/PlayerDataManager.cpp +++ b/DivaHook/src/Components/PlayerDataManager.cpp @@ -55,12 +55,27 @@ namespace DivaHook::Components } VirtualProtect((void*)SET_DEFAULT_PLAYER_DATA_ADDRESS, sizeof(uint8_t), oldProtect, &oldProtect); - // allow player to select the module - VirtualProtect((void*)CHECK_SOMETHING_SET_MODULE_ADDRESS, sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &oldProtect); + // allow player to select the module and extra item + VirtualProtect((void*)MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS, sizeof(byte)*2, PAGE_EXECUTE_READWRITE, &oldProtect); { - *(uint8_t*)(CHECK_SOMETHING_SET_MODULE_ADDRESS) = JNE_OPCODE; //je to jne + *(byte*)(MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS) = 0xB0; // xor al,al -> ld al,1 + *(byte*)(MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS + 0x1) = 0x01; + } + VirtualProtect((void*)MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS, sizeof(byte)*2, oldProtect, &oldProtect); + + // fix annoying behavior of closing after changing module or item (don't yet know the reason, maybe NW/Card checks) + { + VirtualProtect((void*)MODSELECTOR_CLOSE_AFTER_MODULE, sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &oldProtect); + { + *(uint8_t*)(MODSELECTOR_CLOSE_AFTER_MODULE) = JNE_OPCODE; + } + VirtualProtect((void*)MODSELECTOR_CLOSE_AFTER_MODULE, sizeof(uint8_t), oldProtect, &oldProtect); + VirtualProtect((void*)MODSELECTOR_CLOSE_AFTER_CUSTOMIZE, sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &oldProtect); + { + *(uint8_t*)(MODSELECTOR_CLOSE_AFTER_CUSTOMIZE) = JNE_OPCODE; + } + VirtualProtect((void*)MODSELECTOR_CLOSE_AFTER_CUSTOMIZE, sizeof(uint8_t), oldProtect, &oldProtect); } - VirtualProtect((void*)CHECK_SOMETHING_SET_MODULE_ADDRESS, sizeof(uint8_t), oldProtect, &oldProtect); } void PlayerDataManager::LoadConfig() @@ -117,10 +132,8 @@ namespace DivaHook::Components playerData->use_card = 1; // required to allow for module selection - //1411A8990..1411A8A0C - for (uint64_t i = MODULE_TABLE_START; i <= MODULE_TABLE_END; i++) { - *((byte*)i) = 0xFF; - } + memset((void *)MODULE_TABLE_START, 0xFF, 128); + memset((void*)ITEM_TABLE_START, 0xFF, 128); if (customPlayerData->PlayerName != nullptr) { From 2e2e5a1a41be3738e3bb93b720742ab4b07bc86f Mon Sep 17 00:00:00 2001 From: Akasaka Ryuunosuke <656194+vladkorotnev@users.noreply.github.com> Date: Tue, 25 Jun 2019 15:04:04 -0700 Subject: [PATCH 5/7] Update CustomPlayerData.h --- DivaHook/src/Components/CustomPlayerData.h | 1 + 1 file changed, 1 insertion(+) diff --git a/DivaHook/src/Components/CustomPlayerData.h b/DivaHook/src/Components/CustomPlayerData.h index 5b71d52..5500a7f 100644 --- a/DivaHook/src/Components/CustomPlayerData.h +++ b/DivaHook/src/Components/CustomPlayerData.h @@ -6,6 +6,7 @@ namespace DivaHook::Components struct CustomPlayerData { std::string *PlayerName; + std::string *LevelName; int LevelPlateId; int SkinEquip; int BtnSeEquip; From f446f34c84745f99e1fb54829b450bec4e9b3620 Mon Sep 17 00:00:00 2001 From: Akasaka Ryuunosuke <656194+vladkorotnev@users.noreply.github.com> Date: Tue, 25 Jun 2019 15:05:06 -0700 Subject: [PATCH 6/7] Update PlayerDataManager.cpp --- DivaHook/src/Components/PlayerDataManager.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/DivaHook/src/Components/PlayerDataManager.cpp b/DivaHook/src/Components/PlayerDataManager.cpp index f947c4a..8301810 100644 --- a/DivaHook/src/Components/PlayerDataManager.cpp +++ b/DivaHook/src/Components/PlayerDataManager.cpp @@ -109,6 +109,7 @@ namespace DivaHook::Components }; config.TryGetValue("player_name", customPlayerData->PlayerName); + config.TryGetValue("level_name", &customPlayerData->LevelName); customPlayerData->LevelPlateId = parseInt("level_plate_id"); customPlayerData->SkinEquip = parseInt("skin_equip"); @@ -140,5 +141,11 @@ namespace DivaHook::Components playerData->field_DC = 0x10; playerData->player_name = (char*)customPlayerData->PlayerName->c_str(); } + + if (customPlayerData->LevelName != nullptr) { + playerData->level_name = (char*)customPlayerData->LevelName->c_str(); + playerData->field_110 = 0xFF; + playerData->field_118 = 0x1F; + } } } From 83706fd143aeb944fff035e20d80343dfdb4b817 Mon Sep 17 00:00:00 2001 From: Akasaka Ryuunosuke <656194+vladkorotnev@users.noreply.github.com> Date: Tue, 25 Jun 2019 15:06:09 -0700 Subject: [PATCH 7/7] Update playerdata.ini --- DivaHook/rom/playerdata.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DivaHook/rom/playerdata.ini b/DivaHook/rom/playerdata.ini index a627644..58e79f8 100644 --- a/DivaHook/rom/playerdata.ini +++ b/DivaHook/rom/playerdata.ini @@ -3,6 +3,7 @@ # this file has to be encoded with utf-8 player_name = NO-NAME +level_name = 忘れないでね私の声を # IDs defined in rom/gm_plate_tbl/gm_plate_id.bin level_plate_id = 0 @@ -14,4 +15,4 @@ skin_equip = 0 btn_se_equip = -1 # IDs defined in rom/gm_slide_se_tbl/gm_slide_se_id.bin -chainslide_se_equip = -1 \ No newline at end of file +chainslide_se_equip = -1