From 4985a1e19b77204fe9c3e52e485150a93ae1b2d0 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Fri, 8 Aug 2025 17:17:17 -0400 Subject: [PATCH 1/4] Adjusted mastery message Wes from RetroAchievements requested a minor phrasing change to the mastery message. --- Source/Core/Core/AchievementManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index e08593e6968..6aaf75c5691 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -1266,7 +1266,7 @@ void AchievementManager::HandleGameCompletedEvent(const rc_client_event_t* clien return; } bool hardcore = rc_client_get_hardcore_enabled(client); - OSD::AddMessage(fmt::format("Congratulations! {} has {} {}", user_info->display_name, + OSD::AddMessage(fmt::format("Congratulations, {}! You have {} {}", user_info->display_name, hardcore ? "mastered" : "completed", game_info->title), OSD::Duration::VERY_LONG, hardcore ? OSD::Color::YELLOW : OSD::Color::CYAN, &AchievementManager::GetInstance().GetGameBadge()); From b1f27b6cfd2cafc51b63b7d2e51c12297b03c7c6 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Fri, 8 Aug 2025 18:06:04 -0400 Subject: [PATCH 2/4] Added message for bad RetroAchievements token Displays a different message at game launch if RetroAchievements fails specifically due to an invalid or expired API token, instructing the player to log back in with the game closed. --- Source/Core/Core/AchievementManager.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 6aaf75c5691..b732c2f17a2 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -1022,6 +1022,16 @@ void AchievementManager::LoadGameCallback(int result, const char* error_message, OSD::Color::RED); return; } + if (result == RC_LOGIN_REQUIRED || result == RC_INVALID_CREDENTIALS || result == RC_EXPIRED_TOKEN) + { + WARN_LOG_FMT(ACHIEVEMENTS, "Invalid/expired RetroAchievements API token."); + OSD::AddMessage( + "You have been logged out from RetroAchievements due to invalid/expired credentials.", + OSD::Duration::VERY_LONG, OSD::Color::RED); + OSD::AddMessage("Please close the game to log back in before continuing.", + OSD::Duration::VERY_LONG, OSD::Color::RED); + return; + } auto* game = rc_client_get_game_info(client); if (result == RC_OK) From 1ad0a771d944c84b828c287592c896d446786866 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Sat, 9 Aug 2025 21:23:48 -0400 Subject: [PATCH 3/4] Delete Invalid RetroAchievements Tokens --- Source/Core/Core/AchievementManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index b732c2f17a2..7ed27ee1a29 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -927,6 +927,7 @@ void AchievementManager::LoginCallback(int result, const char* error_message, rc { WARN_LOG_FMT(ACHIEVEMENTS, "Failed to login {} to RetroAchievements server.", Config::Get(Config::RA_USERNAME)); + Config::SetBaseOrCurrent(Config::RA_API_TOKEN, ""); instance.update_event.Trigger({.failed_login_code = result}); return; } @@ -1030,6 +1031,7 @@ void AchievementManager::LoadGameCallback(int result, const char* error_message, OSD::Duration::VERY_LONG, OSD::Color::RED); OSD::AddMessage("Please close the game to log back in before continuing.", OSD::Duration::VERY_LONG, OSD::Color::RED); + Config::SetBaseOrCurrent(Config::RA_API_TOKEN, ""); return; } From dd941bed70ddfad689f095488b71bf783310aec2 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Sat, 9 Aug 2025 21:24:36 -0400 Subject: [PATCH 4/4] Improve Achievements Window message Special message on the Achievements window if the token is invalid/expired. --- Source/Core/Core/AchievementManager.cpp | 1 + .../Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 7ed27ee1a29..5423bb29e03 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -1032,6 +1032,7 @@ void AchievementManager::LoadGameCallback(int result, const char* error_message, OSD::AddMessage("Please close the game to log back in before continuing.", OSD::Duration::VERY_LONG, OSD::Color::RED); Config::SetBaseOrCurrent(Config::RA_API_TOKEN, ""); + instance.update_event.Trigger(UpdatedItems{.failed_login_code = result}); return; } diff --git a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp index eeb19810e8a..152b4f0371f 100644 --- a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp +++ b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp @@ -42,6 +42,10 @@ void AchievementSettingsWidget::UpdateData(int login_failed_code) { switch (login_failed_code) { + case RC_LOGIN_REQUIRED: + case RC_EXPIRED_TOKEN: + m_common_login_failed->setText(tr("Logged Out - Credentials Expired")); + break; case RC_INVALID_CREDENTIALS: m_common_login_failed->setText(tr("Login Failed - Invalid Username/Password")); break;