From d82bae0934111ea1568f53730412c7df739bc030 Mon Sep 17 00:00:00 2001 From: Merijn Date: Mon, 5 Oct 2026 23:09:27 +0200 Subject: [PATCH] feat(libs): add exports imported by PPSA12544's Unity plugins PPSA12544's Media/Plugins modules (CommonDialog, PSN, Share) import libSceVrSetupDialog, which no library provided, and Share, NpTrophy2, WebBrowserDialog and NpEntitlementAccess functions that were not exported. Add libSceVrSetupDialog and the missing functions as unimplemented exports, except sceNpEntitlementAccessRequestConsumeServiceEntitlement, which reports SCE_NP_ERROR_SIGNED_OUT like sceNpEntitlementAccessRequestConsumeUnifiedEntitlement. Their other imports are covered by #734 and #369, and two by #407. Co-Authored-By: Claude Opus 5.5 --- .../prx/libSceNpEntitlementAccess/Export.cpp | 26 +++++++++++++ core/libs/prx/libSceNpTrophy2/src/Context.cpp | 11 ++++++ core/libs/prx/libSceShare/Export.cpp | 16 ++++++++ core/libs/prx/libSceVrSetupDialog/Export.cpp | 38 +++++++++++++++++++ .../prx/libSceWebBrowserDialog/Export.cpp | 6 +++ docs/dev/TechnicalDebt.md | 1 + 6 files changed, 98 insertions(+) create mode 100644 core/libs/prx/libSceVrSetupDialog/Export.cpp diff --git a/core/libs/prx/libSceNpEntitlementAccess/Export.cpp b/core/libs/prx/libSceNpEntitlementAccess/Export.cpp index 05fc69362..31fa46049 100644 --- a/core/libs/prx/libSceNpEntitlementAccess/Export.cpp +++ b/core/libs/prx/libSceNpEntitlementAccess/Export.cpp @@ -118,4 +118,30 @@ int APS5_VABI sceNpEntitlementAccessRequestConsumeUnifiedEntitlement(void) { return SCE_NP_ERROR_SIGNED_OUT; } + +int APS5_VABI sceNpEntitlementAccessRequestConsumeServiceEntitlement(void) { + return SCE_NP_ERROR_SIGNED_OUT; +} + + +int APS5_VABI sceNpEntitlementAccessPollServiceEntitlementInfo(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceNpEntitlementAccessPollUnifiedEntitlementInfo(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceNpEntitlementAccessRequestServiceEntitlementInfo(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceNpEntitlementAccessRequestUnifiedEntitlementInfo(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + } diff --git a/core/libs/prx/libSceNpTrophy2/src/Context.cpp b/core/libs/prx/libSceNpTrophy2/src/Context.cpp index e259afb73..0a7bd1daf 100644 --- a/core/libs/prx/libSceNpTrophy2/src/Context.cpp +++ b/core/libs/prx/libSceNpTrophy2/src/Context.cpp @@ -34,4 +34,15 @@ int APS5_VABI sceNpTrophy2UnregisterUnlockCallback() { return SCE_NP_TROPHY2_OK; } + +int APS5_VABI sceNpTrophy2GetRewardIcon(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceNpTrophy2ShowTrophyList(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + } diff --git a/core/libs/prx/libSceShare/Export.cpp b/core/libs/prx/libSceShare/Export.cpp index caabed9b9..ffebda5e9 100644 --- a/core/libs/prx/libSceShare/Export.cpp +++ b/core/libs/prx/libSceShare/Export.cpp @@ -100,4 +100,20 @@ int APS5_VABI sceShareCaptureScreenshotExtended(const void* extended_param, int3 return ERROR_NOT_SUPPORTED; } + +int APS5_VABI sceShareCaptureVideoClipExtended(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceShareGetRunningStatus(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceShareSetContentParamForApplicationTitle(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + } diff --git a/core/libs/prx/libSceVrSetupDialog/Export.cpp b/core/libs/prx/libSceVrSetupDialog/Export.cpp new file mode 100644 index 000000000..5c9a5da6a --- /dev/null +++ b/core/libs/prx/libSceVrSetupDialog/Export.cpp @@ -0,0 +1,38 @@ +#include +#include +#include "SceTypes.hpp" +#include "prx/libc/include/General.hpp" + +extern "C" { + +int APS5_VABI sceVrSetupDialogClose(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceVrSetupDialogGetResult(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceVrSetupDialogInitialize(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceVrSetupDialogOpen(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceVrSetupDialogTerminate(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +int APS5_VABI sceVrSetupDialogUpdateStatus(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +} diff --git a/core/libs/prx/libSceWebBrowserDialog/Export.cpp b/core/libs/prx/libSceWebBrowserDialog/Export.cpp index 879608486..af2a92791 100644 --- a/core/libs/prx/libSceWebBrowserDialog/Export.cpp +++ b/core/libs/prx/libSceWebBrowserDialog/Export.cpp @@ -59,4 +59,10 @@ int APS5_VABI sceWebBrowserDialogUpdateStatus(void) { return g_status.load(); } + +int APS5_VABI sceWebBrowserDialogSetCookie(void) { + NotImplemented_nid_no_patch(__func__); + return 0; +} + } diff --git a/docs/dev/TechnicalDebt.md b/docs/dev/TechnicalDebt.md index c457ddd14..a69fe179d 100644 --- a/docs/dev/TechnicalDebt.md +++ b/docs/dev/TechnicalDebt.md @@ -70,6 +70,7 @@ Throughout the project, every function at every stage either **does exactly what - [BnMAMrsfVWo](../../core/libs/prx/libc/src/HeapDiagnostics.cpp) (libc) - unknown name, signature - [scePngEncEncode](../../core/libs/prx/libScePngEnc/Export.cpp) (libScePngEnc) - whether rows may stay unfiltered when `filter_type` names a subset of the filters is unknown; as in shadPS4, they may only for 0 and for the all-filters mask - AudioIn, NpSessionSignaling and PlayerInvitationDialog exports added without an implementation have assumed signatures +- [libSceVrSetupDialog](../../core/libs/prx/libSceVrSetupDialog/Export.cpp), and the Share, NpTrophy2, NpEntitlementAccess and WebBrowserDialog exports imported by PPSA12544's Unity plugins and added without an implementation, have unknown signatures - [libSceAudioPropagation](../../core/libs/prx/libSceAudioPropagation/Export.cpp) (libSceAudioPropagation) - signatures and struct descriptors recovered from PPSA21567's calls (#481), not from documentation. The system options layout is unknown (only checked for non-null); the fourth argument of `sceAudioPropagationSourceCalculateAudioPaths` is unknown; `sceAudioPropagationSourceGetAudioPath` is assumed to output an 8-byte path handle. The meaning of the `RenderInfo` word at +0x28 is unknown (PPSA21567 and PPSA21564 pass 2); only 2 is accepted. Both titles pass one `RenderInfo` per call: a count of 0 throws, and larger counts are handled element by element without proof. No error code is known, so invalid input throws instead of returning one - [sceAvPlayerStartEx](../../core/libs/prx/libSceAvPlayer/Export.cpp) (libSceAvPlayer) - start info layout unknown; it is ignored and playback starts as with `sceAvPlayerStart` - [sceAvPlayerInit / sceAvPlayerInitEx](../../core/libs/prx/libSceAvPlayer/src/Player.cpp) (libSceAvPlayer) - behaviour without a memory replacement unknown; frame and sample buffers then come from the guest heap