Skip to content

[FEATURE] RetroAchievements matching overhaul #346

Description

@androosio

What problem does it solve?

There's a lot of headroom in RA coverage. Hashing runs lazily per opened game, so on a 9,127-ROM test library only 73 ROMs had ever been hash-attempted — the algorithms already work, they've just never been run across the library. Disc systems need a different approach: RA hashes a disc's primary executable rather than the whole image, so PS1/PS2/PSP/Saturn/Dreamcast/GC/3DO/PCE-CD currently rely on the filename fallback, which is where the mismatches in #8 come from. Adding a way to re-run matching would also let every future improvement reach ROMs already in the library.

Proposed Solution

  1. Bulk background hashing pass + a "Re-match RetroAchievements" action in Settings → Tools (cartridge systems first).
  2. Manual "this isn't the right game" override, for dumps RA hasn't registered.
  3. Correct disc hashing (rcheevos-compatible, CHD via a vendored reader) plus .m3u → disc 1.
  4. Prefer main sets over subsets in the filename fallback; move matching policy into assets/systems/*.json; collapse the two duplicate resolution pipelines.
  5. Library-wide achievements badge + "has achievements" filter, so coverage is visible.

Alternatives Considered

Third-party hash services (Hasheous) resolve a dump by No-Intro/Redump hash and carry an RA game id. Useful, but the RA link is title-level rather than per-dump, and disc lookups still need the CHD decompressed — so it adds a network dependency without avoiding the core work. Worth revisiting later as a fallback.

Additional Context

Measured with a cross-compiled RAHasher over 397 disc ROMs: 202 match once hashing is correct, 87 more are reachable via the manual override, and 102 have no RA set published. So the goal is every ROM landing in a definite state — matched, or clearly marked "no achievements available" — with the cartridge bulk pass as the single largest win available.

Metadata

Metadata

Assignees

Projects

Status
Backlog

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions