mirror of
https://github.com/stenzek/duckstation.git
synced 2026-07-08 17:46:19 +00:00
dep/rcheevos: Bumpt a4b9156 + #492
And remove some local patches that are now unnecessary.
This commit is contained in:
@@ -657,7 +657,7 @@ RC_EXPORT void RC_CCONV rc_client_destroy_leaderboard_list(rc_client_leaderboard
|
||||
/**
|
||||
* Returns non-zero if the current game has any leaderboards.
|
||||
*/
|
||||
RC_EXPORT int RC_CCONV rc_client_has_leaderboards(rc_client_t* client, int include_hidden);
|
||||
RC_EXPORT int RC_CCONV rc_client_has_leaderboards(rc_client_t* client);
|
||||
|
||||
typedef struct rc_client_leaderboard_entry_t {
|
||||
const char* user;
|
||||
@@ -749,12 +749,6 @@ RC_EXPORT int RC_CCONV rc_client_has_rich_presence(rc_client_t* client);
|
||||
*/
|
||||
RC_EXPORT size_t RC_CCONV rc_client_get_rich_presence_message(rc_client_t* client, char buffer[], size_t buffer_size);
|
||||
|
||||
/**
|
||||
* Returns a list of all possible rich presence strings.
|
||||
* The list is terminated by NULL.
|
||||
*/
|
||||
RC_EXPORT int RC_CCONV rc_client_get_rich_presence_strings(rc_client_t* client, const char** buffer, size_t buffer_size, size_t* count);
|
||||
|
||||
/*****************************************************************************\
|
||||
| Processing |
|
||||
\*****************************************************************************/
|
||||
|
||||
@@ -100,7 +100,6 @@ RC_EXPORT int RC_CCONV rc_runtime_format_lboard_value(char* buffer, int size, in
|
||||
|
||||
RC_EXPORT int RC_CCONV rc_runtime_activate_richpresence(rc_runtime_t* runtime, const char* script, void* unused_L, int unused_funcs_idx);
|
||||
RC_EXPORT int RC_CCONV rc_runtime_get_richpresence(const rc_runtime_t* runtime, char* buffer, size_t buffersize, rc_runtime_peek_t peek, void* peek_ud, void* unused_L);
|
||||
RC_EXPORT int RC_CCONV rc_runtime_get_richpresence_strings(const rc_runtime_t* runtime, const char** buffer, size_t buffersize, size_t* count);
|
||||
|
||||
enum {
|
||||
RC_RUNTIME_EVENT_ACHIEVEMENT_ACTIVATED, /* from WAITING, PAUSED, or PRIMED to ACTIVE */
|
||||
|
||||
@@ -446,7 +446,6 @@ RC_EXPORT int RC_CCONV rc_evaluate_richpresence(rc_richpresence_t* richpresence,
|
||||
RC_EXPORT void RC_CCONV rc_update_richpresence(rc_richpresence_t* richpresence, rc_peek_t peek, void* peek_ud, void* unused_L);
|
||||
RC_EXPORT int RC_CCONV rc_get_richpresence_display_string(rc_richpresence_t* richpresence, char* buffer, size_t buffersize, rc_peek_t peek, void* peek_ud, void* unused_L);
|
||||
RC_EXPORT void RC_CCONV rc_reset_richpresence(rc_richpresence_t* self);
|
||||
RC_EXPORT int RC_CCONV rc_get_richpresence_strings(rc_richpresence_t* richpresence, const char** buffer, size_t buffersize, size_t* count);
|
||||
|
||||
RC_END_C_DECLS
|
||||
|
||||
|
||||
@@ -4886,10 +4886,10 @@ void rc_client_destroy_leaderboard_list(rc_client_leaderboard_list_t* list)
|
||||
free(list);
|
||||
}
|
||||
|
||||
int rc_client_has_leaderboards(rc_client_t* client, int include_hidden)
|
||||
int rc_client_has_leaderboards(rc_client_t* client)
|
||||
{
|
||||
rc_client_subset_info_t* subset;
|
||||
int i, result;
|
||||
int result;
|
||||
|
||||
if (!client)
|
||||
return 0;
|
||||
@@ -4912,20 +4912,8 @@ int rc_client_has_leaderboards(rc_client_t* client, int include_hidden)
|
||||
continue;
|
||||
|
||||
if (subset->public_.num_leaderboards > 0) {
|
||||
if (!include_hidden) {
|
||||
for (i = 0; i < subset->public_.num_leaderboards; i++) {
|
||||
if (subset->leaderboards[i].hidden)
|
||||
continue;
|
||||
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
if (result)
|
||||
break;
|
||||
} else {
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5549,18 +5537,6 @@ size_t rc_client_get_rich_presence_message(rc_client_t* client, char buffer[], s
|
||||
return result;
|
||||
}
|
||||
|
||||
int rc_client_get_rich_presence_strings(rc_client_t* client, const char** buffer, size_t buffer_size, size_t* count) {
|
||||
int result;
|
||||
|
||||
if (!client || !client->game || !buffer)
|
||||
return RC_INVALID_STATE;
|
||||
|
||||
rc_mutex_lock(&client->state.mutex);
|
||||
result = rc_runtime_get_richpresence_strings(&client->game->runtime, buffer, buffer_size, count);
|
||||
rc_mutex_unlock(&client->state.mutex);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* ===== Processing ===== */
|
||||
|
||||
void rc_client_set_event_handler(rc_client_t* client, rc_client_event_handler_t handler)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -920,78 +920,3 @@ void rc_reset_richpresence(rc_richpresence_t* self) {
|
||||
rc_reset_richpresence_triggers(self);
|
||||
rc_reset_values(self->values);
|
||||
}
|
||||
|
||||
static int rc_get_richpresence_strings_has_string(const char** buffer, size_t written, const char* search) {
|
||||
for (size_t i = 0; i < written; i++) {
|
||||
if (buffer[i] == search)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rc_get_richpresence_strings_recurse(const rc_richpresence_lookup_item_t* item, const char** buffer, size_t buffersize, size_t* written) {
|
||||
size_t len;
|
||||
int err;
|
||||
|
||||
if (!rc_get_richpresence_strings_has_string(buffer, *written, item->label)) {
|
||||
if (*written == buffersize)
|
||||
return RC_INSUFFICIENT_BUFFER;
|
||||
|
||||
buffer[(*written)++] = item->label;
|
||||
}
|
||||
|
||||
if (item->left && (err = rc_get_richpresence_strings_recurse(item->left, buffer, buffersize, written)) != RC_OK)
|
||||
return err;
|
||||
if (item->right && (err = rc_get_richpresence_strings_recurse(item->right, buffer, buffersize, written)) != RC_OK)
|
||||
return err;
|
||||
|
||||
return RC_OK;
|
||||
}
|
||||
|
||||
int rc_get_richpresence_strings(rc_richpresence_t* richpresence, const char** buffer, size_t buffersize, size_t* count) {
|
||||
const rc_richpresence_display_t* display;
|
||||
const rc_richpresence_display_part_t* part;
|
||||
size_t written;
|
||||
size_t len;
|
||||
int err;
|
||||
|
||||
written = 0;
|
||||
for (display = richpresence->first_display; display; display = display->next) {
|
||||
for (part = display->display; part; part = part->next) {
|
||||
switch (part->display_type) {
|
||||
case RC_FORMAT_STRING:
|
||||
if (!rc_get_richpresence_strings_has_string(buffer, written, part->text)) {
|
||||
if (written == buffersize)
|
||||
return RC_INSUFFICIENT_BUFFER;
|
||||
|
||||
buffer[written++] = part->text;
|
||||
}
|
||||
break;
|
||||
|
||||
case RC_FORMAT_LOOKUP:
|
||||
if (part->lookup->default_label && !rc_get_richpresence_strings_has_string(buffer, written, part->lookup->default_label)) {
|
||||
if (written == buffersize)
|
||||
return RC_INSUFFICIENT_BUFFER;
|
||||
|
||||
buffer[written++] = part->lookup->default_label;
|
||||
}
|
||||
|
||||
if ((err = rc_get_richpresence_strings_recurse(part->lookup->root, buffer, buffersize, &written)) != RC_OK)
|
||||
return err;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (written == buffersize)
|
||||
return RC_INSUFFICIENT_BUFFER;
|
||||
|
||||
*count = written;
|
||||
buffer[written++] = NULL; /* terminate list */
|
||||
return RC_OK;
|
||||
}
|
||||
|
||||
@@ -508,17 +508,6 @@ int rc_runtime_get_richpresence(const rc_runtime_t* self, char* buffer, size_t b
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rc_runtime_get_richpresence_strings(const rc_runtime_t* self, const char** buffer, size_t buffersize, size_t* count) {
|
||||
int err = RC_INVALID_STATE;
|
||||
if (self->richpresence && self->richpresence->richpresence)
|
||||
err = rc_get_richpresence_strings(self->richpresence->richpresence, buffer, buffersize, count);
|
||||
|
||||
if (err != RC_OK)
|
||||
*buffer = '\0';
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void rc_runtime_do_frame(rc_runtime_t* self, rc_runtime_event_handler_t event_handler, rc_runtime_peek_t peek, void* ud, void* unused_L) {
|
||||
rc_runtime_event_t runtime_event;
|
||||
int i;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1201,7 +1201,7 @@ void Achievements::ClientLoadGameCallback(int result, const char* error_message,
|
||||
const bool has_achievements = rc_client_has_achievements(client);
|
||||
|
||||
// Check for any non-hidden leaderboards. rc_client_create_leaderboard_list() filters hidden leaderboards.
|
||||
const bool has_leaderboards_including_hidden = rc_client_has_leaderboards(client, true);
|
||||
const bool has_leaderboards_including_hidden = rc_client_has_leaderboards(client);
|
||||
bool has_leaderboards = false;
|
||||
if (rc_client_leaderboard_list_t* lblist;
|
||||
has_leaderboards_including_hidden &&
|
||||
|
||||
Reference in New Issue
Block a user