From 3fe52bb7fb260700eeb8d10e1395177669e5446e Mon Sep 17 00:00:00 2001 From: Jamiras Date: Thu, 3 Jun 2021 20:51:19 -0600 Subject: [PATCH] add toggle/setting for challenge indicators --- cheevos/cheevos.c | 5 +++-- configuration.c | 1 + configuration.h | 1 + gfx/widgets/gfx_widget_leaderboard_display.c | 2 +- intl/msg_hash_lbl.h | 4 ++++ intl/msg_hash_us.h | 8 ++++++++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/menu_displaylist.c | 1 + menu/menu_setting.c | 16 ++++++++++++++++ msg_hash.h | 1 + retroarch.cfg | 5 +++++ 11 files changed, 45 insertions(+), 3 deletions(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index 7fe3da50dd..a8c84706e5 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -1184,14 +1184,15 @@ static void rcheevos_lboard_updated(rcheevos_ralboard_t* lboard, int value, static void rcheevos_challenge_started(rcheevos_racheevo_t* cheevo, int value, bool widgets_ready) { - if (cheevo && widgets_ready && rcheevos_locals.leaderboard_trackers) + settings_t* settings = config_get_ptr(); + if (cheevo && widgets_ready && settings->bools.cheevos_challenge_indicators) gfx_widgets_set_challenge_display(cheevo->id, cheevo->badge); } static void rcheevos_challenge_ended(rcheevos_racheevo_t* cheevo, int value, bool widgets_ready) { - if (cheevo && widgets_ready && rcheevos_locals.leaderboard_trackers) + if (cheevo && widgets_ready) gfx_widgets_set_challenge_display(cheevo->id, NULL); } diff --git a/configuration.c b/configuration.c index 186cd76947..fa524ceaa3 100644 --- a/configuration.c +++ b/configuration.c @@ -1742,6 +1742,7 @@ static struct config_bool_setting *populate_settings_bool( SETTING_BOOL("cheevos_enable", &settings->bools.cheevos_enable, true, DEFAULT_CHEEVOS_ENABLE, false); SETTING_BOOL("cheevos_test_unofficial", &settings->bools.cheevos_test_unofficial, true, false, false); SETTING_BOOL("cheevos_hardcore_mode_enable", &settings->bools.cheevos_hardcore_mode_enable, true, false, false); + SETTING_BOOL("cheevos_challenge_indicators", &settings->bools.cheevos_challenge_indicators, true, true, false); SETTING_BOOL("cheevos_richpresence_enable", &settings->bools.cheevos_richpresence_enable, true, true, false); SETTING_BOOL("cheevos_unlock_sound_enable", &settings->bools.cheevos_unlock_sound_enable, true, false, false); SETTING_BOOL("cheevos_verbose_enable", &settings->bools.cheevos_verbose_enable, true, false, false); diff --git a/configuration.h b/configuration.h index 0bad72ce8a..4b83ca4bef 100644 --- a/configuration.h +++ b/configuration.h @@ -732,6 +732,7 @@ typedef struct settings bool cheevos_auto_screenshot; bool cheevos_start_active; bool cheevos_unlock_sound_enable; + bool cheevos_challenge_indicators; /* Camera */ bool camera_allow; diff --git a/gfx/widgets/gfx_widget_leaderboard_display.c b/gfx/widgets/gfx_widget_leaderboard_display.c index 444a6565e7..284efdf5ea 100644 --- a/gfx/widgets/gfx_widget_leaderboard_display.c +++ b/gfx/widgets/gfx_widget_leaderboard_display.c @@ -121,7 +121,7 @@ static void gfx_widget_leaderboard_display_frame(void* data, void* userdata) if (state->challenge_count) { - const unsigned widget_size = video_width / 32; + const unsigned widget_size = spacing * 4; x = video_width; y -= (widget_size + spacing); diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 5a626c4b9e..3e4bd15f52 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -396,6 +396,10 @@ MSG_HASH( MENU_ENUM_LABEL_CHEEVOS_START_ACTIVE, "cheevos_start_active" ) +MSG_HASH( + MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, + "cheevos_challenge_indicators" + ) MSG_HASH( MENU_ENUM_LABEL_CLOSE_CONTENT, "unload_core" diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 6fa127a0ac..47c6cd151b 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -4980,6 +4980,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_CHEEVOS_START_ACTIVE, "Start the session with all achievements active (even the ones previously unlocked)." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_CHALLENGE_INDICATORS, + "Challenge Indicators" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_CHALLENGE_INDICATORS, + "Allows achievements to display an on-screen indicator while the achievement can be earned." + ) /* Settings > Network */ diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index f0103d59fb..a5b08e3db8 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -182,6 +182,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_enable, MENU_ 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) #if defined(HAVE_AUDIOMIXER) @@ -3554,6 +3555,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, 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; case MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_richpresence_enable); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index b2f26bad9a..fc273497c3 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -7382,6 +7382,7 @@ unsigned menu_displaylist_build_list( {MENU_ENUM_LABEL_CHEEVOS_PASSWORD, PARSE_ONLY_STRING, false }, {MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE, PARSE_ONLY_BOOL, false }, {MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE, PARSE_ONLY_STRING_OPTIONS, false }, + {MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, PARSE_ONLY_BOOL, false }, {MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE, PARSE_ONLY_BOOL, false }, {MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE, PARSE_ONLY_BOOL, false }, {MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL, PARSE_ONLY_BOOL, false }, diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 1d5067ca64..238658ca3e 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -17908,6 +17908,22 @@ static bool setting_append_list( (*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_challenge_indicators, + MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, + MENU_ENUM_LABEL_VALUE_CHEEVOS_CHALLENGE_INDICATORS, + true, + 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_richpresence_enable, diff --git a/msg_hash.h b/msg_hash.h index 8a9ec5d700..fdfe731fd6 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1404,6 +1404,7 @@ enum msg_hash_enums MENU_LABEL(CHEEVOS_UNLOCK_SOUND_ENABLE), MENU_LABEL(CHEEVOS_AUTO_SCREENSHOT), MENU_LABEL(CHEEVOS_START_ACTIVE), + MENU_LABEL(CHEEVOS_CHALLENGE_INDICATORS), MENU_LABEL(CHEEVOS_ENABLE), MENU_LABEL(CHEEVOS_DESCRIPTION), MENU_LABEL(ACCOUNTS_RETRO_ACHIEVEMENTS), diff --git a/retroarch.cfg b/retroarch.cfg index 03895f1115..8c55924f23 100644 --- a/retroarch.cfg +++ b/retroarch.cfg @@ -884,6 +884,11 @@ # 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 + # 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