diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 05aff49822..f5067f5d6e 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -11,7 +11,6 @@ #include #include -#include #include "Common/Assert.h" #include "Common/BitUtils.h" @@ -192,12 +191,9 @@ void AchievementManager::LoadGame(const DiscIO::Volume* volume) else m_title_estimate = ""; #endif // RC_CLIENT_SUPPORTS_RAINTEGRATION - if (volume) + if (!m_loading_volume) { - if (!m_loading_volume) - { - m_loading_volume = DiscIO::CreateVolume(volume->GetBlobReader().CopyReader()); - } + m_loading_volume = DiscIO::CreateVolume(volume->GetBlobReader().CopyReader()); } } std::lock_guard lg{m_filereader_lock}; @@ -215,9 +211,10 @@ void AchievementManager::LoadGame(const DiscIO::Volume* volume) } else { + u32 console_id = FindConsoleID(volume->GetVolumeType()); rc_client_set_read_memory_function(m_client, MemoryVerifier); - rc_client_begin_identify_and_load_game(m_client, RC_CONSOLE_GAMECUBE, "", NULL, - 0, LoadGameCallback, NULL); + rc_client_begin_identify_and_load_game(m_client, console_id, "", NULL, 0, LoadGameCallback, + NULL); } } @@ -251,7 +248,8 @@ std::string AchievementManager::CalculateHash(const std::string& file_path) .close = &AchievementManager::FilereaderClose, }; rc_hash_init_custom_filereader(&volume_reader); - rc_hash_generate_from_file(hash_result, RC_CONSOLE_GAMECUBE, file_path.c_str()); + u32 console_id = FindConsoleID(GetInstance().m_loading_volume->GetVolumeType()); + rc_hash_generate_from_file(hash_result, console_id, file_path.c_str()); return std::string(hash_result); } @@ -835,6 +833,20 @@ void AchievementManager::FilereaderClose(void* file_handle) delete static_cast(file_handle); } +u32 AchievementManager::FindConsoleID(const DiscIO::Platform& platform) +{ + switch (platform) + { + case DiscIO::Platform::GameCubeDisc: + return RC_CONSOLE_GAMECUBE; + case DiscIO::Platform::WiiDisc: + case DiscIO::Platform::WiiWAD: + return RC_CONSOLE_WII; + default: + return RC_CONSOLE_UNKNOWN; + } +} + void AchievementManager::LoadDefaultBadges() { std::lock_guard lg{m_lock}; diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index 4efbfe829f..3edb561979 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "Common/CommonTypes.h" @@ -199,6 +200,8 @@ private: static size_t FilereaderRead(void* file_handle, void* buffer, size_t requested_bytes); static void FilereaderClose(void* file_handle); + static u32 FindConsoleID(const DiscIO::Platform& platform); + void LoadDefaultBadges(); static void LoginCallback(int result, const char* error_message, rc_client_t* client, void* userdata); diff --git a/Source/Core/Core/Boot/Boot.cpp b/Source/Core/Core/Boot/Boot.cpp index 373f446dee..2ad7eb270a 100644 --- a/Source/Core/Core/Boot/Boot.cpp +++ b/Source/Core/Core/Boot/Boot.cpp @@ -623,6 +623,8 @@ bool CBoot::BootUp(Core::System& system, const Core::CPUThreadGuard& guard, if (!Boot_WiiWAD(system, wad)) return false; + AchievementManager::GetInstance().LoadGame(&wad); + SConfig::OnTitleDirectlyBooted(guard); return true; }