diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index ad000dfb47..48e748dabd 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -104,13 +104,10 @@ static rcheevos_locals_t rcheevos_locals = {RCHEEVOS_LOAD_STATE_NONE, 0, 0 }, /* load_info */ false,/* hardcore_active */ false,/* loaded */ - true, /* core_supports */ #ifdef HAVE_GFX_WIDGETS false,/* assign_new_trackers */ #endif - false,/* leaderboards_enabled */ - false,/* leaderboard_notifications */ - false /* leaderboard_trackers */ + true /* core_supports */ }; rcheevos_locals_t* get_rcheevos_locals(void) @@ -502,6 +499,7 @@ static void rcheevos_lboard_submit(rcheevos_locals_t* locals, { char buffer[256]; char formatted_value[16]; + const settings_t *settings = config_get_ptr(); #if defined(HAVE_GFX_WIDGETS) /* Hide the tracker */ @@ -523,10 +521,14 @@ static void rcheevos_lboard_submit(rcheevos_locals_t* locals, CHEEVOS_LOG(RCHEEVOS_TAG "Submitting %s for leaderboard %u\n", formatted_value, lboard->id); - /* Show the on-screen message (regardless of notifications setting). */ - snprintf(buffer, sizeof(buffer), "Submitted %s for %s", formatted_value, lboard->title); - runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL, - MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + /* Show the on-screen message. */ + if (settings->bools.cheevos_visibility_lboard_submit) + { + snprintf(buffer, sizeof(buffer), msg_hash_to_str(MSG_LEADERBOARD_SUBMISSION), + formatted_value, lboard->title); + runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL, + MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + } /* Start the submit task */ rcheevos_client_submit_lboard_entry(lboard->id, value); @@ -535,6 +537,7 @@ static void rcheevos_lboard_submit(rcheevos_locals_t* locals, static void rcheevos_lboard_canceled(rcheevos_ralboard_t * lboard, bool widgets_ready) { + const settings_t *settings = config_get_ptr(); char buffer[256]; if (!lboard) return; @@ -547,11 +550,10 @@ static void rcheevos_lboard_canceled(rcheevos_ralboard_t * lboard, rcheevos_hide_leaderboard_tracker(&rcheevos_locals, lboard); #endif - if (rcheevos_locals.leaderboard_notifications) + if (settings->bools.cheevos_visibility_lboard_cancel) { - strlcpy(buffer, "Leaderboard attempt failed: ", - sizeof(buffer)); - strlcat(buffer, lboard->title, sizeof(buffer)); + snprintf(buffer, sizeof(buffer), "%s: %s", + msg_hash_to_str(MSG_LEADERBOARD_FAILED), lboard->title); runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } @@ -561,6 +563,7 @@ static void rcheevos_lboard_started( rcheevos_ralboard_t * lboard, int value, bool widgets_ready) { + const settings_t *settings = config_get_ptr(); char buffer[256]; if (!lboard) return; @@ -574,7 +577,7 @@ static void rcheevos_lboard_started( #if defined(HAVE_GFX_WIDGETS) lboard->value = value; - if (rcheevos_locals.leaderboard_trackers) + if (settings->bools.cheevos_visibility_lboard_trackers) { /* mark the leaderboard as needing a tracker assigned so we can check for merging later */ lboard->active_tracker_id = 0xFF; @@ -582,12 +585,14 @@ static void rcheevos_lboard_started( } #endif - if (rcheevos_locals.leaderboard_notifications) + if (settings->bools.cheevos_visibility_lboard_start) { if (lboard->description && *lboard->description) - snprintf(buffer, sizeof(buffer), "Leaderboard attempt started: %s - %s", lboard->title, lboard->description); + snprintf(buffer, sizeof(buffer), "%s: %s - %s", + msg_hash_to_str(MSG_LEADERBOARD_STARTED), lboard->title, lboard->description); else - snprintf(buffer, sizeof(buffer), "Leaderboard attempt started: %s", lboard->title); + snprintf(buffer, sizeof(buffer), "%s: %s", + msg_hash_to_str(MSG_LEADERBOARD_STARTED), lboard->title); runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); @@ -599,12 +604,13 @@ static void rcheevos_lboard_updated( rcheevos_ralboard_t* lboard, int value, bool widgets_ready) { + const settings_t *settings = config_get_ptr(); if (!lboard) return; lboard->value = value; - if (widgets_ready && rcheevos_locals.leaderboard_trackers && + if (widgets_ready && settings->bools.cheevos_visibility_lboard_trackers && lboard->active_tracker_id && lboard->active_tracker_id <= 31) { char buffer[32]; @@ -931,55 +937,45 @@ static void rcheevos_deactivate_leaderboards(void) } } -void rcheevos_leaderboards_enabled_changed(void) +void rcheevos_leaderboard_trackers_visibility_changed(void) { const settings_t* settings = config_get_ptr(); - const bool leaderboards_enabled = rcheevos_locals.leaderboards_enabled; - const bool leaderboard_trackers = rcheevos_locals.leaderboard_trackers; - - rcheevos_locals.leaderboards_enabled = rcheevos_locals.hardcore_active; - - if (string_is_equal(settings->arrays.cheevos_leaderboards_enable, "true")) - { - rcheevos_locals.leaderboard_notifications = true; - rcheevos_locals.leaderboard_trackers = true; - } -#if defined(HAVE_GFX_WIDGETS) - else if (string_is_equal( - settings->arrays.cheevos_leaderboards_enable, "trackers")) - { - rcheevos_locals.leaderboard_notifications = false; - rcheevos_locals.leaderboard_trackers = true; - } - else if (string_is_equal( - settings->arrays.cheevos_leaderboards_enable, "notifications")) - { - rcheevos_locals.leaderboard_notifications = true; - rcheevos_locals.leaderboard_trackers = false; - } -#endif - else - { - rcheevos_locals.leaderboard_notifications = false; - rcheevos_locals.leaderboard_trackers = false; - } if (rcheevos_locals.loaded) { - if (leaderboards_enabled != rcheevos_locals.leaderboards_enabled) - { - if (rcheevos_locals.leaderboards_enabled) - rcheevos_activate_leaderboards(); - else - rcheevos_deactivate_leaderboards(); - } - #if defined(HAVE_GFX_WIDGETS) - if (!rcheevos_locals.leaderboard_trackers && leaderboard_trackers) + if (!settings->bools.cheevos_visibility_lboard_trackers) { /* Hide any visible trackers */ rcheevos_hide_leaderboard_trackers(); } + else + { + unsigned i; + rc_runtime_lboard_t* lboard = rcheevos_locals.runtime.lboards; + for (i = 0; i < rcheevos_locals.runtime.lboard_count; ++i, ++lboard) + { + if (!lboard->lboard) + continue; + + if (lboard->lboard->state == RC_LBOARD_STATE_STARTED) + { + rcheevos_ralboard_t* ralboard = rcheevos_find_lboard(lboard->id); + if (ralboard && !ralboard->active_tracker_id) + { + /* mark the leaderboard as needing a tracker assigned so we can check for merging later */ + ralboard->active_tracker_id = 0xFF; + rcheevos_locals.assign_new_trackers = true; + } + } + else + { + rcheevos_ralboard_t* ralboard = rcheevos_find_lboard(lboard->id); + if (ralboard && ralboard->active_tracker_id) + rcheevos_hide_leaderboard_tracker(&rcheevos_locals, ralboard); + } + } + } #endif } } @@ -1023,7 +1019,7 @@ static void rcheevos_toggle_hardcore_active(rcheevos_locals_t* locals) rcheevos_enforce_hardcore_settings(); /* Reactivate leaderboards */ - rcheevos_leaderboards_enabled_changed(); + rcheevos_activate_leaderboards(); /* reset the game */ command_event(CMD_EVENT_RESET, NULL); @@ -1055,7 +1051,7 @@ static void rcheevos_toggle_hardcore_active(rcheevos_locals_t* locals) CHEEVOS_LOG(RCHEEVOS_TAG "Hardcore paused\n"); /* deactivate leaderboards */ - rcheevos_leaderboards_enabled_changed(); + rcheevos_deactivate_leaderboards(); } /* re-init rewind */ @@ -1101,8 +1097,11 @@ void rcheevos_hardcore_enabled_changed(void) { rcheevos_toggle_hardcore_active(&rcheevos_locals); - /* update leaderboard state flags */ - rcheevos_leaderboards_enabled_changed(); + /* update leaderboard state */ + if (rcheevos_locals.hardcore_active) + rcheevos_activate_leaderboards(); + else + rcheevos_deactivate_leaderboards(); } else if (rcheevos_locals.hardcore_active && rcheevos_locals.loaded) { @@ -1367,31 +1366,8 @@ bool rcheevos_set_serialized_data(void* buffer) { settings_t* settings = config_get_ptr(); - if (rcheevos_locals.leaderboard_trackers) - { - unsigned i; - rc_runtime_lboard_t* lboard = rcheevos_locals.runtime.lboards; - for (i = 0; i < rcheevos_locals.runtime.lboard_count; ++i, ++lboard) - { - if (!lboard->lboard) - continue; - - if (lboard->lboard->state == RC_LBOARD_STATE_STARTED) - { - rcheevos_ralboard_t* ralboard = rcheevos_find_lboard(lboard->id); - if (ralboard != NULL) - { - char value[32]; - rc_runtime_format_lboard_value(value, sizeof(value), lboard->value, ralboard->format); - gfx_widgets_set_leaderboard_display(lboard->id, value); - } - } - else - { - gfx_widgets_set_leaderboard_display(lboard->id, NULL); - } - } - } + if (settings->bools.cheevos_visibility_lboard_trackers) + rcheevos_leaderboard_trackers_visibility_changed(); if (settings->bools.cheevos_challenge_indicators) { @@ -1790,8 +1766,7 @@ static void rcheevos_start_session_async(retro_task_t* task) * (rich presence has already been activated) */ rcheevos_activate_achievements(); - if (rcheevos_locals.leaderboards_enabled - && rcheevos_locals.hardcore_active) + if (rcheevos_locals.hardcore_active) rcheevos_activate_leaderboards(); /* disable any unsupported achievements */ @@ -2220,7 +2195,6 @@ bool rcheevos_load(const void *data) CHEEVOS_LOG(RCHEEVOS_TAG "Load started, hardcore %sactive\n", rcheevos_hardcore_active() ? "" : "not "); rcheevos_validate_config_settings(); - rcheevos_leaderboards_enabled_changed(); /* Refresh the user agent in case it's not set or has changed */ rcheevos_client_initialize(); diff --git a/cheevos/cheevos.h b/cheevos/cheevos.h index b810a545c1..9d8c341044 100644 --- a/cheevos/cheevos.h +++ b/cheevos/cheevos.h @@ -45,7 +45,7 @@ bool rcheevos_hardcore_active(void); void rcheevos_validate_config_settings(void); -void rcheevos_leaderboards_enabled_changed(void); +void rcheevos_leaderboard_trackers_visibility_changed(void); void rcheevos_set_support_cheevos(bool state); bool rcheevos_get_support_cheevos(void); diff --git a/cheevos/cheevos_locals.h b/cheevos/cheevos_locals.h index 319991b73e..8825439794 100644 --- a/cheevos/cheevos_locals.h +++ b/cheevos/cheevos_locals.h @@ -194,13 +194,10 @@ typedef struct rcheevos_locals_t bool hardcore_active; /* hardcore functionality is active */ bool loaded; /* load task has completed */ - bool core_supports; /* false if core explicitly disables achievements */ #ifdef HAVE_GFX_WIDGETS bool assign_new_trackers; /* a new leaderboard was started and needs a tracker assigned */ #endif - bool leaderboards_enabled; /* leaderboards are enabled */ - bool leaderboard_notifications; /* leaderboard notifications are enabled */ - bool leaderboard_trackers; /* leaderboard trackers are enabled */ + bool core_supports; /* false if core explicitly disables achievements */ } rcheevos_locals_t; rcheevos_locals_t* get_rcheevos_locals(void); diff --git a/config.def.h b/config.def.h index 7173abe96f..b6272785d4 100644 --- a/config.def.h +++ b/config.def.h @@ -193,6 +193,10 @@ #define DEFAULT_CHEEVOS_VISIBILITY_UNLOCK true #define DEFAULT_CHEEVOS_VISIBILITY_MASTERY true #define DEFAULT_CHEEVOS_VISIBILITY_ACCOUNT true +#define DEFAULT_CHEEVOS_VISIBILITY_LBOARD_START true +#define DEFAULT_CHEEVOS_VISIBILITY_LBOARD_SUBMIT true +#define DEFAULT_CHEEVOS_VISIBILITY_LBOARD_CANCEL true +#define DEFAULT_CHEEVOS_VISIBILITY_LBOARD_TRACKERS true #endif /* VIDEO */ diff --git a/configuration.c b/configuration.c index 7821dcfe0f..f1b4c9e4d8 100644 --- a/configuration.c +++ b/configuration.c @@ -1435,7 +1435,7 @@ static struct config_array_setting *populate_settings_array(settings_t *settings SETTING_ARRAY("cheevos_username", settings->arrays.cheevos_username, false, NULL, true); SETTING_ARRAY("cheevos_password", settings->arrays.cheevos_password, false, NULL, true); SETTING_ARRAY("cheevos_token", settings->arrays.cheevos_token, false, NULL, true); - SETTING_ARRAY("cheevos_leaderboards_enable", settings->arrays.cheevos_leaderboards_enable, true, "true", true); + SETTING_ARRAY("cheevos_leaderboards_enable", settings->arrays.cheevos_leaderboards_enable, true, "", true); /* deprecated */ #endif SETTING_ARRAY("video_context_driver", settings->arrays.video_context_driver, false, NULL, true); SETTING_ARRAY("audio_driver", settings->arrays.audio_driver, false, NULL, true); @@ -1959,6 +1959,10 @@ static struct config_bool_setting *populate_settings_bool( SETTING_BOOL("cheevos_visibility_unlock", &settings->bools.cheevos_visibility_unlock, true, DEFAULT_CHEEVOS_VISIBILITY_UNLOCK, false); SETTING_BOOL("cheevos_visibility_mastery", &settings->bools.cheevos_visibility_mastery, true, DEFAULT_CHEEVOS_VISIBILITY_MASTERY, false); SETTING_BOOL("cheevos_visibility_account", &settings->bools.cheevos_visibility_account, true, DEFAULT_CHEEVOS_VISIBILITY_ACCOUNT, false); + SETTING_BOOL("cheevos_visibility_lboard_start", &settings->bools.cheevos_visibility_lboard_start, true, DEFAULT_CHEEVOS_VISIBILITY_LBOARD_START, false); + SETTING_BOOL("cheevos_visibility_lboard_submit", &settings->bools.cheevos_visibility_lboard_submit, true, DEFAULT_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, false); + SETTING_BOOL("cheevos_visibility_lboard_cancel", &settings->bools.cheevos_visibility_lboard_cancel, true, DEFAULT_CHEEVOS_VISIBILITY_LBOARD_CANCEL, false); + SETTING_BOOL("cheevos_visibility_lboard_trackers", &settings->bools.cheevos_visibility_lboard_trackers, true, DEFAULT_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, false); #endif #ifdef HAVE_OVERLAY SETTING_BOOL("input_overlay_enable", &settings->bools.input_overlay_enable, true, config_overlay_enable_default(), false); @@ -2652,12 +2656,6 @@ void config_set_defaults(void *data) settings->arrays.ai_service_url, DEFAULT_AI_SERVICE_URL); -#ifdef HAVE_CHEEVOS - configuration_set_string(settings, - settings->arrays.cheevos_leaderboards_enable, - "true"); -#endif - #ifdef HAVE_MATERIALUI if (g_defaults.menu_materialui_menu_color_theme_enable) settings->uints.menu_materialui_color_theme = g_defaults.menu_materialui_menu_color_theme; @@ -3808,6 +3806,41 @@ static bool config_load_file(global_t *global, if (settings->floats.fastforward_ratio < 0.0f) configuration_set_float(settings, settings->floats.fastforward_ratio, 0.0f); +#ifdef HAVE_CHEEVOS + if (!string_is_empty(settings->arrays.cheevos_leaderboards_enable)) + { + if (string_is_equal(settings->arrays.cheevos_leaderboards_enable, "true")) + { + settings->bools.cheevos_visibility_lboard_start = true; + settings->bools.cheevos_visibility_lboard_submit = true; + settings->bools.cheevos_visibility_lboard_cancel = true; + settings->bools.cheevos_visibility_lboard_trackers = true; + } + else if (string_is_equal(settings->arrays.cheevos_leaderboards_enable, "trackers")) + { + settings->bools.cheevos_visibility_lboard_start = false; + settings->bools.cheevos_visibility_lboard_submit = true; + settings->bools.cheevos_visibility_lboard_cancel = false; + settings->bools.cheevos_visibility_lboard_trackers = true; + } + else if (string_is_equal(settings->arrays.cheevos_leaderboards_enable, "notifications")) + { + settings->bools.cheevos_visibility_lboard_start = true; + settings->bools.cheevos_visibility_lboard_submit = true; + settings->bools.cheevos_visibility_lboard_cancel = true; + settings->bools.cheevos_visibility_lboard_trackers = false; + } + else + { + settings->bools.cheevos_visibility_lboard_start = false; + settings->bools.cheevos_visibility_lboard_submit = false; + settings->bools.cheevos_visibility_lboard_cancel = false; + settings->bools.cheevos_visibility_lboard_trackers = false; + } + settings->arrays.cheevos_leaderboards_enable[0] = '\0'; + } +#endif + #ifdef HAVE_LAKKA configuration_set_bool(settings, settings->bools.ssh_enable, filestream_exists(LAKKA_SSH_PATH)); diff --git a/configuration.h b/configuration.h index 3eb09d9483..d20e94edc6 100644 --- a/configuration.h +++ b/configuration.h @@ -829,6 +829,10 @@ typedef struct settings bool cheevos_visibility_unlock; bool cheevos_visibility_mastery; bool cheevos_visibility_account; + bool cheevos_visibility_lboard_start; + bool cheevos_visibility_lboard_submit; + bool cheevos_visibility_lboard_cancel; + bool cheevos_visibility_lboard_trackers; /* Camera */ bool camera_allow; diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index b14b342507..81f5558c4c 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -523,10 +523,6 @@ MSG_HASH( MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE, "cheevos_hardcore_mode_enable" ) -MSG_HASH( - MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE, - "cheevos_leaderboards_enable" - ) MSG_HASH( MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE, "cheevos_richpresence_enable" @@ -611,6 +607,22 @@ MSG_HASH( MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_ACCOUNT, "cheevos_visibility_account" ) +MSG_HASH( + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START, + "cheevos_visibility_lboard_start" + ) +MSG_HASH( + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, + "cheevos_visibility_lboard_submit" + ) +MSG_HASH( + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL, + "cheevos_visibility_lboard_cancel" + ) +MSG_HASH( + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, + "cheevos_visibility_lboard_trackers" + ) MSG_HASH( MENU_ENUM_LABEL_CLOSE_CONTENT, "unload_core" diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 7d10a367eb..c559a9ab04 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -6378,10 +6378,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_LEADERBOARDS_ENABLE, "Leaderboards" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CHEEVOS_LEADERBOARDS_ENABLE, - "Game specific leaderboards. Has no effect if 'Hardcore Mode' is disabled." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_RICHPRESENCE_ENABLE, "Rich Presence" @@ -6548,6 +6544,38 @@ MSG_HASH( MENU_ENUM_SUBLABEL_CHEEVOS_CHALLENGE_INDICATORS, "Shows on-screen indicators while certain achievements can be earned." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_START, + "Leaderboard Start Messages" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_START, + "Shows a description of a leaderboard when it becomes active." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, + "Leaderboard Submit Messages" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, + "Shows a message with the value being submitted when a leaderboard attempt is completed." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_CANCEL, + "Leaderboard Failed Messages" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL, + "Shows a message when a leaderboard attempt fails." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, + "Leaderboard Trackers" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, + "Shows trackers on the screen with the current value of active leaderboards." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_ACCOUNT, "Login Messages" @@ -14033,6 +14061,18 @@ MSG_HASH( MSG_ACHIEVEMENT_UNLOCKED, "Achievement Unlocked" ) +MSG_HASH( + MSG_LEADERBOARD_STARTED, + "Leaderboard attempt started" + ) +MSG_HASH( + MSG_LEADERBOARD_FAILED, + "Leaderboard attempt failed" + ) +MSG_HASH( + MSG_LEADERBOARD_SUBMISSION, + "Submitted %s for %s" /* Submitted [value] for [leaderboard name] */ + ) MSG_HASH( MSG_CHANGE_THUMBNAIL_TYPE, "Change thumbnail type" diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 29eacfeb0e..b24b234d93 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -296,7 +296,6 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_achievement_resume_cancel, MENU_ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_enable, MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_test_unofficial, MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_hardcore_mode_enable, MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE) -DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_leaderboards_enable, MENU_ENUM_SUBLABEL_CHEEVOS_LEADERBOARDS_ENABLE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_challenge_indicators, MENU_ENUM_SUBLABEL_CHEEVOS_CHALLENGE_INDICATORS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_richpresence_enable, MENU_ENUM_SUBLABEL_CHEEVOS_RICHPRESENCE_ENABLE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_badges_enable, MENU_ENUM_SUBLABEL_CHEEVOS_BADGES_ENABLE) @@ -316,6 +315,10 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_summary, MENU_ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_unlock, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_UNLOCK) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_mastery, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_MASTERY) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_account, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_ACCOUNT) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_lboard_start, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_START) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_lboard_submit, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_lboard_cancel, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_lboard_trackers, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS) #endif DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_views_settings_list, MENU_ENUM_SUBLABEL_MENU_VIEWS_SETTINGS) @@ -4381,9 +4384,6 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_hardcore_mode_enable); break; - case MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE: - BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_leaderboards_enable); - break; case MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_challenge_indicators); break; @@ -4437,6 +4437,18 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_ACCOUNT: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_account); break; + case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_lboard_start); + break; + case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_lboard_submit); + break; + case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_lboard_cancel); + break; + case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_lboard_trackers); + break; #endif case MENU_ENUM_LABEL_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_settings); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 26d77ea739..c18ca8bb42 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -8587,6 +8587,10 @@ unsigned menu_displaylist_build_list( {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_UNLOCK, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_MASTERY, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, PARSE_ONLY_BOOL, true}, + {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START, PARSE_ONLY_BOOL, true}, + {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, PARSE_ONLY_BOOL, true}, + {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL, PARSE_ONLY_BOOL, true}, + {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_ACCOUNT, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE, PARSE_ONLY_BOOL, true}, }; diff --git a/menu/menu_setting.c b/menu/menu_setting.c index ad57907d21..dc7d154d58 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -8913,9 +8913,9 @@ static void achievement_hardcore_mode_write_handler(rarch_setting_t *setting) rcheevos_hardcore_enabled_changed(); } -static void achievement_leaderboards_enabled_write_handler(rarch_setting_t* setting) +static void achievement_leaderboard_trackers_enabled_write_handler(rarch_setting_t* setting) { - rcheevos_leaderboards_enabled_changed(); + rcheevos_leaderboard_trackers_visibility_changed(); } static void setting_get_string_representation_uint_cheevos_visibility_summary( @@ -20212,30 +20212,6 @@ static bool setting_append_list( SD_FLAG_ADVANCED ); - CONFIG_STRING_OPTIONS( - list, list_info, - settings->arrays.cheevos_leaderboards_enable, - sizeof(settings->arrays.cheevos_leaderboards_enable), - MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE, - MENU_ENUM_LABEL_VALUE_CHEEVOS_LEADERBOARDS_ENABLE, - "true", - "false|true", - &group_info, - &subgroup_info, - parent_group, - achievement_leaderboards_enabled_write_handler, - general_read_handler); -#if defined(HAVE_GFX_WIDGETS) - (*list)[list_info->index - 1].values = "false|true|trackers|notifications"; - (*list)[list_info->index - 1].action_ok = setting_action_ok_mapped_string; -#else - (*list)[list_info->index - 1].action_ok = setting_string_action_left_string_options; -#endif - (*list)[list_info->index - 1].action_left = setting_string_action_left_string_options; - (*list)[list_info->index - 1].action_right = setting_string_action_right_string_options; - (*list)[list_info->index - 1].get_string_representation = achievement_leaderboards_get_string_representation; - (*list)[list_info->index - 1].free_flags &= ~SD_FREE_FLAG_VALUES; - CONFIG_BOOL( list, list_info, &settings->bools.cheevos_richpresence_enable, @@ -20499,6 +20475,70 @@ static bool setting_append_list( SD_FLAG_NONE ); + CONFIG_BOOL( + list, list_info, + &settings->bools.cheevos_visibility_lboard_start, + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_START, + DEFAULT_CHEEVOS_VISIBILITY_LBOARD_START, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + + CONFIG_BOOL( + list, list_info, + &settings->bools.cheevos_visibility_lboard_submit, + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, + DEFAULT_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + + CONFIG_BOOL( + list, list_info, + &settings->bools.cheevos_visibility_lboard_cancel, + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_CANCEL, + DEFAULT_CHEEVOS_VISIBILITY_LBOARD_CANCEL, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + + CONFIG_BOOL( + list, list_info, + &settings->bools.cheevos_visibility_lboard_trackers, + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, + DEFAULT_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + achievement_leaderboard_trackers_enabled_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + CONFIG_BOOL( list, list_info, &settings->bools.cheevos_verbose_enable, diff --git a/msg_hash.h b/msg_hash.h index 2a891661df..ab1bab88c2 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -423,6 +423,9 @@ enum msg_hash_enums MSG_TAKING_SCREENSHOT, MSG_SCREENSHOT_SAVED, MSG_ACHIEVEMENT_UNLOCKED, + MSG_LEADERBOARD_STARTED, + MSG_LEADERBOARD_FAILED, + MSG_LEADERBOARD_SUBMISSION, MSG_CHANGE_THUMBNAIL_TYPE, MSG_TOGGLE_FULLSCREEN_THUMBNAILS, MSG_TOGGLE_CONTENT_METADATA, @@ -1754,6 +1757,10 @@ enum msg_hash_enums MENU_LABEL(CHEEVOS_VISIBILITY_UNLOCK), MENU_LABEL(CHEEVOS_VISIBILITY_MASTERY), MENU_LABEL(CHEEVOS_VISIBILITY_ACCOUNT), + MENU_LABEL(CHEEVOS_VISIBILITY_LBOARD_START), + MENU_LABEL(CHEEVOS_VISIBILITY_LBOARD_SUBMIT), + MENU_LABEL(CHEEVOS_VISIBILITY_LBOARD_CANCEL), + MENU_LABEL(CHEEVOS_VISIBILITY_LBOARD_TRACKERS), MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_ALLGAMES, MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_HASCHEEVOS, diff --git a/retroarch.cfg b/retroarch.cfg index a2c7649217..325b1e0f91 100644 --- a/retroarch.cfg +++ b/retroarch.cfg @@ -906,39 +906,53 @@ # cheevos_username = # cheevos_password = -# The hardcore mode disables savestates and cheating features, but it -# makes the achievements points double. -# cheevos_hardcore_mode_enable = false +# Show a popup when logging in to RetroAchievements. +# cheevos_visibility_account = true + +# The hardcore mode disables savestates and cheating features. Achievements +# earned in hardcore mode are uniquely marked so that you can show others +# what you've achieved without emulator assistance features. +# cheevos_hardcore_mode_enable = true + +# Show a popup when an achievement is unlocked. +# cheevos_visibility_unlock = true # Play the 'unlock' audio sound when an achievement is unlocked. # cheevos_unlock_sound_enable = false -# Show RetroAchievements related messages right after loading a game, such as -# successfull login and the number of cheevos you have unlocked for the game. +# Take a screenshot when an achievement is triggered. +# cheevos_auto_screenshot = false + +# Show a popup when all achievements for a game are unlocked. +# cheevos_visibility_mastery = true + +# Shows additional diagnostic and error messages # cheevos_verbose_enable = false # Show achievements' badges in Quick Menu > Achievements List. # (note: has no effect if menu_driver = rgui). # cheevos_badges_enable = false -# Take a screenshot when an achievement is triggered. -# cheevos_auto_screenshot = false - -# Besides achievements, some games also have leaderboards, where you can -# compete for high-scores, speedruns, etc. -# cheevos_leaderboards_enable = false - # Show an on-screen indicator when attempting challenging achievements # to provide feedback when the attempt has failed (for achievements that # support it) # cheevos_challenge_indicators = true +# Shows a message when a leaderboard activates. +# cheevos_visibility_lboard_start = true + +# Shows a message with your score when a leaderboard is submitted to the server. +# cheevos_visibility_lboard_submit = true + +# Shows an on-screen tracker with the current value of active leaderboards. +# cheevos_visibility_lboard_trackers = true + # Send some messages to the RetroAchievements.org saying, for example, # where you are in the game, how many lives you have, your score, etc. # cheevos_richpresence_enable = true # Even after unlocking achievements in previous sessions, you may still want -# to see them triggering in the current session. +# to see them triggering in the current session. (encore mode) # cheevos_start_active = false # Unnoficial achievements are used only for achievement creators and testers.