From 87366cda9d248cc6345a1539ed7a132f7aad6d9e Mon Sep 17 00:00:00 2001 From: JordanTheToaster Date: Sat, 17 Jan 2026 15:39:33 +0000 Subject: [PATCH] 3rdparty: Update rcheevos to 12.2.1 --- 3rdparty/rcheevos/CHANGELOG.md | 4 ++++ 3rdparty/rcheevos/src/rc_version.h | 2 +- 3rdparty/rcheevos/src/rcheevos/rc_validate.c | 2 ++ 3rdparty/rcheevos/src/rcheevos/value.c | 8 +++++--- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/3rdparty/rcheevos/CHANGELOG.md b/3rdparty/rcheevos/CHANGELOG.md index 6b965333bf..9b269b3e2a 100644 --- a/3rdparty/rcheevos/CHANGELOG.md +++ b/3rdparty/rcheevos/CHANGELOG.md @@ -1,3 +1,7 @@ +# v12.2.1 +* fix parsing of leaderboards with comparisons in legacy-formatted values +* fix validation warning on long AddSource chains + # v12.2.0 * add rc_client_create_subset_list * add rc_client_begin_fetch_game_titles diff --git a/3rdparty/rcheevos/src/rc_version.h b/3rdparty/rcheevos/src/rc_version.h index 5ba3a3229d..30acbced61 100644 --- a/3rdparty/rcheevos/src/rc_version.h +++ b/3rdparty/rcheevos/src/rc_version.h @@ -9,7 +9,7 @@ RC_BEGIN_C_DECLS #define RCHEEVOS_VERSION_MAJOR 12 #define RCHEEVOS_VERSION_MINOR 2 -#define RCHEEVOS_VERSION_PATCH 0 +#define RCHEEVOS_VERSION_PATCH 1 #define RCHEEVOS_MAKE_VERSION(major, minor, patch) (major * 1000000 + minor * 1000 + patch) #define RCHEEVOS_VERSION RCHEEVOS_MAKE_VERSION(RCHEEVOS_VERSION_MAJOR, RCHEEVOS_VERSION_MINOR, RCHEEVOS_VERSION_PATCH) diff --git a/3rdparty/rcheevos/src/rcheevos/rc_validate.c b/3rdparty/rcheevos/src/rcheevos/rc_validate.c index 1c0ac7c4bc..54537e3c4e 100644 --- a/3rdparty/rcheevos/src/rcheevos/rc_validate.c +++ b/3rdparty/rcheevos/src/rcheevos/rc_validate.c @@ -510,6 +510,7 @@ static void rc_combine_ranges(uint32_t* min_val, uint32_t* max_val, uint8_t oper break; case RC_OPERATOR_ADD: + case RC_OPERATOR_ADD_ACCUMULATOR: if (*min_val > *max_val) { /* underflow occurred */ *max_val += oper_max_val; } @@ -522,6 +523,7 @@ static void rc_combine_ranges(uint32_t* min_val, uint32_t* max_val, uint8_t oper break; case RC_OPERATOR_SUB: + case RC_OPERATOR_SUB_ACCUMULATOR: *min_val -= oper_max_val; *max_val -= oper_min_val; break; diff --git a/3rdparty/rcheevos/src/rcheevos/value.c b/3rdparty/rcheevos/src/rcheevos/value.c index 865e31253d..33faee5d5e 100644 --- a/3rdparty/rcheevos/src/rcheevos/value.c +++ b/3rdparty/rcheevos/src/rcheevos/value.c @@ -180,9 +180,11 @@ static void rc_parse_legacy_value(rc_value_t* self, const char** memaddr, rc_par return; } - if (!rc_operator_is_modifying(cond->oper)) { - parse->offset = RC_INVALID_OPERATOR; - return; + if (cond->type == RC_CONDITION_MEASURED && !rc_operator_is_modifying(cond->oper)) { + /* ignore non-modifying operator on measured clause. if it were parsed as an AddSource + * or SubSource, that would have already happened in rc_parse_condition_internal, and + * legacy formatted values are essentially a series of AddSources. */ + cond->oper = RC_OPERATOR_NONE; } rc_condition_update_parse_state(cond, parse);