From 0889e7cf3e3f47707f93a15fdad7aa036cb1897e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 3 Jul 2023 22:17:07 +0200 Subject: [PATCH] Add setting to enable unofficial achievements --- Core/Config.cpp | 1 + Core/Config.h | 1 + Core/RetroAchievements.cpp | 8 ++++++++ Core/RetroAchievements.h | 3 +++ UI/RetroAchievementScreens.cpp | 10 ++++++++-- assets/lang/en_US.ini | 2 +- 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Core/Config.cpp b/Core/Config.cpp index 9c8ac3b2e6..3bb09ab770 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -269,6 +269,7 @@ static const ConfigSetting achievementSettings[] = { ConfigSetting("AchievementsRichPresence", &g_Config.bAchievementsRichPresence, true, CfgFlag::DEFAULT), ConfigSetting("AchievementsChallengeMode", &g_Config.bAchievementsChallengeMode, false, CfgFlag::DEFAULT), ConfigSetting("AchievementsEncoreMode", &g_Config.bAchievementsEncoreMode, false, CfgFlag::DEFAULT), + ConfigSetting("AchievementsUnofficial", &g_Config.bAchievementsUnofficial, false, CfgFlag::DEFAULT), ConfigSetting("AchievementsSoundEffects", &g_Config.bAchievementsSoundEffects, true, CfgFlag::DEFAULT), ConfigSetting("AchievementsLogBadMemReads", &g_Config.bAchievementsLogBadMemReads, false, CfgFlag::DEFAULT), diff --git a/Core/Config.h b/Core/Config.h index 66677a6a19..97d67f4a00 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -491,6 +491,7 @@ public: bool bAchievementsRichPresence; bool bAchievementsChallengeMode; bool bAchievementsEncoreMode; + bool bAchievementsUnofficial; bool bAchievementsSoundEffects; bool bAchievementsLogBadMemReads; diff --git a/Core/RetroAchievements.cpp b/Core/RetroAchievements.cpp index ae536d46f3..4654e4242e 100644 --- a/Core/RetroAchievements.cpp +++ b/Core/RetroAchievements.cpp @@ -130,6 +130,13 @@ bool EncoreModeActive() { return rc_client_get_encore_mode_enabled(g_rcClient); } +bool UnofficialEnabled() { + if (!g_rcClient) { + return false; + } + return rc_client_get_unofficial_enabled(g_rcClient); +} + bool IsActive() { return GetGameID() != 0; } @@ -593,6 +600,7 @@ void SetGame(const Path &path) { // Apply pre-load settings. rc_client_set_encore_mode_enabled(g_rcClient, g_Config.bAchievementsEncoreMode ? 1 : 0); + rc_client_set_unofficial_enabled(g_rcClient, g_Config.bAchievementsUnofficial ? 1 : 0); rc_hash_init_custom_filereader(&rc_filereader); rc_hash_init_default_cdreader(); diff --git a/Core/RetroAchievements.h b/Core/RetroAchievements.h index c4d359dbf9..d035fc5f77 100644 --- a/Core/RetroAchievements.h +++ b/Core/RetroAchievements.h @@ -57,6 +57,9 @@ bool IsBlockingExecution(); /// Returns true if features such as save states should be disabled. bool ChallengeModeActive(); +// Returns true if unofficial achievements are enabled. +bool UnofficialEnabled(); + // The new API is so much nicer that we can use it directly instead of wrapping it. So let's expose the client. // Will of course return nullptr if not active. rc_client_t *GetClient(); diff --git a/UI/RetroAchievementScreens.cpp b/UI/RetroAchievementScreens.cpp index 5a36d1991c..0c89e0d316 100644 --- a/UI/RetroAchievementScreens.cpp +++ b/UI/RetroAchievementScreens.cpp @@ -32,8 +32,13 @@ void RetroAchievementsListScreen::CreateAchievementsTab(UI::ViewGroup *achieveme using namespace UI; + int filter = RC_CLIENT_ACHIEVEMENT_CATEGORY_CORE; + if (Achievements::UnofficialEnabled()) { + filter = RC_CLIENT_ACHIEVEMENT_CATEGORY_CORE_AND_UNOFFICIAL; + } + rc_client_achievement_list_t *list = rc_client_create_achievement_list(Achievements::GetClient(), - RC_CLIENT_ACHIEVEMENT_CATEGORY_CORE_AND_UNOFFICIAL, RC_CLIENT_ACHIEVEMENT_LIST_GROUPING_LOCK_STATE); + filter, RC_CLIENT_ACHIEVEMENT_LIST_GROUPING_LOCK_STATE); std::vector unlockedAchievements; std::vector lockedAchievements; @@ -269,8 +274,9 @@ void RetroAchievementsSettingsScreen::CreateSettingsTab(UI::ViewGroup *viewGroup }); viewGroup->Add(new CheckBox(&g_Config.bAchievementsChallengeMode, ac->T("Challenge Mode (no savestates)"))); viewGroup->Add(new CheckBox(&g_Config.bAchievementsEncoreMode, ac->T("Encore Mode"))); + viewGroup->Add(new CheckBox(&g_Config.bAchievementsUnofficial, ac->T("Unofficial achievements"))); viewGroup->Add(new CheckBox(&g_Config.bAchievementsRichPresence, ac->T("Rich Presence")))->SetEnabledPtr(&g_Config.bAchievementsEnable); - viewGroup->Add(new CheckBox(&g_Config.bAchievementsSoundEffects, ac->T("Sound Effects")))->SetEnabledPtr(&g_Config.bAchievementsEnable); // not yet implemented + // viewGroup->Add(new CheckBox(&g_Config.bAchievementsSoundEffects, ac->T("Sound Effects")))->SetEnabledPtr(&g_Config.bAchievementsEnable); // not yet implemented viewGroup->Add(new CheckBox(&g_Config.bAchievementsLogBadMemReads, ac->T("Log bad memory accesses")))->SetEnabledPtr(&g_Config.bAchievementsEnable); // TODO: What are these for? diff --git a/assets/lang/en_US.ini b/assets/lang/en_US.ini index 197d929526..f18edebc1f 100644 --- a/assets/lang/en_US.ini +++ b/assets/lang/en_US.ini @@ -53,7 +53,7 @@ Syncing achievements data... = Syncing achievements data... Test Mode = Test Mode This game has no achievements = This game has no achievements Unlocked achievements = Unlocked achievements -Unofficial = Unofficial +Unofficial achievements = Unofficial achievements [Audio] Alternate speed volume = Alternate speed volume