mirror of
https://github.com/libretro/RetroArch
synced 2025-02-07 03:40:24 +00:00
Merge pull request #9706 from Jamiras/cheevos_unsupported
(cheevos) display Unofficial and Unsupported achievement states
This commit is contained in:
commit
52db3779c7
@ -433,9 +433,17 @@ static int rcheevos_parse(const char* json)
|
||||
|
||||
if (res < 0)
|
||||
{
|
||||
CHEEVOS_ERR(RCHEEVOS_TAG "Error in cheevo memaddr %s: %s",
|
||||
cheevo->info->memaddr, rcheevos_rc_error(res));
|
||||
goto error;
|
||||
snprintf(buffer, sizeof(buffer), "Error in achievement %d \"%s\": %s",
|
||||
cheevo->info->id, cheevo->info->title, rcheevos_rc_error(res));
|
||||
|
||||
if (settings->bools.cheevos_verbose_enable)
|
||||
runloop_msg_queue_push(buffer, 0, 4 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
||||
|
||||
CHEEVOS_ERR(RCHEEVOS_TAG "%s: mem %s\n", buffer, cheevo->info->memaddr);
|
||||
cheevo->trigger = NULL;
|
||||
cheevo->active = 0;
|
||||
cheevo->last = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
cheevo->trigger = (rc_trigger_t*)calloc(1, res);
|
||||
@ -832,6 +840,38 @@ void rcheevos_reset_game(void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
static void rcheevos_append_menu_achievement(menu_displaylist_info_t* info, size_t idx, enum msg_hash_enums enum_idx, rcheevos_cheevo_t* cheevo)
|
||||
{
|
||||
bool active = false;
|
||||
|
||||
if (cheevo->trigger == NULL)
|
||||
{
|
||||
enum_idx = MENU_ENUM_LABEL_CHEEVOS_UNSUPPORTED_ENTRY;
|
||||
active = true; /* not really, but forces the badge to appear disabled */
|
||||
}
|
||||
else if (!(cheevo->active & RCHEEVOS_ACTIVE_HARDCORE))
|
||||
{
|
||||
enum_idx = MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE;
|
||||
}
|
||||
else if (!(cheevo->active & RCHEEVOS_ACTIVE_SOFTCORE))
|
||||
{
|
||||
enum_idx = MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* use enum passed in - either "Locked" for core or "Unofficial" for unofficial */
|
||||
active = true;
|
||||
}
|
||||
|
||||
menu_entries_append_enum(info->list, cheevo->info->title,
|
||||
cheevo->info->description, enum_idx,
|
||||
MENU_SETTINGS_CHEEVOS_START + idx, 0, 0);
|
||||
|
||||
set_badge_info(&badges_ctx, idx, cheevo->info->badge, active);
|
||||
}
|
||||
#endif
|
||||
|
||||
void rcheevos_populate_menu(void* data)
|
||||
{
|
||||
#ifdef HAVE_MENU
|
||||
@ -860,86 +900,21 @@ void rcheevos_populate_menu(void* data)
|
||||
}
|
||||
|
||||
cheevo = rcheevos_locals.core;
|
||||
|
||||
for (i = 0, count = rcheevos_locals.patchdata.core_count; i < count; i++, cheevo++)
|
||||
for (count = rcheevos_locals.patchdata.core_count; count > 0; count--)
|
||||
{
|
||||
if (!(cheevo->active & RCHEEVOS_ACTIVE_HARDCORE))
|
||||
{
|
||||
menu_entries_append_enum(info->list, cheevo->info->title,
|
||||
cheevo->info->description,
|
||||
MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE,
|
||||
MENU_SETTINGS_CHEEVOS_START + i, 0, 0);
|
||||
|
||||
set_badge_info(&badges_ctx, i, cheevo->info->badge,
|
||||
(cheevo->active & RCHEEVOS_ACTIVE_HARDCORE));
|
||||
}
|
||||
else if (!(cheevo->active & RCHEEVOS_ACTIVE_SOFTCORE))
|
||||
{
|
||||
menu_entries_append_enum(info->list, cheevo->info->title,
|
||||
cheevo->info->description,
|
||||
MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY,
|
||||
MENU_SETTINGS_CHEEVOS_START + i, 0, 0);
|
||||
|
||||
set_badge_info(&badges_ctx, i, cheevo->info->badge,
|
||||
(cheevo->active & RCHEEVOS_ACTIVE_SOFTCORE));
|
||||
}
|
||||
else
|
||||
{
|
||||
menu_entries_append_enum(info->list, cheevo->info->title,
|
||||
cheevo->info->description,
|
||||
MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY,
|
||||
MENU_SETTINGS_CHEEVOS_START + i, 0, 0);
|
||||
|
||||
set_badge_info(&badges_ctx, i, cheevo->info->badge,
|
||||
(cheevo->active & RCHEEVOS_ACTIVE_SOFTCORE));
|
||||
}
|
||||
rcheevos_append_menu_achievement(info, i++, MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY, cheevo++);
|
||||
}
|
||||
|
||||
if (settings->bools.cheevos_test_unofficial)
|
||||
{
|
||||
cheevo = rcheevos_locals.unofficial;
|
||||
|
||||
for (i = 0, count = rcheevos_locals.patchdata.unofficial_count; i < count; i++, cheevo++)
|
||||
for (count = rcheevos_locals.patchdata.unofficial_count; count > 0; count--)
|
||||
{
|
||||
if (!(cheevo->active & RCHEEVOS_ACTIVE_HARDCORE))
|
||||
{
|
||||
menu_entries_append_enum(info->list, cheevo->info->title,
|
||||
cheevo->info->description,
|
||||
MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE,
|
||||
MENU_SETTINGS_CHEEVOS_START + i, 0, 0);
|
||||
|
||||
set_badge_info(&badges_ctx, i, cheevo->info->badge,
|
||||
(cheevo->active & RCHEEVOS_ACTIVE_HARDCORE));
|
||||
}
|
||||
else if (!(cheevo->active & RCHEEVOS_ACTIVE_SOFTCORE))
|
||||
{
|
||||
menu_entries_append_enum(info->list, cheevo->info->title,
|
||||
cheevo->info->description,
|
||||
MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY,
|
||||
MENU_SETTINGS_CHEEVOS_START + i, 0, 0);
|
||||
|
||||
set_badge_info(&badges_ctx, i, cheevo->info->badge,
|
||||
(cheevo->active & RCHEEVOS_ACTIVE_SOFTCORE));
|
||||
}
|
||||
else
|
||||
{
|
||||
menu_entries_append_enum(info->list, cheevo->info->title,
|
||||
cheevo->info->description,
|
||||
MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY,
|
||||
MENU_SETTINGS_CHEEVOS_START + i, 0, 0);
|
||||
|
||||
set_badge_info(&badges_ctx, i, cheevo->info->badge,
|
||||
(cheevo->active & RCHEEVOS_ACTIVE_SOFTCORE));
|
||||
}
|
||||
rcheevos_append_menu_achievement(info, i++, MENU_ENUM_LABEL_CHEEVOS_UNOFFICIAL_ENTRY, cheevo++);
|
||||
}
|
||||
}
|
||||
|
||||
count = rcheevos_locals.patchdata.core_count;
|
||||
|
||||
if (settings->bools.cheevos_test_unofficial)
|
||||
count += rcheevos_locals.patchdata.unofficial_count;
|
||||
|
||||
if (count == 0)
|
||||
if (i == 0)
|
||||
{
|
||||
menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY),
|
||||
|
@ -552,6 +552,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY,
|
||||
"Locked"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CHEEVOS_UNSUPPORTED_ENTRY,
|
||||
"Unsupported"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS,
|
||||
"RetroAchievements"
|
||||
@ -560,6 +564,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL,
|
||||
"Test Unofficial Achievements"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CHEEVOS_UNOFFICIAL_ENTRY,
|
||||
"Unofficial"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS,
|
||||
"Unlocked Achievements:"
|
||||
|
@ -109,6 +109,34 @@ static void menu_action_setting_disp_set_label_cheat_num_passes(
|
||||
snprintf(s, len, "%u", cheat_manager_get_buf_size());
|
||||
}
|
||||
|
||||
static void menu_action_setting_disp_set_label_cheevos_unsupported_entry(
|
||||
file_list_t* list,
|
||||
unsigned *w, unsigned type, unsigned i,
|
||||
const char *label,
|
||||
char *s, size_t len,
|
||||
const char *path,
|
||||
char *s2, size_t len2)
|
||||
{
|
||||
*w = 19;
|
||||
strlcpy(s2, path, len2);
|
||||
strlcpy(s,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEEVOS_UNSUPPORTED_ENTRY), len);
|
||||
}
|
||||
|
||||
static void menu_action_setting_disp_set_label_cheevos_unofficial_entry(
|
||||
file_list_t* list,
|
||||
unsigned *w, unsigned type, unsigned i,
|
||||
const char *label,
|
||||
char *s, size_t len,
|
||||
const char *path,
|
||||
char *s2, size_t len2)
|
||||
{
|
||||
*w = 19;
|
||||
strlcpy(s2, path, len2);
|
||||
strlcpy(s,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEEVOS_UNOFFICIAL_ENTRY), len);
|
||||
}
|
||||
|
||||
static void menu_action_setting_disp_set_label_cheevos_locked_entry(
|
||||
file_list_t* list,
|
||||
unsigned *w, unsigned type, unsigned i,
|
||||
@ -1714,6 +1742,14 @@ int menu_cbs_init_bind_get_string_representation(menu_file_list_cbs_t *cbs,
|
||||
BIND_ACTION_GET_VALUE(cbs,
|
||||
menu_action_setting_disp_set_label_cheevos_locked_entry);
|
||||
return 0;
|
||||
case MENU_ENUM_LABEL_CHEEVOS_UNSUPPORTED_ENTRY:
|
||||
BIND_ACTION_GET_VALUE(cbs,
|
||||
menu_action_setting_disp_set_label_cheevos_unsupported_entry);
|
||||
return 0;
|
||||
case MENU_ENUM_LABEL_CHEEVOS_UNOFFICIAL_ENTRY:
|
||||
BIND_ACTION_GET_VALUE(cbs,
|
||||
menu_action_setting_disp_set_label_cheevos_unofficial_entry);
|
||||
return 0;
|
||||
case MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY:
|
||||
case MENU_ENUM_LABEL_SYSTEM_INFORMATION:
|
||||
BIND_ACTION_GET_VALUE(cbs,
|
||||
|
@ -2516,6 +2516,8 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
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:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_entry);
|
||||
break;
|
||||
#ifdef HAVE_NETWORKING
|
||||
|
@ -649,6 +649,8 @@ enum msg_hash_enums
|
||||
MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY),
|
||||
MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY_HARDCORE),
|
||||
MENU_LABEL(CHEEVOS_LOCKED_ENTRY),
|
||||
MENU_LABEL(CHEEVOS_UNSUPPORTED_ENTRY),
|
||||
MENU_LABEL(CHEEVOS_UNOFFICIAL_ENTRY),
|
||||
|
||||
MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY,
|
||||
MENU_ENUM_LABEL_RDB_ENTRY,
|
||||
|
Loading…
x
Reference in New Issue
Block a user