diff --git a/src/game/cheats.c b/src/game/cheats.c index 4567f5e30..80c551090 100644 --- a/src/game/cheats.c +++ b/src/game/cheats.c @@ -309,7 +309,7 @@ MenuItemHandlerResult cheatCheckboxMenuHandler(s32 operation, struct menuitem *i return false; } - if (g_CheatsEnabledBank1 & (1 << item->param)) { + if (g_CheatsEnabledBank1 & (1 << (item->param - 32))) { return true; } @@ -334,11 +334,12 @@ MenuItemHandlerResult cheatCheckboxMenuHandler(s32 operation, struct menuitem *i } } else { // Bank 1 - if (g_CheatsEnabledBank1 & (1 << item->param)) { + if (g_CheatsEnabledBank1 & (1 << (item->param - 32))) { + // We need to subtract 32 on lines like these to avoid undefined behavior, namely ensuring that all cheats are toggled correctly and regardless of build optimiaztion if (1); - g_CheatsEnabledBank1 = g_CheatsEnabledBank1 & ~(1 << item->param); + g_CheatsEnabledBank1 = g_CheatsEnabledBank1 & ~(1 << (item->param - 32)); } else { - g_CheatsEnabledBank1 = g_CheatsEnabledBank1 | 1 << item->param; + g_CheatsEnabledBank1 = g_CheatsEnabledBank1 | (1 << (item->param - 32)); } } }