From 6d81e46608ce4c3f125d38d17316c248170cb935 Mon Sep 17 00:00:00 2001 From: Hyper <34012267+hyperbx@users.noreply.github.com> Date: Sun, 8 Dec 2024 01:17:09 +0000 Subject: [PATCH] Implemented quit input on title screen --- UnleashedRecomp/CMakeLists.txt | 1 + UnleashedRecomp/locale/locale.h | 6 ++ .../patches/ui/CTitleStateIntro_patches.cpp | 60 +++++++++++++++++++ .../patches/ui/CTitleStateMenu_patches.cpp | 2 +- 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 UnleashedRecomp/patches/ui/CTitleStateIntro_patches.cpp diff --git a/UnleashedRecomp/CMakeLists.txt b/UnleashedRecomp/CMakeLists.txt index 50459d3..0d065b8 100644 --- a/UnleashedRecomp/CMakeLists.txt +++ b/UnleashedRecomp/CMakeLists.txt @@ -97,6 +97,7 @@ set(SWA_HID_CXX_SOURCES set(SWA_PATCHES_CXX_SOURCES "patches/ui/CHudPause_patches.cpp" + "patches/ui/CTitleStateIntro_patches.cpp" "patches/ui/CTitleStateMenu_patches.cpp" "patches/ui/frontend_listener.cpp" "patches/audio_patches.cpp" diff --git a/UnleashedRecomp/locale/locale.h b/UnleashedRecomp/locale/locale.h index 7847b9b..3be2f54 100644 --- a/UnleashedRecomp/locale/locale.h +++ b/UnleashedRecomp/locale/locale.h @@ -238,6 +238,12 @@ inline static std::unordered_map +#include +#include +#include +#include + +static bool g_quitMessageOpen = false; +static bool g_quitMessageFaderBegun = false; +static int g_quitMessageResult = -1; + +static bool ProcessQuitMessage() +{ + if (!g_quitMessageOpen) + return false; + + if (g_quitMessageFaderBegun) + return true; + + std::array options = { Localise("Common_Yes"), Localise("Common_No") }; + + if (MessageWindow::Open(Localise("Title_Message_Quit"), &g_quitMessageResult, options, 1) == MSG_CLOSED) + { + switch (g_quitMessageResult) + { + case 0: + Fader::FadeOut(1, []() { ExitProcess(0); }); + g_quitMessageFaderBegun = true; + break; + + case 1: + g_quitMessageOpen = false; + g_quitMessageResult = -1; + break; + } + } + + return true; +} + +// SWA::CTitleStateIntro::Update +PPC_FUNC_IMPL(__imp__sub_82587E50); +PPC_FUNC(sub_82587E50) +{ + auto isAutoSaveWarningShown = *(bool*)g_memory.Translate(0x83367BC1); + + if (isAutoSaveWarningShown) + { + __imp__sub_82587E50(ctx, base); + } + else + { + auto pInputState = SWA::CInputState::GetInstance(); + + if (pInputState && pInputState->GetPadState().IsTapped(SWA::eKeyState_B)) + g_quitMessageOpen = true; + + if (!ProcessQuitMessage()) + __imp__sub_82587E50(ctx, base); + } +} diff --git a/UnleashedRecomp/patches/ui/CTitleStateMenu_patches.cpp b/UnleashedRecomp/patches/ui/CTitleStateMenu_patches.cpp index b76b597..f2fd944 100644 --- a/UnleashedRecomp/patches/ui/CTitleStateMenu_patches.cpp +++ b/UnleashedRecomp/patches/ui/CTitleStateMenu_patches.cpp @@ -8,8 +8,8 @@ #include #include -static bool g_installMessageFaderBegun = false; static bool g_installMessageOpen = false; +static bool g_installMessageFaderBegun = false; static int g_installMessageResult = -1; static bool ProcessInstallMessage()