Skip to content

Commit 82e97bf

Browse files
committed
Fix flash/flashing imagery whenever Hetsu upgrades inventory
1 parent 634f8b6 commit 82e97bf

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

include/game_structs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,7 @@ enum class ScreenId {
711711
ScreenId_END = ErrorViewerDRC_00
712712
};
713713

714-
const char* ScreenIdToString(ScreenId e) {
714+
static const char* ScreenIdToString(ScreenId e) {
715715
switch (e) {
716716
case ScreenId::GamePadBG_00:
717717
return "GamePadBG_00";

src/hooking/cemu_hooks.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class CemuHooks {
9494
static uint32_t GetFramesSinceLastCameraUpdate() { return s_framesSinceLastCameraUpdate.load(); }
9595
static bool IsInGame() {
9696
// todo: check if 3 frames is the right threshold
97-
return GetFramesSinceLastCameraUpdate() <= 4;
97+
return GetFramesSinceLastCameraUpdate() <= 4 && !IsScreenOpen(ScreenId::PauseMenuInfo_00);
9898
}
9999
static bool IsShowingMenu() {
100100
return !IsInGame() || IsScreenOpen(ScreenId::ShopBG_00) || IsScreenOpen(ScreenId::MessageDialog);

src/hooking/settings.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ bool CemuHooks::IsScreenOpen(ScreenId screen) {
1919
return false;
2020
}
2121

22+
std::unordered_set<ScreenId> prevEnabledScreens = {};
23+
2224
void CemuHooks::hook_UpdateSettings(PPCInterpreter_t* hCPU) {
2325
// Log::print("Updated settings!");
2426
hCPU->instructionPointer = hCPU->sprNew.LR;
@@ -37,14 +39,29 @@ void CemuHooks::hook_UpdateSettings(PPCInterpreter_t* hCPU) {
3739
g_settings = settings;
3840
++s_framesSinceLastCameraUpdate;
3941

40-
//constexpr uint32_t maxScreenIdx = std::to_underlying(ScreenId::ScreenId_END);
41-
//for (uint32_t i = 0; i < maxScreenIdx; i++) {
42-
// ScreenId id = (ScreenId)i;
43-
// bool hasScreen = IsScreenOpen(id);
44-
// if (hasScreen) {
45-
// Log::print<INFO>("Screen {} is ON", ScreenIdToString((ScreenId)i));
46-
// }
47-
//}
42+
#ifdef _DEBUG
43+
constexpr uint32_t maxScreenIdx = std::to_underlying(ScreenId::ScreenId_END);
44+
std::unordered_set<ScreenId> currentEnabledScreens;
45+
for (uint32_t i = 0; i < maxScreenIdx; i++) {
46+
ScreenId id = (ScreenId)i;
47+
bool hasScreen = IsScreenOpen(id);
48+
49+
if (hasScreen) {
50+
51+
if (!prevEnabledScreens.contains(id)) {
52+
if (currentEnabledScreens.empty()) {
53+
Log::print<INFO>("---------");
54+
}
55+
Log::print<INFO>("Screen {} is ON", ScreenIdToString((ScreenId)i));
56+
}
57+
currentEnabledScreens.emplace(id);
58+
}
59+
else if (prevEnabledScreens.contains(id)) {
60+
Log::print<INFO>("Screen {} is OFF", ScreenIdToString((ScreenId)i));
61+
}
62+
}
63+
prevEnabledScreens = currentEnabledScreens;
64+
#endif
4865

4966
static bool logSettings = true;
5067
if (logSettings) {

0 commit comments

Comments
 (0)