From 5545a386cf54008da57e032eed2f6c0b91447a0b Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Fri, 6 Jun 2025 19:11:01 -0400 Subject: [PATCH] AchievementManager - Fix Gamecube Bulk Copy The memory copy algorithm (only needed for RetroAchievements devs) was broken for Gamecube as it assumed EXRAM size was zero when in reality it's using ARAM. For the time being, we do not need to use or access ARAM so instead this sets that value to zero for Gamecube titles. --- Source/Core/Core/AchievementManager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index f7428c3a3c..d5b7a0a434 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -329,11 +329,12 @@ void AchievementManager::DoFrame() if (!system) return; Core::CPUThreadGuard thread_guard(*system); - u32 mem2_size = system->GetMemory().GetExRamSizeReal(); + u32 mem2_size = (system->IsWii()) ? system->GetMemory().GetExRamSizeReal() : 0; if (m_cloned_memory.size() != MEM1_SIZE + mem2_size) m_cloned_memory.resize(MEM1_SIZE + mem2_size); system->GetMemory().CopyFromEmu(m_cloned_memory.data(), 0, MEM1_SIZE); - system->GetMemory().CopyFromEmu(m_cloned_memory.data() + MEM1_SIZE, MEM2_START, mem2_size); + if (mem2_size > 0) + system->GetMemory().CopyFromEmu(m_cloned_memory.data() + MEM1_SIZE, MEM2_START, mem2_size); } #endif // RC_CLIENT_SUPPORTS_RAINTEGRATION std::lock_guard lg{m_lock};