display Unofficial and Unsupported achievement states

This commit is contained in:
Jamiras 2019-11-10 19:42:00 -07:00
parent cf586b7273
commit 84de1ce2f2
5 changed files with 96 additions and 73 deletions

View File

@ -433,9 +433,17 @@ static int rcheevos_parse(const char* json)
if (res < 0) if (res < 0)
{ {
CHEEVOS_ERR(RCHEEVOS_TAG "Error in cheevo memaddr %s: %s", snprintf(buffer, sizeof(buffer), "Error in achievement %d \"%s\": %s",
cheevo->info->memaddr, rcheevos_rc_error(res)); cheevo->info->id, cheevo->info->title, rcheevos_rc_error(res));
goto error;
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); 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) void rcheevos_populate_menu(void* data)
{ {
#ifdef HAVE_MENU #ifdef HAVE_MENU
@ -860,86 +900,21 @@ void rcheevos_populate_menu(void* data)
} }
cheevo = rcheevos_locals.core; cheevo = rcheevos_locals.core;
for (count = rcheevos_locals.patchdata.core_count; count > 0; count--)
for (i = 0, count = rcheevos_locals.patchdata.core_count; i < count; i++, cheevo++)
{ {
if (!(cheevo->active & RCHEEVOS_ACTIVE_HARDCORE)) rcheevos_append_menu_achievement(info, i++, MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY, cheevo++);
{
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));
}
} }
if (settings->bools.cheevos_test_unofficial) if (settings->bools.cheevos_test_unofficial)
{ {
cheevo = rcheevos_locals.unofficial; cheevo = rcheevos_locals.unofficial;
for (count = rcheevos_locals.patchdata.unofficial_count; count > 0; count--)
for (i = 0, count = rcheevos_locals.patchdata.unofficial_count; i < count; i++, cheevo++)
{ {
if (!(cheevo->active & RCHEEVOS_ACTIVE_HARDCORE)) rcheevos_append_menu_achievement(info, i++, MENU_ENUM_LABEL_CHEEVOS_UNOFFICIAL_ENTRY, cheevo++);
{
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));
}
} }
} }
count = rcheevos_locals.patchdata.core_count; if (i == 0)
if (settings->bools.cheevos_test_unofficial)
count += rcheevos_locals.patchdata.unofficial_count;
if (count == 0)
{ {
menu_entries_append_enum(info->list, menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY),

View File

@ -552,6 +552,10 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY, MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY,
"Locked" "Locked"
) )
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_UNSUPPORTED_ENTRY,
"Unsupported"
)
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS, MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS,
"RetroAchievements" "RetroAchievements"
@ -560,6 +564,10 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL, MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL,
"Test Unofficial Achievements" "Test Unofficial Achievements"
) )
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_UNOFFICIAL_ENTRY,
"Unofficial"
)
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS, MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS,
"Unlocked Achievements:" "Unlocked Achievements:"

View File

@ -109,6 +109,34 @@ static void menu_action_setting_disp_set_label_cheat_num_passes(
snprintf(s, len, "%u", cheat_manager_get_buf_size()); 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( static void menu_action_setting_disp_set_label_cheevos_locked_entry(
file_list_t* list, file_list_t* list,
unsigned *w, unsigned type, unsigned i, 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, BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_cheevos_locked_entry); menu_action_setting_disp_set_label_cheevos_locked_entry);
return 0; 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_LOAD_CONTENT_HISTORY:
case MENU_ENUM_LABEL_SYSTEM_INFORMATION: case MENU_ENUM_LABEL_SYSTEM_INFORMATION:
BIND_ACTION_GET_VALUE(cbs, BIND_ACTION_GET_VALUE(cbs,

View File

@ -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:
case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE: case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE:
case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY: 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); BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_entry);
break; break;
#ifdef HAVE_NETWORKING #ifdef HAVE_NETWORKING

View File

@ -649,6 +649,8 @@ enum msg_hash_enums
MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY), MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY),
MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY_HARDCORE), MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY_HARDCORE),
MENU_LABEL(CHEEVOS_LOCKED_ENTRY), MENU_LABEL(CHEEVOS_LOCKED_ENTRY),
MENU_LABEL(CHEEVOS_UNSUPPORTED_ENTRY),
MENU_LABEL(CHEEVOS_UNOFFICIAL_ENTRY),
MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY, MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY,
MENU_ENUM_LABEL_RDB_ENTRY, MENU_ENUM_LABEL_RDB_ENTRY,