RetroAchievements - Implement Encore Mode (Ability to reearn earned achievements) - #156
RetroAchievements - Implement Encore Mode (Ability to reearn earned achievements)#156sunlollyking wants to merge 1 commit into
Conversation
|
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.
1db0fc3 to
25dd924
Compare
|
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. |
|
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. |
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 builtagainst it keep loading. One that does not implement it returns
GAME_ERROR_NOT_IMPLEMENTEDand 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:
Encore mode enabledEncore mode disabledThe four that change are the 3 earned achievements plus a system notice that
was also already earned.