mirror of
https://github.com/libretro/RetroArch.git
synced 2026-11-07 08:36:02 -10:00
(cheevos) hierarchical Achievements submenu (#19513)
* new Achievements submenu
This commit is contained in:
1 parent
092c56ab3c
commit
7d94a481e2
21 files changed
+844
-337
No files matched your search
+16
-1
@@ -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,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
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
File diff suppressed because it is too large.
Load diff
@@ -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
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user