From 9d3023f612a1019df89d96229a6d369426bc7567 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 be971055ff..9274963d80 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -1239,7 +1239,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 373a237a8fcdfa49a624bd6948dddbd21ea52dff 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 9274963d80..fb67a93d65 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -996,6 +996,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 3d9321e69319437c5703cd88c26c23727f08cdb2 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 fb67a93d65..8d128bbfcb 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -902,6 +902,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, ""); AchievementManager::GetInstance().m_update_callback({.failed_login_code = result}); return; } @@ -1004,6 +1005,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 94215bd9bff284397723a737d761c8456f72692d 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 8d128bbfcb..f39f76342d 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -1006,6 +1006,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.m_update_callback({.failed_login_code = result}); return; } diff --git a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp index 6d3ed55ebd..bf7e3a91fa 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;