Skip to content

RetroAchievements - Implement Encore Mode (Ability to reearn earned achievements) - #156

Open
sunlollyking wants to merge 1 commit into
garbear:masterfrom
sunlollyking:achievements-encore-mode
Open

RetroAchievements - Implement Encore Mode (Ability to reearn earned achievements)#156
sunlollyking wants to merge 1 commit into
garbear:masterfrom
sunlollyking:achievements-encore-mode

Conversation

@sunlollyking

Copy link
Copy Markdown

Replaying a game you have finished is silent. Every achievement is unlocked, so
none of them are armed and none of them fire. Encore mode re-arms them, and a
second run through a favourite behaves like the first.

Nothing is submitted for them a second time. The server record stands, the point
total does not move, and an achievement earned again is reported exactly as one
earned for the first time.

How it works

rc_client already implements this. It decides whether an achievement is active
by testing it against the player's unlock record, and encore mode is the flag
that makes that test always pass. What it lacked was any way to be told.

The decision has to be made before the game loads, because that is when the
achievements are armed, so this is sent alongside the credentials rather than
when the setting changes. The achievement runtime is rebuilt per game, so a
client told once would forget by the next load.

Setting

A toggle under RetroAchievements, off by default. It is a replay aid rather
than a mode that changes what a session is worth, so nothing else in the UI is
conditioned on it.

Game API

Goes to 8.1.0. This is the first call Kodi makes into the add-on for
achievements -- everything before it went the other way -- and it is appended to
KodiToAddonFuncTable_Game, so the minimum stays at 8.0.0 and add-ons built
against it keep loading. One that does not implement it returns
GAME_ERROR_NOT_IMPLEMENTED and plays as before.

Add-on side

kodi-game/game.libretro#180.

Tested

Balloon Fight (fceumm), account with 3 of its 25 achievements already earned.
Toggled live, without restarting Kodi, reloading the same game each time:

setting rcheevos reports achievements armed
encore on Encore mode enabled 26/26
encore off Encore mode disabled 22/26

The four that change are the 3 earned achievements plus a system notice that
was also already earned.

@sunlollyking sunlollyking changed the title Games: Play again for achievements already earned RetroAchievements - Implement Encore Mode (Ability to reearn earned achievements) Sep 1, 2026
@sunlollyking

Copy link
Copy Markdown
Author

This one is really great for testing @garbear lets you re-earn an achievement isn't too big and knocks off another big feature Retroachievements allow in their spec.

A game you have finished has nothing left to earn, so replaying it is silent:
the achievements are all unlocked, none of them are armed, and none of them
fire. Encore mode re-arms them, so a second run through a favourite behaves
like the first. Nothing is submitted for them a second time -- the server
record stands, and the point total does not move.

The achievement runtime already implements this; it just had no way to be
told. rc_client decides whether an achievement is active by testing it
against the player's unlock record, and encore mode is the flag that makes
that test always pass. The decision has to be made before the game loads,
because that is when the achievements are armed, which is why this is sent
with the credentials rather than when the setting changes. The runtime is
built per game, so a client told once would forget by the next load.

The setting sits under RetroAchievements and is off by default. It is a
replay aid rather than a mode that changes what a session is worth, so
nothing else in the UI is conditioned on it, and an achievement earned
again is reported exactly as one earned for the first time.

The Game API goes to 8.1.0. This is the first call Kodi makes into the
add-on for achievements -- everything before it went the other way -- and it
is appended, so the minimum stays at 8.0.0 and add-ons built against it keep
loading. One that does not implement it returns GAME_ERROR_NOT_IMPLEMENTED
and plays as before.
@sunlollyking
sunlollyking force-pushed the achievements-encore-mode branch from 1db0fc3 to 25dd924 Compare September 1, 2026 13:10
@sunlollyking

Copy link
Copy Markdown
Author

I've been chatting to RAAdmin about hardcore mode and once we've got this and the on screen indicators PR merged in all i need to do is open a PR for hardcore mode (to show we're serious) and work i've already done but it's parked - and get them a build with the PR in. Once that's done in theory they can provide a code review and unlock hardcore mode for Kodi.

@garbear

garbear commented Sep 4, 2026

Copy link
Copy Markdown
Owner

Love encore mode for testing! We can get this into RC 1, being what I call "new feature polish". The Game API bump is a little tricky, as it's a breaking change and I wanted to stabilize the API by Beta 2, but I'll probably decide it's OK to change the Game API for RC 1. After that definitely no API changes. So given that knowledge, we need to fast-track any outstanding cheevos-related changes to master ASAP. If hardcore mode needs an API change, this includes that as well.

Probably the best thing is to PR all Game API changes needed for possible features we'll want. E.g. see how I did xbmc#28387, to get the API changes in. Do everything and bump the version to 8.1.0 / 8.1.0 min.

I guess the point I'm trying to convey is, at a human level I'm overwhelmed by the V22 release, and need these changes to fit into my release process. Especially the need for all API changes to land immediately. Can you open a PR against my master with all the remaining cheevos work, and API changes needed for future cheevos features? I'll give it a quick review then we can submit to master in time for RC 1, which I wanna do in a week and a half.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants