(cheevos) expand leaderboard visibility settings (#15201)

* migrate cheevos_leaderboard_enabled setting to cheevos_visibility_lboard_X

* provide translatable strings for leaderboard messages
This commit is contained in:
Jamiras 2023-04-16 11:44:46 -06:00 committed by GitHub
parent 19aeb52cbc
commit 8ea9651d09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 292 additions and 151 deletions

View File

@ -104,13 +104,10 @@ static rcheevos_locals_t rcheevos_locals =
{RCHEEVOS_LOAD_STATE_NONE, 0, 0 }, /* load_info */
false,/* hardcore_active */
false,/* loaded */
true, /* core_supports */
#ifdef HAVE_GFX_WIDGETS
false,/* assign_new_trackers */
#endif
false,/* leaderboards_enabled */
false,/* leaderboard_notifications */
false /* leaderboard_trackers */
true /* core_supports */
};
rcheevos_locals_t* get_rcheevos_locals(void)
@ -502,6 +499,7 @@ static void rcheevos_lboard_submit(rcheevos_locals_t* locals,
{
char buffer[256];
char formatted_value[16];
const settings_t *settings = config_get_ptr();
#if defined(HAVE_GFX_WIDGETS)
/* Hide the tracker */
@ -523,10 +521,14 @@ static void rcheevos_lboard_submit(rcheevos_locals_t* locals,
CHEEVOS_LOG(RCHEEVOS_TAG "Submitting %s for leaderboard %u\n",
formatted_value, lboard->id);
/* Show the on-screen message (regardless of notifications setting). */
snprintf(buffer, sizeof(buffer), "Submitted %s for %s", formatted_value, lboard->title);
runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL,
MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
/* Show the on-screen message. */
if (settings->bools.cheevos_visibility_lboard_submit)
{
snprintf(buffer, sizeof(buffer), msg_hash_to_str(MSG_LEADERBOARD_SUBMISSION),
formatted_value, lboard->title);
runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL,
MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
}
/* Start the submit task */
rcheevos_client_submit_lboard_entry(lboard->id, value);
@ -535,6 +537,7 @@ static void rcheevos_lboard_submit(rcheevos_locals_t* locals,
static void rcheevos_lboard_canceled(rcheevos_ralboard_t * lboard,
bool widgets_ready)
{
const settings_t *settings = config_get_ptr();
char buffer[256];
if (!lboard)
return;
@ -547,11 +550,10 @@ static void rcheevos_lboard_canceled(rcheevos_ralboard_t * lboard,
rcheevos_hide_leaderboard_tracker(&rcheevos_locals, lboard);
#endif
if (rcheevos_locals.leaderboard_notifications)
if (settings->bools.cheevos_visibility_lboard_cancel)
{
strlcpy(buffer, "Leaderboard attempt failed: ",
sizeof(buffer));
strlcat(buffer, lboard->title, sizeof(buffer));
snprintf(buffer, sizeof(buffer), "%s: %s",
msg_hash_to_str(MSG_LEADERBOARD_FAILED), lboard->title);
runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL,
MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
}
@ -561,6 +563,7 @@ static void rcheevos_lboard_started(
rcheevos_ralboard_t * lboard, int value,
bool widgets_ready)
{
const settings_t *settings = config_get_ptr();
char buffer[256];
if (!lboard)
return;
@ -574,7 +577,7 @@ static void rcheevos_lboard_started(
#if defined(HAVE_GFX_WIDGETS)
lboard->value = value;
if (rcheevos_locals.leaderboard_trackers)
if (settings->bools.cheevos_visibility_lboard_trackers)
{
/* mark the leaderboard as needing a tracker assigned so we can check for merging later */
lboard->active_tracker_id = 0xFF;
@ -582,12 +585,14 @@ static void rcheevos_lboard_started(
}
#endif
if (rcheevos_locals.leaderboard_notifications)
if (settings->bools.cheevos_visibility_lboard_start)
{
if (lboard->description && *lboard->description)
snprintf(buffer, sizeof(buffer), "Leaderboard attempt started: %s - %s", lboard->title, lboard->description);
snprintf(buffer, sizeof(buffer), "%s: %s - %s",
msg_hash_to_str(MSG_LEADERBOARD_STARTED), lboard->title, lboard->description);
else
snprintf(buffer, sizeof(buffer), "Leaderboard attempt started: %s", lboard->title);
snprintf(buffer, sizeof(buffer), "%s: %s",
msg_hash_to_str(MSG_LEADERBOARD_STARTED), lboard->title);
runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL,
MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
@ -599,12 +604,13 @@ static void rcheevos_lboard_updated(
rcheevos_ralboard_t* lboard, int value,
bool widgets_ready)
{
const settings_t *settings = config_get_ptr();
if (!lboard)
return;
lboard->value = value;
if (widgets_ready && rcheevos_locals.leaderboard_trackers &&
if (widgets_ready && settings->bools.cheevos_visibility_lboard_trackers &&
lboard->active_tracker_id && lboard->active_tracker_id <= 31)
{
char buffer[32];
@ -931,55 +937,45 @@ static void rcheevos_deactivate_leaderboards(void)
}
}
void rcheevos_leaderboards_enabled_changed(void)
void rcheevos_leaderboard_trackers_visibility_changed(void)
{
const settings_t* settings = config_get_ptr();
const bool leaderboards_enabled = rcheevos_locals.leaderboards_enabled;
const bool leaderboard_trackers = rcheevos_locals.leaderboard_trackers;
rcheevos_locals.leaderboards_enabled = rcheevos_locals.hardcore_active;
if (string_is_equal(settings->arrays.cheevos_leaderboards_enable, "true"))
{
rcheevos_locals.leaderboard_notifications = true;
rcheevos_locals.leaderboard_trackers = true;
}
#if defined(HAVE_GFX_WIDGETS)
else if (string_is_equal(
settings->arrays.cheevos_leaderboards_enable, "trackers"))
{
rcheevos_locals.leaderboard_notifications = false;
rcheevos_locals.leaderboard_trackers = true;
}
else if (string_is_equal(
settings->arrays.cheevos_leaderboards_enable, "notifications"))
{
rcheevos_locals.leaderboard_notifications = true;
rcheevos_locals.leaderboard_trackers = false;
}
#endif
else
{
rcheevos_locals.leaderboard_notifications = false;
rcheevos_locals.leaderboard_trackers = false;
}
if (rcheevos_locals.loaded)
{
if (leaderboards_enabled != rcheevos_locals.leaderboards_enabled)
{
if (rcheevos_locals.leaderboards_enabled)
rcheevos_activate_leaderboards();
else
rcheevos_deactivate_leaderboards();
}
#if defined(HAVE_GFX_WIDGETS)
if (!rcheevos_locals.leaderboard_trackers && leaderboard_trackers)
if (!settings->bools.cheevos_visibility_lboard_trackers)
{
/* Hide any visible trackers */
rcheevos_hide_leaderboard_trackers();
}
else
{
unsigned i;
rc_runtime_lboard_t* lboard = rcheevos_locals.runtime.lboards;
for (i = 0; i < rcheevos_locals.runtime.lboard_count; ++i, ++lboard)
{
if (!lboard->lboard)
continue;
if (lboard->lboard->state == RC_LBOARD_STATE_STARTED)
{
rcheevos_ralboard_t* ralboard = rcheevos_find_lboard(lboard->id);
if (ralboard && !ralboard->active_tracker_id)
{
/* mark the leaderboard as needing a tracker assigned so we can check for merging later */
ralboard->active_tracker_id = 0xFF;
rcheevos_locals.assign_new_trackers = true;
}
}
else
{
rcheevos_ralboard_t* ralboard = rcheevos_find_lboard(lboard->id);
if (ralboard && ralboard->active_tracker_id)
rcheevos_hide_leaderboard_tracker(&rcheevos_locals, ralboard);
}
}
}
#endif
}
}
@ -1023,7 +1019,7 @@ static void rcheevos_toggle_hardcore_active(rcheevos_locals_t* locals)
rcheevos_enforce_hardcore_settings();
/* Reactivate leaderboards */
rcheevos_leaderboards_enabled_changed();
rcheevos_activate_leaderboards();
/* reset the game */
command_event(CMD_EVENT_RESET, NULL);
@ -1055,7 +1051,7 @@ static void rcheevos_toggle_hardcore_active(rcheevos_locals_t* locals)
CHEEVOS_LOG(RCHEEVOS_TAG "Hardcore paused\n");
/* deactivate leaderboards */
rcheevos_leaderboards_enabled_changed();
rcheevos_deactivate_leaderboards();
}
/* re-init rewind */
@ -1101,8 +1097,11 @@ void rcheevos_hardcore_enabled_changed(void)
{
rcheevos_toggle_hardcore_active(&rcheevos_locals);
/* update leaderboard state flags */
rcheevos_leaderboards_enabled_changed();
/* update leaderboard state */
if (rcheevos_locals.hardcore_active)
rcheevos_activate_leaderboards();
else
rcheevos_deactivate_leaderboards();
}
else if (rcheevos_locals.hardcore_active && rcheevos_locals.loaded)
{
@ -1367,31 +1366,8 @@ bool rcheevos_set_serialized_data(void* buffer)
{
settings_t* settings = config_get_ptr();
if (rcheevos_locals.leaderboard_trackers)
{
unsigned i;
rc_runtime_lboard_t* lboard = rcheevos_locals.runtime.lboards;
for (i = 0; i < rcheevos_locals.runtime.lboard_count; ++i, ++lboard)
{
if (!lboard->lboard)
continue;
if (lboard->lboard->state == RC_LBOARD_STATE_STARTED)
{
rcheevos_ralboard_t* ralboard = rcheevos_find_lboard(lboard->id);
if (ralboard != NULL)
{
char value[32];
rc_runtime_format_lboard_value(value, sizeof(value), lboard->value, ralboard->format);
gfx_widgets_set_leaderboard_display(lboard->id, value);
}
}
else
{
gfx_widgets_set_leaderboard_display(lboard->id, NULL);
}
}
}
if (settings->bools.cheevos_visibility_lboard_trackers)
rcheevos_leaderboard_trackers_visibility_changed();
if (settings->bools.cheevos_challenge_indicators)
{
@ -1790,8 +1766,7 @@ static void rcheevos_start_session_async(retro_task_t* task)
* (rich presence has already been activated) */
rcheevos_activate_achievements();
if (rcheevos_locals.leaderboards_enabled
&& rcheevos_locals.hardcore_active)
if (rcheevos_locals.hardcore_active)
rcheevos_activate_leaderboards();
/* disable any unsupported achievements */
@ -2220,7 +2195,6 @@ bool rcheevos_load(const void *data)
CHEEVOS_LOG(RCHEEVOS_TAG "Load started, hardcore %sactive\n", rcheevos_hardcore_active() ? "" : "not ");
rcheevos_validate_config_settings();
rcheevos_leaderboards_enabled_changed();
/* Refresh the user agent in case it's not set or has changed */
rcheevos_client_initialize();

View File

@ -45,7 +45,7 @@ bool rcheevos_hardcore_active(void);
void rcheevos_validate_config_settings(void);
void rcheevos_leaderboards_enabled_changed(void);
void rcheevos_leaderboard_trackers_visibility_changed(void);
void rcheevos_set_support_cheevos(bool state);
bool rcheevos_get_support_cheevos(void);

View File

@ -194,13 +194,10 @@ typedef struct rcheevos_locals_t
bool hardcore_active; /* hardcore functionality is active */
bool loaded; /* load task has completed */
bool core_supports; /* false if core explicitly disables achievements */
#ifdef HAVE_GFX_WIDGETS
bool assign_new_trackers; /* a new leaderboard was started and needs a tracker assigned */
#endif
bool leaderboards_enabled; /* leaderboards are enabled */
bool leaderboard_notifications; /* leaderboard notifications are enabled */
bool leaderboard_trackers; /* leaderboard trackers are enabled */
bool core_supports; /* false if core explicitly disables achievements */
} rcheevos_locals_t;
rcheevos_locals_t* get_rcheevos_locals(void);

View File

@ -193,6 +193,10 @@
#define DEFAULT_CHEEVOS_VISIBILITY_UNLOCK true
#define DEFAULT_CHEEVOS_VISIBILITY_MASTERY true
#define DEFAULT_CHEEVOS_VISIBILITY_ACCOUNT true
#define DEFAULT_CHEEVOS_VISIBILITY_LBOARD_START true
#define DEFAULT_CHEEVOS_VISIBILITY_LBOARD_SUBMIT true
#define DEFAULT_CHEEVOS_VISIBILITY_LBOARD_CANCEL true
#define DEFAULT_CHEEVOS_VISIBILITY_LBOARD_TRACKERS true
#endif
/* VIDEO */

View File

@ -1435,7 +1435,7 @@ static struct config_array_setting *populate_settings_array(settings_t *settings
SETTING_ARRAY("cheevos_username", settings->arrays.cheevos_username, false, NULL, true);
SETTING_ARRAY("cheevos_password", settings->arrays.cheevos_password, false, NULL, true);
SETTING_ARRAY("cheevos_token", settings->arrays.cheevos_token, false, NULL, true);
SETTING_ARRAY("cheevos_leaderboards_enable", settings->arrays.cheevos_leaderboards_enable, true, "true", true);
SETTING_ARRAY("cheevos_leaderboards_enable", settings->arrays.cheevos_leaderboards_enable, true, "", true); /* deprecated */
#endif
SETTING_ARRAY("video_context_driver", settings->arrays.video_context_driver, false, NULL, true);
SETTING_ARRAY("audio_driver", settings->arrays.audio_driver, false, NULL, true);
@ -1959,6 +1959,10 @@ static struct config_bool_setting *populate_settings_bool(
SETTING_BOOL("cheevos_visibility_unlock", &settings->bools.cheevos_visibility_unlock, true, DEFAULT_CHEEVOS_VISIBILITY_UNLOCK, false);
SETTING_BOOL("cheevos_visibility_mastery", &settings->bools.cheevos_visibility_mastery, true, DEFAULT_CHEEVOS_VISIBILITY_MASTERY, false);
SETTING_BOOL("cheevos_visibility_account", &settings->bools.cheevos_visibility_account, true, DEFAULT_CHEEVOS_VISIBILITY_ACCOUNT, false);
SETTING_BOOL("cheevos_visibility_lboard_start", &settings->bools.cheevos_visibility_lboard_start, true, DEFAULT_CHEEVOS_VISIBILITY_LBOARD_START, false);
SETTING_BOOL("cheevos_visibility_lboard_submit", &settings->bools.cheevos_visibility_lboard_submit, true, DEFAULT_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, false);
SETTING_BOOL("cheevos_visibility_lboard_cancel", &settings->bools.cheevos_visibility_lboard_cancel, true, DEFAULT_CHEEVOS_VISIBILITY_LBOARD_CANCEL, false);
SETTING_BOOL("cheevos_visibility_lboard_trackers", &settings->bools.cheevos_visibility_lboard_trackers, true, DEFAULT_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, false);
#endif
#ifdef HAVE_OVERLAY
SETTING_BOOL("input_overlay_enable", &settings->bools.input_overlay_enable, true, config_overlay_enable_default(), false);
@ -2652,12 +2656,6 @@ void config_set_defaults(void *data)
settings->arrays.ai_service_url,
DEFAULT_AI_SERVICE_URL);
#ifdef HAVE_CHEEVOS
configuration_set_string(settings,
settings->arrays.cheevos_leaderboards_enable,
"true");
#endif
#ifdef HAVE_MATERIALUI
if (g_defaults.menu_materialui_menu_color_theme_enable)
settings->uints.menu_materialui_color_theme = g_defaults.menu_materialui_menu_color_theme;
@ -3808,6 +3806,41 @@ static bool config_load_file(global_t *global,
if (settings->floats.fastforward_ratio < 0.0f)
configuration_set_float(settings, settings->floats.fastforward_ratio, 0.0f);
#ifdef HAVE_CHEEVOS
if (!string_is_empty(settings->arrays.cheevos_leaderboards_enable))
{
if (string_is_equal(settings->arrays.cheevos_leaderboards_enable, "true"))
{
settings->bools.cheevos_visibility_lboard_start = true;
settings->bools.cheevos_visibility_lboard_submit = true;
settings->bools.cheevos_visibility_lboard_cancel = true;
settings->bools.cheevos_visibility_lboard_trackers = true;
}
else if (string_is_equal(settings->arrays.cheevos_leaderboards_enable, "trackers"))
{
settings->bools.cheevos_visibility_lboard_start = false;
settings->bools.cheevos_visibility_lboard_submit = true;
settings->bools.cheevos_visibility_lboard_cancel = false;
settings->bools.cheevos_visibility_lboard_trackers = true;
}
else if (string_is_equal(settings->arrays.cheevos_leaderboards_enable, "notifications"))
{
settings->bools.cheevos_visibility_lboard_start = true;
settings->bools.cheevos_visibility_lboard_submit = true;
settings->bools.cheevos_visibility_lboard_cancel = true;
settings->bools.cheevos_visibility_lboard_trackers = false;
}
else
{
settings->bools.cheevos_visibility_lboard_start = false;
settings->bools.cheevos_visibility_lboard_submit = false;
settings->bools.cheevos_visibility_lboard_cancel = false;
settings->bools.cheevos_visibility_lboard_trackers = false;
}
settings->arrays.cheevos_leaderboards_enable[0] = '\0';
}
#endif
#ifdef HAVE_LAKKA
configuration_set_bool(settings,
settings->bools.ssh_enable, filestream_exists(LAKKA_SSH_PATH));

View File

@ -829,6 +829,10 @@ typedef struct settings
bool cheevos_visibility_unlock;
bool cheevos_visibility_mastery;
bool cheevos_visibility_account;
bool cheevos_visibility_lboard_start;
bool cheevos_visibility_lboard_submit;
bool cheevos_visibility_lboard_cancel;
bool cheevos_visibility_lboard_trackers;
/* Camera */
bool camera_allow;

View File

@ -523,10 +523,6 @@ MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
"cheevos_hardcore_mode_enable"
)
MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE,
"cheevos_leaderboards_enable"
)
MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE,
"cheevos_richpresence_enable"
@ -611,6 +607,22 @@ MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_ACCOUNT,
"cheevos_visibility_account"
)
MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START,
"cheevos_visibility_lboard_start"
)
MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT,
"cheevos_visibility_lboard_submit"
)
MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL,
"cheevos_visibility_lboard_cancel"
)
MSG_HASH(
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS,
"cheevos_visibility_lboard_trackers"
)
MSG_HASH(
MENU_ENUM_LABEL_CLOSE_CONTENT,
"unload_core"

View File

@ -6378,10 +6378,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_LEADERBOARDS_ENABLE,
"Leaderboards"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEEVOS_LEADERBOARDS_ENABLE,
"Game specific leaderboards. Has no effect if 'Hardcore Mode' is disabled."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_RICHPRESENCE_ENABLE,
"Rich Presence"
@ -6548,6 +6544,38 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_CHEEVOS_CHALLENGE_INDICATORS,
"Shows on-screen indicators while certain achievements can be earned."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_START,
"Leaderboard Start Messages"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_START,
"Shows a description of a leaderboard when it becomes active."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_SUBMIT,
"Leaderboard Submit Messages"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT,
"Shows a message with the value being submitted when a leaderboard attempt is completed."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_CANCEL,
"Leaderboard Failed Messages"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL,
"Shows a message when a leaderboard attempt fails."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_TRACKERS,
"Leaderboard Trackers"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS,
"Shows trackers on the screen with the current value of active leaderboards."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_ACCOUNT,
"Login Messages"
@ -14033,6 +14061,18 @@ MSG_HASH(
MSG_ACHIEVEMENT_UNLOCKED,
"Achievement Unlocked"
)
MSG_HASH(
MSG_LEADERBOARD_STARTED,
"Leaderboard attempt started"
)
MSG_HASH(
MSG_LEADERBOARD_FAILED,
"Leaderboard attempt failed"
)
MSG_HASH(
MSG_LEADERBOARD_SUBMISSION,
"Submitted %s for %s" /* Submitted [value] for [leaderboard name] */
)
MSG_HASH(
MSG_CHANGE_THUMBNAIL_TYPE,
"Change thumbnail type"

View File

@ -296,7 +296,6 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_achievement_resume_cancel, MENU_
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)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_leaderboards_enable, MENU_ENUM_SUBLABEL_CHEEVOS_LEADERBOARDS_ENABLE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_challenge_indicators, MENU_ENUM_SUBLABEL_CHEEVOS_CHALLENGE_INDICATORS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_richpresence_enable, MENU_ENUM_SUBLABEL_CHEEVOS_RICHPRESENCE_ENABLE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_badges_enable, MENU_ENUM_SUBLABEL_CHEEVOS_BADGES_ENABLE)
@ -316,6 +315,10 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_summary, MENU_
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_unlock, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_UNLOCK)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_mastery, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_MASTERY)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_account, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_ACCOUNT)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_lboard_start, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_START)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_lboard_submit, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_lboard_cancel, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_lboard_trackers, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS)
#endif
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_views_settings_list, MENU_ENUM_SUBLABEL_MENU_VIEWS_SETTINGS)
@ -4381,9 +4384,6 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_hardcore_mode_enable);
break;
case MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_leaderboards_enable);
break;
case MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_challenge_indicators);
break;
@ -4437,6 +4437,18 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_ACCOUNT:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_account);
break;
case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_lboard_start);
break;
case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_lboard_submit);
break;
case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_lboard_cancel);
break;
case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_lboard_trackers);
break;
#endif
case MENU_ENUM_LABEL_SETTINGS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_settings);

View File

@ -8587,6 +8587,10 @@ unsigned menu_displaylist_build_list(
{MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_UNLOCK, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_MASTERY, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_ACCOUNT, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE, PARSE_ONLY_BOOL, true},
};

View File

@ -8913,9 +8913,9 @@ static void achievement_hardcore_mode_write_handler(rarch_setting_t *setting)
rcheevos_hardcore_enabled_changed();
}
static void achievement_leaderboards_enabled_write_handler(rarch_setting_t* setting)
static void achievement_leaderboard_trackers_enabled_write_handler(rarch_setting_t* setting)
{
rcheevos_leaderboards_enabled_changed();
rcheevos_leaderboard_trackers_visibility_changed();
}
static void setting_get_string_representation_uint_cheevos_visibility_summary(
@ -20212,30 +20212,6 @@ static bool setting_append_list(
SD_FLAG_ADVANCED
);
CONFIG_STRING_OPTIONS(
list, list_info,
settings->arrays.cheevos_leaderboards_enable,
sizeof(settings->arrays.cheevos_leaderboards_enable),
MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE,
MENU_ENUM_LABEL_VALUE_CHEEVOS_LEADERBOARDS_ENABLE,
"true",
"false|true",
&group_info,
&subgroup_info,
parent_group,
achievement_leaderboards_enabled_write_handler,
general_read_handler);
#if defined(HAVE_GFX_WIDGETS)
(*list)[list_info->index - 1].values = "false|true|trackers|notifications";
(*list)[list_info->index - 1].action_ok = setting_action_ok_mapped_string;
#else
(*list)[list_info->index - 1].action_ok = setting_string_action_left_string_options;
#endif
(*list)[list_info->index - 1].action_left = setting_string_action_left_string_options;
(*list)[list_info->index - 1].action_right = setting_string_action_right_string_options;
(*list)[list_info->index - 1].get_string_representation = achievement_leaderboards_get_string_representation;
(*list)[list_info->index - 1].free_flags &= ~SD_FREE_FLAG_VALUES;
CONFIG_BOOL(
list, list_info,
&settings->bools.cheevos_richpresence_enable,
@ -20499,6 +20475,70 @@ static bool setting_append_list(
SD_FLAG_NONE
);
CONFIG_BOOL(
list, list_info,
&settings->bools.cheevos_visibility_lboard_start,
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START,
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_START,
DEFAULT_CHEEVOS_VISIBILITY_LBOARD_START,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_NONE
);
CONFIG_BOOL(
list, list_info,
&settings->bools.cheevos_visibility_lboard_submit,
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT,
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_SUBMIT,
DEFAULT_CHEEVOS_VISIBILITY_LBOARD_SUBMIT,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_NONE
);
CONFIG_BOOL(
list, list_info,
&settings->bools.cheevos_visibility_lboard_cancel,
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL,
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_CANCEL,
DEFAULT_CHEEVOS_VISIBILITY_LBOARD_CANCEL,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_NONE
);
CONFIG_BOOL(
list, list_info,
&settings->bools.cheevos_visibility_lboard_trackers,
MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS,
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_LBOARD_TRACKERS,
DEFAULT_CHEEVOS_VISIBILITY_LBOARD_TRACKERS,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
achievement_leaderboard_trackers_enabled_write_handler,
general_read_handler,
SD_FLAG_NONE
);
CONFIG_BOOL(
list, list_info,
&settings->bools.cheevos_verbose_enable,

View File

@ -423,6 +423,9 @@ enum msg_hash_enums
MSG_TAKING_SCREENSHOT,
MSG_SCREENSHOT_SAVED,
MSG_ACHIEVEMENT_UNLOCKED,
MSG_LEADERBOARD_STARTED,
MSG_LEADERBOARD_FAILED,
MSG_LEADERBOARD_SUBMISSION,
MSG_CHANGE_THUMBNAIL_TYPE,
MSG_TOGGLE_FULLSCREEN_THUMBNAILS,
MSG_TOGGLE_CONTENT_METADATA,
@ -1754,6 +1757,10 @@ enum msg_hash_enums
MENU_LABEL(CHEEVOS_VISIBILITY_UNLOCK),
MENU_LABEL(CHEEVOS_VISIBILITY_MASTERY),
MENU_LABEL(CHEEVOS_VISIBILITY_ACCOUNT),
MENU_LABEL(CHEEVOS_VISIBILITY_LBOARD_START),
MENU_LABEL(CHEEVOS_VISIBILITY_LBOARD_SUBMIT),
MENU_LABEL(CHEEVOS_VISIBILITY_LBOARD_CANCEL),
MENU_LABEL(CHEEVOS_VISIBILITY_LBOARD_TRACKERS),
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_ALLGAMES,
MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_HASCHEEVOS,

View File

@ -906,39 +906,53 @@
# cheevos_username =
# cheevos_password =
# The hardcore mode disables savestates and cheating features, but it
# makes the achievements points double.
# cheevos_hardcore_mode_enable = false
# Show a popup when logging in to RetroAchievements.
# cheevos_visibility_account = true
# The hardcore mode disables savestates and cheating features. Achievements
# earned in hardcore mode are uniquely marked so that you can show others
# what you've achieved without emulator assistance features.
# cheevos_hardcore_mode_enable = true
# Show a popup when an achievement is unlocked.
# cheevos_visibility_unlock = true
# Play the 'unlock' audio sound when an achievement is unlocked.
# cheevos_unlock_sound_enable = false
# Show RetroAchievements related messages right after loading a game, such as
# successfull login and the number of cheevos you have unlocked for the game.
# Take a screenshot when an achievement is triggered.
# cheevos_auto_screenshot = false
# Show a popup when all achievements for a game are unlocked.
# cheevos_visibility_mastery = true
# Shows additional diagnostic and error messages
# cheevos_verbose_enable = false
# Show achievements' badges in Quick Menu > Achievements List.
# (note: has no effect if menu_driver = rgui).
# cheevos_badges_enable = false
# Take a screenshot when an achievement is triggered.
# cheevos_auto_screenshot = false
# Besides achievements, some games also have leaderboards, where you can
# compete for high-scores, speedruns, etc.
# cheevos_leaderboards_enable = false
# Show an on-screen indicator when attempting challenging achievements
# to provide feedback when the attempt has failed (for achievements that
# support it)
# cheevos_challenge_indicators = true
# Shows a message when a leaderboard activates.
# cheevos_visibility_lboard_start = true
# Shows a message with your score when a leaderboard is submitted to the server.
# cheevos_visibility_lboard_submit = true
# Shows an on-screen tracker with the current value of active leaderboards.
# cheevos_visibility_lboard_trackers = true
# Send some messages to the RetroAchievements.org saying, for example,
# where you are in the game, how many lives you have, your score, etc.
# cheevos_richpresence_enable = true
# Even after unlocking achievements in previous sessions, you may still want
# to see them triggering in the current session.
# to see them triggering in the current session. (encore mode)
# cheevos_start_active = false
# Unnoficial achievements are used only for achievement creators and testers.