diff --git a/UnleashedRecomp/api/SWA.h b/UnleashedRecomp/api/SWA.h index 20c3ea9..d85d9a3 100644 --- a/UnleashedRecomp/api/SWA.h +++ b/UnleashedRecomp/api/SWA.h @@ -57,6 +57,7 @@ #include "SWA/CSD/CsdTexListMirage.h" #include "SWA/CSD/GameObjectCSD.h" #include "SWA/Camera/Camera.h" +#include "SWA/Globals.h" #include "SWA/HUD/GeneralWindow/GeneralWindow.h" #include "SWA/HUD/Loading/Loading.h" #include "SWA/HUD/Pause/HudPause.h" diff --git a/UnleashedRecomp/api/SWA/Globals.h b/UnleashedRecomp/api/SWA/Globals.h new file mode 100644 index 0000000..a076da7 --- /dev/null +++ b/UnleashedRecomp/api/SWA/Globals.h @@ -0,0 +1,69 @@ +#pragma once + +#include + +namespace SWA +{ + struct SGlobals + { + // ms_DrawLightFieldSamplingPoint: サンプリング点をデバッグ表示 + static inline bool* ms_DrawLightFieldSamplingPoint; + + // ms_IgnoreLightFieldData: データを無視する + static inline bool* ms_IgnoreLightFieldData; + + // IsCollisionRender + static inline bool* ms_IsCollisionRender; + + // N/A + static inline bool* ms_IsLoading; + + // IsObjectCollisionRender + static inline bool* ms_IsObjectCollisionRender; + + // ms_IsRenderDebugDraw: デバッグ描画 + static inline bool* ms_IsRenderDebugDraw; + + // ms_IsRenderDebugDrawText: デバッグ文字描画 + static inline bool* ms_IsRenderDebugDrawText; + + // ms_IsRenderDebugPositionDraw: デバッグ位置描画 + static inline bool* ms_IsRenderDebugPositionDraw; + + // ms_IsRenderGameMainHud: ゲームメインHUD 描画 + static inline bool* ms_IsRenderGameMainHud; + + // ms_IsRenderHud: 全 HUD 描画 + static inline bool* ms_IsRenderHud; + + // ms_IsRenderHudPause: ポーズメニュー 描画 + static inline bool* ms_IsRenderHudPause; + + // IsTriggerRender + static inline bool* ms_IsTriggerRender; + + // ms_LightFieldDebug: 値をデバッグ表示 + static inline bool* ms_LightFieldDebug; + + // VisualizeLoadedLevel: ミップレベルを視覚化 赤=0, 緑=1, 青=2, 黄=未ロード + static inline bool* ms_VisualizeLoadedLevel; + + static void Init() + { + ms_DrawLightFieldSamplingPoint = (bool*)g_memory.Translate(0x83367BCE); + ms_IgnoreLightFieldData = (bool*)g_memory.Translate(0x83367BCF); + ms_IsCollisionRender = (bool*)g_memory.Translate(0x833678A6); + ms_IsLoading = (bool*)MmGetHostAddress(0x83367A4C); + ms_IsObjectCollisionRender = (bool*)g_memory.Translate(0x83367905); + ms_IsRenderDebugDraw = (bool*)g_memory.Translate(0x8328BB23); + ms_IsRenderDebugDrawText = (bool*)g_memory.Translate(0x8328BB25); + ms_IsRenderDebugPositionDraw = (bool*)g_memory.Translate(0x8328BB24); + ms_IsRenderGameMainHud = (bool*)g_memory.Translate(0x8328BB27); + ms_IsRenderHud = (bool*)MmGetHostAddress(0x8328BB26); + ms_IsRenderHudPause = (bool*)g_memory.Translate(0x8328BB28); + ms_IsTriggerRender = (bool*)g_memory.Translate(0x83367904); + ms_LightFieldDebug = (bool*)g_memory.Translate(0x83367BCD); + ms_VisualizeLoadedLevel = (bool*)g_memory.Translate(0x833678C1); + } + }; +} diff --git a/UnleashedRecomp/app.cpp b/UnleashedRecomp/app.cpp index c485193..27f917d 100644 --- a/UnleashedRecomp/app.cpp +++ b/UnleashedRecomp/app.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -33,6 +34,8 @@ PPC_FUNC(sub_824EB490) App::s_isMissingDLC = !Installer::checkAllDLC(GetGamePath()); App::s_language = Config::Language; + SWA::SGlobals::Init(); + __imp__sub_824EB490(ctx, base); } diff --git a/UnleashedRecomp/gpu/video.cpp b/UnleashedRecomp/gpu/video.cpp index 8d4ce65..efd4f99 100644 --- a/UnleashedRecomp/gpu/video.cpp +++ b/UnleashedRecomp/gpu/video.cpp @@ -3312,7 +3312,7 @@ static RenderPipeline* CreateGraphicsPipelineInRenderThread(PipelineState pipeli pipeline = CreateGraphicsPipeline(pipelineState); #ifdef ASYNC_PSO_DEBUG - bool loading = *reinterpret_cast(g_memory.Translate(0x83367A4C)); + bool loading = *SWA::SGlobals::ms_IsLoading; if (loading) ++g_pipelinesCreatedAsynchronously; diff --git a/UnleashedRecomp/patches/fps_patches.cpp b/UnleashedRecomp/patches/fps_patches.cpp index 3c4b81a..e9ceb21 100644 --- a/UnleashedRecomp/patches/fps_patches.cpp +++ b/UnleashedRecomp/patches/fps_patches.cpp @@ -94,8 +94,7 @@ bool LoadingUpdateMidAsmHook(PPCRegister& r31) g_ppcContext->f1.f64 = deltaTime; g_memory.FindFunction(update)(*g_ppcContext, base); - bool loading = PPC_LOAD_U8(0x83367A4C); - if (loading) + if (*SWA::SGlobals::ms_IsLoading) { now = std::chrono::steady_clock::now(); constexpr auto INTERVAL = 1000000000ns / 30; @@ -104,7 +103,7 @@ bool LoadingUpdateMidAsmHook(PPCRegister& r31) std::this_thread::sleep_until(next); } - return loading; + return *SWA::SGlobals::ms_IsLoading; } // ADXM_WaitVsync diff --git a/UnleashedRecomp/patches/ui/CHudPause_patches.cpp b/UnleashedRecomp/patches/ui/CHudPause_patches.cpp index dbc1b47..c509f88 100644 --- a/UnleashedRecomp/patches/ui/CHudPause_patches.cpp +++ b/UnleashedRecomp/patches/ui/CHudPause_patches.cpp @@ -159,9 +159,7 @@ PPC_FUNC(sub_824B0930) { g_achievementMenuIntroTime = 0; - const auto ms_IsRenderHud = (bool*)g_memory.Translate(0x8328BB26); - - if (*ms_IsRenderHud && pHudPause->m_IsShown && pHudPause->m_Transition == SWA::eTransitionType_Undefined) + if (*SWA::SGlobals::ms_IsRenderHud && pHudPause->m_IsShown && pHudPause->m_Transition == SWA::eTransitionType_Undefined) { ButtonGuide::Open(Button(Localise("Achievements_Name"), EButtonIcon::Back, EButtonAlignment::Left, EFontQuality::Low)); g_isClosed = false; diff --git a/UnleashedRecomp/patches/ui/frontend_listener.cpp b/UnleashedRecomp/patches/ui/frontend_listener.cpp index 0dd92ed..36e4f21 100644 --- a/UnleashedRecomp/patches/ui/frontend_listener.cpp +++ b/UnleashedRecomp/patches/ui/frontend_listener.cpp @@ -1,3 +1,34 @@ #include "frontend_listener.h" +#include +#include +#include +#include -FrontendListener m_frontendListener; +FrontendListener g_frontendListener; + +void FrontendListener::OnSDLEvent(SDL_Event* event) +{ + if (OptionsMenu::s_isVisible) + return; + + switch (event->type) + { + case SDL_KEYDOWN: + { + if (event->key.keysym.sym != SDLK_F8 || m_isF8KeyDown) + break; + + *SWA::SGlobals::ms_IsRenderHud = !*SWA::SGlobals::ms_IsRenderHud; + + LOGFN("HUD {}", *SWA::SGlobals::ms_IsRenderHud ? "ON" : "OFF"); + + m_isF8KeyDown = true; + + break; + } + + case SDL_KEYUP: + m_isF8KeyDown = event->key.keysym.sym != SDLK_F8; + break; + } +} diff --git a/UnleashedRecomp/patches/ui/frontend_listener.h b/UnleashedRecomp/patches/ui/frontend_listener.h index 64cd9f8..821ecbd 100644 --- a/UnleashedRecomp/patches/ui/frontend_listener.h +++ b/UnleashedRecomp/patches/ui/frontend_listener.h @@ -1,42 +1,11 @@ #pragma once -#include #include -#include -#include class FrontendListener : public SDLEventListener { bool m_isF8KeyDown = false; public: - void OnSDLEvent(SDL_Event* event) override - { - if (OptionsMenu::s_isVisible) - return; - - switch (event->type) - { - case SDL_KEYDOWN: - { - if (event->key.keysym.sym != SDLK_F8 || m_isF8KeyDown) - break; - - // アプリケーション設定 / 開発用 / デバッグ / HUD / 全 HUD 描画 - const auto ms_IsRenderHud = (bool*)g_memory.Translate(0x8328BB26); - - *ms_IsRenderHud = !*ms_IsRenderHud; - - LOGFN("HUD {}", *ms_IsRenderHud ? "ON" : "OFF"); - - m_isF8KeyDown = true; - - break; - } - - case SDL_KEYUP: - m_isF8KeyDown = event->key.keysym.sym != SDLK_F8; - break; - } - } + void OnSDLEvent(SDL_Event* event) override; }; diff --git a/UnleashedRecomp/ui/reddog/windows/view_window.cpp b/UnleashedRecomp/ui/reddog/windows/view_window.cpp index 9acf7ac..6b8ebe2 100644 --- a/UnleashedRecomp/ui/reddog/windows/view_window.cpp +++ b/UnleashedRecomp/ui/reddog/windows/view_window.cpp @@ -1,4 +1,5 @@ #include "view_window.h" +#include #include #include #include @@ -15,47 +16,34 @@ void ViewWindow::Draw() Reddog::Checkbox("Render FPS", &Config::ShowFPS.Value); Reddog::Checkbox("Render Debug Lines", &Reddog::DebugDraw::ms_IsDrawLine); Reddog::Checkbox("Render Debug Text", &Reddog::DebugDraw::ms_IsDrawText); - Reddog::Checkbox("Render HUD (F8)", (bool*)g_memory.Translate(0x8328BB26)); + Reddog::Checkbox("Render HUD (F8)", SWA::SGlobals::ms_IsRenderHud); Reddog::Separator(); - //// デバッグ描画 - //Reddog::Checkbox((const char*)u8"Render Debug Draw", (bool*)g_memory.Translate(0x8328BB23)); - //// デバッグ位置描画 - //Reddog::Checkbox((const char*)u8"Render Debug Position Draw", (bool*)g_memory.Translate(0x8328BB24)); - //// デバッグ文字描画 - //Reddog::Checkbox((const char*)u8"Render Debug Draw Text", (bool*)g_memory.Translate(0x8328BB25)); + // Reddog::Checkbox((const char*)u8"Render Debug Draw", SWA::SGlobals::ms_IsRenderDebugDraw); + // Reddog::Checkbox((const char*)u8"Render Debug Position Draw", SWA::SGlobals::ms_IsRenderDebugPositionDraw); + // Reddog::Checkbox((const char*)u8"Render Debug Draw Text", SWA::SGlobals::ms_IsRenderDebugDrawText); - //Reddog::Separator(); + // Reddog::Separator(); - //// 全 HUD 描画 - //Reddog::Checkbox((const char*)g_memory.Translate(0x82031850), (bool*)g_memory.Translate(0x8328BB26)); - // ゲームメインHUD 描画 - Reddog::Checkbox((const char*)u8"Render Main Game HUD", (bool*)g_memory.Translate(0x8328BB27)); - // ポーズメニュー 描画 - Reddog::Checkbox((const char*)u8"Render Pause HUD", (bool*)g_memory.Translate(0x8328BB28)); + // Reddog::Checkbox((const char*)g_memory.Translate(0x82031850), SWA::SGlobals::ms_IsRenderHud); + Reddog::Checkbox((const char*)u8"Render Main Game HUD", SWA::SGlobals::ms_IsRenderGameMainHud); + Reddog::Checkbox((const char*)u8"Render Pause HUD", SWA::SGlobals::ms_IsRenderHudPause); Reddog::Separator(); - // 値をデバッグ表示 - Reddog::Checkbox((const char*)u8"Light Field Debug", (bool*)g_memory.Translate(0x83367BCD)); - // サンプリング点をデバッグ表示 - Reddog::Checkbox((const char*)u8"Draw Light Field Sampling Point", (bool*)g_memory.Translate(0x83367BCE)); - // データを無視する - Reddog::Checkbox((const char*)u8"Ignore Light Field Data", (bool*)g_memory.Translate(0x83367BCF)); + Reddog::Checkbox((const char*)u8"Light Field Debug", SWA::SGlobals::ms_LightFieldDebug); + Reddog::Checkbox((const char*)u8"Draw Light Field Sampling Point", SWA::SGlobals::ms_DrawLightFieldSamplingPoint); + Reddog::Checkbox((const char*)u8"Ignore Light Field Data", SWA::SGlobals::ms_IgnoreLightFieldData); Reddog::Separator(); - // ミップレベルを視覚化 赤=0, 緑=1, 青=2, 黄=未ロード - Reddog::Checkbox((const char*)u8"Visualize Loaded GI Mip Level", (bool*)g_memory.Translate(0x833678C1)); + Reddog::Checkbox((const char*)u8"Visualize Loaded GI Mip Level", SWA::SGlobals::ms_VisualizeLoadedLevel); Reddog::Separator(); - // IsCollisionRender - Reddog::Checkbox((const char*)u8"Render Stage Collision", (bool*)g_memory.Translate(0x833678A6)); - // IsTriggerRender - Reddog::Checkbox((const char*)u8"Render Event Collision", (bool*)g_memory.Translate(0x83367904)); - // IsObjectCollisionRender - Reddog::Checkbox((const char*)u8"Render Rigid Body Collision", (bool*)g_memory.Translate(0x83367905)); + Reddog::Checkbox((const char*)u8"Render Stage Collision", SWA::SGlobals::ms_IsCollisionRender); + Reddog::Checkbox((const char*)u8"Render Event Collision", SWA::SGlobals::ms_IsTriggerRender); + Reddog::Checkbox((const char*)u8"Render Rigid Body Collision", SWA::SGlobals::ms_IsObjectCollisionRender); Reddog::Separator();