mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-08 13:50:20 +00:00
Recover the four signatures from the 11.00 wrappers. GetVoiceChatPriority and SetVoiceChatPriority validate their output and priority (1 or 2) and answer NOT_IN_PARTY, since the local member is never in a party. The private handler is stored after the public handler callback is recorded, and both handler state errors use the wrapper's 0x80552511.
5.1 KiB
5.1 KiB
libSceNpParty technical debt
Unknown function info
- sceNpPartyGetState and sceNpPartyGetStateAsUserA (libSceNpParty) - the 16-bit state, its
NOT_IN_PARTYvalue 2 and theINVALID_ARGUMENT(0x80552504) error follow shadPS4's np_party.h and np_error.h (PS4); shadPS4 does not check for a null state. Both returnNOT_INITIALIZED(0x80552503) beforesceNpPartyInitializeand aftersceNpPartyTerminate, andsceNpPartyGetStateAsUserAreturnsINVALID_ARGUMENTfor user -1, as a firmware 13.42 run of the module under an emulator shows; there the state itself comes from the party service. Not measured on a PS5 - sceNpPartyGetId, sceNpPartyGetMembersA, sceNpPartyGetMemberInfoA, sceNpPartyGetMemberSessionInfo, sceNpPartyGetMemberVoiceInfo and sceNpPartySendBinaryMessage (libSceNpParty) - the user is never in a party, so these return
NOT_IN_PARTY(0x80552506, shadPS4's np_error.h) and write nothing, orINVALID_ARGUMENTfor a null pointer; the signatures are from Orbital's type database. LikesceNpPartyGetStatethey returnNOT_INITIALIZED(0x80552503) first when the library is not initialized, as the 13.42 run shows for these andsceNpPartyGetMembers/GetMemberInfo. That run reaches the party service past the module's own checks and finds no localNOT_IN_PARTY, so the answer after initialization stays this model. Not measured on a PS5 - sceNpPartyInitialize, sceNpPartyTerminate and sceNpPartyCheckCallback (libSceNpParty) - an initialized flag with
ALREADY_INITIALIZED(0x80552502) andNOT_INITIALIZED(0x80552503) from shadPS4's np_error.h. Whether the console refuses a null initialize parameter, and which check comes first, is not known - sceNpPartyCreate, sceNpPartyCreateA, sceNpPartyGetStateAsUser, sceNpPartyJoin, sceNpPartyLeave, sceNpPartyShowInvitationList and sceNpPartyShowInvitationListA (libSceNpParty) - Orbital has no prototypes for these and no credible ones were found. The declarations have no parameters solely to resolve known imports; this is not an ABI claim and callers must not call them until signatures are verified
- sceNpPartyGetMembers, sceNpPartyGetMemberInfo and sceNpPartyRegisterHandler (libSceNpParty) - the signatures are from fpPS4 (PS4) and match their
Avariants, so the member queries behave like them: no party,NOT_IN_PARTYfrom shadPS4, and handlers accepted but never called. How the console's non-Amember structures differ from theAones is not known, and nothing is written to them. Not measured on a PS5
Functional
- sceNpPartyGetVoiceChatPriority and sceNpPartySetVoiceChatPriority (libSceNpParty) - the 11.00 wrapper confirms the out-pointer check in Get and, in Set, a 32-bit priority accepted only when
priority - 1is 0 or 1, withINVALID_ARGUMENTfor every other value. The priority belongs to the local party member, so both returnNOT_IN_PARTY(0x80552506) and write nothing because no party ever exists; this matches the PS4 reimplementation in PS4Recomp. The console's result for a valid priority after initialization is not measured - sceNpPartyRegisterPrivateHandler and sceNpPartyUnregisterPrivateHandler (libSceNpParty) - the 11.00 wrappers show that private registration requires the public handler callback recorded from offset 8 of the block passed to
sceNpPartyRegisterHandler/RegisterHandlerA, returning0x80552511while it is absent; both accept any private-handler pointer, including null, store or clear it and return 0, and the handler is never invoked. Unregister returns0x80552511when no non-null private handler is registered. The name and exact meaning of0x80552511are inferred - sceNpPartyRegisterHandler and sceNpPartyRegisterHandlerA (libSceNpParty) - both record the callback at offset 8 of the handler block so that private registration can check it; RegisterHandlerA returns
0x80552511on a second registration while RegisterHandler accepts and replaces it, as the 11.00 wrappers do. The block's version field at offset 4 is not inspected, unlike the wrapper, and no callback is ever invoked. The rest of the block stays opaque and is not copied