From 6d6c4fad1f5026b71a6ab5e06ad33cd67682703d Mon Sep 17 00:00:00 2001 From: Hyper <34012267+hyperbx@users.noreply.github.com> Date: Wed, 20 Nov 2024 04:24:19 +0000 Subject: [PATCH] audio_patches: implemented Music and SE volume --- UnleashedRecomp/CMakeLists.txt | 3 +- UnleashedRecomp/app.cpp | 21 ++++++++++++++ UnleashedRecomp/app.h | 3 ++ UnleashedRecomp/patches/audio_patches.cpp | 28 +++++++++++++++---- UnleashedRecomp/patches/audio_patches.h | 7 +++++ ...atches.cpp => CTitleStateMenu_patches.cpp} | 0 UnleashedRecomp/ui/window.cpp | 13 --------- 7 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 UnleashedRecomp/app.cpp create mode 100644 UnleashedRecomp/app.h create mode 100644 UnleashedRecomp/patches/audio_patches.h rename UnleashedRecomp/patches/ui/{CTitleMenu_patches.cpp => CTitleStateMenu_patches.cpp} (100%) diff --git a/UnleashedRecomp/CMakeLists.txt b/UnleashedRecomp/CMakeLists.txt index 30ac7788..54cb04fc 100644 --- a/UnleashedRecomp/CMakeLists.txt +++ b/UnleashedRecomp/CMakeLists.txt @@ -66,7 +66,7 @@ set(SWA_HID_CXX_SOURCES set(SWA_PATCHES_CXX_SOURCES "patches/ui/CHudPause_patches.cpp" - "patches/ui/CTitleMenu_patches.cpp" + "patches/ui/CTitleStateMenu_patches.cpp" "patches/ui/frontend_listener.cpp" "patches/audio_patches.cpp" "patches/camera_patches.cpp" @@ -84,6 +84,7 @@ set(SWA_UI_CXX_SOURCES ) set(SWA_CXX_SOURCES + "app.cpp" "exports.cpp" "main.cpp" "misc_impl.cpp" diff --git a/UnleashedRecomp/app.cpp b/UnleashedRecomp/app.cpp new file mode 100644 index 00000000..868c3199 --- /dev/null +++ b/UnleashedRecomp/app.cpp @@ -0,0 +1,21 @@ +#include +#include +#include +#include + +double g_deltaTime; + +// CApplication::Update +PPC_FUNC_IMPL(__imp__sub_822C1130); +PPC_FUNC(sub_822C1130) +{ + g_deltaTime = ctx.f1.f64; + + SDL_PumpEvents(); + SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT); + + Window::Update(); + audio_patches::Update(g_deltaTime); + + __imp__sub_822C1130(ctx, base); +} diff --git a/UnleashedRecomp/app.h b/UnleashedRecomp/app.h new file mode 100644 index 00000000..4e1d379e --- /dev/null +++ b/UnleashedRecomp/app.h @@ -0,0 +1,3 @@ +#pragma once + +extern double g_deltaTime; diff --git a/UnleashedRecomp/patches/audio_patches.cpp b/UnleashedRecomp/patches/audio_patches.cpp index 1b032feb..a4389393 100644 --- a/UnleashedRecomp/patches/audio_patches.cpp +++ b/UnleashedRecomp/patches/audio_patches.cpp @@ -1,12 +1,30 @@ #include #include +#include +#include -PPC_FUNC_IMPL(__imp__sub_82B4E130); -PPC_FUNC(sub_82B4E130) +be* GetVolume(bool isMusic = true) { - auto pMusicVolume = (be*)g_memory.Translate(ctx.r3.u32); + auto ppUnkClass = (be*)g_memory.Translate(0x83362FFC); - *pMusicVolume = Config::MusicVolume; + if (!ppUnkClass->get()) + return nullptr; - __imp__sub_82B4E130(ctx, base); + // NOTE (Hyper): This is fine, trust me. See 0x82E58728. + return (be*)g_memory.Translate(4 * ((int)isMusic + 0x1C) + ((be*)g_memory.Translate(ppUnkClass->get() + 4))->get()); } + +void audio_patches::Update(float deltaTime) +{ + auto pMusicVolume = GetVolume(); + auto pSEVolume = GetVolume(false); + + if (!pMusicVolume || !pSEVolume) + return; + + *pSEVolume = Config::SEVolume; + *pMusicVolume = Config::MusicVolume; +} + +// Stub volume setter. +GUEST_FUNCTION_STUB(sub_82E58728); diff --git a/UnleashedRecomp/patches/audio_patches.h b/UnleashedRecomp/patches/audio_patches.h new file mode 100644 index 00000000..b839899e --- /dev/null +++ b/UnleashedRecomp/patches/audio_patches.h @@ -0,0 +1,7 @@ +#pragma once + +class audio_patches +{ +public: + static void Update(float deltaTime); +}; diff --git a/UnleashedRecomp/patches/ui/CTitleMenu_patches.cpp b/UnleashedRecomp/patches/ui/CTitleStateMenu_patches.cpp similarity index 100% rename from UnleashedRecomp/patches/ui/CTitleMenu_patches.cpp rename to UnleashedRecomp/patches/ui/CTitleStateMenu_patches.cpp diff --git a/UnleashedRecomp/ui/window.cpp b/UnleashedRecomp/ui/window.cpp index 7f587044..2df75973 100644 --- a/UnleashedRecomp/ui/window.cpp +++ b/UnleashedRecomp/ui/window.cpp @@ -1,7 +1,6 @@ #include "window.h" #include "sdl_listener.h" #include -#include #include bool m_isFullscreenKeyReleased = true; @@ -175,15 +174,3 @@ void Window::Update() Config::WindowHeight = Window::s_height; } } - -// CApplication::Update -PPC_FUNC_IMPL(__imp__sub_822C1130); -PPC_FUNC(sub_822C1130) -{ - SDL_PumpEvents(); - SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT); - - Window::Update(); - - __imp__sub_822C1130(ctx, base); -}