xenia-project / xenia

Xbox 360 Emulator Research Project
https://xenia.jp
Other
8.26k stars 1.14k forks source link

RetroAchievements support and integration #2219

Open BrightEmber opened 1 year ago

BrightEmber commented 1 year ago

After the Local Achievements issue turned to this topic and it was recommended by a Xenia member to be spun off into its own issue, I saw no one had done it yet and decided to try my hand at giving some more information on why this feature would be useful, and what would be needed to implement it.

RetroAchievements is a service connected to many emulators: Bizhawk, PCSX2, RetroArch, DuckStation, PPSSPP, & WinArcadia among them, that allows users to connect to and play with community-made achievements and leaderboards. Dolphin is working on implementing support, which is currently in-progress as well.

Via flags triggered to activate with conditions based off the exposed memory, achievements and leaderboards can be triggered during gameplay, in either softcore mode, which allows cheats and savestates, or hardcore mode, which disables the aforementioned features while active, in favor of keeping things fair for users that want an experience similar to original hardware, without having to compete with users that would have an unfair advantage. The hardcore and softcore split allows both casual, and competitive users, to be satisfied equally.

For those asking why to use this, in comparison to local achievements: many games have wildly disparate achievement sets, with some being minuscule and barely touching all that a game has to offer, not to mention countless inaccessible achievements due to the deprecation of online servers. RetroAchievements can provide a much more involved, full experience, by providing achievements that fully explore all that the games from the Xbox 360 library have to offer, without ignored or missing content, and without inaccessible achievements. It does not prevent Xenia from also providing its own, local achievements support, for the original Xbox 360 achievements as well. It is not one or the other. Both can co-exist, as RetroAchievements requires you to make an account and opt-in to the service. Users who only want the official achievements, if that separate feature is ever implemented, can safely ignore RetroAchievements, while those that find it enjoyable, can enrich their experience.

In order to implement RetroAchievements, there is a guide, that highlights what is needed for the service to work. It is not step-by-step, but gives context to a lot of what makes it work, and the requisites for implementation.

RetroAchievements client integration: https://github.com/RetroAchievements/rcheevos/wiki/rc_client-integration

Libraries are available that will make it easier for Emulators to process the data, without starting from scratch.

rcheevos library (parses and evaluates achievements and leaderboards): https://github.com/RetroAchievements/rcheevos

RAIntegration (the DLL used for RetroAchievements integration): https://github.com/RetroAchievements/RAIntegration

Gorilli09 commented 1 year ago

Xbox 360 games have achievements already

BrightEmber commented 1 year ago

@Gorilli09 I address this point extensively in the initial post. There are many positives to using this service, and it does not mean getting rid of the official achievements. If you are not interested in this feature, you don't have to use it. I know many people who would.

awsms commented 1 year ago

Xbox 360 games have achievements already

OP has made a very good point, if you had read it. I don't see any downsides of this being implemented one day.

w400pedro commented 1 year ago

Yes, I fully agree with @BrightEmber. RetroAchievements would be a really cool feature. As a junior developer at RA, I really want to work (and play) on a variety of games in 360 with achievements made by fans for fans.

tyl0413 commented 1 year ago

Would it not be possible to have another or even multiple community sets on RA on top of the official ones for each game? That's what I'd be interested in mostly myself, just the official sets with some sort of online backend like RA.

w400pedro commented 1 year ago

@tyl0413 If the set's dev wants to keep it identical to the original one, this can be possible, but I'm sure that many devs wouldn't choose this path. The Xbox 360 introduced Achievements to the world, which was a new feature that was in it early stages, and many of the game developers didn't know how to handle it. The Xbox 360's game library includes some poorly designed achievement sets due to this, so it's likely that the RA's dev will create a more comprehensive and challenging set, keeping the essence of the original game..

tyl0413 commented 1 year ago

@w400pedro I'm asking if it's possible to have multiple sets for the same game, that way it's possible to switch between even multiple possible community ones and the official at will.

w400pedro commented 1 year ago

@tyl0413 Perhaps your wish could fit into the 'subsets' feature, which consists of variations of the core set. (such as damageless sets, minigames-only sets, and other creative ideas). I believe your idea could be used in it. The game could have a Core Set designed for the RA community, alongside a 'Subset -> Original Achievements' containing the official game achievements.

As of now, RA doesn't yet support any console with official achievements. Therefore, I can't definitively answer your question about whether the community will embrace this idea and whether the developers will be interested in working on it.

SK-Crow commented 1 year ago

@w400pedro I'm asking if it's possible to have multiple sets for the same game, that way it's possible to switch between even multiple possible community ones and the official at will.

Yes - but also no. It's not handled in an options menu like you'd think. You actually have to apply patches to your ROMs to switch sets.

The ROM's hash determines what set of achievements you're playing for. If you want to play for a subset of achievements, you must patch your ROM and match one of the subset's supported hashes.

So in the case of official, you'd probably have the base rom as official, then apply a generic patch to get the community made achievement set.

tyl0413 commented 1 year ago

@coolpick That sounds like a good solution to me.

Koriebonx98 commented 9 months ago

The emu supports patches, so can this be made possible?

Koriebonx98 commented 9 months ago

Achievements can be found in the log file while playing game.

log refreshes each start of new game,

I have made a script that will read the log file for all achievements, write to txt file and split in 2x sections. “Locked” and “unlocked”

when in log achievements unlocked, remove from locked and place in unlocked with time stamps of “yyyy-mm-DD-SS”

this should be enough for the standard achievements for retroarch without having to do much work

I have even modified it for playnite to look at the databaseid.json for set game, copy and compare with txt file.

to produce the json file use success story in playnite and click add achievements, it uses api of exophase to generate achievements and description, as well as icons.

However I can’t implement it into the addon to show achievements in game description. Only way is to manually do it via playnite desktop.