diff --git a/source-code/source/plugins/TLAC/Components/Pause.cpp b/source-code/source/plugins/TLAC/Components/Pause.cpp index c6952da6..9449003e 100644 --- a/source-code/source/plugins/TLAC/Components/Pause.cpp +++ b/source-code/source/plugins/TLAC/Components/Pause.cpp @@ -39,10 +39,12 @@ namespace TLAC::Components uint8_t* Pause::framespeedPatchAddress = (uint8_t*)0x140192D50; float_t* Pause::deltaFrameHistoryAddress = (float_t*)0x140EDA6C0; int32_t* Pause::deltaFrameHistoryIntAddress = (int32_t*)0x140EDA6C4; + uint64_t* Pause::mediaSessionAddress; std::vector Pause::origAgeageHairOp; uint8_t* Pause::ageageHairPatchAddress = (uint8_t*)0x14054352c; std::vector Pause::streamPlayStates; bool(*divaGiveUpFunc)(void*) = (bool(*)(void* cls))GIVEUP_FUNC_ADDRESS; + void(__cdecl* moviePlayLibLogging)(void*, char*, void*) = (void(__cdecl*)(void*, char*, void*))0x1404241F0; PlayerData* Pause::playerData; InputState* Pause::inputState; TouchSliderState* Pause::sliderState; @@ -113,6 +115,11 @@ namespace TLAC::Components DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)divaGiveUpFunc, hookedGiveUpFunc); DetourTransactionCommit(); + + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourAttach(&(PVOID&)moviePlayLibLogging, hookedMoviePlayLibLogging); + DetourTransactionCommit(); } void Pause::Update() @@ -603,10 +610,36 @@ namespace TLAC::Components return *(GameState*)CURRENT_GAME_STATE_ADDRESS == GS_GAME && *(SubGameState*)CURRENT_GAME_SUB_STATE_ADDRESS == SUB_GAME_MAIN && *(uint8_t*)PV_STATE_ADDRESS == 1; } + void Pause::hookedMoviePlayLibLogging(void*, char* arg2, uint64_t* item) + { + // printf("MoviePlayLib> %s(%p)\n", arg2, item); + + if (strcmp("MoviePlayLib::MediaSession::MediaSession", arg2) == 0) + { + // printf("MoviePlayLib constructor detected: %p\n", item); + if (Pause::mediaSessionAddress == nullptr) + { + Pause::mediaSessionAddress = item; + // printf("Saved pointer: %p\n", Pause::mediaSessionAddress); + } + } + } + + void Pause::cleanMediaSession() + { + if (Pause::mediaSessionAddress != nullptr) + { + Pause::mediaSessionAddress = nullptr; + // printf("Removed pointer: %p\n", Pause::mediaSessionAddress); + } + } + bool Pause::hookedGiveUpFunc(void* cls) { if (giveUp) { + cleanMediaSession(); + giveUp = false; pause = false; return true; @@ -615,6 +648,8 @@ namespace TLAC::Components { if (divaGiveUpFunc(cls)) { + cleanMediaSession(); + pause = false; return true; } diff --git a/source-code/source/plugins/TLAC/Components/Pause.h b/source-code/source/plugins/TLAC/Components/Pause.h index 1162ec62..3300c970 100644 --- a/source-code/source/plugins/TLAC/Components/Pause.h +++ b/source-code/source/plugins/TLAC/Components/Pause.h @@ -35,6 +35,7 @@ namespace TLAC::Components // this is a mess of static so that menuItems can work static bool isPauseKeyTapped(); static bool isInGame(); + static void cleanMediaSession(); static std::vector streamPlayStates; static void InjectCode(void* address, const std::vector data); @@ -51,10 +52,12 @@ namespace TLAC::Components static int32_t origDeltaFrameHistoryInt; static float_t* deltaFrameHistoryAddress; static int32_t* deltaFrameHistoryIntAddress; + static uint64_t* mediaSessionAddress; static std::vector origAgeageHairOp; static uint8_t* ageageHairPatchAddress; + static void hookedMoviePlayLibLogging(void*, char* arg2, uint64_t* item); static bool hookedGiveUpFunc(void* cls); static void setSEVolume(int amount); @@ -142,6 +145,11 @@ namespace TLAC::Components static void unpause() { pause = false; }; static void restart() { + if (mediaSessionAddress != nullptr) { + void(*setPosition)(uint64_t*, uint64_t) = (void(*)(uint64_t*, uint64_t))0x140428CA0; + setPosition(mediaSessionAddress, 0); + } + /* 140d0b510+2 = 0, 140d0b510+14 = 8 for restart diff --git a/source-code/source/plugins/TLAC/TLAC.vcxproj b/source-code/source/plugins/TLAC/TLAC.vcxproj index 5f643cd6..f6153abb 100644 --- a/source-code/source/plugins/TLAC/TLAC.vcxproj +++ b/source-code/source/plugins/TLAC/TLAC.vcxproj @@ -21,13 +21,13 @@ DynamicLibrary true - v142 + v143 Unicode DynamicLibrary false - v142 + v143 true Unicode @@ -101,7 +101,7 @@ true false ..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) - XINPUT9_1_0.LIB;dinput8.lib;dxguid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + XINPUT9_1_0.LIB;dinput8.lib;dxguid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;winusb.lib;Setupapi.lib;%(AdditionalDependencies) Xinput.h -d2:-FH4- %(AdditionalOptions)