mirror of
https://github.com/libretro/RetroArch
synced 2025-02-12 00:40:26 +00:00
Merge pull request #5723 from celerizer/celerizer-bcd
RA Leaderboards: BCD and Ignore Unused Fields
This commit is contained in:
commit
7588ed6944
@ -534,6 +534,8 @@ static void cheevos_add_var(const cheevos_var_t* var, char** memaddr,
|
|||||||
{
|
{
|
||||||
if (var->type == CHEEVOS_VAR_TYPE_DELTA_MEM)
|
if (var->type == CHEEVOS_VAR_TYPE_DELTA_MEM)
|
||||||
cheevos_add_char(memaddr, left, 'd');
|
cheevos_add_char(memaddr, left, 'd');
|
||||||
|
else if (var->is_bcd)
|
||||||
|
cheevos_add_char(memaddr, left, 'b');
|
||||||
|
|
||||||
cheevos_add_string(memaddr, left, "0x");
|
cheevos_add_string(memaddr, left, "0x");
|
||||||
cheevos_add_var_size(memaddr, left, var);
|
cheevos_add_var_size(memaddr, left, var);
|
||||||
@ -966,8 +968,12 @@ static int cheevos_parse_expression(cheevos_expr_t *expr, const char* mem)
|
|||||||
expr->count = 1;
|
expr->count = 1;
|
||||||
expr->compare_count = 1;
|
expr->compare_count = 1;
|
||||||
|
|
||||||
for (aux = mem; *aux != '"'; aux++)
|
for (aux = mem;; aux++)
|
||||||
|
{
|
||||||
|
if(*aux == '"' || *aux == ':')
|
||||||
|
break;
|
||||||
expr->count += *aux == '_';
|
expr->count += *aux == '_';
|
||||||
|
}
|
||||||
|
|
||||||
expr->terms = (cheevos_term_t*)calloc(expr->count, sizeof(cheevos_term_t));
|
expr->terms = (cheevos_term_t*)calloc(expr->count, sizeof(cheevos_term_t));
|
||||||
|
|
||||||
@ -1068,8 +1074,6 @@ static int cheevos_parse_mem(cheevos_leaderboard_t *lb, const char* mem)
|
|||||||
if (cheevos_parse_expression(&lb->value, mem + 4))
|
if (cheevos_parse_expression(&lb->value, mem + 4))
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
for (mem += 4;; mem++)
|
for (mem += 4;; mem++)
|
||||||
{
|
{
|
||||||
|
@ -119,12 +119,21 @@ void cheevos_var_parse(cheevos_var_t* var, const char** memaddr)
|
|||||||
const char *str = *memaddr;
|
const char *str = *memaddr;
|
||||||
unsigned base = 16;
|
unsigned base = 16;
|
||||||
|
|
||||||
|
var->is_bcd = false;
|
||||||
|
|
||||||
if (toupper((unsigned char)*str) == 'D' && str[1] == '0' && toupper((unsigned char)str[2]) == 'X')
|
if (toupper((unsigned char)*str) == 'D' && str[1] == '0' && toupper((unsigned char)str[2]) == 'X')
|
||||||
{
|
{
|
||||||
/* d0x + 4 hex digits */
|
/* d0x + 4 hex digits */
|
||||||
str += 3;
|
str += 3;
|
||||||
var->type = CHEEVOS_VAR_TYPE_DELTA_MEM;
|
var->type = CHEEVOS_VAR_TYPE_DELTA_MEM;
|
||||||
}
|
}
|
||||||
|
else if (toupper((unsigned char)*str) == 'B' && str[1] == '0' && toupper((unsigned char)str[2]) == 'X')
|
||||||
|
{
|
||||||
|
/* b0x (binary-coded decimal) */
|
||||||
|
str += 3;
|
||||||
|
var->is_bcd = true;
|
||||||
|
var->type = CHEEVOS_VAR_TYPE_ADDRESS;
|
||||||
|
}
|
||||||
else if (*str == '0' && toupper((unsigned char)str[1]) == 'X')
|
else if (*str == '0' && toupper((unsigned char)str[1]) == 'X')
|
||||||
{
|
{
|
||||||
/* 0x + 4 hex digits */
|
/* 0x + 4 hex digits */
|
||||||
@ -406,5 +415,8 @@ unsigned cheevos_var_get_value(cheevos_var_t* var)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
if(var->is_bcd)
|
||||||
|
return (((value >> 4) & 0xf) * 10) + (value & 0xf);
|
||||||
|
else
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,7 @@ typedef struct
|
|||||||
cheevos_var_size_t size;
|
cheevos_var_size_t size;
|
||||||
cheevos_var_type_t type;
|
cheevos_var_type_t type;
|
||||||
int bank_id;
|
int bank_id;
|
||||||
|
bool is_bcd;
|
||||||
unsigned value;
|
unsigned value;
|
||||||
unsigned previous;
|
unsigned previous;
|
||||||
} cheevos_var_t;
|
} cheevos_var_t;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user