mirror of
https://github.com/libretro/RetroArch
synced 2025-03-25 07:43:52 +00:00
Merge branch 'master' of git://github.com/celerizer/RetroArch into celerizer-test
This commit is contained in:
commit
386199e422
@ -27,6 +27,7 @@
|
|||||||
#include <retro_miscellaneous.h>
|
#include <retro_miscellaneous.h>
|
||||||
#include <retro_math.h>
|
#include <retro_math.h>
|
||||||
#include <net/net_http.h>
|
#include <net/net_http.h>
|
||||||
|
#include <encodings/utf.h>
|
||||||
#include <libretro.h>
|
#include <libretro.h>
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
@ -45,6 +46,10 @@
|
|||||||
#include <rthreads/rthreads.h>
|
#include <rthreads/rthreads.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_DISCORD
|
||||||
|
#include "../discord/discord.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "badges.h"
|
#include "badges.h"
|
||||||
#include "cheevos.h"
|
#include "cheevos.h"
|
||||||
#include "fixup.h"
|
#include "fixup.h"
|
||||||
@ -97,6 +102,10 @@
|
|||||||
/* Define this macro to log downloaded badge images. */
|
/* Define this macro to log downloaded badge images. */
|
||||||
#undef CHEEVOS_LOG_BADGES
|
#undef CHEEVOS_LOG_BADGES
|
||||||
|
|
||||||
|
/* Number of usecs to wait between posting rich presence to the site. */
|
||||||
|
/* Keep consistent with SERVER_PING_FREQUENCY from RAIntegration. */
|
||||||
|
#define CHEEVOS_PING_FREQUENCY 2 * 60 * 1000000
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
rc_trigger_t* trigger;
|
rc_trigger_t* trigger;
|
||||||
@ -114,6 +123,13 @@ typedef struct
|
|||||||
int format;
|
int format;
|
||||||
} rcheevos_lboard_t;
|
} rcheevos_lboard_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
rc_richpresence_t* richpresence;
|
||||||
|
char evaluation[256];
|
||||||
|
retro_time_t last_update;
|
||||||
|
} rcheevos_richpresence_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
retro_task_t* task;
|
retro_task_t* task;
|
||||||
@ -128,6 +144,7 @@ typedef struct
|
|||||||
rcheevos_cheevo_t* core;
|
rcheevos_cheevo_t* core;
|
||||||
rcheevos_cheevo_t* unofficial;
|
rcheevos_cheevo_t* unofficial;
|
||||||
rcheevos_lboard_t* lboards;
|
rcheevos_lboard_t* lboards;
|
||||||
|
rcheevos_richpresence_t richpresence;
|
||||||
|
|
||||||
rcheevos_fixups_t fixups;
|
rcheevos_fixups_t fixups;
|
||||||
|
|
||||||
@ -164,6 +181,7 @@ static rcheevos_locals_t rcheevos_locals =
|
|||||||
NULL, /* core */
|
NULL, /* core */
|
||||||
NULL, /* unofficial */
|
NULL, /* unofficial */
|
||||||
NULL, /* lboards */
|
NULL, /* lboards */
|
||||||
|
{0}, /* rich presence */
|
||||||
{0}, /* fixups */
|
{0}, /* fixups */
|
||||||
{0}, /* token */
|
{0}, /* token */
|
||||||
"N/A",/* hash */
|
"N/A",/* hash */
|
||||||
@ -373,11 +391,11 @@ static const char* rcheevos_rc_error(int ret)
|
|||||||
static int rcheevos_parse(const char* json)
|
static int rcheevos_parse(const char* json)
|
||||||
{
|
{
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
int res = 0;
|
int res = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
unsigned j = 0;
|
unsigned j = 0;
|
||||||
unsigned count = 0;
|
unsigned count = 0;
|
||||||
rcheevos_cheevo_t* cheevo = NULL;
|
rcheevos_cheevo_t* cheevo = NULL;
|
||||||
rcheevos_lboard_t* lboard = NULL;
|
rcheevos_lboard_t* lboard = NULL;
|
||||||
rcheevos_racheevo_t* rac = NULL;
|
rcheevos_racheevo_t* rac = NULL;
|
||||||
@ -399,6 +417,7 @@ static int rcheevos_parse(const char* json)
|
|||||||
rcheevos_locals.core = NULL;
|
rcheevos_locals.core = NULL;
|
||||||
rcheevos_locals.unofficial = NULL;
|
rcheevos_locals.unofficial = NULL;
|
||||||
rcheevos_locals.lboards = NULL;
|
rcheevos_locals.lboards = NULL;
|
||||||
|
rcheevos_locals.richpresence.richpresence = NULL;
|
||||||
rcheevos_free_patchdata(&rcheevos_locals.patchdata);
|
rcheevos_free_patchdata(&rcheevos_locals.patchdata);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -551,6 +570,98 @@ static int rcheevos_parse(const char* json)
|
|||||||
lboard->format = rc_parse_format(lboard->info->format);
|
lboard->format = rc_parse_format(lboard->info->format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rcheevos_locals.patchdata.richpresence_script)
|
||||||
|
{
|
||||||
|
char *script = rcheevos_locals.patchdata.richpresence_script;
|
||||||
|
char *buffer_it = &script[0];
|
||||||
|
const char *script_it = &script[0];
|
||||||
|
unsigned buffer_size;
|
||||||
|
|
||||||
|
while (*script_it != '\0')
|
||||||
|
{
|
||||||
|
if (*script_it == '\\')
|
||||||
|
{
|
||||||
|
char escaped_char = *(script_it + 1);
|
||||||
|
|
||||||
|
switch (escaped_char)
|
||||||
|
{
|
||||||
|
/* Ignore carriage return */
|
||||||
|
case 'r':
|
||||||
|
script_it += 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Accept newlines */
|
||||||
|
case 'n':
|
||||||
|
*buffer_it = '\n';
|
||||||
|
buffer_it++;
|
||||||
|
script_it += 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Accept UTF-16 unicode characters */
|
||||||
|
case 'u':
|
||||||
|
{
|
||||||
|
uint16_t *utf16;
|
||||||
|
char *utf8;
|
||||||
|
uint8_t i, j;
|
||||||
|
|
||||||
|
for (i = 1; i < 16; i++)
|
||||||
|
if (strncmp((script_it + 6 * i), "\\u", 2))
|
||||||
|
break;
|
||||||
|
|
||||||
|
utf16 = (uint16_t*)calloc(i, sizeof(uint16_t));
|
||||||
|
utf8 = (char*) calloc(i * 4, sizeof(char));
|
||||||
|
|
||||||
|
/* Get escaped hex values and add them to the string */
|
||||||
|
for (j = 0; j < i; j++)
|
||||||
|
{
|
||||||
|
char temp[5];
|
||||||
|
|
||||||
|
script_it += 2;
|
||||||
|
memcpy(temp, script_it, 4);
|
||||||
|
temp[4] = '\0';
|
||||||
|
utf16[j] = string_hex_to_unsigned(temp);
|
||||||
|
script_it += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (utf16_to_char_string(utf16, utf8, i * 4))
|
||||||
|
{
|
||||||
|
memcpy(buffer_it, utf8, strlen(utf8));
|
||||||
|
buffer_it += strlen(utf8);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(utf16);
|
||||||
|
free(utf8);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*buffer_it = *script_it;
|
||||||
|
buffer_it++;
|
||||||
|
script_it++;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*buffer_it = *script_it;
|
||||||
|
buffer_it++;
|
||||||
|
script_it++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*buffer_it = '\0';
|
||||||
|
|
||||||
|
buffer_size = rc_richpresence_size(rcheevos_locals.patchdata.richpresence_script);
|
||||||
|
if (buffer_size == 0)
|
||||||
|
{
|
||||||
|
rcheevos_locals.richpresence.richpresence = NULL;
|
||||||
|
CHEEVOS_ERR(RCHEEVOS_TAG "Error reading rich presence");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *buffer = (char*)malloc(buffer_size);
|
||||||
|
rcheevos_locals.richpresence.richpresence = rc_parse_richpresence(buffer, script, NULL, 0);
|
||||||
|
rcheevos_locals.richpresence.last_update = cpu_features_get_time_usec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
@ -934,6 +1045,49 @@ static void rcheevos_test_leaderboards(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* rcheevos_get_richpresence(void)
|
||||||
|
{
|
||||||
|
if (!rcheevos_locals.richpresence.richpresence)
|
||||||
|
return NULL;
|
||||||
|
else
|
||||||
|
return rcheevos_locals.richpresence.evaluation;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rcheevos_test_richpresence(void)
|
||||||
|
{
|
||||||
|
if (!rcheevos_locals.richpresence.richpresence ||
|
||||||
|
cpu_features_get_time_usec() < rcheevos_locals.richpresence.last_update + CHEEVOS_PING_FREQUENCY)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
settings_t* settings = config_get_ptr();
|
||||||
|
char url[256], post_data[1024];
|
||||||
|
|
||||||
|
rcheevos_locals.richpresence.last_update = cpu_features_get_time_usec();
|
||||||
|
|
||||||
|
rc_evaluate_richpresence(rcheevos_locals.richpresence.richpresence,
|
||||||
|
rcheevos_locals.richpresence.evaluation,
|
||||||
|
sizeof(rcheevos_locals.richpresence.evaluation), rcheevos_peek, NULL, NULL);
|
||||||
|
|
||||||
|
/* Form URL */
|
||||||
|
snprintf(url, 256, "http://retroachievements.org/dorequest.php?r=ping&u=%s&t=%s",
|
||||||
|
settings->arrays.cheevos_username,
|
||||||
|
rcheevos_locals.token);
|
||||||
|
|
||||||
|
/* Form POST data */
|
||||||
|
snprintf(post_data, 1024, "g=%u&m=%s",
|
||||||
|
rcheevos_locals.patchdata.game_id,
|
||||||
|
rcheevos_get_richpresence());
|
||||||
|
|
||||||
|
#ifdef HAVE_DISCORD
|
||||||
|
if (settings->bools.discord_enable)
|
||||||
|
discord_update(DISCORD_PRESENCE_RETROACHIEVEMENTS);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
task_push_http_post_transfer(url, post_data, true, "POST", NULL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void rcheevos_reset_game(void)
|
void rcheevos_reset_game(void)
|
||||||
{
|
{
|
||||||
rcheevos_cheevo_t* cheevo;
|
rcheevos_cheevo_t* cheevo;
|
||||||
@ -971,6 +1125,8 @@ void rcheevos_reset_game(void)
|
|||||||
lboard->lboard->submitted = 1;
|
lboard->lboard->submitted = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rcheevos_locals.richpresence.last_update = cpu_features_get_time_usec();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_MENU
|
#ifdef HAVE_MENU
|
||||||
@ -1143,12 +1299,14 @@ bool rcheevos_unload(void)
|
|||||||
CHEEVOS_FREE(rcheevos_locals.core);
|
CHEEVOS_FREE(rcheevos_locals.core);
|
||||||
CHEEVOS_FREE(rcheevos_locals.unofficial);
|
CHEEVOS_FREE(rcheevos_locals.unofficial);
|
||||||
CHEEVOS_FREE(rcheevos_locals.lboards);
|
CHEEVOS_FREE(rcheevos_locals.lboards);
|
||||||
|
CHEEVOS_FREE(rcheevos_locals.richpresence.richpresence);
|
||||||
rcheevos_free_patchdata(&rcheevos_locals.patchdata);
|
rcheevos_free_patchdata(&rcheevos_locals.patchdata);
|
||||||
rcheevos_fixup_destroy(&rcheevos_locals.fixups);
|
rcheevos_fixup_destroy(&rcheevos_locals.fixups);
|
||||||
|
|
||||||
rcheevos_locals.core = NULL;
|
rcheevos_locals.core = NULL;
|
||||||
rcheevos_locals.unofficial = NULL;
|
rcheevos_locals.unofficial = NULL;
|
||||||
rcheevos_locals.lboards = NULL;
|
rcheevos_locals.lboards = NULL;
|
||||||
|
rcheevos_locals.richpresence.richpresence = NULL;
|
||||||
|
|
||||||
rcheevos_loaded = false;
|
rcheevos_loaded = false;
|
||||||
rcheevos_hardcore_active = false;
|
rcheevos_hardcore_active = false;
|
||||||
@ -1210,6 +1368,9 @@ void rcheevos_test(void)
|
|||||||
settings->bools.cheevos_leaderboards_enable &&
|
settings->bools.cheevos_leaderboards_enable &&
|
||||||
!rcheevos_hardcore_paused)
|
!rcheevos_hardcore_paused)
|
||||||
rcheevos_test_leaderboards();
|
rcheevos_test_leaderboards();
|
||||||
|
|
||||||
|
if (settings->bools.cheevos_richpresence_enable)
|
||||||
|
rcheevos_test_richpresence();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,8 @@ int rcheevos_get_console(void);
|
|||||||
|
|
||||||
const char* rcheevos_get_hash(void);
|
const char* rcheevos_get_hash(void);
|
||||||
|
|
||||||
|
const char *rcheevos_get_richpresence(void);
|
||||||
|
|
||||||
extern bool rcheevos_loaded;
|
extern bool rcheevos_loaded;
|
||||||
extern bool rcheevos_hardcore_active;
|
extern bool rcheevos_hardcore_active;
|
||||||
extern bool rcheevos_hardcore_paused;
|
extern bool rcheevos_hardcore_paused;
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#define CHEEVOS_JSON_KEY_TOKEN 0x0e2dbd26U
|
#define CHEEVOS_JSON_KEY_TOKEN 0x0e2dbd26U
|
||||||
#define CHEEVOS_JSON_KEY_FLAGS 0x0d2e96b2U
|
#define CHEEVOS_JSON_KEY_FLAGS 0x0d2e96b2U
|
||||||
#define CHEEVOS_JSON_KEY_LEADERBOARDS 0xf1247d2dU
|
#define CHEEVOS_JSON_KEY_LEADERBOARDS 0xf1247d2dU
|
||||||
|
#define CHEEVOS_JSON_KEY_RICHPRESENCE 0xf18dd230U
|
||||||
#define CHEEVOS_JSON_KEY_MEM 0x0b8807e4U
|
#define CHEEVOS_JSON_KEY_MEM 0x0b8807e4U
|
||||||
#define CHEEVOS_JSON_KEY_FORMAT 0xb341208eU
|
#define CHEEVOS_JSON_KEY_FORMAT 0xb341208eU
|
||||||
#define CHEEVOS_JSON_KEY_SUCCESS 0x110461deU
|
#define CHEEVOS_JSON_KEY_SUCCESS 0x110461deU
|
||||||
@ -261,7 +262,9 @@ typedef struct
|
|||||||
{
|
{
|
||||||
int in_cheevos;
|
int in_cheevos;
|
||||||
int in_lboards;
|
int in_lboards;
|
||||||
|
int is_game_id;
|
||||||
int is_console_id;
|
int is_console_id;
|
||||||
|
int is_richpresence;
|
||||||
unsigned core_count;
|
unsigned core_count;
|
||||||
unsigned unofficial_count;
|
unsigned unofficial_count;
|
||||||
unsigned lboard_count;
|
unsigned lboard_count;
|
||||||
@ -386,9 +389,14 @@ static int rcheevos_read_key(void* userdata,
|
|||||||
case CHEEVOS_JSON_KEY_CONSOLE_ID:
|
case CHEEVOS_JSON_KEY_CONSOLE_ID:
|
||||||
ud->is_console_id = 1;
|
ud->is_console_id = 1;
|
||||||
break;
|
break;
|
||||||
|
case CHEEVOS_JSON_KEY_RICHPRESENCE:
|
||||||
|
ud->is_richpresence = 1;
|
||||||
|
break;
|
||||||
case CHEEVOS_JSON_KEY_ID:
|
case CHEEVOS_JSON_KEY_ID:
|
||||||
if (common)
|
if (common)
|
||||||
ud->field = &ud->id;
|
ud->field = &ud->id;
|
||||||
|
else
|
||||||
|
ud->is_game_id = 1;
|
||||||
break;
|
break;
|
||||||
case CHEEVOS_JSON_KEY_MEMADDR:
|
case CHEEVOS_JSON_KEY_MEMADDR:
|
||||||
if (ud->in_cheevos)
|
if (ud->in_cheevos)
|
||||||
@ -451,6 +459,13 @@ static int rcheevos_read_string(void* userdata,
|
|||||||
ud->field->string = string;
|
ud->field->string = string;
|
||||||
ud->field->length = length;
|
ud->field->length = length;
|
||||||
}
|
}
|
||||||
|
else if (ud->is_richpresence)
|
||||||
|
{
|
||||||
|
ud->patchdata->richpresence_script = (char*)malloc(length + 1);
|
||||||
|
memcpy(ud->patchdata->richpresence_script, string, length);
|
||||||
|
ud->patchdata->richpresence_script[length] = '\0';
|
||||||
|
ud->is_richpresence = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -465,6 +480,11 @@ static int rcheevos_read_number(void* userdata,
|
|||||||
ud->field->string = number;
|
ud->field->string = number;
|
||||||
ud->field->length = length;
|
ud->field->length = length;
|
||||||
}
|
}
|
||||||
|
else if (ud->is_game_id)
|
||||||
|
{
|
||||||
|
ud->patchdata->game_id = (unsigned)strtol(number, NULL, 10);
|
||||||
|
ud->is_game_id = 0;
|
||||||
|
}
|
||||||
else if (ud->is_console_id)
|
else if (ud->is_console_id)
|
||||||
{
|
{
|
||||||
ud->patchdata->console_id = (unsigned)strtol(number, NULL, 10);
|
ud->patchdata->console_id = (unsigned)strtol(number, NULL, 10);
|
||||||
@ -527,7 +547,9 @@ int rcheevos_get_patchdata(const char* json, rcheevos_rapatchdata_t* patchdata)
|
|||||||
/* Load the achievements. */
|
/* Load the achievements. */
|
||||||
ud.in_cheevos = 0;
|
ud.in_cheevos = 0;
|
||||||
ud.in_lboards = 0;
|
ud.in_lboards = 0;
|
||||||
|
ud.is_game_id = 0;
|
||||||
ud.is_console_id = 0;
|
ud.is_console_id = 0;
|
||||||
|
ud.is_richpresence = 0;
|
||||||
ud.field = NULL;
|
ud.field = NULL;
|
||||||
ud.core_count = 0;
|
ud.core_count = 0;
|
||||||
ud.unofficial_count = 0;
|
ud.unofficial_count = 0;
|
||||||
@ -586,7 +608,9 @@ void rcheevos_free_patchdata(rcheevos_rapatchdata_t* patchdata)
|
|||||||
CHEEVOS_FREE(patchdata->core);
|
CHEEVOS_FREE(patchdata->core);
|
||||||
CHEEVOS_FREE(patchdata->unofficial);
|
CHEEVOS_FREE(patchdata->unofficial);
|
||||||
CHEEVOS_FREE(patchdata->lboards);
|
CHEEVOS_FREE(patchdata->lboards);
|
||||||
|
CHEEVOS_FREE(patchdata->richpresence_script);
|
||||||
|
|
||||||
|
patchdata->game_id = 0;
|
||||||
patchdata->console_id = 0;
|
patchdata->console_id = 0;
|
||||||
patchdata->core = NULL;
|
patchdata->core = NULL;
|
||||||
patchdata->unofficial = NULL;
|
patchdata->unofficial = NULL;
|
||||||
|
@ -42,11 +42,13 @@ typedef struct {
|
|||||||
} rcheevos_ralboard_t;
|
} rcheevos_ralboard_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
unsigned game_id;
|
||||||
unsigned console_id;
|
unsigned console_id;
|
||||||
|
|
||||||
rcheevos_racheevo_t* core;
|
rcheevos_racheevo_t* core;
|
||||||
rcheevos_racheevo_t* unofficial;
|
rcheevos_racheevo_t* unofficial;
|
||||||
rcheevos_ralboard_t* lboards;
|
rcheevos_ralboard_t* lboards;
|
||||||
|
char* richpresence_script;
|
||||||
|
|
||||||
unsigned core_count;
|
unsigned core_count;
|
||||||
unsigned unofficial_count;
|
unsigned unofficial_count;
|
||||||
|
@ -1583,6 +1583,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
|
|||||||
SETTING_BOOL("cheevos_test_unofficial", &settings->bools.cheevos_test_unofficial, true, false, false);
|
SETTING_BOOL("cheevos_test_unofficial", &settings->bools.cheevos_test_unofficial, true, false, false);
|
||||||
SETTING_BOOL("cheevos_hardcore_mode_enable", &settings->bools.cheevos_hardcore_mode_enable, true, false, false);
|
SETTING_BOOL("cheevos_hardcore_mode_enable", &settings->bools.cheevos_hardcore_mode_enable, true, false, false);
|
||||||
SETTING_BOOL("cheevos_leaderboards_enable", &settings->bools.cheevos_leaderboards_enable, true, false, false);
|
SETTING_BOOL("cheevos_leaderboards_enable", &settings->bools.cheevos_leaderboards_enable, true, false, false);
|
||||||
|
SETTING_BOOL("cheevos_richpresence_enable", &settings->bools.cheevos_richpresence_enable, true, false, false);
|
||||||
SETTING_BOOL("cheevos_verbose_enable", &settings->bools.cheevos_verbose_enable, true, false, false);
|
SETTING_BOOL("cheevos_verbose_enable", &settings->bools.cheevos_verbose_enable, true, false, false);
|
||||||
SETTING_BOOL("cheevos_auto_screenshot", &settings->bools.cheevos_auto_screenshot, true, false, false);
|
SETTING_BOOL("cheevos_auto_screenshot", &settings->bools.cheevos_auto_screenshot, true, false, false);
|
||||||
#ifdef HAVE_XMB
|
#ifdef HAVE_XMB
|
||||||
|
@ -290,6 +290,7 @@ typedef struct settings
|
|||||||
bool cheevos_test_unofficial;
|
bool cheevos_test_unofficial;
|
||||||
bool cheevos_hardcore_mode_enable;
|
bool cheevos_hardcore_mode_enable;
|
||||||
bool cheevos_leaderboards_enable;
|
bool cheevos_leaderboards_enable;
|
||||||
|
bool cheevos_richpresence_enable;
|
||||||
bool cheevos_badges_enable;
|
bool cheevos_badges_enable;
|
||||||
bool cheevos_verbose_enable;
|
bool cheevos_verbose_enable;
|
||||||
bool cheevos_auto_screenshot;
|
bool cheevos_auto_screenshot;
|
||||||
|
@ -451,6 +451,12 @@ void discord_update(enum discord_presence presence, bool fuzzy_archive_match)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#ifdef HAVE_CHEEVOS
|
||||||
|
case DISCORD_PRESENCE_RETROACHIEVEMENTS:
|
||||||
|
discord_presence.details = rcheevos_get_richpresence();
|
||||||
|
presence = DISCORD_PRESENCE_GAME;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case DISCORD_PRESENCE_SHUTDOWN:
|
case DISCORD_PRESENCE_SHUTDOWN:
|
||||||
discord_presence.partyId = NULL;
|
discord_presence.partyId = NULL;
|
||||||
discord_presence.partyMax = 0;
|
discord_presence.partyMax = 0;
|
||||||
|
@ -33,6 +33,7 @@ enum discord_presence
|
|||||||
DISCORD_PRESENCE_NETPLAY_HOSTING,
|
DISCORD_PRESENCE_NETPLAY_HOSTING,
|
||||||
DISCORD_PRESENCE_NETPLAY_CLIENT,
|
DISCORD_PRESENCE_NETPLAY_CLIENT,
|
||||||
DISCORD_PRESENCE_NETPLAY_NETPLAY_STOPPED,
|
DISCORD_PRESENCE_NETPLAY_NETPLAY_STOPPED,
|
||||||
|
DISCORD_PRESENCE_RETROACHIEVEMENTS,
|
||||||
DISCORD_PRESENCE_SHUTDOWN
|
DISCORD_PRESENCE_SHUTDOWN
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -164,6 +164,8 @@ MSG_HASH(MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
|
|||||||
"cheevos_hardcore_mode_enable")
|
"cheevos_hardcore_mode_enable")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE,
|
MSG_HASH(MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE,
|
||||||
"cheevos_leaderboards_enable")
|
"cheevos_leaderboards_enable")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE,
|
||||||
|
"cheevos_richpresence_enable")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE,
|
MSG_HASH(MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE,
|
||||||
"cheevos_badges_enable")
|
"cheevos_badges_enable")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY,
|
MSG_HASH(MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY,
|
||||||
|
@ -540,6 +540,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_LABEL_VALUE_CHEEVOS_LEADERBOARDS_ENABLE,
|
MENU_ENUM_LABEL_VALUE_CHEEVOS_LEADERBOARDS_ENABLE,
|
||||||
"Leaderboards"
|
"Leaderboards"
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_CHEEVOS_RICHPRESENCE_ENABLE,
|
||||||
|
"Rich Presence"
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_LABEL_VALUE_CHEEVOS_BADGES_ENABLE,
|
MENU_ENUM_LABEL_VALUE_CHEEVOS_BADGES_ENABLE,
|
||||||
"Achievement Badges"
|
"Achievement Badges"
|
||||||
@ -4565,6 +4569,10 @@ MSG_HASH(
|
|||||||
"Game specific leaderboards.\n"
|
"Game specific leaderboards.\n"
|
||||||
"Has no effect if Hardcore Mode is disabled."
|
"Has no effect if Hardcore Mode is disabled."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_CHEEVOS_RICHPRESENCE_ENABLE,
|
||||||
|
"Sends detailed play status to the RetroAchievements website."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_CHEEVOS_BADGES_ENABLE,
|
MENU_ENUM_SUBLABEL_CHEEVOS_BADGES_ENABLE,
|
||||||
"Display badges in the Achievement List."
|
"Display badges in the Achievement List."
|
||||||
|
@ -165,6 +165,7 @@ default_sublabel_macro(action_bind_sublabel_cheevos_enable, MENU_
|
|||||||
default_sublabel_macro(action_bind_sublabel_cheevos_test_unofficial, MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL)
|
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_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_leaderboards_enable, MENU_ENUM_SUBLABEL_CHEEVOS_LEADERBOARDS_ENABLE)
|
||||||
|
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)
|
default_sublabel_macro(action_bind_sublabel_cheevos_badges_enable, MENU_ENUM_SUBLABEL_CHEEVOS_BADGES_ENABLE)
|
||||||
default_sublabel_macro(action_bind_sublabel_cheevos_verbose_enable, MENU_ENUM_SUBLABEL_CHEEVOS_VERBOSE_ENABLE)
|
default_sublabel_macro(action_bind_sublabel_cheevos_verbose_enable, MENU_ENUM_SUBLABEL_CHEEVOS_VERBOSE_ENABLE)
|
||||||
default_sublabel_macro(action_bind_sublabel_cheevos_auto_screenshot, MENU_ENUM_SUBLABEL_CHEEVOS_AUTO_SCREENSHOT)
|
default_sublabel_macro(action_bind_sublabel_cheevos_auto_screenshot, MENU_ENUM_SUBLABEL_CHEEVOS_AUTO_SCREENSHOT)
|
||||||
@ -2632,6 +2633,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
|||||||
case MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE:
|
case MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_leaderboards_enable);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_leaderboards_enable);
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE:
|
||||||
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_richpresence_enable);
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE:
|
case MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_badges_enable);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_badges_enable);
|
||||||
break;
|
break;
|
||||||
|
@ -5857,6 +5857,7 @@ unsigned menu_displaylist_build_list(file_list_t *list, enum menu_displaylist_ct
|
|||||||
{MENU_ENUM_LABEL_CHEEVOS_PASSWORD, PARSE_ONLY_STRING, false },
|
{MENU_ENUM_LABEL_CHEEVOS_PASSWORD, PARSE_ONLY_STRING, false },
|
||||||
{MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE, PARSE_ONLY_BOOL, false },
|
{MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE, PARSE_ONLY_BOOL, false },
|
||||||
{MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE, PARSE_ONLY_BOOL, false },
|
{MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE, PARSE_ONLY_BOOL, false },
|
||||||
|
{MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE, PARSE_ONLY_BOOL, false },
|
||||||
{MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE, PARSE_ONLY_BOOL, false },
|
{MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE, PARSE_ONLY_BOOL, false },
|
||||||
{MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL, PARSE_ONLY_BOOL, false },
|
{MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL, PARSE_ONLY_BOOL, false },
|
||||||
{MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE, PARSE_ONLY_BOOL, false },
|
{MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE, PARSE_ONLY_BOOL, false },
|
||||||
|
@ -15414,6 +15414,22 @@ static bool setting_append_list(
|
|||||||
SD_FLAG_NONE
|
SD_FLAG_NONE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CONFIG_BOOL(
|
||||||
|
list, list_info,
|
||||||
|
&settings->bools.cheevos_richpresence_enable,
|
||||||
|
MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE,
|
||||||
|
MENU_ENUM_LABEL_VALUE_CHEEVOS_RICHPRESENCE_ENABLE,
|
||||||
|
false,
|
||||||
|
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
|
||||||
|
);
|
||||||
|
|
||||||
if (string_is_equal(settings->arrays.menu_driver, "xmb") || string_is_equal(settings->arrays.menu_driver, "ozone"))
|
if (string_is_equal(settings->arrays.menu_driver, "xmb") || string_is_equal(settings->arrays.menu_driver, "ozone"))
|
||||||
CONFIG_BOOL(
|
CONFIG_BOOL(
|
||||||
list, list_info,
|
list, list_info,
|
||||||
|
@ -1220,6 +1220,7 @@ enum msg_hash_enums
|
|||||||
MENU_LABEL(ACCOUNTS_CHEEVOS_USERNAME),
|
MENU_LABEL(ACCOUNTS_CHEEVOS_USERNAME),
|
||||||
MENU_LABEL(CHEEVOS_HARDCORE_MODE_ENABLE),
|
MENU_LABEL(CHEEVOS_HARDCORE_MODE_ENABLE),
|
||||||
MENU_LABEL(CHEEVOS_LEADERBOARDS_ENABLE),
|
MENU_LABEL(CHEEVOS_LEADERBOARDS_ENABLE),
|
||||||
|
MENU_LABEL(CHEEVOS_RICHPRESENCE_ENABLE),
|
||||||
MENU_LABEL(CHEEVOS_BADGES_ENABLE),
|
MENU_LABEL(CHEEVOS_BADGES_ENABLE),
|
||||||
MENU_LABEL(CHEEVOS_TEST_UNOFFICIAL),
|
MENU_LABEL(CHEEVOS_TEST_UNOFFICIAL),
|
||||||
MENU_LABEL(CHEEVOS_VERBOSE_ENABLE),
|
MENU_LABEL(CHEEVOS_VERBOSE_ENABLE),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user