Files
AnyPS5/docs/dev/debt/libSceNpUniversalDataSystem.md
T
juanpimg 18fb6760e1 feat(prx): declare the missing PS5 3.20 system exports in a third batch
AnyPS5 resolves a title's imports by NID, so a title that imports a system
function that no AnyPS5 library provides fails to load with an unresolved
import. This declares 266 such exports across 4 PS5 system libraries that
AnyPS5 implements but does not provide.

Each declaration calls NotImplemented_nid_no_patch and returns 0; none of
them implements the function. The signatures are unknown for all of them, so
they are declared without parameters, which resolves the import without
making an ABI claim. The technical-debt files record the limitation per
library.

The list is the intersection of the export table of the console's library
(function symbols only), the pinned aerolib names and the functions not yet
defined anywhere in the repo. Every name recomputes to its NID with
tools/nid_names.py.
2026-10-21 21:54:45 +02:00

16 KiB

libSceNpUniversalDataSystem technical debt

Unknown function info

Functional

  • Trophy events: sceNpUniversalDataSystemPostEvent stores an _UnlockTrophy event with an int32 _trophy_id of 0 or more as an unlock for the user and service label of its context, as KytyPS5 does, except an id that libSceNpTrophy2 refuses when the title's trophy data is loaded (one not in the data, a platinum or a progressive trophy). _UpdateTrophyProgress, named only by a third-party unlocker, is logged once per trophy and not interpreted. A context need not be registered, and every post of an event that sceNpUniversalDataSystemCreateEvent returned and that is not yet destroyed returns success (a null or any other event pointer stops the game): KytyPS5's errors for an unknown or unregistered context and for a malformed unlock are not verified. The storage statistics stay zero.
  • Statistics: every other event goes through the title's rules in sce_sys/uds/udsNN.ucp, which libSceNpTrophy2 reads. Only statistics with "aggregation":"latest" and dataType uint32 or uint64 are kept, as in KytyPS5; no public source documents the other aggregations or types, so their definitions and rules are skipped. Only rules whose condition is an eventName alone and whose input is a $.name path (dotted for nested objects) are applied. A value is used when it is an integer of any width that is not negative and fits the statistic's type and minValue/maxValue; KytyPS5 requires the statistic's exact width, and whether the console converts, clamps or rejects other values is not known. Statistics are stored per user and service label, and every trophy's unlockCondition is compared after each event that sets one.