diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index c5f522fede..552cff748d 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -766,6 +766,15 @@ int rcheevos_get_richpresence(char* s, size_t len) return (int)rc_client_get_rich_presence_message(rcheevos_locals.client, s, (size_t)len); } +int rcheevos_get_game_badge_url(char* s, size_t len) +{ + const rc_client_game_t* game = rc_client_get_game_info(rcheevos_locals.client); + if (!game || !game->id || !game->badge_name || !game->badge_name[0]) + return 0; + + return (rc_client_game_get_image_url(game, s, len) == RC_OK); +} + #else /* !HAVE_RC_CLIENT */ void rcheevos_award_achievement(rcheevos_locals_t* locals, diff --git a/cheevos/cheevos.h b/cheevos/cheevos.h index 2fbbbeaaf5..b534d4fd9e 100644 --- a/cheevos/cheevos.h +++ b/cheevos/cheevos.h @@ -57,6 +57,7 @@ bool rcheevos_get_support_cheevos(void); const char* rcheevos_get_hash(void); int rcheevos_get_richpresence(char *s, size_t len); +int rcheevos_get_game_badge_url(char *s, size_t len); uintptr_t rcheevos_get_badge_texture(const char* badge, bool locked, bool download_if_missing); uint8_t* rcheevos_patch_address(unsigned address); diff --git a/network/discord.c b/network/discord.c index dafad2ab40..347a0802da 100644 --- a/network/discord.c +++ b/network/discord.c @@ -277,6 +277,7 @@ void discord_update(enum presence presence) discord_state_t *discord_st = &discord_state_st; #ifdef HAVE_CHEEVOS char cheevos_richpresence[256]; + char cheevos_badge_url[256]; #endif if (presence == discord_st->status) @@ -361,11 +362,14 @@ void discord_update(enum presence presence) discord_st->presence.startTimestamp = discord_st->start_time; #ifdef HAVE_CHEEVOS + if (rcheevos_get_game_badge_url(cheevos_badge_url, sizeof(cheevos_badge_url))) + discord_st->presence.largeImageKey = cheevos_badge_url; + if (rcheevos_get_richpresence(cheevos_richpresence, sizeof(cheevos_richpresence)) > 0) discord_st->presence.details = cheevos_richpresence; else #endif - discord_st->presence.details = msg_hash_to_str( + discord_st->presence.details = msg_hash_to_str( MENU_ENUM_LABEL_VALUE_DISCORD_IN_GAME); discord_st->presence.state = label; @@ -427,6 +431,9 @@ void discord_update(enum presence presence) if (discord_st->pause_time) return; + if (rcheevos_get_game_badge_url(cheevos_badge_url, sizeof(cheevos_badge_url))) + discord_st->presence.largeImageKey = cheevos_badge_url; + if (rcheevos_get_richpresence(cheevos_richpresence, sizeof(cheevos_richpresence)) > 0) discord_st->presence.details = cheevos_richpresence; presence = PRESENCE_GAME;