Files
AnyPS5/docs/dev/debt/libSceNpTrophy.md
T
ntamas94andClaude Opus 5.5 1309f3c63f fix(libSceNpTrophy): answer ABORT from RegisterContext through an aborted handle
With an NP title id in place, a PS4 Pro (firmware 10.71) answers 0x80551607
from sceNpTrophyRegisterContext through an aborted handle, ahead of the
missing trophy package (0x80551626 through a live handle). The earlier
measurement stopped at the NP title id lookup on both handles.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 12:20:03 +01:00

2.6 KiB

libSceNpTrophy technical debt

Unknown function info

  • sceNpTrophyRegisterContext, sceNpTrophyGetTrophyUnlockState, sceNpTrophyUnlockTrophy (libSceNpTrophy, PS4) - the trophy definitions in TROPCONF.ESFM are encrypted, so the trophy count is the number of consecutive TROPnnn.PNG icons in the title's /app0/sce_sys/trophy/trophyNN.trp. Unlocks are kept per user and service label in _trophy/trophyNN.<user id> under the working directory, no platinum trophy is reported (platinumId is -1), and a locked trophy's icon fails with TROPHY_NOT_UNLOCKED. None of it is checked on a console.
  • sceNpTrophyAbortHandle (libSceNpTrophy, PS4) - measured on a PS4 Pro (firmware 10.71): after an abort, sceNpTrophyGetTrophyUnlockState and sceNpTrophyGetGameIcon through that handle answer 0x80551607, before the not-registered check, and sceNpTrophyRegisterContext answers 0x80551607 before the missing trophy package (0x80551626 for a live handle); aborting again answers 0. The other calls that take the handle are assumed to answer 0x80551607 the same way, as libSceNpTrophy.sprx of firmware 10.71 maps the service's abort answer to it on the shared request path. On the console sceNpTrophyRegisterContext checks the process's NP title id before it reaches the service, so a title without one gets the NP title id error instead; AnyPS5 has no NP title id and does not model that step

Functional

  • sceNpTrophyGetGameInfo (libSceNpTrophy) - the trophy configuration TROPCONF.ESFM is encrypted and not read, so the game details report the trophy count taken from the TROPnnn.PNG icons and the group count taken from the GRnnn.PNG icons of the trophy package; the per-grade counts are 0, the title and description are empty, and the progress percentage is unlocked trophies over all trophies instead of the console's grade-weighted points
  • sceNpTrophyGetGroupInfo (libSceNpTrophy) - only the base game group (id -1) is answered, with the same counts as the game; an id past the GRnnn.PNG icons returns INVALID_GROUP_ID, and an existing group throws because the trophies of a group are listed only in the encrypted configuration
  • sceNpTrophyGetTrophyInfo (libSceNpTrophy) - the grade is reported as unknown, the trophy is never hidden, the name and description are empty and the unlock timestamp is 0; a package with groups throws, since a trophy's group is listed only in the encrypted configuration