From 5224e9748141c612c75481e8e09a77444bad02e4 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Sat, 26 Dec 2020 11:12:09 -0700 Subject: [PATCH] add confirmation submenu to achievements hardcore toggle --- cheevos/cheevos.c | 47 ++++++++++++++++++++++++++++--- cheevos/cheevos.h | 3 +- intl/msg_hash_us.h | 24 ++++++++++++++-- menu/cbs/menu_cbs_deferred_push.c | 33 +++++++++++++--------- menu/cbs/menu_cbs_ok.c | 16 ++++++++++- menu/cbs/menu_cbs_sublabel.c | 37 ++++++++++++++++++++---- menu/cbs/menu_cbs_title.c | 22 +++++++++++++++ menu/drivers/xmb.c | 2 ++ menu/menu_cbs.h | 1 + menu/menu_displaylist.c | 8 ++++++ menu/menu_displaylist.h | 1 + msg_hash.h | 3 ++ 12 files changed, 169 insertions(+), 28 deletions(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index 0e91fae1d7..34cd4637c6 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -1168,6 +1168,45 @@ static void rcheevos_append_menu_achievement( } #endif +void rcheevos_populate_hardcore_pause_menu(void* data) +{ +#ifdef HAVE_MENU + menu_displaylist_info_t* info = (menu_displaylist_info_t*)data; + settings_t* settings = config_get_ptr(); + bool cheevos_hardcore_mode_enable = settings->bools.cheevos_hardcore_mode_enable; + + if (cheevos_hardcore_mode_enable && rcheevos_locals.loaded) + { + if (rcheevos_locals.hardcore_active) + { + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE_CANCEL), + msg_hash_to_str(MENU_ENUM_SUBLABEL_ACHIEVEMENT_PAUSE_CANCEL), + MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_CANCEL, + MENU_SETTING_ACTION_CLOSE, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE), + msg_hash_to_str(MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE), + MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE, + MENU_SETTING_ACTION_PAUSE_ACHIEVEMENTS, 0, 0); + } + else + { + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_RESUME_CANCEL), + msg_hash_to_str(MENU_ENUM_SUBLABEL_ACHIEVEMENT_RESUME_CANCEL), + MENU_ENUM_LABEL_ACHIEVEMENT_RESUME_CANCEL, + MENU_SETTING_ACTION_CLOSE, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_RESUME), + msg_hash_to_str(MENU_ENUM_LABEL_ACHIEVEMENT_RESUME), + MENU_ENUM_LABEL_ACHIEVEMENT_RESUME, + MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS, 0, 0); + } + } +#endif +} + void rcheevos_populate_menu(void* data) { #ifdef HAVE_MENU @@ -1187,14 +1226,14 @@ void rcheevos_populate_menu(void* data) if (rcheevos_locals.hardcore_active) menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE), - msg_hash_to_str(MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE), - MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE_MENU), + MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU, MENU_SETTING_ACTION_PAUSE_ACHIEVEMENTS, 0, 0); else menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_RESUME), - msg_hash_to_str(MENU_ENUM_LABEL_ACHIEVEMENT_RESUME), - MENU_ENUM_LABEL_ACHIEVEMENT_RESUME, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE_MENU), + MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU, MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS, 0, 0); } diff --git a/cheevos/cheevos.h b/cheevos/cheevos.h index 3298dd892a..479446563d 100644 --- a/cheevos/cheevos.h +++ b/cheevos/cheevos.h @@ -45,7 +45,8 @@ bool rcheevos_load(const void *data); void rcheevos_reset_game(void); -void rcheevos_populate_menu(void *data); +void rcheevos_populate_menu(void* data); +void rcheevos_populate_hardcore_pause_menu(void* data); void rcheevos_get_achievement_state(unsigned index, char* buffer, size_t buffer_size); bool rcheevos_get_description(rcheevos_ctx_desc_t *desc); diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 1fdd85b892..1736524582 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -6840,13 +6840,33 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY, "No achievements to display" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE_MENU, + "ToggleCheevosHardcore" /* not-displayed - needed to resolve submenu */ + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE_CANCEL, + "Cancel Pause Achievements Hardcore Mode" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_ACHIEVEMENT_PAUSE_CANCEL, + "Leaves achievement hardcore mode enabled for the current session" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_RESUME_CANCEL, + "Cancel Resume Achievements Hardcore Mode" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_ACHIEVEMENT_RESUME_CANCEL, + "Leaves achievement hardcore mode disabled for the current session" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE, "Pause Achievements Hardcore Mode" ) MSG_HASH( MENU_ENUM_SUBLABEL_ACHIEVEMENT_PAUSE, - "Pause achievements for current session. (This action will enable save states, cheats, rewind, pause, and slow-motion)" + "Pauses achievement hardcore mode for the current session. (This action will enable save states, cheats, rewind, pause, and slow-motion)" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_RESUME, @@ -6854,7 +6874,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_ACHIEVEMENT_RESUME, - "Resume achievements for current session. (This action will disable save states, cheats, rewind, pause, and slow-motion and reset the current game)" + "Resumes achievement hardcore mode for the current session. (This action will disable save states, cheats, rewind, pause, and slow-motion and reset the current game)" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NOT_LOGGED_IN, diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index d3d703d0d2..7fc1c2adfe 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -158,6 +158,7 @@ GENERIC_DEFERRED_PUSH(deferred_push_content_history_path, DISPLAYLIST_ GENERIC_DEFERRED_PUSH(deferred_push_disc_information, DISPLAYLIST_DISC_INFO) GENERIC_DEFERRED_PUSH(deferred_push_system_information, DISPLAYLIST_SYSTEM_INFO) GENERIC_DEFERRED_PUSH(deferred_push_network_information, DISPLAYLIST_NETWORK_INFO) +GENERIC_DEFERRED_PUSH(deferred_push_achievement_pause_menu, DISPLAYLIST_ACHIEVEMENT_PAUSE_MENU) GENERIC_DEFERRED_PUSH(deferred_push_achievement_list, DISPLAYLIST_ACHIEVEMENT_LIST) GENERIC_DEFERRED_PUSH(deferred_push_rdb_collection, DISPLAYLIST_PLAYLIST_COLLECTION) GENERIC_DEFERRED_PUSH(deferred_main_menu_list, DISPLAYLIST_MAIN_MENU) @@ -662,7 +663,7 @@ static int menu_cbs_init_bind_deferred_push_compare_label( int (*cb)(menu_displaylist_info_t *info); } deferred_info_list_t; - deferred_info_list_t info_list[] = { + const deferred_info_list_t info_list[] = { {MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST, deferred_push_dump_disk_list}, {MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, deferred_push_load_disk_list}, {MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, deferred_push_favorites_list}, @@ -820,6 +821,7 @@ static int menu_cbs_init_bind_deferred_push_compare_label( #ifdef HAVE_VIDEO_LAYOUT {MENU_ENUM_LABEL_VIDEO_LAYOUT_PATH, deferred_push_video_layout_path}, #endif + {MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE_MENU, deferred_push_achievement_pause_menu}, {MENU_ENUM_LABEL_ACHIEVEMENT_LIST, deferred_push_achievement_list}, {MENU_ENUM_LABEL_CORE_COUNTERS, deferred_push_core_counters}, {MENU_ENUM_LABEL_FRONTEND_COUNTERS, deferred_push_frontend_counters}, @@ -866,23 +868,26 @@ static int menu_cbs_init_bind_deferred_push_compare_label( #endif }; - for (i = 0; i < ARRAY_SIZE(info_list); i++) + if (!string_is_equal(label, "null")) { - if (string_is_equal(label, msg_hash_to_str(info_list[i].type))) + for (i = 0; i < ARRAY_SIZE(info_list); i++) { - BIND_ACTION_DEFERRED_PUSH(cbs, info_list[i].cb); - return 0; + if (string_is_equal(label, msg_hash_to_str(info_list[i].type))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, info_list[i].cb); + return 0; + } } - } - /* MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL requires special - * treatment, since the label has the format: - * | - * i.e. cannot use a normal string_is_equal() */ - if (string_starts_with(label, - msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL))) - { - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_rdb_entry_detail); + /* MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL requires special + * treatment, since the label has the format: + * | + * i.e. cannot use a normal string_is_equal() */ + if (string_starts_with(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_rdb_entry_detail); + } } if (cbs->enum_idx != MSG_UNKNOWN) diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 7e1b3fc126..5093e55f91 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -288,6 +288,8 @@ static enum msg_hash_enums action_ok_dl_to_enum(unsigned lbl) return MENU_ENUM_LABEL_DEFERRED_MIXER_STREAM_SETTINGS_LIST; case ACTION_OK_DL_ACCOUNTS_LIST: return MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST; + case ACTION_OK_DL_ACHIEVEMENTS_HARDCORE_PAUSE_LIST: + return MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST; case ACTION_OK_DL_INPUT_SETTINGS_LIST: return MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST; case ACTION_OK_DL_INPUT_MENU_SETTINGS_LIST: @@ -1241,6 +1243,7 @@ int generic_action_ok_displaylist_push(const char *path, } break; case ACTION_OK_DL_ACCOUNTS_LIST: + case ACTION_OK_DL_ACHIEVEMENTS_HARDCORE_PAUSE_LIST: case ACTION_OK_DL_INPUT_SETTINGS_LIST: case ACTION_OK_DL_INPUT_MENU_SETTINGS_LIST: case ACTION_OK_DL_INPUT_HAPTIC_FEEDBACK_SETTINGS_LIST: @@ -4046,10 +4049,17 @@ static int action_ok_save_state(const char *path, return 0; } +static int action_ok_close_submenu(const char* path, + const char* label, unsigned type, size_t idx, size_t entry_idx) +{ + return action_cancel_pop_default(path, label, type, idx); +} + static int action_ok_cheevos_toggle_hardcore_mode(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { generic_action_ok_command(CMD_EVENT_CHEEVOS_HARDCORE_MODE_TOGGLE); + action_cancel_pop_default(path, label, type, idx); return generic_action_ok_command(CMD_EVENT_RESUME); } @@ -5341,6 +5351,7 @@ DEFAULT_ACTION_OK_FUNC(action_ok_rpl_entry, ACTION_OK_DL_RPL_ENTRY) DEFAULT_ACTION_OK_FUNC(action_ok_open_archive_detect_core, ACTION_OK_DL_OPEN_ARCHIVE_DETECT_CORE) DEFAULT_ACTION_OK_FUNC(action_ok_file_load_music, ACTION_OK_DL_MUSIC) DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_list, ACTION_OK_DL_ACCOUNTS_LIST) +DEFAULT_ACTION_OK_FUNC(action_ok_push_achievements_hardcore_pause_list, ACTION_OK_DL_ACHIEVEMENTS_HARDCORE_PAUSE_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_push_driver_settings_list, ACTION_OK_DL_DRIVER_SETTINGS_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_push_crt_switchres_settings_list, ACTION_OK_DL_CRT_SWITCHRES_SETTINGS_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_push_video_settings_list, ACTION_OK_DL_VIDEO_SETTINGS_LIST) @@ -7403,8 +7414,11 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, {MENU_ENUM_LABEL_CORE_DELETE, action_ok_core_delete}, {MENU_ENUM_LABEL_CORE_CREATE_BACKUP, action_ok_core_create_backup}, {MENU_ENUM_LABEL_DELETE_PLAYLIST, action_ok_delete_playlist}, - {MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE, action_ok_cheevos_toggle_hardcore_mode}, + {MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU, action_ok_push_default}, + {MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE, action_ok_cheevos_toggle_hardcore_mode}, + {MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_CANCEL, action_ok_close_submenu}, {MENU_ENUM_LABEL_ACHIEVEMENT_RESUME, action_ok_cheevos_toggle_hardcore_mode}, + {MENU_ENUM_LABEL_ACHIEVEMENT_RESUME_CANCEL, action_ok_close_submenu }, {MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_LIST, action_ok_push_manual_content_scan_list}, {MENU_ENUM_LABEL_AUDIO_OUTPUT_SETTINGS, action_ok_push_audio_output_settings_list}, {MENU_ENUM_LABEL_AUDIO_RESAMPLER_SETTINGS, action_ok_push_audio_resampler_settings_list}, diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 6f22975d58..6d60b0caa9 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -93,6 +93,18 @@ static int menu_action_sublabel_file_browser_core(file_list_t *list, unsigned ty return 1; } +#ifdef HAVE_CHEEVOS +static int menu_action_sublabel_achievement_pause_menu(file_list_t* list, + unsigned type, unsigned i, const char* label, const char* path, char* s, size_t len) +{ + if (string_is_equal(path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE))) + strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_ACHIEVEMENT_PAUSE), len); + else + strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_ACHIEVEMENT_RESUME), len); + return 1; +} +#endif + #ifdef HAVE_AUDIOMIXER DEFAULT_SUBLABEL_MACRO(menu_action_sublabel_setting_audio_mixer_add_to_mixer_and_play, MENU_ENUM_SUBLABEL_ADD_TO_MIXER_AND_PLAY) @@ -164,6 +176,8 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_onscreen_display_settings_list,MENU_ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_settings_list, MENU_ENUM_SUBLABEL_CORE_SETTINGS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_information_list_list, MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_achievement_list, MENU_ENUM_SUBLABEL_ACHIEVEMENT_LIST) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_achievement_pause_cancel, MENU_ENUM_SUBLABEL_ACHIEVEMENT_PAUSE_CANCEL) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_achievement_resume_cancel, MENU_ENUM_SUBLABEL_ACHIEVEMENT_RESUME_CANCEL) 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) @@ -3388,9 +3402,24 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CONNECT_BLUETOOTH: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_bluetooth_list); break; +#ifdef HAVE_NETWORKING + case MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_netplay_room); + break; +#endif +#ifdef HAVE_CHEEVOS case MENU_ENUM_LABEL_ACHIEVEMENT_LIST: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_achievement_list); break; + case MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU: + BIND_ACTION_SUBLABEL(cbs, menu_action_sublabel_achievement_pause_menu); + break; + case MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_CANCEL: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_achievement_pause_cancel); + break; + case MENU_ENUM_LABEL_ACHIEVEMENT_RESUME_CANCEL: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_achievement_resume_cancel); + break; case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY: case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE: case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY: @@ -3398,11 +3427,6 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CHEEVOS_UNOFFICIAL_ENTRY: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_entry); break; -#ifdef HAVE_NETWORKING - case MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM: - BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_netplay_room); - break; -#endif case MENU_ENUM_LABEL_CHEEVOS_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_enable); break; @@ -3422,7 +3446,7 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_badges_enable); break; case MENU_ENUM_LABEL_CHEEVOS_UNLOCK_SOUND_ENABLE: -#if defined(HAVE_CHEEVOS) && defined(HAVE_AUDIOMIXER) +#ifdef HAVE_AUDIOMIXER BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_unlock_sound_enable); #endif break; @@ -3435,6 +3459,7 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CHEEVOS_START_ACTIVE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_start_active); break; +#endif case MENU_ENUM_LABEL_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_settings); break; diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index b857c6152f..3f4d68c3bd 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -27,6 +27,10 @@ #include "../../core_option_manager.h" #include "../../core_info.h" +#ifdef HAVE_CHEEVOS +#include "../../cheevos/cheevos.h" +#endif + #ifndef BIND_ACTION_GET_TITLE #define BIND_ACTION_GET_TITLE(cbs, name) (cbs)->action_get_title = (name) #endif @@ -498,6 +502,18 @@ static int action_get_title_dropdown_input_description_kbd( path, port, s, len); } +#ifdef HAVE_CHEEVOS +static int action_get_title_achievement_pause_menu( + const char* path, const char* label, unsigned menu_type, char* s, size_t len) +{ + if (rcheevos_hardcore_active()) + strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE), len); + else + strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_RESUME), len); + return 1; +} +#endif + DEFAULT_TITLE_MACRO(action_get_quick_menu_override_options, MENU_ENUM_LABEL_VALUE_QUICK_MENU_OVERRIDE_OPTIONS) DEFAULT_TITLE_MACRO(action_get_user_accounts_cheevos_list, MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS) DEFAULT_TITLE_MACRO(action_get_user_accounts_youtube_list, MENU_ENUM_LABEL_VALUE_ACCOUNTS_YOUTUBE) @@ -662,7 +678,9 @@ DEFAULT_FILL_TITLE_MACRO(action_get_title_manual_content_scan_dir, MENU_ENUM_LAB DEFAULT_TITLE_COPY_MACRO(action_get_title_help, MENU_ENUM_LABEL_VALUE_HELP_LIST) DEFAULT_TITLE_COPY_MACRO(action_get_title_input_settings, MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS) +#ifdef HAVE_CHEEVOS DEFAULT_TITLE_COPY_MACRO(action_get_title_cheevos_list, MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST) +#endif DEFAULT_TITLE_COPY_MACRO(action_get_title_video_shader_parameters,MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS) DEFAULT_TITLE_COPY_MACRO(action_get_title_video_shader_preset_parameters,MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS) DEFAULT_TITLE_COPY_MACRO(action_get_title_video_shader_preset_save,MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE) @@ -1075,8 +1093,12 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, action_get_playlist_settings_list}, {MENU_ENUM_LABEL_DEFERRED_PLAYLIST_MANAGER_LIST, action_get_playlist_manager_list}, +#ifdef HAVE_CHEEVOS + {MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_PAUSE_MENU, + action_get_title_achievement_pause_menu}, {MENU_ENUM_LABEL_ACHIEVEMENT_LIST, action_get_title_cheevos_list}, +#endif {MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS, action_get_title_video_shader_parameters}, {MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS, diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index ddc09d8a2e..6c6f406836 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -57,7 +57,9 @@ #include "../../tasks/tasks_internal.h" +#ifdef HAVE_CHEEVOS #include "../../cheevos/badges.h" +#endif #include "../../content.h" #define XMB_RIBBON_ROWS 64 diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 6b33dc29ae..dd69f5b6f5 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -178,6 +178,7 @@ enum ACTION_OK_DL_MENU_SOUNDS_LIST, ACTION_OK_DL_MENU_FILE_BROWSER_SETTINGS_LIST, ACTION_OK_DL_RETRO_ACHIEVEMENTS_SETTINGS_LIST, + ACTION_OK_DL_ACHIEVEMENTS_HARDCORE_PAUSE_LIST, ACTION_OK_DL_UPDATER_SETTINGS_LIST, ACTION_OK_DL_BLUETOOTH_SETTINGS_LIST, ACTION_OK_DL_WIFI_SETTINGS_LIST, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index e8273d5f43..96d5a09788 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -10557,6 +10557,14 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, #endif } break; + case DISPLAYLIST_ACHIEVEMENT_PAUSE_MENU: +#ifdef HAVE_CHEEVOS + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + rcheevos_populate_hardcore_pause_menu(info); +#endif + info->need_push = true; + info->need_refresh = true; + break; case DISPLAYLIST_ACHIEVEMENT_LIST: #ifdef HAVE_CHEEVOS menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index b272a453ed..da710fb502 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -139,6 +139,7 @@ enum menu_displaylist_ctl_state DISPLAYLIST_SHADER_PRESET_REMOVE, DISPLAYLIST_NETWORK_INFO, DISPLAYLIST_SYSTEM_INFO, + DISPLAYLIST_ACHIEVEMENT_PAUSE_MENU, DISPLAYLIST_ACHIEVEMENT_LIST, DISPLAYLIST_USER_BINDS_LIST, DISPLAYLIST_ACCOUNTS_LIST, diff --git a/msg_hash.h b/msg_hash.h index 73b7952459..200336010e 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2113,6 +2113,9 @@ enum msg_hash_enums MENU_LABEL(SYSTEM_INFORMATION), MENU_LABEL(ACHIEVEMENT_LIST), MENU_LABEL(ACHIEVEMENT_LIST_HARDCORE), + MENU_LABEL(ACHIEVEMENT_PAUSE_MENU), + MENU_LABEL(ACHIEVEMENT_PAUSE_CANCEL), + MENU_LABEL(ACHIEVEMENT_RESUME_CANCEL), MENU_LABEL(ACHIEVEMENT_PAUSE), MENU_LABEL(ACHIEVEMENT_RESUME), MENU_LABEL(CORE_INFORMATION),