From 0722f3e5fc92ba684832842aa5d8dd88e1ee2cea Mon Sep 17 00:00:00 2001 From: Pouare514 Date: Sun, 27 Sep 2026 11:57:42 +0200 Subject: [PATCH 1/3] prx: add libRenoirCore.PS5 replacement with 23 Renoir stubs for libcohtml Minecraft Legends' libcohtml.Prospero.prx imports 23 NIDs from lib libRenoirCore.PS5_v1 (docs/legends-unresolved-nids.json). Clear names are unknown, so each export is exposed under its raw NID via APS5_EXPORT alias (_nid_no_patch_cut), which nid_patcher strips to the literal NID instead of hashing. Stubs follow KytyPS5 UnresolvedImportStub policy (log call + return 0) via APS5_LOG_OUT rather than throwing NotImplemented. --- core/libs/prx/libRenoirCore.PS5/Export.cpp | 158 +++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 core/libs/prx/libRenoirCore.PS5/Export.cpp diff --git a/core/libs/prx/libRenoirCore.PS5/Export.cpp b/core/libs/prx/libRenoirCore.PS5/Export.cpp new file mode 100644 index 000000000..a502a8535 --- /dev/null +++ b/core/libs/prx/libRenoirCore.PS5/Export.cpp @@ -0,0 +1,158 @@ +#include +#include + +#include "SceTypes.hpp" +#include "prx/libc/include/General.hpp" + +// libRenoirCore.PS5 replacement (game-custom renderer lib, e.g. Minecraft Legends). +// +// The 23 NIDs below are imported by libcohtml.Prospero.prx (lib libRenoirCore.PS5_v1) +// and their clear names are unknown (obfuscated NIDs), so each export is exposed +// with its raw NID string via APS5_EXPORT (alias "_nid_no_patch_cut", which the +// nid_patcher strips to the literal NID instead of hashing it). +// +// Stub policy mirrors KytyPS5's UnresolvedImportStub (log the call, return 0) rather +// than the local NotImplemented_nid_no_patch helper (which throws): Renoir calls may +// happen per-frame and must not unwind through the guest. + +extern "C" { + +APS5_EXPORT("0DsDTr534gc", renoirStub00); +uint64_t APS5_VABI renoirStub00(void) { + APS5_LOG_OUT("stub NID=%s called", "0DsDTr534gc"); + return 0; +} + +APS5_EXPORT("2T56HgbPW08", renoirStub01); +uint64_t APS5_VABI renoirStub01(void) { + APS5_LOG_OUT("stub NID=%s called", "2T56HgbPW08"); + return 0; +} + +APS5_EXPORT("3HnCozh8Az8", renoirStub02); +uint64_t APS5_VABI renoirStub02(void) { + APS5_LOG_OUT("stub NID=%s called", "3HnCozh8Az8"); + return 0; +} + +APS5_EXPORT("5Ysce+s-CWU", renoirStub03); +uint64_t APS5_VABI renoirStub03(void) { + APS5_LOG_OUT("stub NID=%s called", "5Ysce+s-CWU"); + return 0; +} + +APS5_EXPORT("AdlSqA4lGS8", renoirStub04); +uint64_t APS5_VABI renoirStub04(void) { + APS5_LOG_OUT("stub NID=%s called", "AdlSqA4lGS8"); + return 0; +} + +APS5_EXPORT("bC37hk7rHqs", renoirStub05); +uint64_t APS5_VABI renoirStub05(void) { + APS5_LOG_OUT("stub NID=%s called", "bC37hk7rHqs"); + return 0; +} + +APS5_EXPORT("dfPK9R6M0qM", renoirStub06); +uint64_t APS5_VABI renoirStub06(void) { + APS5_LOG_OUT("stub NID=%s called", "dfPK9R6M0qM"); + return 0; +} + +APS5_EXPORT("fZiBbVa2ZDU", renoirStub07); +uint64_t APS5_VABI renoirStub07(void) { + APS5_LOG_OUT("stub NID=%s called", "fZiBbVa2ZDU"); + return 0; +} + +APS5_EXPORT("hkWBH8-WfW4", renoirStub08); +uint64_t APS5_VABI renoirStub08(void) { + APS5_LOG_OUT("stub NID=%s called", "hkWBH8-WfW4"); + return 0; +} + +APS5_EXPORT("hUxvGdi64Io", renoirStub09); +uint64_t APS5_VABI renoirStub09(void) { + APS5_LOG_OUT("stub NID=%s called", "hUxvGdi64Io"); + return 0; +} + +APS5_EXPORT("NxqsZxGisrA", renoirStub10); +uint64_t APS5_VABI renoirStub10(void) { + APS5_LOG_OUT("stub NID=%s called", "NxqsZxGisrA"); + return 0; +} + +APS5_EXPORT("OgZVIkaNmb0", renoirStub11); +uint64_t APS5_VABI renoirStub11(void) { + APS5_LOG_OUT("stub NID=%s called", "OgZVIkaNmb0"); + return 0; +} + +APS5_EXPORT("ojLQdRUnVgA", renoirStub12); +uint64_t APS5_VABI renoirStub12(void) { + APS5_LOG_OUT("stub NID=%s called", "ojLQdRUnVgA"); + return 0; +} + +APS5_EXPORT("s0qDfgsAgVg", renoirStub13); +uint64_t APS5_VABI renoirStub13(void) { + APS5_LOG_OUT("stub NID=%s called", "s0qDfgsAgVg"); + return 0; +} + +APS5_EXPORT("sgrd-r1Nw60", renoirStub14); +uint64_t APS5_VABI renoirStub14(void) { + APS5_LOG_OUT("stub NID=%s called", "sgrd-r1Nw60"); + return 0; +} + +APS5_EXPORT("sjTRb8YD7dQ", renoirStub15); +uint64_t APS5_VABI renoirStub15(void) { + APS5_LOG_OUT("stub NID=%s called", "sjTRb8YD7dQ"); + return 0; +} + +APS5_EXPORT("tG86XGc2VtE", renoirStub16); +uint64_t APS5_VABI renoirStub16(void) { + APS5_LOG_OUT("stub NID=%s called", "tG86XGc2VtE"); + return 0; +} + +APS5_EXPORT("umlGxOcNzgc", renoirStub17); +uint64_t APS5_VABI renoirStub17(void) { + APS5_LOG_OUT("stub NID=%s called", "umlGxOcNzgc"); + return 0; +} + +APS5_EXPORT("vPxA9OFW0os", renoirStub18); +uint64_t APS5_VABI renoirStub18(void) { + APS5_LOG_OUT("stub NID=%s called", "vPxA9OFW0os"); + return 0; +} + +APS5_EXPORT("X2qEBlOLkNo", renoirStub19); +uint64_t APS5_VABI renoirStub19(void) { + APS5_LOG_OUT("stub NID=%s called", "X2qEBlOLkNo"); + return 0; +} + +APS5_EXPORT("ynh4E+BIaqY", renoirStub20); +uint64_t APS5_VABI renoirStub20(void) { + APS5_LOG_OUT("stub NID=%s called", "ynh4E+BIaqY"); + return 0; +} + +APS5_EXPORT("YXe6ABbHZPs", renoirStub21); +uint64_t APS5_VABI renoirStub21(void) { + APS5_LOG_OUT("stub NID=%s called", "YXe6ABbHZPs"); + return 0; +} + +APS5_EXPORT("z0jsXZVz75I", renoirStub22); +uint64_t APS5_VABI renoirStub22(void) { + APS5_LOG_OUT("stub NID=%s called", "z0jsXZVz75I"); + return 0; +} + +} From a719359cd18dd2903e86396b882236296b0b2392 Mon Sep 17 00:00:00 2001 From: Pouare514 Date: Sun, 27 Sep 2026 15:49:18 +0200 Subject: [PATCH 2/3] prx: make libRenoirCore.PS5 stubs throw NotImplemented --- core/libs/prx/libRenoirCore.PS5/Export.cpp | 105 +++++++++------------ 1 file changed, 46 insertions(+), 59 deletions(-) diff --git a/core/libs/prx/libRenoirCore.PS5/Export.cpp b/core/libs/prx/libRenoirCore.PS5/Export.cpp index a502a8535..9130b50f3 100644 --- a/core/libs/prx/libRenoirCore.PS5/Export.cpp +++ b/core/libs/prx/libRenoirCore.PS5/Export.cpp @@ -1,158 +1,145 @@ #include -#include - #include "SceTypes.hpp" #include "prx/libc/include/General.hpp" -// libRenoirCore.PS5 replacement (game-custom renderer lib, e.g. Minecraft Legends). -// -// The 23 NIDs below are imported by libcohtml.Prospero.prx (lib libRenoirCore.PS5_v1) -// and their clear names are unknown (obfuscated NIDs), so each export is exposed -// with its raw NID string via APS5_EXPORT (alias "_nid_no_patch_cut", which the -// nid_patcher strips to the literal NID instead of hashing it). -// -// Stub policy mirrors KytyPS5's UnresolvedImportStub (log the call, return 0) rather -// than the local NotImplemented_nid_no_patch helper (which throws): Renoir calls may -// happen per-frame and must not unwind through the guest. - extern "C" { APS5_EXPORT("0DsDTr534gc", renoirStub00); uint64_t APS5_VABI renoirStub00(void) { - APS5_LOG_OUT("stub NID=%s called", "0DsDTr534gc"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("2T56HgbPW08", renoirStub01); uint64_t APS5_VABI renoirStub01(void) { - APS5_LOG_OUT("stub NID=%s called", "2T56HgbPW08"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("3HnCozh8Az8", renoirStub02); uint64_t APS5_VABI renoirStub02(void) { - APS5_LOG_OUT("stub NID=%s called", "3HnCozh8Az8"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("5Ysce+s-CWU", renoirStub03); uint64_t APS5_VABI renoirStub03(void) { - APS5_LOG_OUT("stub NID=%s called", "5Ysce+s-CWU"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("AdlSqA4lGS8", renoirStub04); uint64_t APS5_VABI renoirStub04(void) { - APS5_LOG_OUT("stub NID=%s called", "AdlSqA4lGS8"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("bC37hk7rHqs", renoirStub05); uint64_t APS5_VABI renoirStub05(void) { - APS5_LOG_OUT("stub NID=%s called", "bC37hk7rHqs"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("dfPK9R6M0qM", renoirStub06); uint64_t APS5_VABI renoirStub06(void) { - APS5_LOG_OUT("stub NID=%s called", "dfPK9R6M0qM"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("fZiBbVa2ZDU", renoirStub07); uint64_t APS5_VABI renoirStub07(void) { - APS5_LOG_OUT("stub NID=%s called", "fZiBbVa2ZDU"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("hkWBH8-WfW4", renoirStub08); uint64_t APS5_VABI renoirStub08(void) { - APS5_LOG_OUT("stub NID=%s called", "hkWBH8-WfW4"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("hUxvGdi64Io", renoirStub09); uint64_t APS5_VABI renoirStub09(void) { - APS5_LOG_OUT("stub NID=%s called", "hUxvGdi64Io"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("NxqsZxGisrA", renoirStub10); uint64_t APS5_VABI renoirStub10(void) { - APS5_LOG_OUT("stub NID=%s called", "NxqsZxGisrA"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("OgZVIkaNmb0", renoirStub11); uint64_t APS5_VABI renoirStub11(void) { - APS5_LOG_OUT("stub NID=%s called", "OgZVIkaNmb0"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("ojLQdRUnVgA", renoirStub12); uint64_t APS5_VABI renoirStub12(void) { - APS5_LOG_OUT("stub NID=%s called", "ojLQdRUnVgA"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("s0qDfgsAgVg", renoirStub13); uint64_t APS5_VABI renoirStub13(void) { - APS5_LOG_OUT("stub NID=%s called", "s0qDfgsAgVg"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("sgrd-r1Nw60", renoirStub14); uint64_t APS5_VABI renoirStub14(void) { - APS5_LOG_OUT("stub NID=%s called", "sgrd-r1Nw60"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("sjTRb8YD7dQ", renoirStub15); uint64_t APS5_VABI renoirStub15(void) { - APS5_LOG_OUT("stub NID=%s called", "sjTRb8YD7dQ"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("tG86XGc2VtE", renoirStub16); uint64_t APS5_VABI renoirStub16(void) { - APS5_LOG_OUT("stub NID=%s called", "tG86XGc2VtE"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("umlGxOcNzgc", renoirStub17); uint64_t APS5_VABI renoirStub17(void) { - APS5_LOG_OUT("stub NID=%s called", "umlGxOcNzgc"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("vPxA9OFW0os", renoirStub18); uint64_t APS5_VABI renoirStub18(void) { - APS5_LOG_OUT("stub NID=%s called", "vPxA9OFW0os"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("X2qEBlOLkNo", renoirStub19); uint64_t APS5_VABI renoirStub19(void) { - APS5_LOG_OUT("stub NID=%s called", "X2qEBlOLkNo"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("ynh4E+BIaqY", renoirStub20); uint64_t APS5_VABI renoirStub20(void) { - APS5_LOG_OUT("stub NID=%s called", "ynh4E+BIaqY"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("YXe6ABbHZPs", renoirStub21); uint64_t APS5_VABI renoirStub21(void) { - APS5_LOG_OUT("stub NID=%s called", "YXe6ABbHZPs"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } APS5_EXPORT("z0jsXZVz75I", renoirStub22); uint64_t APS5_VABI renoirStub22(void) { - APS5_LOG_OUT("stub NID=%s called", "z0jsXZVz75I"); - return 0; + NotImplemented_nid_no_patch(__func__); + return 0; } } From b6dea0b51b268d084adb06986cbe41e9214be725 Mon Sep 17 00:00:00 2001 From: Pouare514 Date: Sun, 27 Sep 2026 15:53:27 +0200 Subject: [PATCH 3/3] Renoir stubs throw with NID name for progress monitoring --- core/libs/prx/libRenoirCore.PS5/Export.cpp | 46 +++++++++++----------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/core/libs/prx/libRenoirCore.PS5/Export.cpp b/core/libs/prx/libRenoirCore.PS5/Export.cpp index 9130b50f3..c0cf955a3 100644 --- a/core/libs/prx/libRenoirCore.PS5/Export.cpp +++ b/core/libs/prx/libRenoirCore.PS5/Export.cpp @@ -6,139 +6,139 @@ extern "C" { APS5_EXPORT("0DsDTr534gc", renoirStub00); uint64_t APS5_VABI renoirStub00(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("0DsDTr534gc"); return 0; } APS5_EXPORT("2T56HgbPW08", renoirStub01); uint64_t APS5_VABI renoirStub01(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("2T56HgbPW08"); return 0; } APS5_EXPORT("3HnCozh8Az8", renoirStub02); uint64_t APS5_VABI renoirStub02(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("3HnCozh8Az8"); return 0; } APS5_EXPORT("5Ysce+s-CWU", renoirStub03); uint64_t APS5_VABI renoirStub03(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("5Ysce+s-CWU"); return 0; } APS5_EXPORT("AdlSqA4lGS8", renoirStub04); uint64_t APS5_VABI renoirStub04(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("AdlSqA4lGS8"); return 0; } APS5_EXPORT("bC37hk7rHqs", renoirStub05); uint64_t APS5_VABI renoirStub05(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("bC37hk7rHqs"); return 0; } APS5_EXPORT("dfPK9R6M0qM", renoirStub06); uint64_t APS5_VABI renoirStub06(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("dfPK9R6M0qM"); return 0; } APS5_EXPORT("fZiBbVa2ZDU", renoirStub07); uint64_t APS5_VABI renoirStub07(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("fZiBbVa2ZDU"); return 0; } APS5_EXPORT("hkWBH8-WfW4", renoirStub08); uint64_t APS5_VABI renoirStub08(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("hkWBH8-WfW4"); return 0; } APS5_EXPORT("hUxvGdi64Io", renoirStub09); uint64_t APS5_VABI renoirStub09(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("hUxvGdi64Io"); return 0; } APS5_EXPORT("NxqsZxGisrA", renoirStub10); uint64_t APS5_VABI renoirStub10(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("NxqsZxGisrA"); return 0; } APS5_EXPORT("OgZVIkaNmb0", renoirStub11); uint64_t APS5_VABI renoirStub11(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("OgZVIkaNmb0"); return 0; } APS5_EXPORT("ojLQdRUnVgA", renoirStub12); uint64_t APS5_VABI renoirStub12(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("ojLQdRUnVgA"); return 0; } APS5_EXPORT("s0qDfgsAgVg", renoirStub13); uint64_t APS5_VABI renoirStub13(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("s0qDfgsAgVg"); return 0; } APS5_EXPORT("sgrd-r1Nw60", renoirStub14); uint64_t APS5_VABI renoirStub14(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("sgrd-r1Nw60"); return 0; } APS5_EXPORT("sjTRb8YD7dQ", renoirStub15); uint64_t APS5_VABI renoirStub15(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("sjTRb8YD7dQ"); return 0; } APS5_EXPORT("tG86XGc2VtE", renoirStub16); uint64_t APS5_VABI renoirStub16(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("tG86XGc2VtE"); return 0; } APS5_EXPORT("umlGxOcNzgc", renoirStub17); uint64_t APS5_VABI renoirStub17(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("umlGxOcNzgc"); return 0; } APS5_EXPORT("vPxA9OFW0os", renoirStub18); uint64_t APS5_VABI renoirStub18(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("vPxA9OFW0os"); return 0; } APS5_EXPORT("X2qEBlOLkNo", renoirStub19); uint64_t APS5_VABI renoirStub19(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("X2qEBlOLkNo"); return 0; } APS5_EXPORT("ynh4E+BIaqY", renoirStub20); uint64_t APS5_VABI renoirStub20(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("ynh4E+BIaqY"); return 0; } APS5_EXPORT("YXe6ABbHZPs", renoirStub21); uint64_t APS5_VABI renoirStub21(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("YXe6ABbHZPs"); return 0; } APS5_EXPORT("z0jsXZVz75I", renoirStub22); uint64_t APS5_VABI renoirStub22(void) { - NotImplemented_nid_no_patch(__func__); + NotImplemented_nid_no_patch("z0jsXZVz75I"); return 0; }