From bd589ed641c6432eb07b0601ce46f65382d4dcb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90e=C3=A4Th?= <55578911+DeaTh-G@users.noreply.github.com> Date: Mon, 24 Mar 2025 20:18:24 +0100 Subject: [PATCH] Reset session persistent shoe upgrade bools when achievements are reset (#1429) --- UnleashedRecomp/user/achievement_manager.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/UnleashedRecomp/user/achievement_manager.cpp b/UnleashedRecomp/user/achievement_manager.cpp index 9075976..dbc6c24 100644 --- a/UnleashedRecomp/user/achievement_manager.cpp +++ b/UnleashedRecomp/user/achievement_manager.cpp @@ -1,5 +1,6 @@ #include "achievement_manager.h" #include +#include #include #include @@ -84,6 +85,24 @@ void AchievementManager::UnlockAll() void AchievementManager::Reset() { Data = {}; + + // The first usage of the shoe upgrades get stored within a session persistent boolean flag. + // This causes issues with popping the achievement for the use of these abilities when the player + // starts a new save file after they already used them in a session as these bools are never reset + // unless the game is exited. + // As a solution we reset these flags whenever the achievement data is being reset too. + + // Lay the Smackdown + *(bool*)g_memory.Translate(0x833647C5) = false; + + // Wall Crawler + *(bool*)g_memory.Translate(0x83363004) = false; + + // Airdevil + *(bool*)g_memory.Translate(0x833647BC) = false; + + // Hyperdrive + *(bool*)g_memory.Translate(0x833647C4) = false; } void AchievementManager::Load()