(cheevos) hierarchical Achievements submenu (#19513)

* new Achievements submenu
This commit is contained in:
Jamiras authored and GitHub committed 2026-09-07 18:09:08 +02:00
1 parent 092c56ab3c
commit 7d94a481e2
21 files changed
+844 -337

No files matched your search

+16 -1
View File
@@ -1,6 +1,6 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2015-2018 - Andre Leiradella
* Copyright (C) 2019-2023 - Brian Weiss
* Copyright (C) 2019-2026 - Brian Weiss
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
@@ -104,12 +104,16 @@ static rcheevos_locals_t rcheevos_locals =
NULL, /* menuitems */
0, /* menuitem_capacity */
0, /* menuitem_count */
0, /* menuitem_info_type */
0, /* menuitem_submenu_type */
0, /* menuitem_submenu_id */
#endif
NULL, /* hash_error */
true, /* hardcore_allowed */
false,/* hardcore_requires_reload */
false,/* hardcore_being_enabled */
true, /* core_supports */
false,/* has_unsupported_achievements */
false,/* badges_loaded */
false /* badges_loading */
};
@@ -1399,6 +1403,8 @@ static void rcheevos_show_game_placard(void)
if (summary.num_unsupported_achievements)
{
rcheevos_locals.has_unsupported_achievements = true;
if (_len < sizeof(msg) - 4)
{
msg[_len++] = ' ';
@@ -1547,6 +1553,14 @@ static void rcheevos_client_login_callback(int result,
CHEEVOS_LOG(RCHEEVOS_TAG "Login did not return token\n");
}
#ifdef HAVE_MENU
{
char badge_name[32];
snprintf(badge_name, sizeof(badge_name), "u%u", rc_djb2(user->username));
rcheevos_client_expire_badge(badge_name, user->avatar_last_updated);
}
#endif
/* show notification (if enabled) */
if (settings->bools.cheevos_visibility_account)
{
@@ -1899,6 +1913,7 @@ bool rcheevos_load(const void *data)
rcheevos_client_download_placeholder_badge();
}
rcheevos_locals.has_unsupported_achievements = false;
rcheevos_locals.hash_error = NULL;
rc_client_set_hardcore_enabled(rcheevos_locals.client, settings->bools.cheevos_hardcore_mode_enable);
rc_client_set_unofficial_enabled(rcheevos_locals.client, settings->bools.cheevos_test_unofficial);
+1
View File
@@ -1,5 +1,6 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2015-2016 - Andre Leiradella
* Copyright (C) 2019-2026 - Brian Weiss
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
+41 -16
View File
@@ -22,6 +22,8 @@
#include <streams/file_stream.h>
#include <string/stdstring.h>
#include <sys/stat.h>
#include "../frontend/frontend_driver.h"
#include "../tasks/tasks_internal.h"
@@ -451,11 +453,11 @@ static void rcheevos_client_download_task_callback(retro_task_t* task,
if (!http_data)
{
CHEEVOS_LOG(RCHEEVOS_TAG "No data received for badge %s\n", callback_data->badge_name);
CHEEVOS_LOG(RCHEEVOS_TAG "No data received for badge %s (%s)\n", callback_data->badge_name, callback_data->url);
}
else if (http_data->status != 200)
{
CHEEVOS_LOG(RCHEEVOS_TAG "HTTP status code %d for badge %s\n", http_data->status, callback_data->badge_name);
CHEEVOS_LOG(RCHEEVOS_TAG "HTTP status code %d for badge %s (%s)\n", http_data->status, callback_data->badge_name, callback_data->url);
/* -1 status code is an internal networking failure. go ahead and retry a few times */
if (http_data->status == -1 && callback_data->retry_count++ < 4)
@@ -495,17 +497,13 @@ static void rcheevos_client_download_task_callback(retro_task_t* task,
free(callback_data);
}
bool rcheevos_client_download_badge(rc_client_download_queue_t* queue,
const char* url, const char* badge_name)
static bool rcheevos_client_build_local_badge_path(char badge_fullpath[], size_t badge_fullpath_size, const char* badge_name)
{
char* badge_fullname;
size_t badge_fullname_size;
rc_client_download_task_data_t* taskdata;
char badge_fullpath[512] = "";
rcheevos_locals_t* rcheevos_locals = get_rcheevos_locals();
/* make sure the directory exists */
fill_pathname_application_special(badge_fullpath, sizeof(badge_fullpath),
fill_pathname_application_special(badge_fullpath, badge_fullpath_size,
APPLICATION_SPECIAL_DIRECTORY_THUMBNAILS_CHEEVOS_BADGES);
if (!path_is_directory(badge_fullpath))
@@ -514,9 +512,9 @@ bool rcheevos_client_download_badge(rc_client_download_queue_t* queue,
path_mkdir(badge_fullpath);
}
fill_pathname_slash(badge_fullpath, sizeof(badge_fullpath));
badge_fullname = badge_fullpath + strlen(badge_fullpath);
badge_fullname_size = sizeof(badge_fullpath) - (badge_fullname - badge_fullpath);
fill_pathname_slash(badge_fullpath, badge_fullpath_size);
badge_fullname = badge_fullpath + strlen(badge_fullpath);
badge_fullname_size = badge_fullpath_size - (badge_fullname - badge_fullpath);
/* badge_name is supplied by the achievement server (or, on a
* compromised TLS path, an attacker-controlled MITM).
@@ -532,15 +530,15 @@ bool rcheevos_client_download_badge(rc_client_download_queue_t* queue,
* version, since a bogus badge name from the server is itself
* a signal that something is wrong. */
{
const char *p;
const char* p;
bool ok = (badge_name && *badge_name);
for (p = badge_name; ok && *p; p++)
{
char c = *p;
if (!( (c >= '0' && c <= '9')
|| (c >= 'a' && c <= 'z')
|| (c >= 'A' && c <= 'Z')
|| c == '_' || c == '-'))
if (!((c >= '0' && c <= '9')
|| (c >= 'a' && c <= 'z')
|| (c >= 'A' && c <= 'Z')
|| c == '_' || c == '-'))
ok = false;
}
if (!ok)
@@ -551,6 +549,18 @@ bool rcheevos_client_download_badge(rc_client_download_queue_t* queue,
}
snprintf(badge_fullname, badge_fullname_size, "%s" FILE_PATH_PNG_EXTENSION, badge_name);
return true;
}
bool rcheevos_client_download_badge(rc_client_download_queue_t* queue,
const char* url, const char* badge_name)
{
rc_client_download_task_data_t* taskdata;
rcheevos_locals_t* rcheevos_locals = get_rcheevos_locals();
char badge_fullpath[512] = "";
if (!rcheevos_client_build_local_badge_path(badge_fullpath, sizeof(badge_fullpath), badge_name))
return false;
if (path_is_valid(badge_fullpath))
return false;
@@ -591,6 +601,21 @@ bool rcheevos_client_download_badge(rc_client_download_queue_t* queue,
return true;
}
void rcheevos_client_expire_badge(const char* badge_name, time_t expire_at)
{
char badge_fullpath[512] = "";
if (!rcheevos_client_build_local_badge_path(badge_fullpath, sizeof(badge_fullpath), badge_name))
return;
if (path_is_valid(badge_fullpath))
{
struct stat file_stat;
if (stat(badge_fullpath, &file_stat) != 0 && file_stat.st_mtime < expire_at)
filestream_delete(badge_fullpath);
}
}
bool rcheevos_client_download_badge_from_url(const char* url, const char* badge_name)
{
return rcheevos_client_download_badge(NULL, url, badge_name);
+2 -1
View File
@@ -1,5 +1,5 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2019-2023 - Brian Weiss
* Copyright (C) 2019-2026 - Brian Weiss
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
@@ -23,6 +23,7 @@ RETRO_BEGIN_DECLS
void rcheevos_client_download_placeholder_badge(void);
void rcheevos_client_download_achievement_badges(rc_client_t* client);
bool rcheevos_client_download_badge_from_url(const char* url, const char* badge_name);
void rcheevos_client_expire_badge(const char* badge_name, time_t expire_at);
void rcheevos_client_server_call(const rc_api_request_t* request,
rc_client_server_callback_t callback, void* callback_data, rc_client_t* client);
+22 -3
View File
@@ -1,6 +1,6 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2015-2018 - Andre Leiradella
* Copyright (C) 2019-2023 - Brian Weiss
* Copyright (C) 2019-2026 - Brian Weiss
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
@@ -71,11 +71,26 @@ enum rcheevos_summary_notif
typedef struct rcheevos_menuitem_t
{
const rc_client_achievement_t* achievement;
union rcheevos_menuitem_source_t {
struct rcheevos_menuitem_text_t {
const char* label;
const char* sublabel;
} text;
struct rcheevos_menuitem_achievement_t {
const rc_client_achievement_t* achievement;
} achievement;
struct rcheevos_menuitem_action_t {
int type; /* enum msg_hash_enums */
int label; /* enum msg_hash_enums */
int sublabel; /* enum msg_hash_enums */
int action; /* enum menu_settings_type */
} action;
} source;
uintptr_t menu_badge_texture;
uint32_t subset_id;
int state_label_idx; /* enum msg_hash_enums */
uint8_t menu_badge_grayscale;
enum msg_hash_enums state_label_idx;
uint8_t type;
} rcheevos_menuitem_t;
#endif
@@ -115,6 +130,9 @@ typedef struct rcheevos_locals_t
rcheevos_menuitem_t* menuitems; /* array of items for the achievements quick menu */
unsigned menuitem_capacity; /* maximum number of items in the menuitems array */
unsigned menuitem_count; /* current number of items in the menuitems array */
uint32_t menuitem_info_type; /* current submenu */
uint32_t menuitem_submenu_type; /* current submenu */
uint32_t menuitem_submenu_id; /* current submenu */
#endif
const char* hash_error; /* message to display if an error occurred identifying the game */
@@ -124,6 +142,7 @@ typedef struct rcheevos_locals_t
bool hardcore_being_enabled; /* allows callers to detect hardcore mode while it's being enabled */
bool core_supports; /* false if core explicitly disables achievements */
bool has_unsupported_achievements; /* true if unsupported achievements were detected */
bool badges_loaded; /* true once all badges have been loaded */
bool badges_loading; /* true if the download queue is running */
} rcheevos_locals_t;
+690 -267
View File
File diff suppressed because it is too large. Load diff
+4 -2
View File
@@ -1,6 +1,6 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2015-2018 - Andre Leiradella
* Copyright (C) 2019-2021 - Brian Weiss
* Copyright (C) 2019-2026 - Brian Weiss
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
@@ -30,9 +30,11 @@ RETRO_BEGIN_DECLS
void rcheevos_menu_populate(void* data, bool cheevos_enable,
bool cheevos_hardcore_mode_enable);
void rcheevos_menu_populate_hardcore_pause_submenu(void* data, bool cheevos_hardcore_mode_enable);
size_t rcheevos_menu_get_state(unsigned menu_offset, char *s, size_t len);
size_t rcheevos_menu_get_sublabel(unsigned menu_offset, char *s, size_t len);
size_t rcheevos_menu_get_help_text(unsigned menu_offset, char* s, size_t len);
size_t rcheevos_menu_get_submenu_title(char* s, size_t len);
void rcheevos_menu_populate_submenu(void* data);
uintptr_t rcheevos_menu_get_badge_texture(unsigned menu_offset);
void rcheevos_menu_reset_badges(void);
void rcheevos_menu_update_badge_references(const char* badge_name);
+10 -2
View File
@@ -6,8 +6,8 @@ MSG_HASH(
MENU_ENUM_LABEL_ACCOUNTS_CHEEVOS_USERNAME_STR
)
MSG_HASH(
MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU,
MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU_STR
MENU_ENUM_LABEL_CHEEVOS_MENU_SUBMENU,
MENU_ENUM_LABEL_CHEEVOS_MENU_SUBMENU_STR
)
MSG_HASH(
MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_CANCEL,
@@ -384,6 +384,10 @@ MSG_HASH(
MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS,
MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS_STR
)
MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION,
MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION_STR
)
MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_ENABLE,
MENU_ENUM_LABEL_CHEEVOS_ENABLE_STR
@@ -1060,6 +1064,10 @@ MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST,
MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST_STR
)
MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST,
MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST_STR
)
MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST,
MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST_STR
+8
View File
@@ -32749,6 +32749,14 @@ MSG_HASH(
MSG_CHEEVOS_LOGGED_IN_AS_USER,
"RetroAchievements: Logged in as \"%s\"."
)
MSG_HASH(
MSG_CHEEVOS_HARDCORE_MODE,
"Hardcore"
)
MSG_HASH(
MSG_CHEEVOS_CASUAL_MODE,
"Casual"
)
MSG_HASH(
MSG_CHEEVOS_LOAD_STATE_PREVENTED_BY_HARDCORE_MODE,
"You must pause or disable Achievements Hardcore Mode to load states."
+3 -2
View File
@@ -154,7 +154,7 @@ GENERIC_DEFERRED_PUSH(deferred_push_ozone_font_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_submenu_list, DISPLAYLIST_ACHIEVEMENT_SUBMENU_LIST)
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)
@@ -761,7 +761,7 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
{MENU_ENUM_LABEL_CONFIGURATIONS, deferred_push_configurations},
{MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_CHEEVOS_LIST, deferred_push_accounts_cheevos_list},
{MENU_ENUM_LABEL_DATABASE_MANAGER_LIST, deferred_push_database_manager_list},
{MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU, deferred_push_achievement_pause_menu},
{MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST, deferred_push_achievement_submenu_list},
{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},
@@ -929,6 +929,7 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
{ MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST, deferred_push_rewind_settings_list },
{ MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST, deferred_push_cheevos_appearance_settings_list },
{ MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST, deferred_push_cheevos_visibility_settings_list },
{ MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST, deferred_push_achievement_submenu_list },
{ MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST, deferred_push_onscreen_display_settings_list },
{ MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST, deferred_push_audio_settings_list },
{ MENU_ENUM_LABEL_DEFERRED_AUDIO_OUTPUT_SETTINGS_LIST, deferred_push_audio_output_settings_list },
+2 -1
View File
@@ -2414,7 +2414,8 @@ int menu_cbs_init_bind_get_string_representation(menu_file_list_cbs_t *cbs,
{
switch (cbs->enum_idx)
{
case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_MENU_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_MENU_SUBMENU:
#ifdef HAVE_CHEEVOS
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_cheevos_entry);
+7 -4
View File
@@ -332,8 +332,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_ACHIEVEMENTS_SUBMENU_LIST:
return MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST;
case ACTION_OK_DL_INPUT_SETTINGS_LIST:
return MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST;
case ACTION_OK_DL_INPUT_MENU_SETTINGS_LIST:
@@ -1756,7 +1756,7 @@ int generic_action_ok_displaylist_push(
}
break;
case ACTION_OK_DL_ACCOUNTS_LIST:
case ACTION_OK_DL_ACHIEVEMENTS_HARDCORE_PAUSE_LIST:
case ACTION_OK_DL_ACHIEVEMENTS_SUBMENU_LIST:
case ACTION_OK_DL_INPUT_SETTINGS_LIST:
case ACTION_OK_DL_INPUT_MENU_SETTINGS_LIST:
case ACTION_OK_DL_INPUT_TURBO_FIRE_SETTINGS_LIST:
@@ -7065,7 +7065,7 @@ STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_steam_settings_list, ACTION_OK_DL_STEAM_
STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_push_core_manager_steam_list, ACTION_OK_DL_CORE_MANAGER_STEAM_LIST)
#endif
#ifdef HAVE_CHEEVOS
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_achievements_submenu, ACTION_OK_DL_ACHIEVEMENTS_SUBMENU_LIST)
#endif
DEFAULT_ACTION_OK_FUNC(action_ok_push_core_information_list, ACTION_OK_DL_CORE_INFORMATION_LIST)
#ifdef HAVE_MIST
@@ -9661,12 +9661,15 @@ 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},
#ifdef HAVE_CHEEVOS
{MENU_ENUM_LABEL_CHEEVOS_MENU_SUBMENU, action_ok_push_achievements_submenu},
{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_ACHIEVEMENT_RESUME_REQUIRES_RELOAD, action_ok_close_submenu },
#endif
#ifdef HAVE_MICROPHONE
{MENU_ENUM_LABEL_MICROPHONE_SETTINGS, action_ok_push_microphone_settings_list},
#endif
+3 -22
View File
@@ -199,18 +199,6 @@ static int menu_action_sublabel_contentless_core(file_list_t *list,
return 0;
}
#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)
@@ -804,8 +792,7 @@ static int action_bind_sublabel_cheevos_entry(
const char *label, const char *path,
char *s, size_t len)
{
unsigned offset = type - MENU_SETTINGS_CHEEVOS_START;
rcheevos_menu_get_sublabel(offset, s, len);
rcheevos_menu_get_sublabel(i, s, len);
return 0;
}
#endif
@@ -3327,9 +3314,6 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
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;
@@ -3342,11 +3326,8 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_ACHIEVEMENT_SERVER_UNREACHABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_achievement_server_unreachable);
break;
case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE:
case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_UNSUPPORTED_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_UNOFFICIAL_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_MENU_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_MENU_SUBMENU:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_entry);
break;
case MENU_ENUM_LABEL_CHEEVOS_ENABLE:
+5 -7
View File
@@ -30,6 +30,7 @@
#ifdef HAVE_CHEEVOS
#include "../../cheevos/cheevos.h"
#include "../../cheevos/cheevos_menu.h"
#endif
#include "../../audio/audio_driver.h"
@@ -839,13 +840,10 @@ static int action_get_title_dropdown_input_description_kbd(
}
#ifdef HAVE_CHEEVOS
static int action_get_title_achievement_pause_menu(
static int action_get_title_achievements_submenu_list(
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);
rcheevos_menu_get_submenu_title(s, len);
return 1;
}
#endif
@@ -1096,8 +1094,8 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_DEFERRED_USER_BINDS_LIST,
action_get_title_input_binds_list},
#ifdef HAVE_CHEEVOS
{MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU,
action_get_title_achievement_pause_menu},
{MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST,
action_get_title_achievements_submenu_list},
#endif
#if defined(HAVE_LIBNX)
#endif
+13 -2
View File
@@ -8885,10 +8885,21 @@ static bool ozone_is_current_entry_settings(size_t current_selection)
menu_entry_get(&last_entry, 0, current_selection, NULL, true);
if (last_entry.enum_idx == MENU_ENUM_LABEL_CHEEVOS_PASSWORD)
switch (last_entry.enum_idx)
{
case MENU_ENUM_LABEL_CHEEVOS_PASSWORD:
entry_value = last_entry.password_value;
else
break;
case MENU_ENUM_LABEL_CHEEVOS_MENU_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_MENU_SUBMENU:
/* don't display Reset to Defaults for Locked/Unlocked achievement status messages */
return false;
default:
entry_value = last_entry.value;
break;
}
entry_file_type = msg_hash_to_file_type(entry_value);
entry_type = last_entry.type;
+1 -1
View File
@@ -218,7 +218,7 @@ enum
ACTION_OK_DL_RETRO_ACHIEVEMENTS_SETTINGS_LIST,
ACTION_OK_DL_CHEEVOS_APPEARANCE_SETTINGS_LIST,
ACTION_OK_DL_CHEEVOS_VISIBILITY_SETTINGS_LIST,
ACTION_OK_DL_ACHIEVEMENTS_HARDCORE_PAUSE_LIST,
ACTION_OK_DL_ACHIEVEMENTS_SUBMENU_LIST,
ACTION_OK_DL_UPDATER_SETTINGS_LIST,
ACTION_OK_DL_BLUETOOTH_SETTINGS_LIST,
ACTION_OK_DL_WIFI_SETTINGS_LIST,
+3 -3
View File
@@ -14647,13 +14647,13 @@ static bool menu_displaylist_ctl_internal(
#endif
}
break;
case DISPLAYLIST_ACHIEVEMENT_PAUSE_MENU:
case DISPLAYLIST_ACHIEVEMENT_SUBMENU_LIST:
#ifdef HAVE_CHEEVOS
menu_entries_clear(info->list);
rcheevos_menu_populate_hardcore_pause_submenu(info, settings->bools.cheevos_hardcore_mode_enable);
#endif
rcheevos_menu_populate_submenu(info);
info->flags |= MD_FLAG_NEED_REFRESH
| MD_FLAG_NEED_PUSH;
#endif
break;
case DISPLAYLIST_ACHIEVEMENT_LIST:
#ifdef HAVE_CHEEVOS
+1 -1
View File
@@ -170,7 +170,7 @@ enum menu_displaylist_ctl_state
DISPLAYLIST_OSK_OVERLAYS,
DISPLAYLIST_NETWORK_INFO,
DISPLAYLIST_SYSTEM_INFO,
DISPLAYLIST_ACHIEVEMENT_PAUSE_MENU,
DISPLAYLIST_ACHIEVEMENT_SUBMENU_LIST,
DISPLAYLIST_ACHIEVEMENT_LIST,
DISPLAYLIST_USER_BINDS_LIST,
DISPLAYLIST_ACCOUNTS_LIST,
+3 -1
View File
@@ -2555,6 +2555,8 @@ static bool menu_driver_displaylist_push(
path = list->list[list->size - 1].path;
label = list->list[list->size - 1].label;
type = list->list[list->size - 1].type;
info.directory_ptr = list->list[list->size - 1].directory_ptr;
}
if (cbs)
@@ -3676,7 +3678,7 @@ MENU_NOINLINE static int menu_dialog_iterate(
#ifdef HAVE_CHEEVOS
case MENU_DIALOG_HELP_CHEEVOS_DESCRIPTION:
if (!rcheevos_menu_get_sublabel(p_dialog->current_id, s, len))
if (!rcheevos_menu_get_help_text(p_dialog->current_id, s, len))
return 1;
break;
#endif
+5
View File
@@ -2071,6 +2071,8 @@ enum msg_hash_enums
MENU_ENUM_LABEL_VALUE_RUNAHEAD_MODE_SECOND_INSTANCE,
MENU_ENUM_LABEL_VALUE_RUNAHEAD_MODE_PREEMPTIVE_FRAMES,
MENU_LABEL(CHEEVOS_MENU_ENTRY),
MENU_LABEL(CHEEVOS_MENU_SUBMENU),
MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY),
MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY_HARDCORE),
MENU_LABEL(CHEEVOS_LOCKED_ENTRY),
@@ -19190,6 +19192,7 @@ enum msg_hash_enums
MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST,
MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST,
MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST,
MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST,
MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST,
MENU_ENUM_LABEL_DEFERRED_BLUETOOTH_SETTINGS_LIST,
MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST,
@@ -33017,6 +33020,8 @@ enum msg_hash_enums
MSG_CHEAT_SEARCH_ADD_MATCH_FAIL,
MSG_CHEAT_SEARCH_DELETE_MATCH_SUCCESS,
MSG_CHEEVOS_LOGGED_IN_AS_USER,
MSG_CHEEVOS_HARDCORE_MODE,
MSG_CHEEVOS_CASUAL_MODE,
MSG_CHEEVOS_LOAD_STATE_PREVENTED_BY_HARDCORE_MODE,
MSG_CHEEVOS_LOAD_SAVEFILE_PREVENTED_BY_HARDCORE_MODE,
MSG_CHEEVOS_HARDCORE_MODE_DISABLED,
+4 -1
View File
@@ -6,7 +6,6 @@
#endif
#define MENU_ENUM_LABEL_ACCOUNTS_CHEEVOS_USERNAME_STR "accounts_cheevos_username"
#define MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_MENU_STR "achievement_pause_menu"
#define MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_CANCEL_STR "achievement_pause_cancel"
#define MENU_ENUM_LABEL_ACHIEVEMENT_RESUME_CANCEL_STR "achievement_resume_cancel"
#define MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_STR "achievement_pause"
@@ -105,6 +104,7 @@
#define MENU_ENUM_LABEL_CHEAT_FILE_LOAD_STR "cheat_file_load"
#define MENU_ENUM_LABEL_CHEAT_FILE_LOAD_APPEND_STR "cheat_file_load_append"
#define MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS_STR "cheat_file_save_as"
#define MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION_STR "cheevos_description"
#define MENU_ENUM_LABEL_CHEEVOS_ENABLE_STR "cheevos_enable"
#define MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE_STR "cheevos_hardcore_mode_enable"
#define MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY_STR "cheevos_locked_entry"
@@ -271,6 +271,8 @@
#define MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST_STR "deferred_retro_achievements_settings_list"
#define MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST_STR "deferred_cheevos_appearance_settings_list"
#define MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST_STR "deferred_cheevos_visibility_settings_list"
#define MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST_STR "deferred_cheevos_visibility_settings_list"
#define MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST_STR "deferred_achievements_submenu"
#define MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST_STR "deferred_rewind_settings_list"
#define MENU_ENUM_LABEL_DEFERRED_CHEAT_DETAILS_SETTINGS_LIST_STR "deferred_cheat_details_settings_list"
#define MENU_ENUM_LABEL_DEFERRED_CHEAT_SEARCH_SETTINGS_LIST_STR "deferred_cheat_search_settings_list"
@@ -999,6 +1001,7 @@
#define MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS_STR "cheevos_challenge_indicators"
#define MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE_STR "cheevos_richpresence_enable"
#define MENU_ENUM_LABEL_CHEEVOS_START_ACTIVE_STR "cheevos_start_active"
#define MENU_ENUM_LABEL_CHEEVOS_MENU_SUBMENU_STR "cheevos_menu_submenu"
#define MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL_STR "cheevos_test_unofficial"
#define MENU_ENUM_LABEL_CHEEVOS_UNLOCK_SOUND_ENABLE_STR "cheevos_unlock_sound_enable"
#define MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE_STR "cheevos_verbose_enable"