Files
AnyPS5/docs/dev/debt/libScePlayGo.md
T

2.4 KiB

libScePlayGo technical debt

Unknown function info

  • libScePlayGo - the chunk set comes from playgo-chunkdefs.xml (every listed chunk plus chunks 0 through the default chunk), otherwise from sce_sys/playgo-chunk.dat, whose plgx header is read as holding the chunk count as a 16-bit value at offset 0x0A and ids 0 to count - 1 are taken as valid. The field was identified on four dumps, where exactly that many 0x20-byte entries follow from offset 0x100 (RIDE 4 PPSA01599: 35, Persona 5 Royal PPSA05110: 25, LEGO Horizon Adventures PPSA14632 and Kena PPSA01802: 1); the rest of the format is not decoded and ids are assumed to be contiguous. Every listed chunk is reported as installed (LOCAL_FAST). Without either file, a package with sce_sys/playgo-scenario.json (PPSA01748, whose dump lists no chunks) accepts every chunk id as installed while scePlayGoGetChunkId lists only chunk 0. A package with no playgo-* file in sce_sys (PPSA03001, PPSA03490 and PPSA01285 here) accepts chunk 0; querying any other id throws with a message naming the missing playgo-chunk.dat and playgo-scenario.json, since the incomplete dump cannot establish whether that id exists; APS5_PLAYGO_UNLISTED_CHUNKS=installed answers every such id as installed (LOCAL_FAST, which PPSA15388 needs to load its saves) and =absent answers SCE_PLAYGO_ERROR_BAD_CHUNK_ID (which ends PPSA03001's id walk), as the user's choice for that dump. A sce_sys that holds other playgo-* files (playgo-ficm.dat, playgo-hash-table.dat) without playgo-chunk.dat or playgo-scenario.json, or a playgo-chunk.dat without a plgx header and a nonzero count, throws naming the file, because no such dump is known. These answers are unverified on a console, as is the console's answer for an id outside a package's chunk table.
  • libScePlayGo - scePlayGoGetSupportedOptionalChunk and scePlayGoGetOptionalChunk report every bit set for any type, i.e. every optional chunk (language pack) supported and installed, like scePlayGoGetLanguageMask. The bit layout and the values of type are not known; PPSA01748 calls both with type 0 and hides every text language listed in playgo-scenario.json chunkSupportedLanguages when the bitmask is 0. The console's answer for a package that ships no optional chunks is unverified.