Add setting to enable unofficial achievements

This commit is contained in:
Henrik Rydgård 2023-07-03 22:17:07 +02:00
parent 18e6da2e3d
commit 0889e7cf3e
6 changed files with 22 additions and 3 deletions

View file

@ -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),

View file

@ -491,6 +491,7 @@ public:
bool bAchievementsRichPresence;
bool bAchievementsChallengeMode;
bool bAchievementsEncoreMode;
bool bAchievementsUnofficial;
bool bAchievementsSoundEffects;
bool bAchievementsLogBadMemReads;

View file

@ -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();

View file

@ -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();

View file

@ -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<const rc_client_achievement_t *> unlockedAchievements;
std::vector<const rc_client_achievement_t *> 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?

View file

@ -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