Libraries: Np libraries cleanup (#3535)

* Np library cleanup

Moved all Np libraries to a Np folder, created files for Np error codes and structs shared between the libraries, removed empty auto-generated stubs from NpCommon and NpManager, and more things of that nature.

Also implemented sceNpGetAccountCountry, since we already had sceNpGetAccountCountryA anyway.

* Cleanup NpManager signed_out checks

The PR that introduced the PSN signed in status reverted some of the changes I'd previously made to improve accuracy.
Also they missed sceNpHasSignedUp, which just uses an internal variant of sceNpGetState for it's own check.

* Copyright dates

* Move signin check to NpManager RegisterLib

Hardcoding it the way I did caused it to read signin status before config was read.

* Fix RegisterLib names

Not sure why these weren't adjusted yet, so I've adjusted them myself.

* Fix NpCommon exports

* Basic parameter validation in sceNpDeleteRequest and sceNpCreateRequest

* More thorough request logic

Created an enum to capture the current state of each request, using a vector to store them.
I've made 3 states, none represents deleted requests, active represents requests that were made, but haven't been used yet, and complete represents used requests (a request cannot be used for multiple functions).

* Functions

sceNpCheckAvailability, sceNpCheckAvailabilityA, sceNpCheckNpReachability, sceNpGetAccountDateOfBirth, sceNpGetAccountDateOfBirthA added.

* sceNpGetAccountLanguage, sceNpGetAccountLanguageA

* sceNpGetGamePresenceStatus, sceNpGetGamePresenceStatusA

Also reduced debug logging for functions with early signed out returns, since those should behave identically to real hardware so long as you keep PSN emulation disabled.

* Fix sceNpGetAccountLanguage parameters

Oops

* sceNpGetNpReachabilityState

* sceNpGetParentalControlInfo, sceNpGetParentalControlInfoA

* Move OrbisNpState back to np_manager.h

Until this sees use elsewhere, this doesn't need to be with np-wide things.

* Clang
This commit is contained in:
Stephen Miller
2025-09-06 16:32:22 -05:00
committed by GitHub
parent 6f5036f8dc
commit 0e7e100a7e
36 changed files with 828 additions and 13381 deletions

View File

@@ -577,26 +577,25 @@ set(VDEC_LIB src/core/libraries/videodec/videodec2_impl.cpp
src/core/libraries/videodec/videodec_impl.h
)
set(NP_LIBS src/core/libraries/np_common/np_common.cpp
src/core/libraries/np_common/np_common.h
src/core/libraries/np_manager/np_manager.cpp
src/core/libraries/np_manager/np_manager.h
src/core/libraries/np_score/np_score.cpp
src/core/libraries/np_score/np_score.h
src/core/libraries/np_trophy/np_trophy.cpp
src/core/libraries/np_trophy/np_trophy.h
src/core/libraries/np_trophy/trophy_ui.cpp
src/core/libraries/np_trophy/trophy_ui.h
src/core/libraries/np_trophy/np_trophy_error.h
src/core/libraries/np_web_api/np_web_api.cpp
src/core/libraries/np_web_api/np_web_api.h
src/core/libraries/np_party/np_party.cpp
src/core/libraries/np_party/np_party.h
src/core/libraries/np_party/np_party_error.h
src/core/libraries/np_auth/np_auth.cpp
src/core/libraries/np_auth/np_auth.h
src/core/libraries/np_profiledialog/np_profiledialog.cpp
src/core/libraries/np_profiledialog/np_profiledialog.h
set(NP_LIBS src/core/libraries/np/np_error.h
src/core/libraries/np/np_common.cpp
src/core/libraries/np/np_common.h
src/core/libraries/np/np_manager.cpp
src/core/libraries/np/np_manager.h
src/core/libraries/np/np_score.cpp
src/core/libraries/np/np_score.h
src/core/libraries/np/np_trophy.cpp
src/core/libraries/np/np_trophy.h
src/core/libraries/np/trophy_ui.cpp
src/core/libraries/np/trophy_ui.h
src/core/libraries/np/np_web_api.cpp
src/core/libraries/np/np_web_api.h
src/core/libraries/np/np_party.cpp
src/core/libraries/np/np_party.h
src/core/libraries/np/np_auth.cpp
src/core/libraries/np/np_auth.h
src/core/libraries/np/np_profile_dialog.cpp
src/core/libraries/np/np_profile_dialog.h
)
set(ZLIB_LIB src/core/libraries/zlib/zlib.cpp

View File

@@ -15,7 +15,7 @@
namespace Libraries::LibcInternal {
void RegisterlibSceLibcInternal(Core::Loader::SymbolsResolver* sym) {
void RegisterLib(Core::Loader::SymbolsResolver* sym) {
RegisterlibSceLibcInternalMath(sym);
RegisterlibSceLibcInternalStr(sym);
RegisterlibSceLibcInternalMemory(sym);

View File

@@ -14,5 +14,5 @@ namespace Libraries::LibcInternal {
// I won't manage definitons of 3000+ functions, and they don't need to be accessed externally,
// so everything is just in the .cpp file
void RegisterlibSceLibcInternal(Core::Loader::SymbolsResolver* sym);
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::LibcInternal

View File

@@ -31,14 +31,14 @@
#include "core/libraries/network/netctl.h"
#include "core/libraries/network/ssl.h"
#include "core/libraries/network/ssl2.h"
#include "core/libraries/np_auth/np_auth.h"
#include "core/libraries/np_common/np_common.h"
#include "core/libraries/np_manager/np_manager.h"
#include "core/libraries/np_party/np_party.h"
#include "core/libraries/np_profiledialog/np_profiledialog.h"
#include "core/libraries/np_score/np_score.h"
#include "core/libraries/np_trophy/np_trophy.h"
#include "core/libraries/np_web_api/np_web_api.h"
#include "core/libraries/np/np_auth.h"
#include "core/libraries/np/np_common.h"
#include "core/libraries/np/np_manager.h"
#include "core/libraries/np/np_party.h"
#include "core/libraries/np/np_profile_dialog.h"
#include "core/libraries/np/np_score.h"
#include "core/libraries/np/np_trophy.h"
#include "core/libraries/np/np_web_api.h"
#include "core/libraries/pad/pad.h"
#include "core/libraries/playgo/playgo.h"
#include "core/libraries/playgo/playgo_dialog.h"
@@ -93,13 +93,14 @@ void InitHLELibs(Core::Loader::SymbolsResolver* sym) {
Libraries::SysModule::RegisterLib(sym);
Libraries::Posix::RegisterLib(sym);
Libraries::AudioIn::RegisterLib(sym);
Libraries::NpCommon::RegisterLib(sym);
Libraries::NpManager::RegisterLib(sym);
Libraries::NpScore::RegisterLib(sym);
Libraries::NpTrophy::RegisterLib(sym);
Libraries::NpWebApi::RegisterLib(sym);
Libraries::NpProfileDialog::RegisterLib(sym);
Libraries::NpAuth::RegisterLib(sym);
Libraries::Np::NpCommon::RegisterLib(sym);
Libraries::Np::NpManager::RegisterLib(sym);
Libraries::Np::NpScore::RegisterLib(sym);
Libraries::Np::NpTrophy::RegisterLib(sym);
Libraries::Np::NpWebApi::RegisterLib(sym);
Libraries::Np::NpProfileDialog::RegisterLib(sym);
Libraries::Np::NpAuth::RegisterLib(sym);
Libraries::Np::NpParty::RegisterLib(sym);
Libraries::ScreenShot::RegisterLib(sym);
Libraries::AppContent::RegisterLib(sym);
Libraries::PngDec::RegisterLib(sym);
@@ -126,7 +127,6 @@ void InitHLELibs(Core::Loader::SymbolsResolver* sym) {
Libraries::JpegEnc::RegisterLib(sym);
Libraries::Mouse::RegisterLib(sym);
Libraries::WebBrowserDialog::RegisterLib(sym);
Libraries::NpParty::RegisterLib(sym);
Libraries::Zlib::RegisterLib(sym);
Libraries::Hmd::RegisterLib(sym);
Libraries::HmdSetupDialog::RegisterLib(sym);

View File

@@ -519,7 +519,7 @@ int PS4_SYSV_ABI sceNgs2VoiceRunCommands() {
return ORBIS_OK;
}
void RegisterlibSceNgs2(Core::Loader::SymbolsResolver* sym) {
void RegisterLib(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("3pCNbVM11UA", "libSceNgs2", 1, "libSceNgs2", 1, 1, sceNgs2CalcWaveformBlock);
LIB_FUNCTION("6qN1zaEZuN0", "libSceNgs2", 1, "libSceNgs2", 1, 1,
sceNgs2CustomRackGetModuleInfo);

View File

@@ -269,6 +269,6 @@ struct OrbisNgs2VoiceState {
u32 stateFlags;
};
void RegisterlibSceNgs2(Core::Loader::SymbolsResolver* sym);
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::Ngs2

View File

@@ -1,12 +1,12 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/np_auth/np_auth.h"
#include "core/libraries/np/np_auth.h"
namespace Libraries::NpAuth {
namespace Libraries::Np::NpAuth {
s32 PS4_SYSV_ABI sceNpAuthGetAuthorizationCode() {
LOG_ERROR(Lib_NpAuth, "(STUBBED) called");
@@ -96,4 +96,4 @@ void RegisterLib(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("SK-S7daqJSE", "libSceNpAuth", 1, "libSceNpAuth", 1, 1, sceNpAuthWaitAsync);
};
} // namespace Libraries::NpAuth
} // namespace Libraries::Np::NpAuth

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -9,7 +9,7 @@ namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::NpAuth {
namespace Libraries::Np::NpAuth {
s32 PS4_SYSV_ABI sceNpAuthGetAuthorizationCode();
s32 PS4_SYSV_ABI sceNpAuthGetIdToken();
@@ -26,4 +26,4 @@ s32 PS4_SYSV_ABI sceNpAuthSetTimeout();
s32 PS4_SYSV_ABI sceNpAuthWaitAsync();
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::NpAuth
} // namespace Libraries::Np::NpAuth

View File

@@ -0,0 +1,105 @@
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/np/np_common.h"
#include "core/libraries/np/np_common_error.h"
#include "core/libraries/np/np_error.h"
#include "core/libraries/np/np_types.h"
namespace Libraries::Np::NpCommon {
s32 PS4_SYSV_ABI sceNpCmpNpId(OrbisNpId* np_id1, OrbisNpId* np_id2) {
if (np_id1 == nullptr || np_id2 == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
// Compare data
if (std::strncmp(np_id1->handle.data, np_id2->handle.data, ORBIS_NP_ONLINEID_MAX_LENGTH) != 0) {
return ORBIS_NP_UTIL_ERROR_NOT_MATCH;
}
// Compare opt
for (u32 i = 0; i < 8; i++) {
if (np_id1->opt[i] != np_id2->opt[i]) {
return ORBIS_NP_UTIL_ERROR_NOT_MATCH;
}
}
// Compare reserved
for (u32 i = 0; i < 8; i++) {
if (np_id1->reserved[i] != np_id2->reserved[i]) {
return ORBIS_NP_UTIL_ERROR_NOT_MATCH;
}
}
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpCmpNpIdInOrder(OrbisNpId* np_id1, OrbisNpId* np_id2, u32* out_result) {
if (np_id1 == nullptr || np_id2 == nullptr || out_result == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
// Compare data
u32 compare =
std::strncmp(np_id1->handle.data, np_id2->handle.data, ORBIS_NP_ONLINEID_MAX_LENGTH);
if (compare < 0) {
*out_result = -1;
return ORBIS_OK;
} else if (compare > 0) {
*out_result = 1;
return ORBIS_OK;
}
// Compare opt
for (u32 i = 0; i < 8; i++) {
if (np_id1->opt[i] < np_id2->opt[i]) {
*out_result = -1;
return ORBIS_OK;
} else if (np_id1->opt[i] > np_id2->opt[i]) {
*out_result = 1;
return ORBIS_OK;
}
}
// Compare reserved
for (u32 i = 0; i < 8; i++) {
if (np_id1->reserved[i] < np_id2->reserved[i]) {
*out_result = -1;
return ORBIS_OK;
} else if (np_id1->reserved[i] > np_id2->reserved[i]) {
*out_result = 1;
return ORBIS_OK;
}
}
*out_result = 0;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpCmpOnlineId(OrbisNpOnlineId* online_id1, OrbisNpOnlineId* online_id2) {
if (online_id1 == nullptr || online_id2 == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (std::strncmp(online_id1->data, online_id2->data, ORBIS_NP_ONLINEID_MAX_LENGTH) != 0) {
return ORBIS_NP_UTIL_ERROR_NOT_MATCH;
}
return ORBIS_OK;
}
void RegisterLib(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("i8UmXTSq7N4", "libSceNpCommonCompat", 1, "libSceNpCommon", 1, 1, sceNpCmpNpId);
LIB_FUNCTION("TcwEFnakiSc", "libSceNpCommonCompat", 1, "libSceNpCommon", 1, 1,
sceNpCmpNpIdInOrder);
LIB_FUNCTION("dj+O5aD2a0Q", "libSceNpCommonCompat", 1, "libSceNpCommon", 1, 1,
sceNpCmpOnlineId);
LIB_FUNCTION("i8UmXTSq7N4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCmpNpId);
LIB_FUNCTION("TcwEFnakiSc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCmpNpIdInOrder);
LIB_FUNCTION("dj+O5aD2a0Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCmpOnlineId);
};
} // namespace Libraries::Np::NpCommon

View File

@@ -0,0 +1,21 @@
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "common/types.h"
namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::Np::NpCommon {
struct OrbisNpFreeKernelMemoryArgs {
u64 length;
u64 unk;
void* addr;
};
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::Np::NpCommon

View File

@@ -1,9 +1,8 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "core/libraries/error_codes.h"
constexpr int ORBIS_NP_ERROR_INVALID_ARGUMENT = 0x80550003;
constexpr int ORBIS_NP_UTIL_ERROR_NOT_MATCH = 0x80550609;

View File

@@ -0,0 +1,12 @@
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "core/libraries/error_codes.h"
// For error codes shared between multiple Np libraries.
constexpr int ORBIS_NP_ERROR_INVALID_ARGUMENT = 0x80550003;
constexpr int ORBIS_NP_ERROR_SIGNED_OUT = 0x80550006;
constexpr int ORBIS_NP_ERROR_REQUEST_MAX = 0x80550013;
constexpr int ORBIS_NP_ERROR_REQUEST_NOT_FOUND = 0x80550014;

View File

@@ -0,0 +1,492 @@
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/config.h"
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/np/np_error.h"
#include "core/libraries/np/np_manager.h"
#include "core/tls.h"
namespace Libraries::Np::NpManager {
static bool g_signed_in = false;
static s32 g_active_requests = 0;
static std::vector<OrbisNpRequestState> g_requests;
s32 PS4_SYSV_ABI sceNpCreateRequest() {
LOG_DEBUG(Lib_NpManager, "called");
if (g_active_requests == ORBIS_NP_MANAGER_REQUEST_LIMIT) {
return ORBIS_NP_ERROR_REQUEST_MAX;
}
s32 req_index = 0;
while (req_index < g_requests.size()) {
// Find first nonexistant request
if (g_requests[req_index] == OrbisNpRequestState::None) {
// There is no request at this index, set the index to ready then break.
g_requests[req_index] = OrbisNpRequestState::Ready;
break;
}
req_index++;
}
if (req_index == g_requests.size()) {
// There are no requests to replace.
g_requests.emplace_back(OrbisNpRequestState::Ready);
}
// Offset by one, first returned ID is 0x20000001
g_active_requests++;
return req_index + ORBIS_NP_MANAGER_REQUEST_ID_OFFSET + 1;
}
s32 PS4_SYSV_ABI sceNpCheckNpAvailability(s32 req_id, OrbisNpOnlineId* online_id) {
if (online_id == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
s32 req_index = req_id - ORBIS_NP_MANAGER_REQUEST_ID_OFFSET - 1;
if (g_active_requests == 0 || g_requests.size() <= req_index ||
g_requests[req_index] == OrbisNpRequestState::None) {
return ORBIS_NP_ERROR_REQUEST_NOT_FOUND;
}
if (g_requests[req_index] == OrbisNpRequestState::Complete) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
g_requests[req_index] = OrbisNpRequestState::Complete;
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
LOG_ERROR(Lib_NpManager, "(STUBBED) called, req_id = {:#x}", req_id);
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpCheckNpAvailabilityA(s32 req_id,
Libraries::UserService::OrbisUserServiceUserId user_id) {
s32 req_index = req_id - ORBIS_NP_MANAGER_REQUEST_ID_OFFSET - 1;
if (g_active_requests == 0 || g_requests.size() <= req_index ||
g_requests[req_index] == OrbisNpRequestState::None) {
return ORBIS_NP_ERROR_REQUEST_NOT_FOUND;
}
if (g_requests[req_index] == OrbisNpRequestState::Complete) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
g_requests[req_index] = OrbisNpRequestState::Complete;
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
LOG_ERROR(Lib_NpManager, "(STUBBED) called, req_id = {:#x}", req_id);
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpCheckNpReachability(s32 req_id,
Libraries::UserService::OrbisUserServiceUserId user_id) {
s32 req_index = req_id - ORBIS_NP_MANAGER_REQUEST_ID_OFFSET - 1;
if (g_active_requests == 0 || g_requests.size() <= req_index ||
g_requests[req_index] == OrbisNpRequestState::None) {
return ORBIS_NP_ERROR_REQUEST_NOT_FOUND;
}
if (g_requests[req_index] == OrbisNpRequestState::Complete) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
g_requests[req_index] = OrbisNpRequestState::Complete;
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
LOG_ERROR(Lib_NpManager, "(STUBBED) called, req_id = {:#x}", req_id);
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetAccountLanguage(s32 req_id, OrbisNpOnlineId* online_id,
OrbisNpLanguageCode* language) {
if (online_id == nullptr || language == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
s32 req_index = req_id - ORBIS_NP_MANAGER_REQUEST_ID_OFFSET - 1;
if (g_active_requests == 0 || g_requests.size() <= req_index ||
g_requests[req_index] == OrbisNpRequestState::None) {
return ORBIS_NP_ERROR_REQUEST_NOT_FOUND;
}
if (g_requests[req_index] == OrbisNpRequestState::Complete) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
g_requests[req_index] = OrbisNpRequestState::Complete;
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
std::memset(language, 0, sizeof(OrbisNpLanguageCode));
LOG_ERROR(Lib_NpManager, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetAccountLanguageA(s32 req_id,
Libraries::UserService::OrbisUserServiceUserId user_id,
OrbisNpLanguageCode* language) {
if (language == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
s32 req_index = req_id - ORBIS_NP_MANAGER_REQUEST_ID_OFFSET - 1;
if (g_active_requests == 0 || g_requests.size() <= req_index ||
g_requests[req_index] == OrbisNpRequestState::None) {
return ORBIS_NP_ERROR_REQUEST_NOT_FOUND;
}
if (g_requests[req_index] == OrbisNpRequestState::Complete) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
g_requests[req_index] = OrbisNpRequestState::Complete;
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
std::memset(language, 0, sizeof(OrbisNpLanguageCode));
LOG_ERROR(Lib_NpManager, "(STUBBED) called, user_id = {}", user_id);
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetParentalControlInfo(s32 req_id, OrbisNpOnlineId* online_id, s8* age,
OrbisNpParentalControlInfo* info) {
if (online_id == nullptr || age == nullptr || info == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
s32 req_index = req_id - ORBIS_NP_MANAGER_REQUEST_ID_OFFSET - 1;
if (g_active_requests == 0 || g_requests.size() <= req_index ||
g_requests[req_index] == OrbisNpRequestState::None) {
return ORBIS_NP_ERROR_REQUEST_NOT_FOUND;
}
if (g_requests[req_index] == OrbisNpRequestState::Complete) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
g_requests[req_index] = OrbisNpRequestState::Complete;
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
// TODO: Add to config?
*age = 13;
std::memset(info, 0, sizeof(OrbisNpParentalControlInfo));
LOG_ERROR(Lib_NpManager, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI
sceNpGetParentalControlInfoA(s32 req_id, Libraries::UserService::OrbisUserServiceUserId user_id,
s8* age, OrbisNpParentalControlInfo* info) {
if (age == nullptr || info == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
s32 req_index = req_id - ORBIS_NP_MANAGER_REQUEST_ID_OFFSET - 1;
if (g_active_requests == 0 || g_requests.size() <= req_index ||
g_requests[req_index] == OrbisNpRequestState::None) {
return ORBIS_NP_ERROR_REQUEST_NOT_FOUND;
}
if (g_requests[req_index] == OrbisNpRequestState::Complete) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
g_requests[req_index] = OrbisNpRequestState::Complete;
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
// TODO: Add to config?
*age = 13;
std::memset(info, 0, sizeof(OrbisNpParentalControlInfo));
LOG_ERROR(Lib_NpManager, "(STUBBED) called, user_id = {}", user_id);
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpDeleteRequest(s32 req_id) {
LOG_DEBUG(Lib_NpManager, "called req_id = {:#x}", req_id);
s32 req_index = req_id - ORBIS_NP_MANAGER_REQUEST_ID_OFFSET - 1;
if (g_active_requests == 0 || g_requests.size() <= req_index ||
g_requests[req_index] == OrbisNpRequestState::None) {
return ORBIS_NP_ERROR_REQUEST_NOT_FOUND;
}
g_active_requests--;
g_requests[req_index] = OrbisNpRequestState::None;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetAccountCountry(OrbisNpOnlineId* online_id,
OrbisNpCountryCode* country_code) {
if (online_id == nullptr || country_code == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
std::memset(country_code, 0, sizeof(OrbisNpCountryCode));
// TODO: get NP country code from config
std::memcpy(country_code->country_code, "us", 2);
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetAccountCountryA(Libraries::UserService::OrbisUserServiceUserId user_id,
OrbisNpCountryCode* country_code) {
if (country_code == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
std::memset(country_code, 0, sizeof(OrbisNpCountryCode));
// TODO: get NP country code from config
std::memcpy(country_code->country_code, "us", 2);
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetAccountDateOfBirth(OrbisNpOnlineId* online_id,
OrbisNpDate* date_of_birth) {
if (online_id == nullptr || date_of_birth == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
// TODO: maybe add to config?
date_of_birth->day = 1;
date_of_birth->month = 1;
date_of_birth->year = 2000;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetAccountDateOfBirthA(Libraries::UserService::OrbisUserServiceUserId user_id,
OrbisNpDate* date_of_birth) {
if (date_of_birth == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
// TODO: maybe add to config?
date_of_birth->day = 1;
date_of_birth->month = 1;
date_of_birth->year = 2000;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetGamePresenceStatus(OrbisNpOnlineId* online_id,
OrbisNpGamePresenseStatus* game_status) {
if (online_id == nullptr || game_status == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
*game_status =
g_signed_in ? OrbisNpGamePresenseStatus::Online : OrbisNpGamePresenseStatus::Offline;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetGamePresenceStatusA(Libraries::UserService::OrbisUserServiceUserId user_id,
OrbisNpGamePresenseStatus* game_status) {
if (game_status == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
*game_status =
g_signed_in ? OrbisNpGamePresenseStatus::Online : OrbisNpGamePresenseStatus::Offline;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetAccountId(OrbisNpOnlineId* online_id, u64* account_id) {
LOG_DEBUG(Lib_NpManager, "called");
if (online_id == nullptr || account_id == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (!g_signed_in) {
*account_id = 0;
return ORBIS_NP_ERROR_SIGNED_OUT;
}
*account_id = 0xFEEDFACE;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetAccountIdA(Libraries::UserService::OrbisUserServiceUserId user_id,
u64* account_id) {
LOG_DEBUG(Lib_NpManager, "user_id {}", user_id);
if (account_id == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (!g_signed_in) {
*account_id = 0;
return ORBIS_NP_ERROR_SIGNED_OUT;
}
*account_id = 0xFEEDFACE;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetNpId(Libraries::UserService::OrbisUserServiceUserId user_id,
OrbisNpId* np_id) {
LOG_DEBUG(Lib_NpManager, "user_id {}", user_id);
if (np_id == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
memset(np_id, 0, sizeof(OrbisNpId));
strncpy(np_id->handle.data, Config::getUserName().c_str(), sizeof(np_id->handle.data));
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetOnlineId(Libraries::UserService::OrbisUserServiceUserId user_id,
OrbisNpOnlineId* online_id) {
LOG_DEBUG(Lib_NpManager, "user_id {}", user_id);
if (online_id == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
if (!g_signed_in) {
return ORBIS_NP_ERROR_SIGNED_OUT;
}
memset(online_id, 0, sizeof(OrbisNpOnlineId));
strncpy(online_id->data, Config::getUserName().c_str(), sizeof(online_id->data));
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetNpReachabilityState(Libraries::UserService::OrbisUserServiceUserId user_id,
OrbisNpReachabilityState* state) {
if (state == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
*state =
g_signed_in ? OrbisNpReachabilityState::Reachable : OrbisNpReachabilityState::Unavailable;
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpGetState(Libraries::UserService::OrbisUserServiceUserId user_id,
OrbisNpState* state) {
if (state == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
*state = g_signed_in ? OrbisNpState::SignedIn : OrbisNpState::SignedOut;
LOG_DEBUG(Lib_NpManager, "Signed {}", g_signed_in ? "in" : "out");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpHasSignedUp(Libraries::UserService::OrbisUserServiceUserId user_id,
bool* has_signed_up) {
LOG_DEBUG(Lib_NpManager, "called");
if (has_signed_up == nullptr) {
return ORBIS_NP_ERROR_INVALID_ARGUMENT;
}
*has_signed_up = g_signed_in ? true : false;
return ORBIS_OK;
}
struct NpStateCallbackForNpToolkit {
OrbisNpStateCallbackForNpToolkit func;
void* userdata;
};
NpStateCallbackForNpToolkit NpStateCbForNp;
s32 PS4_SYSV_ABI sceNpCheckCallback() {
LOG_DEBUG(Lib_NpManager, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpCheckCallbackForLib() {
LOG_DEBUG(Lib_NpManager, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceNpRegisterStateCallbackForToolkit(OrbisNpStateCallbackForNpToolkit callback,
void* userdata) {
static s32 id = 0;
LOG_ERROR(Lib_NpManager, "(STUBBED) called");
NpStateCbForNp.func = callback;
NpStateCbForNp.userdata = userdata;
return id;
}
void RegisterLib(Core::Loader::SymbolsResolver* sym) {
g_signed_in = Config::getPSNSignedIn();
LIB_FUNCTION("GpLQDNKICac", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpCreateRequest);
LIB_FUNCTION("2rsFmlGWleQ", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpCheckNpAvailability);
LIB_FUNCTION("8Z2Jc5GvGDI", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpCheckNpAvailabilityA);
LIB_FUNCTION("KfGZg2y73oM", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpCheckNpReachability);
LIB_FUNCTION("KZ1Mj9yEGYc", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetAccountLanguage);
LIB_FUNCTION("TPMbgIxvog0", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetAccountLanguageA);
LIB_FUNCTION("ilwLM4zOmu4", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetParentalControlInfo);
LIB_FUNCTION("m9L3O6yst-U", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetParentalControlInfoA);
LIB_FUNCTION("S7QTn72PrDw", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpDeleteRequest);
LIB_FUNCTION("Ghz9iWDUtC4", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetAccountCountry);
LIB_FUNCTION("JT+t00a3TxA", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetAccountCountryA);
LIB_FUNCTION("8VBTeRf1ZwI", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetAccountDateOfBirth);
LIB_FUNCTION("q3M7XzBKC3s", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetAccountDateOfBirthA);
LIB_FUNCTION("IPb1hd1wAGc", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetGamePresenceStatus);
LIB_FUNCTION("oPO9U42YpgI", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetGamePresenceStatusA);
LIB_FUNCTION("e-ZuhGEoeC4", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpGetNpReachabilityState);
LIB_FUNCTION("a8R9-75u4iM", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpGetAccountId);
LIB_FUNCTION("rbknaUjpqWo", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpGetAccountIdA);
LIB_FUNCTION("p-o74CnoNzY", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpGetNpId);
LIB_FUNCTION("XDncXQIJUSk", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpGetOnlineId);
LIB_FUNCTION("eQH7nWPcAgc", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpGetState);
LIB_FUNCTION("Oad3rvY-NJQ", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpHasSignedUp);
LIB_FUNCTION("3Zl8BePTh9Y", "libSceNpManager", 1, "libSceNpManager", 1, 1, sceNpCheckCallback);
LIB_FUNCTION("JELHf4xPufo", "libSceNpManager", 1, "libSceNpManager", 1, 1,
sceNpCheckCallbackForLib);
LIB_FUNCTION("JELHf4xPufo", "libSceNpManagerForToolkit", 1, "libSceNpManager", 1, 1,
sceNpCheckCallbackForLib);
LIB_FUNCTION("0c7HbXRKUt4", "libSceNpManagerForToolkit", 1, "libSceNpManager", 1, 1,
sceNpRegisterStateCallbackForToolkit);
LIB_FUNCTION("2rsFmlGWleQ", "libSceNpManagerCompat", 1, "libSceNpManager", 1, 1,
sceNpCheckNpAvailability);
LIB_FUNCTION("a8R9-75u4iM", "libSceNpManagerCompat", 1, "libSceNpManager", 1, 1,
sceNpGetAccountId);
LIB_FUNCTION("KZ1Mj9yEGYc", "libSceNpManagerCompat", 1, "libSceNpManager", 1, 1,
sceNpGetAccountLanguage);
LIB_FUNCTION("Ghz9iWDUtC4", "libSceNpManagerCompat", 1, "libSceNpManager", 1, 1,
sceNpGetAccountCountry);
LIB_FUNCTION("8VBTeRf1ZwI", "libSceNpManagerCompat", 1, "libSceNpManager", 1, 1,
sceNpGetAccountDateOfBirth);
LIB_FUNCTION("IPb1hd1wAGc", "libSceNpManagerCompat", 1, "libSceNpManager", 1, 1,
sceNpGetGamePresenceStatus);
LIB_FUNCTION("ilwLM4zOmu4", "libSceNpManagerCompat", 1, "libSceNpManager", 1, 1,
sceNpGetParentalControlInfo);
};
} // namespace Libraries::Np::NpManager

View File

@@ -0,0 +1,70 @@
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "common/types.h"
#include "core/libraries/np/np_error.h"
#include "core/libraries/np/np_types.h"
#include "core/libraries/system/userservice.h"
namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::Np::NpManager {
constexpr s32 ORBIS_NP_MANAGER_REQUEST_LIMIT = 0x20;
constexpr s32 ORBIS_NP_MANAGER_REQUEST_ID_OFFSET = 0x20000000;
enum class OrbisNpState : u32 {
Unknown = 0,
SignedOut = 1,
SignedIn = 2,
};
using OrbisNpStateCallbackForNpToolkit = PS4_SYSV_ABI void (*)(s32 userId, OrbisNpState state,
void* userdata);
enum class OrbisNpRequestState {
None = 0,
Ready = 1,
Complete = 2,
};
enum class OrbisNpGamePresenseStatus {
Offline = 0,
Online = 1,
};
enum class OrbisNpReachabilityState {
Unavailable = 0,
Available = 1,
Reachable = 2,
};
struct OrbisNpCountryCode {
char country_code[2];
char end;
char pad;
};
struct OrbisNpDate {
u16 year;
u8 month;
u8 day;
};
struct OrbisNpLanguageCode {
char code[6];
char padding[10];
};
struct OrbisNpParentalControlInfo {
bool content_restriction;
bool chat_restriction;
bool user_generated_content_restriction;
};
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::Np::NpManager

View File

@@ -1,13 +1,14 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/np_party/np_party.h"
#include "core/libraries/np_party/np_party_error.h"
#include "core/libraries/np/np_error.h"
#include "core/libraries/np/np_party.h"
#include "core/libraries/np/np_party_error.h"
namespace Libraries::NpParty {
namespace Libraries::Np::NpParty {
s32 PS4_SYSV_ABI sceNpPartyCheckCallback() {
LOG_ERROR(Lib_NpParty, "(STUBBED) called");
@@ -194,4 +195,4 @@ void RegisterLib(Core::Loader::SymbolsResolver* sym) {
sceNpPartyShowInvitationList);
};
} // namespace Libraries::NpParty
} // namespace Libraries::Np::NpParty

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -9,7 +9,7 @@ namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::NpParty {
namespace Libraries::Np::NpParty {
enum class OrbisNpPartyState : u16 {
NotInParty = 2,
@@ -42,8 +42,6 @@ s32 PS4_SYSV_ABI sceNpPartyShowInvitationList();
s32 PS4_SYSV_ABI sceNpPartyShowInvitationListA();
s32 PS4_SYSV_ABI sceNpPartyTerminate();
s32 PS4_SYSV_ABI sceNpPartyUnregisterPrivateHandler();
s32 PS4_SYSV_ABI module_start();
s32 PS4_SYSV_ABI module_stop();
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::NpParty
} // namespace Libraries::Np::NpParty

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

View File

@@ -4,9 +4,9 @@
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/np_profiledialog/np_profiledialog.h"
#include "core/libraries/np/np_profile_dialog.h"
namespace Libraries::NpProfileDialog {
namespace Libraries::Np::NpProfileDialog {
s32 PS4_SYSV_ABI sceNpProfileDialogOpen() {
LOG_ERROR(Lib_NpProfileDialog, "(STUBBED) called");
@@ -69,4 +69,4 @@ void RegisterLib(Core::Loader::SymbolsResolver* sym) {
sceNpProfileDialogUpdateStatus);
};
} // namespace Libraries::NpProfileDialog
} // namespace Libraries::Np::NpProfileDialog

View File

@@ -9,7 +9,7 @@ namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::NpProfileDialog {
namespace Libraries::Np::NpProfileDialog {
s32 PS4_SYSV_ABI sceNpProfileDialogOpen();
s32 PS4_SYSV_ABI sceNpProfileDialogClose();
@@ -21,4 +21,4 @@ s32 PS4_SYSV_ABI sceNpProfileDialogTerminate();
s32 PS4_SYSV_ABI sceNpProfileDialogUpdateStatus();
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::NpProfileDialog
} // namespace Libraries::Np::NpProfileDialog

View File

@@ -1,12 +1,12 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "np_score.h"
#include "core/libraries/np/np_score.h"
namespace Libraries::NpScore {
namespace Libraries::Np::NpScore {
int PS4_SYSV_ABI sceNpScoreAbortRequest() {
LOG_ERROR(Lib_NpScore, "(STUBBED) called");
@@ -380,4 +380,4 @@ void RegisterLib(Core::Loader::SymbolsResolver* sym) {
sceNpScoreGetRankingByRangeAsync);
};
} // namespace Libraries::NpScore
} // namespace Libraries::Np::NpScore

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -9,7 +9,7 @@ namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::NpScore {
namespace Libraries::Np::NpScore {
int PS4_SYSV_ABI sceNpScoreAbortRequest();
int PS4_SYSV_ABI sceNpScoreCensorComment();
@@ -64,4 +64,4 @@ int PS4_SYSV_ABI sceNpScoreSetTimeout();
int PS4_SYSV_ABI sceNpScoreWaitAsync();
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::NpScore
} // namespace Libraries::Np::NpScore

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <unordered_map>
@@ -8,11 +8,12 @@
#include "common/path_util.h"
#include "common/slot_vector.h"
#include "core/libraries/libs.h"
#include "core/libraries/np_trophy/np_trophy.h"
#include "core/libraries/np_trophy/np_trophy_error.h"
#include "core/libraries/np_trophy/trophy_ui.h"
#include "core/libraries/np/np_error.h"
#include "core/libraries/np/np_trophy.h"
#include "core/libraries/np/np_trophy_error.h"
#include "core/libraries/np/trophy_ui.h"
namespace Libraries::NpTrophy {
namespace Libraries::Np::NpTrophy {
std::string game_serial;
@@ -1196,4 +1197,4 @@ void RegisterLib(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("+not13BEdVI", "libSceNpTrophy", 1, "libSceNpTrophy", 1, 1, Func_FA7A2DD770447552);
};
} // namespace Libraries::NpTrophy
} // namespace Libraries::Np::NpTrophy

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -10,7 +10,7 @@ namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::NpTrophy {
namespace Libraries::Np::NpTrophy {
extern std::string game_serial;
@@ -226,4 +226,4 @@ int PS4_SYSV_ABI Func_F8EF6F5350A91990();
int PS4_SYSV_ABI Func_FA7A2DD770447552();
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::NpTrophy
} // namespace Libraries::Np::NpTrophy

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

View File

@@ -0,0 +1,26 @@
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "common/types.h"
#include "core/libraries/error_codes.h"
// For structs and constants shared between multiple Np libraries.
namespace Libraries::Np {
constexpr s32 ORBIS_NP_ONLINEID_MAX_LENGTH = 16;
struct OrbisNpOnlineId {
char data[ORBIS_NP_ONLINEID_MAX_LENGTH];
s8 term;
s8 dummy[3];
};
struct OrbisNpId {
OrbisNpOnlineId handle;
u8 opt[8];
u8 reserved[8];
};
}; // namespace Libraries::Np

View File

@@ -1,12 +1,12 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/np_web_api/np_web_api.h"
#include "core/libraries/np/np_web_api.h"
namespace Libraries::NpWebApi {
namespace Libraries::Np::NpWebApi {
s32 PS4_SYSV_ABI sceNpWebApiCreateContext() {
LOG_ERROR(Lib_NpWebApi, "(STUBBED) called");
@@ -689,4 +689,4 @@ void RegisterLib(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("+aMuhoVidDY", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_F9A32E8685627436);
};
} // namespace Libraries::NpWebApi
} // namespace Libraries::Np::NpWebApi

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -9,7 +9,7 @@ namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::NpWebApi {
namespace Libraries::Np::NpWebApi {
s32 PS4_SYSV_ABI sceNpWebApiCreateContext();
s32 PS4_SYSV_ABI sceNpWebApiCreatePushEventFilter();
@@ -113,4 +113,4 @@ s32 PS4_SYSV_ABI Func_E789F980D907B653();
s32 PS4_SYSV_ABI Func_F9A32E8685627436();
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::NpWebApi
} // namespace Libraries::Np::NpWebApi

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <chrono>
@@ -17,13 +17,13 @@
#include "common/config.h"
#include "common/path_util.h"
#include "common/singleton.h"
#include "core/libraries/np/trophy_ui.h"
#include "imgui/imgui_std.h"
#include "trophy_ui.h"
CMRC_DECLARE(res);
namespace fs = std::filesystem;
using namespace ImGui;
namespace Libraries::NpTrophy {
namespace Libraries::Np::NpTrophy {
std::optional<TrophyUI> current_trophy_ui;
std::queue<TrophyInfo> trophy_queue;
@@ -326,4 +326,4 @@ void AddTrophyToQueue(const std::filesystem::path& trophyIconPath, const std::st
}
}
} // namespace Libraries::NpTrophy
} // namespace Libraries::Np::NpTrophy

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -9,11 +9,11 @@
#include "common/fixed_value.h"
#include "common/types.h"
#include "core/libraries/np_trophy/np_trophy.h"
#include "core/libraries/np/np_trophy.h"
#include "imgui/imgui_layer.h"
#include "imgui/imgui_texture.h"
namespace Libraries::NpTrophy {
namespace Libraries::Np::NpTrophy {
class TrophyUI final : public ImGui::Layer {
public:
@@ -41,4 +41,4 @@ struct TrophyInfo {
void AddTrophyToQueue(const std::filesystem::path& trophyIconPath, const std::string& trophyName,
const std::string_view& rarity);
}; // namespace Libraries::NpTrophy
}; // namespace Libraries::Np::NpTrophy

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,546 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "common/types.h"
namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::NpManager {
enum class OrbisNpState : u32 { Unknown = 0, SignedOut, SignedIn };
using OrbisNpStateCallbackForNpToolkit = PS4_SYSV_ABI void (*)(s32 userId, OrbisNpState state,
void* userdata);
constexpr int ORBIS_NP_ONLINEID_MAX_LENGTH = 16;
using OrbisUserServiceUserId = s32;
struct OrbisNpOnlineId {
char data[ORBIS_NP_ONLINEID_MAX_LENGTH];
char term;
char dummy[3];
};
struct OrbisNpId {
OrbisNpOnlineId handle;
u8 opt[8];
u8 reserved[8];
};
struct OrbisNpCountryCode {
char country_code[2];
char end;
char pad;
};
int PS4_SYSV_ABI Func_EF4378573542A508();
int PS4_SYSV_ABI _sceNpIpcCreateMemoryFromKernel();
int PS4_SYSV_ABI _sceNpIpcCreateMemoryFromPool();
int PS4_SYSV_ABI _sceNpIpcDestroyMemory();
int PS4_SYSV_ABI _sceNpIpcFreeImpl();
int PS4_SYSV_ABI _sceNpIpcGetNpMemAllocator();
int PS4_SYSV_ABI _sceNpIpcMallocImpl();
int PS4_SYSV_ABI _sceNpIpcReallocImpl();
int PS4_SYSV_ABI _sceNpManagerCreateMemoryFromKernel();
int PS4_SYSV_ABI _sceNpManagerCreateMemoryFromPool();
int PS4_SYSV_ABI _sceNpManagerDestroyMemory();
int PS4_SYSV_ABI _sceNpManagerFreeImpl();
int PS4_SYSV_ABI _sceNpManagerGetNpMemAllocator();
int PS4_SYSV_ABI _sceNpManagerMallocImpl();
int PS4_SYSV_ABI _sceNpManagerReallocImpl();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineId13GetNpOnlineIdERKNS0_4UserEP13SceNpOnlineId();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineId13GetNpOnlineIdERKNS0_4UserEPS1_();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineId16SetNpOnlineIdStrEPKc();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineId5ClearEv();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdC1ERK13SceNpOnlineId();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdC1ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdC1Ev();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdC2ERK13SceNpOnlineId();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdC2ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdC2Ev();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdD0Ev();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdD1Ev();
int PS4_SYSV_ABI _ZN3sce2np10NpOnlineIdD2Ev();
int PS4_SYSV_ABI _ZN3sce2np11NpHttpTrans13GetResultCodeEPNS0_6HandleE();
int PS4_SYSV_ABI _ZN3sce2np11NpHttpTrans21SetRequestAccessTokenEPNS0_6HandleE();
int PS4_SYSV_ABI _ZN3sce2np11NpHttpTrans24BuildAuthorizationHeaderERKNS0_13NpAccessTokenEPcm();
int PS4_SYSV_ABI _ZN3sce2np11NpHttpTransC2EP16SceNpAllocatorEx();
int PS4_SYSV_ABI _ZN3sce2np11NpHttpTransD0Ev();
int PS4_SYSV_ABI _ZN3sce2np11NpHttpTransD1Ev();
int PS4_SYSV_ABI _ZN3sce2np11NpHttpTransD2Ev();
int PS4_SYSV_ABI _ZN3sce2np12NpHttpClient4InitEii();
int PS4_SYSV_ABI _ZN3sce2np12NpHttpClientC1EP16SceNpAllocatorEx();
int PS4_SYSV_ABI _ZN3sce2np12NpHttpClientC2EP16SceNpAllocatorEx();
int PS4_SYSV_ABI _ZN3sce2np12NpHttpClientD0Ev();
int PS4_SYSV_ABI _ZN3sce2np12NpHttpClientD1Ev();
int PS4_SYSV_ABI _ZN3sce2np12NpHttpClientD2Ev();
int PS4_SYSV_ABI _ZN3sce2np12NpTitleToken5ClearEv();
int PS4_SYSV_ABI _ZN3sce2np12NpTitleTokenC1ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np12NpTitleTokenC1Ev();
int PS4_SYSV_ABI _ZN3sce2np12NpTitleTokenC2ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np12NpTitleTokenC2Ev();
int PS4_SYSV_ABI _ZN3sce2np12NpTitleTokenD0Ev();
int PS4_SYSV_ABI _ZN3sce2np12NpTitleTokenD1Ev();
int PS4_SYSV_ABI _ZN3sce2np12NpTitleTokenD2Ev();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessToken14GetAccessTokenEPNS0_6HandleERKNS0_4UserEPS1_();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessToken5ClearEv();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenC1ERK16SceNpAccessToken();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenC1ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenC1Ev();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenC2ERK16SceNpAccessToken();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenC2ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenC2Ev();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenD0Ev();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenD1Ev();
int PS4_SYSV_ABI _ZN3sce2np13NpAccessTokenD2Ev();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client10EndRequestEii();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client11InitServiceEi();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client11TermServiceEi();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client11WaitRequestEiij();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client12AbortRequestEii();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client12BeginRequestEii();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client13CreateRequestEimPKvPi();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client13DeleteRequestEii();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client13GetIpmiClientEv();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client13PollEventFlagEijmjPm();
int PS4_SYSV_ABI _ZN3sce2np3ipc14service_client14PollEventQueueEiPvm();
int PS4_SYSV_ABI _ZN3sce2np4NpId5ClearEv();
int PS4_SYSV_ABI _ZN3sce2np4NpIdC1ERK7SceNpId();
int PS4_SYSV_ABI _ZN3sce2np4NpIdC1ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np4NpIdC1Ev();
int PS4_SYSV_ABI _ZN3sce2np4NpIdC2ERK7SceNpId();
int PS4_SYSV_ABI _ZN3sce2np4NpIdC2ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np4NpIdC2Ev();
int PS4_SYSV_ABI _ZN3sce2np4NpIdD0Ev();
int PS4_SYSV_ABI _ZN3sce2np4NpIdD1Ev();
int PS4_SYSV_ABI _ZN3sce2np4NpIdD2Ev();
int PS4_SYSV_ABI _ZN3sce2np4User5ClearEv();
int PS4_SYSV_ABI _ZN3sce2np4User7GetUserEiPS1_();
int PS4_SYSV_ABI _ZN3sce2np4UserC1Ei();
int PS4_SYSV_ABI _ZN3sce2np4UserC1ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np4UserC1Ev();
int PS4_SYSV_ABI _ZN3sce2np4UserC2Ei();
int PS4_SYSV_ABI _ZN3sce2np4UserC2ERKS1_();
int PS4_SYSV_ABI _ZN3sce2np4UserC2Ev();
int PS4_SYSV_ABI _ZN3sce2np4UserD0Ev();
int PS4_SYSV_ABI _ZN3sce2np4UserD1Ev();
int PS4_SYSV_ABI _ZN3sce2np4UserD2Ev();
int PS4_SYSV_ABI _ZN3sce2np8NpTicket5ClearEv();
int PS4_SYSV_ABI _ZN3sce2np8NpTicketD0Ev();
int PS4_SYSV_ABI _ZN3sce2np8NpTicketD1Ev();
int PS4_SYSV_ABI _ZN3sce2np8NpTicketD2Ev();
int PS4_SYSV_ABI _ZN3sce2npeqERK13SceNpOnlineIdRKNS0_10NpOnlineIdE();
int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_10NpOnlineIdERK13SceNpOnlineId();
int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_10NpOnlineIdES3_();
int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_4UserERKi();
int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_4UserES3_();
int PS4_SYSV_ABI _ZN3sce2npneERK13SceNpOnlineIdRKNS0_10NpOnlineIdE();
int PS4_SYSV_ABI _ZN3sce2npneERKNS0_10NpOnlineIdERK13SceNpOnlineId();
int PS4_SYSV_ABI _ZN3sce2npneERKNS0_10NpOnlineIdES3_();
int PS4_SYSV_ABI _ZN3sce2npneERKNS0_4UserERKi();
int PS4_SYSV_ABI _ZN3sce2npneERKNS0_4UserES3_();
int PS4_SYSV_ABI _ZNK3sce2np10NpOnlineId7IsEmptyEv();
int PS4_SYSV_ABI _ZNK3sce2np12NpTitleToken6GetStrEv();
int PS4_SYSV_ABI _ZNK3sce2np13NpAccessToken7IsEmptyEv();
int PS4_SYSV_ABI _ZNK3sce2np4User10IsLoggedInEv();
int PS4_SYSV_ABI _ZNK3sce2np4User12GetAccountIdEPm();
int PS4_SYSV_ABI _ZNK3sce2np4User12HasAccountIdEPb();
int PS4_SYSV_ABI _ZNK3sce2np4User25GetAccountIdFromRegistoryEPm();
int PS4_SYSV_ABI _ZNK3sce2np4User7IsEmptyEv();
int PS4_SYSV_ABI _ZNK3sce2np4User7IsGuestEv();
int PS4_SYSV_ABI _ZNK3sce2np4User9GetUserIdEv();
int PS4_SYSV_ABI _ZNK3sce2np8NpTicket13GetTicketDataEv();
int PS4_SYSV_ABI _ZNK3sce2np8NpTicket13GetTicketSizeEv();
int PS4_SYSV_ABI _ZThn16_N3sce2np11NpHttpTransD0Ev();
int PS4_SYSV_ABI _ZThn16_N3sce2np11NpHttpTransD1Ev();
int PS4_SYSV_ABI _ZThn8_N3sce2np11NpHttpTransD0Ev();
int PS4_SYSV_ABI _ZThn8_N3sce2np11NpHttpTransD1Ev();
int PS4_SYSV_ABI sceNpAbortRequest();
int PS4_SYSV_ABI sceNpAsmAbort();
int PS4_SYSV_ABI sceNpAsmClientAbortRequest();
int PS4_SYSV_ABI sceNpAsmClientClearNpTitleToken();
int PS4_SYSV_ABI sceNpAsmClientClearNpTitleTokenA();
int PS4_SYSV_ABI sceNpAsmClientCreateRequest2();
int PS4_SYSV_ABI sceNpAsmClientCreateResourceContext();
int PS4_SYSV_ABI sceNpAsmClientCreateResourceContext2();
int PS4_SYSV_ABI sceNpAsmClientDeleteRequest();
int PS4_SYSV_ABI sceNpAsmClientDeleteResourceContext();
int PS4_SYSV_ABI sceNpAsmClientDeleteResourceContext2();
int PS4_SYSV_ABI sceNpAsmClientGetAppId();
int PS4_SYSV_ABI sceNpAsmClientGetCacheControlMaxAge();
int PS4_SYSV_ABI sceNpAsmClientGetGameNpTitleInfo();
int PS4_SYSV_ABI sceNpAsmClientGetGameNpTitleToken();
int PS4_SYSV_ABI sceNpAsmClientGetGameTitleBanInfo();
int PS4_SYSV_ABI sceNpAsmClientGetNpComInfo2();
int PS4_SYSV_ABI sceNpAsmClientGetNpComInfo2A();
int PS4_SYSV_ABI sceNpAsmClientGetNpComInfo2WithHmac();
int PS4_SYSV_ABI sceNpAsmClientGetNpComInfo3();
int PS4_SYSV_ABI sceNpAsmClientGetNpComInfo4();
int PS4_SYSV_ABI sceNpAsmClientGetNpTitleId();
int PS4_SYSV_ABI sceNpAsmClientGetNpTitleToken();
int PS4_SYSV_ABI sceNpAsmClientGetNpTitleToken2();
int PS4_SYSV_ABI sceNpAsmClientGetNpTitleTokenA();
int PS4_SYSV_ABI sceNpAsmClientGetRelatedGameNpTitleIds();
int PS4_SYSV_ABI sceNpAsmClientGetRelatedGameNpTitleIdsA();
int PS4_SYSV_ABI sceNpAsmClientGetRelatedGameNpTitleIdsResult();
int PS4_SYSV_ABI sceNpAsmClientGetServiceBaseUrl();
int PS4_SYSV_ABI sceNpAsmClientGetServiceBaseUrlA();
int PS4_SYSV_ABI sceNpAsmClientGetServiceBaseUrlWithNpTitleId();
int PS4_SYSV_ABI sceNpAsmClientGetServiceBaseUrlWithNpTitleIdA();
int PS4_SYSV_ABI sceNpAsmClientGetServiceIdInfo();
int PS4_SYSV_ABI sceNpAsmClientGetServiceIdInfoA();
int PS4_SYSV_ABI sceNpAsmClientInitialize();
int PS4_SYSV_ABI sceNpAsmClientSetNpTitleId();
int PS4_SYSV_ABI sceNpAsmClientTerminate();
int PS4_SYSV_ABI sceNpAsmCreateConnection();
int PS4_SYSV_ABI sceNpAsmCreateRequest();
int PS4_SYSV_ABI sceNpAsmDeleteConnection();
int PS4_SYSV_ABI sceNpAsmDeleteRequest();
int PS4_SYSV_ABI sceNpAsmGenerateNpTitleToken();
int PS4_SYSV_ABI sceNpAsmGenerateNpTitleToken2();
int PS4_SYSV_ABI sceNpAsmGetNpCommInfo();
int PS4_SYSV_ABI sceNpAsmGetNpCommInfo2();
int PS4_SYSV_ABI sceNpAsmGetRelatedGameNpTitleIds();
int PS4_SYSV_ABI sceNpAsmGetServiceBaseUrl();
int PS4_SYSV_ABI sceNpAsmGetServiceIdInfo();
int PS4_SYSV_ABI sceNpAsmInitialize();
int PS4_SYSV_ABI sceNpAsmTerminate();
int PS4_SYSV_ABI sceNpCheckCallback();
int PS4_SYSV_ABI sceNpCheckCallbackForLib();
int PS4_SYSV_ABI sceNpCheckNpAvailability();
int PS4_SYSV_ABI sceNpCheckNpAvailabilityA();
int PS4_SYSV_ABI sceNpCheckNpReachability();
int PS4_SYSV_ABI sceNpCheckPlus();
int PS4_SYSV_ABI sceNpCreateAsyncRequest();
int PS4_SYSV_ABI sceNpCreateRequest();
int PS4_SYSV_ABI sceNpDeleteRequest(int reqId);
int PS4_SYSV_ABI sceNpGetAccountAge();
int PS4_SYSV_ABI sceNpGetAccountCountry();
int PS4_SYSV_ABI sceNpGetAccountCountryA(OrbisUserServiceUserId user_id,
OrbisNpCountryCode* country_code);
int PS4_SYSV_ABI sceNpGetAccountDateOfBirth();
int PS4_SYSV_ABI sceNpGetAccountDateOfBirthA();
int PS4_SYSV_ABI sceNpGetAccountId(OrbisNpOnlineId* online_id, u64* account_id);
int PS4_SYSV_ABI sceNpGetAccountIdA(OrbisUserServiceUserId user_id, u64* account_id);
int PS4_SYSV_ABI sceNpGetAccountLanguage();
int PS4_SYSV_ABI sceNpGetAccountLanguage2();
int PS4_SYSV_ABI sceNpGetAccountLanguageA();
int PS4_SYSV_ABI sceNpGetGamePresenceStatus();
int PS4_SYSV_ABI sceNpGetGamePresenceStatusA();
int PS4_SYSV_ABI sceNpGetNpId(OrbisUserServiceUserId user_id, OrbisNpId* np_id);
int PS4_SYSV_ABI sceNpGetNpReachabilityState();
int PS4_SYSV_ABI sceNpGetOnlineId(OrbisUserServiceUserId user_id, OrbisNpOnlineId* online_id);
int PS4_SYSV_ABI sceNpGetParentalControlInfo();
int PS4_SYSV_ABI sceNpGetParentalControlInfoA();
int PS4_SYSV_ABI sceNpGetState(OrbisUserServiceUserId user_id, OrbisNpState* state);
int PS4_SYSV_ABI sceNpGetUserIdByAccountId();
int PS4_SYSV_ABI sceNpGetUserIdByOnlineId();
int PS4_SYSV_ABI sceNpHasSignedUp(OrbisUserServiceUserId user_id, bool* has_signed_up);
int PS4_SYSV_ABI sceNpIdMapperAbortRequest();
int PS4_SYSV_ABI sceNpIdMapperAccountIdToNpId();
int PS4_SYSV_ABI sceNpIdMapperAccountIdToOnlineId();
int PS4_SYSV_ABI sceNpIdMapperCreateRequest();
int PS4_SYSV_ABI sceNpIdMapperDeleteRequest();
int PS4_SYSV_ABI sceNpIdMapperNpIdToAccountId();
int PS4_SYSV_ABI sceNpIdMapperOnlineIdToAccountId();
int PS4_SYSV_ABI sceNpInGameMessageAbortHandle();
int PS4_SYSV_ABI sceNpInGameMessageCheckCallback();
int PS4_SYSV_ABI sceNpInGameMessageCreateHandle();
int PS4_SYSV_ABI sceNpInGameMessageDeleteHandle();
int PS4_SYSV_ABI sceNpInGameMessageGetMemoryPoolStatistics();
int PS4_SYSV_ABI sceNpInGameMessageInitialize();
int PS4_SYSV_ABI sceNpInGameMessagePrepare();
int PS4_SYSV_ABI sceNpInGameMessagePrepareA();
int PS4_SYSV_ABI sceNpInGameMessageSendData();
int PS4_SYSV_ABI sceNpInGameMessageSendDataA();
int PS4_SYSV_ABI sceNpInGameMessageTerminate();
int PS4_SYSV_ABI sceNpIntCheckPlus();
int PS4_SYSV_ABI sceNpIntGetAppType();
int PS4_SYSV_ABI sceNpIntGetGamePresenceStatus();
int PS4_SYSV_ABI sceNpIntGetNpTitleId();
int PS4_SYSV_ABI sceNpIntGetNpTitleIdSecret();
int PS4_SYSV_ABI sceNpIntRegisterGamePresenceCallback();
int PS4_SYSV_ABI sceNpIsPlusMember();
int PS4_SYSV_ABI sceNpManagerIntAbortRequest();
int PS4_SYSV_ABI sceNpManagerIntAddActiveSigninStateCallback();
int PS4_SYSV_ABI sceNpManagerIntAddOnlineIdChangeCallback();
int PS4_SYSV_ABI sceNpManagerIntAddPlusMemberTypeCallback();
int PS4_SYSV_ABI sceNpManagerIntAddSigninStateCallback();
int PS4_SYSV_ABI sceNpManagerIntAuthGetAuthorizationCode();
int PS4_SYSV_ABI sceNpManagerIntAuthGetIdToken();
int PS4_SYSV_ABI sceNpManagerIntBindOfflineAccountId();
int PS4_SYSV_ABI sceNpManagerIntCheckGameNpAvailability();
int PS4_SYSV_ABI sceNpManagerIntCheckNpAvailability();
int PS4_SYSV_ABI sceNpManagerIntCheckNpAvailabilityByPid();
int PS4_SYSV_ABI sceNpManagerIntCheckNpState();
int PS4_SYSV_ABI sceNpManagerIntCheckNpStateA();
int PS4_SYSV_ABI sceNpManagerIntClearGameAccessToken();
int PS4_SYSV_ABI sceNpManagerIntClearOnlineIdChangeFlag();
int PS4_SYSV_ABI sceNpManagerIntClearTicket();
int PS4_SYSV_ABI sceNpManagerIntClearUsedFlag();
int PS4_SYSV_ABI sceNpManagerIntClearVshAccessToken();
int PS4_SYSV_ABI sceNpManagerIntCreateLoginContext();
int PS4_SYSV_ABI sceNpManagerIntCreateLoginRequest();
int PS4_SYSV_ABI sceNpManagerIntCreateRequest();
int PS4_SYSV_ABI sceNpManagerIntDeleteLoginContext();
int PS4_SYSV_ABI sceNpManagerIntDeleteRequest();
int PS4_SYSV_ABI sceNpManagerIntGetAccountCountry();
int PS4_SYSV_ABI sceNpManagerIntGetAccountCountryA();
int PS4_SYSV_ABI sceNpManagerIntGetAccountCountrySdk();
int PS4_SYSV_ABI sceNpManagerIntGetAccountDateOfBirthA();
int PS4_SYSV_ABI sceNpManagerIntGetAccountDateOfBirthSdk();
int PS4_SYSV_ABI sceNpManagerIntGetAccountId();
int PS4_SYSV_ABI sceNpManagerIntGetAccountIdSdk();
int PS4_SYSV_ABI sceNpManagerIntGetAccountLanguage();
int PS4_SYSV_ABI sceNpManagerIntGetAccountLanguageA();
int PS4_SYSV_ABI sceNpManagerIntGetAccountNpEnv();
int PS4_SYSV_ABI sceNpManagerIntGetAccountType();
int PS4_SYSV_ABI sceNpManagerIntGetActiveSigninState();
int PS4_SYSV_ABI sceNpManagerIntGetAuthorizationCodeA();
int PS4_SYSV_ABI sceNpManagerIntGetAuthorizationCodeWithPsnoUri();
int PS4_SYSV_ABI sceNpManagerIntGetAuthServerErrorFlag();
int PS4_SYSV_ABI sceNpManagerIntGetClientCredentialAccessToken();
int PS4_SYSV_ABI sceNpManagerIntGetCommunicationRestrictionStatus();
int PS4_SYSV_ABI sceNpManagerIntGetGameAccessToken();
int PS4_SYSV_ABI sceNpManagerIntGetIssuerId();
int PS4_SYSV_ABI sceNpManagerIntGetLastAccountLanguage();
int PS4_SYSV_ABI sceNpManagerIntGetMAccountId();
int PS4_SYSV_ABI sceNpManagerIntGetNpEnv();
int PS4_SYSV_ABI sceNpManagerIntGetNpId();
int PS4_SYSV_ABI sceNpManagerIntGetNpIdByOnlineId();
int PS4_SYSV_ABI sceNpManagerIntGetNpIdSdk();
int PS4_SYSV_ABI sceNpManagerIntGetOfflineAccountId();
int PS4_SYSV_ABI sceNpManagerIntGetOnlineIdByAccountId();
int PS4_SYSV_ABI sceNpManagerIntGetOnlineIdChangeFlag();
int PS4_SYSV_ABI sceNpManagerIntGetOnlineIdInternal();
int PS4_SYSV_ABI sceNpManagerIntGetOnlineIdSdk();
int PS4_SYSV_ABI sceNpManagerIntGetParentalControlFlag();
int PS4_SYSV_ABI sceNpManagerIntGetParentalControlInfo();
int PS4_SYSV_ABI sceNpManagerIntGetParentalControlInfoA();
int PS4_SYSV_ABI sceNpManagerIntGetPlusMemberType();
int PS4_SYSV_ABI sceNpManagerIntGetPlusMemberTypeNB();
int PS4_SYSV_ABI sceNpManagerIntGetServerError();
int PS4_SYSV_ABI sceNpManagerIntGetSigninState();
int PS4_SYSV_ABI sceNpManagerIntGetTicket();
int PS4_SYSV_ABI sceNpManagerIntGetTicketA();
int PS4_SYSV_ABI sceNpManagerIntGetTitleTokenWithCheck();
int PS4_SYSV_ABI sceNpManagerIntGetUserIdByAccountId();
int PS4_SYSV_ABI sceNpManagerIntGetUserIdByMAccountId();
int PS4_SYSV_ABI sceNpManagerIntGetUserIdByNpId();
int PS4_SYSV_ABI sceNpManagerIntGetUserIdByOfflineAccountId();
int PS4_SYSV_ABI sceNpManagerIntGetUserIdByOnlineId();
int PS4_SYSV_ABI sceNpManagerIntGetUserIdByOnlineIdSdk();
int PS4_SYSV_ABI sceNpManagerIntGetUserList();
int PS4_SYSV_ABI sceNpManagerIntGetUserNum();
int PS4_SYSV_ABI sceNpManagerIntGetVshAccessToken();
int PS4_SYSV_ABI sceNpManagerIntGetVshAccessTokenWithCheck();
int PS4_SYSV_ABI sceNpManagerIntGetVshClientId();
int PS4_SYSV_ABI sceNpManagerIntIsSubAccount();
int PS4_SYSV_ABI sceNpManagerIntIsTemporarySignout();
int PS4_SYSV_ABI sceNpManagerIntIsUnregisteredClientError();
int PS4_SYSV_ABI sceNpManagerIntLoginAddJsonInfo();
int PS4_SYSV_ABI sceNpManagerIntLoginAuthenticate();
int PS4_SYSV_ABI sceNpManagerIntLoginBind();
int PS4_SYSV_ABI sceNpManagerIntLoginGet2svInfo();
int PS4_SYSV_ABI sceNpManagerIntLoginGetAccessToken();
int PS4_SYSV_ABI sceNpManagerIntLoginGetAccessTokenViaImplicitFlow();
int PS4_SYSV_ABI sceNpManagerIntLoginGetAccountId();
int PS4_SYSV_ABI sceNpManagerIntLoginGetAuthenticateResponse();
int PS4_SYSV_ABI sceNpManagerIntLoginGetAuthorizationCode();
int PS4_SYSV_ABI sceNpManagerIntLoginGetDeviceCodeInfo();
int PS4_SYSV_ABI sceNpManagerIntLoginGetEmail();
int PS4_SYSV_ABI sceNpManagerIntLoginGetOnlineId();
int PS4_SYSV_ABI sceNpManagerIntLoginGetUserId();
int PS4_SYSV_ABI sceNpManagerIntLoginParseJsonUserInfo();
int PS4_SYSV_ABI sceNpManagerIntLoginResetSsoToken();
int PS4_SYSV_ABI sceNpManagerIntLoginRevalidatePassword();
int PS4_SYSV_ABI sceNpManagerIntLoginSetAccountInfo();
int PS4_SYSV_ABI sceNpManagerIntLoginSetSsoToken();
int PS4_SYSV_ABI sceNpManagerIntLoginSignin();
int PS4_SYSV_ABI sceNpManagerIntLoginValidateCredential();
int PS4_SYSV_ABI sceNpManagerIntLoginValidateKratosAuthCode();
int PS4_SYSV_ABI sceNpManagerIntLoginVerifyDeviceCode();
int PS4_SYSV_ABI sceNpManagerIntPfAuth();
int PS4_SYSV_ABI sceNpManagerIntRemoveActiveSigninStateCallback();
int PS4_SYSV_ABI sceNpManagerIntRemoveOnlineIdChangeCallback();
int PS4_SYSV_ABI sceNpManagerIntRemovePlusMemberTypeCallback();
int PS4_SYSV_ABI sceNpManagerIntRemoveSigninStateCallback();
int PS4_SYSV_ABI sceNpManagerIntRevalidatePassword();
int PS4_SYSV_ABI sceNpManagerIntSetPlusMemberTypeNB();
int PS4_SYSV_ABI sceNpManagerIntSetTimeout();
int PS4_SYSV_ABI sceNpManagerIntSignout();
int PS4_SYSV_ABI sceNpManagerIntSubmitUserCode();
int PS4_SYSV_ABI sceNpManagerIntTemporarySignout();
int PS4_SYSV_ABI sceNpManagerIntUnbindOfflineAccountId();
int PS4_SYSV_ABI sceNpManagerIntUpdateVshAccessToken();
int PS4_SYSV_ABI sceNpManagerIntWebLoginRequired();
int PS4_SYSV_ABI sceNpManagerPrxStartVsh();
int PS4_SYSV_ABI sceNpManagerPrxStopVsh();
int PS4_SYSV_ABI sceNpNotifyPlusFeature();
int PS4_SYSV_ABI sceNpPollAsync();
int PS4_SYSV_ABI sceNpPush2CreateUserContext();
int PS4_SYSV_ABI sceNpPush2DeleteUserContext();
int PS4_SYSV_ABI sceNpPush2Init();
int PS4_SYSV_ABI sceNpPush2IsInit();
int PS4_SYSV_ABI sceNpPush2OptionalCheckCallback();
int PS4_SYSV_ABI sceNpPush2RegisterDataType();
int PS4_SYSV_ABI sceNpPush2RegisterExtendedDataFilter();
int PS4_SYSV_ABI sceNpPush2RegisterNotificationExCallback();
int PS4_SYSV_ABI sceNpPush2SendPushStatisticsDataSystemTelemetry();
int PS4_SYSV_ABI sceNpPush2SetGlobalMutex();
int PS4_SYSV_ABI sceNpPush2SetNpCommunicationId();
int PS4_SYSV_ABI sceNpPush2Term();
int PS4_SYSV_ABI sceNpPush2TriggerEmptyUserEvent();
int PS4_SYSV_ABI sceNpPush2UnregisterDataType();
int PS4_SYSV_ABI sceNpPush2UnregisterExtendedDataFilter();
int PS4_SYSV_ABI sceNpPush2UnregisterNotificationExCallback();
int PS4_SYSV_ABI sceNpPush2UnsetNpCommunicationId();
int PS4_SYSV_ABI sceNpPush2WaitCallback();
int PS4_SYSV_ABI sceNpPushCheckCallback();
int PS4_SYSV_ABI sceNpPushInit();
int PS4_SYSV_ABI sceNpPushIntBeginInactive();
int PS4_SYSV_ABI sceNpPushIntEndInactive();
int PS4_SYSV_ABI sceNpPushIntGetBindUserState();
int PS4_SYSV_ABI sceNpPushIntGetConnectionState();
int PS4_SYSV_ABI sceNpPushIntRegisterNotificationPacketCallback();
int PS4_SYSV_ABI sceNpPushIntUnregisterNotificationPacketCallback();
int PS4_SYSV_ABI sceNpPushRegisterExtendedDataFilter();
int PS4_SYSV_ABI sceNpPushRegisterNotificationExCallback();
int PS4_SYSV_ABI sceNpPushSetNpCommunicationId();
int PS4_SYSV_ABI sceNpPushStartNotification();
int PS4_SYSV_ABI sceNpPushStartNotificationA();
int PS4_SYSV_ABI sceNpPushStopNotification();
int PS4_SYSV_ABI sceNpPushStopNotificationA();
int PS4_SYSV_ABI sceNpPushTerm();
int PS4_SYSV_ABI sceNpPushUnregisterExtendedDataFilter();
int PS4_SYSV_ABI sceNpPushUnregisterNotificationCallback();
int PS4_SYSV_ABI sceNpPushUnsetNpCommunicationId();
int PS4_SYSV_ABI sceNpRegisterGamePresenceCallback();
int PS4_SYSV_ABI sceNpRegisterGamePresenceCallbackA();
int PS4_SYSV_ABI sceNpRegisterNpReachabilityStateCallback();
int PS4_SYSV_ABI sceNpRegisterPlusEventCallback();
int PS4_SYSV_ABI sceNpRegisterStateCallback();
int PS4_SYSV_ABI sceNpRegisterStateCallbackA();
int PS4_SYSV_ABI sceNpServiceClientInit();
int PS4_SYSV_ABI sceNpServiceClientTerm();
int PS4_SYSV_ABI sceNpSetAdditionalScope();
int PS4_SYSV_ABI sceNpSetContentRestriction();
int PS4_SYSV_ABI sceNpSetGamePresenceOnline();
int PS4_SYSV_ABI sceNpSetGamePresenceOnlineA();
int PS4_SYSV_ABI sceNpSetNpTitleId();
int PS4_SYSV_ABI sceNpSetNpTitleIdVsh();
int PS4_SYSV_ABI sceNpSetTimeout();
int PS4_SYSV_ABI sceNpUnregisterGamePresenceCallbackA();
int PS4_SYSV_ABI sceNpUnregisterNpReachabilityStateCallback();
int PS4_SYSV_ABI sceNpUnregisterPlusEventCallback();
int PS4_SYSV_ABI sceNpUnregisterStateCallback();
int PS4_SYSV_ABI sceNpUnregisterStateCallbackA();
int PS4_SYSV_ABI sceNpWaitAsync();
int PS4_SYSV_ABI Func_05003628D66BD87D();
int PS4_SYSV_ABI Func_0C388A4F21C98AF9();
int PS4_SYSV_ABI Func_0CECC7A08A3E50AF();
int PS4_SYSV_ABI Func_0D17030A1DA18EEB();
int PS4_SYSV_ABI Func_0F0F320B6AD8A53D();
int PS4_SYSV_ABI Func_113C477090F9A174();
int PS4_SYSV_ABI Func_12D367D5C727F008();
int PS4_SYSV_ABI Func_1640120BD475931E();
int PS4_SYSV_ABI Func_1AFE1C07C95E65A5();
int PS4_SYSV_ABI Func_1D983C7E0C28AC72();
int PS4_SYSV_ABI Func_208943695A3B58FE();
int PS4_SYSV_ABI Func_258A3D10C99A43BB();
int PS4_SYSV_ABI Func_263E325794B412AC();
int PS4_SYSV_ABI Func_2B6A4BF35C5E240D();
int PS4_SYSV_ABI Func_2B707FFE05ACB009();
int PS4_SYSV_ABI Func_2CE5AB230EBAF8B4();
int PS4_SYSV_ABI Func_3237EE3C3AFC187B();
int PS4_SYSV_ABI Func_33D4DFB2A1603BFF();
int PS4_SYSV_ABI Func_3821D79C1ED86F33();
int PS4_SYSV_ABI Func_3F431997C7105BBF();
int PS4_SYSV_ABI Func_4192797C2D2D3FC3();
int PS4_SYSV_ABI Func_41C7E3D88BBB7F75();
int PS4_SYSV_ABI Func_438F60858A883FCF();
int PS4_SYSV_ABI Func_4C4A062E5660FABD();
int PS4_SYSV_ABI Func_4C808F7A4EFA36A7();
int PS4_SYSV_ABI Func_4E1CED7E62F68F46();
int PS4_SYSV_ABI Func_5161A48C6A61C4BF();
int PS4_SYSV_ABI Func_542603999CA0AEE9();
int PS4_SYSV_ABI Func_54690B41C1128799();
int PS4_SYSV_ABI Func_55A76C7C29521FAD();
int PS4_SYSV_ABI Func_562B234AAE25F80C();
int PS4_SYSV_ABI Func_58D1975026DD864A();
int PS4_SYSV_ABI Func_5A60395F8C3FE128();
int PS4_SYSV_ABI Func_5B382777E9B5F294();
int PS4_SYSV_ABI Func_5DB301F9CD649671();
int PS4_SYSV_ABI Func_6441D55869D8D6F2();
int PS4_SYSV_ABI Func_69068E18854284DE();
int PS4_SYSV_ABI Func_6F59C3B00B03E05A();
int PS4_SYSV_ABI Func_724CCE7F78A1356B();
int PS4_SYSV_ABI Func_750F1B053C243308();
int PS4_SYSV_ABI Func_760F079BB91DE258();
int PS4_SYSV_ABI Func_78657523221556EF();
int PS4_SYSV_ABI Func_8089888BD363EDA6();
int PS4_SYSV_ABI Func_810CA029B6F7C3A1();
int PS4_SYSV_ABI Func_8253B94686A8D3FD();
int PS4_SYSV_ABI Func_8665138A709E1654();
int PS4_SYSV_ABI Func_882F48FAE6097C0C();
int PS4_SYSV_ABI Func_89DBE4B3303FF888();
int PS4_SYSV_ABI Func_8BD3E57620BDDC38();
int PS4_SYSV_ABI Func_8F0A74013AD633EC();
int PS4_SYSV_ABI Func_8FA6264BF3F6CC00();
int PS4_SYSV_ABI Func_9292E87C2C0971E4();
int PS4_SYSV_ABI Func_92CA292318CA03A8();
int PS4_SYSV_ABI Func_9348596C2B17F662();
int PS4_SYSV_ABI Func_9507E9B321A5E0D7();
int PS4_SYSV_ABI Func_98CA95E231980731();
int PS4_SYSV_ABI Func_9E66CC4BBF2C1990();
int PS4_SYSV_ABI Func_9E6CEF7064891F84();
int PS4_SYSV_ABI Func_A7BC2C792E9522C5();
int PS4_SYSV_ABI Func_ABBA0F809548CB02();
int PS4_SYSV_ABI Func_B14A27A4CEDE020F();
int PS4_SYSV_ABI Func_B323EE1C23AB97F3();
int PS4_SYSV_ABI Func_B429819DAEF40BAC();
int PS4_SYSV_ABI Func_B54B9571BEAD82C5();
int PS4_SYSV_ABI Func_B5ACB5CF4A4114A6();
int PS4_SYSV_ABI Func_BA41BE0F44157EE4();
int PS4_SYSV_ABI Func_BAA1DEC848D99690();
int PS4_SYSV_ABI Func_BB8CCCD6C9480EB2();
int PS4_SYSV_ABI Func_BEC25DAAE8B8B81F();
int PS4_SYSV_ABI Func_BFEE936391AB0C70();
int PS4_SYSV_ABI Func_C0DD2DBE2EA66F7A();
int PS4_SYSV_ABI Func_C1F858BF5B86C2A1();
int PS4_SYSV_ABI Func_C240618E6FC39206();
int PS4_SYSV_ABI Func_C338A34450310E79();
int PS4_SYSV_ABI Func_C91EE3603D966909();
int PS4_SYSV_ABI Func_CB67035ED668CF6B();
int PS4_SYSV_ABI Func_D5A5A28B7351A9BE();
int PS4_SYSV_ABI Func_DA8426059F1D5A2D();
int PS4_SYSV_ABI Func_DA8E15DD00AF9DF8();
int PS4_SYSV_ABI Func_DB86987643BB5DD7();
int PS4_SYSV_ABI Func_DEC53D7165C137DF();
int PS4_SYSV_ABI Func_DFDEEE26F2EB96B3();
int PS4_SYSV_ABI Func_E2056A6F01642866();
int PS4_SYSV_ABI Func_E240E9B8597EE56E();
int PS4_SYSV_ABI Func_E32CE33B706F05F7();
int PS4_SYSV_ABI Func_E4F67EFC91C84F87();
int PS4_SYSV_ABI Func_E6F041A2660F83EB();
int PS4_SYSV_ABI Func_E979BA413BD84D38();
int PS4_SYSV_ABI Func_EDDDF2D305DB7866();
int PS4_SYSV_ABI Func_F08EC7725B42E2F9();
int PS4_SYSV_ABI Func_F3595D8EFFF26EC0();
int PS4_SYSV_ABI Func_F3DF5271142F155D();
int PS4_SYSV_ABI Func_F89997168DC987A8();
int PS4_SYSV_ABI Func_F91B5B25CC9B30D9();
int PS4_SYSV_ABI Func_FC335B7102A585B3();
int PS4_SYSV_ABI Func_FCEAC354CA8B206E();
int PS4_SYSV_ABI Func_FF966E4351E564D6();
int PS4_SYSV_ABI sceNpRegisterStateCallbackForToolkit(OrbisNpStateCallbackForNpToolkit callback,
void* userdata);
int PS4_SYSV_ABI sceNpUnregisterStateCallbackForToolkit();
void RegisterLib(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::NpManager

View File

@@ -1,9 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "core/libraries/error_codes.h"
constexpr int ORBIS_NP_ERROR_INVALID_ARGUMENT = 0x80550003;
constexpr int ORBIS_NP_ERROR_SIGNED_OUT = 0x80550006;

View File

@@ -3,8 +3,8 @@
#pragma once
#include <core/libraries/np_manager/np_manager.h>
#include "common/types.h"
#include "core/libraries/np/np_types.h"
namespace Core::Loader {
class SymbolsResolver;
@@ -19,8 +19,8 @@ constexpr int ORBIS_SHARE_PLAY_CONNECTION_STATUS_CONNECTED = 0x02;
struct OrbisSharePlayConnectionInfo {
int status;
int mode;
Libraries::NpManager::OrbisNpOnlineId hostOnlineId;
Libraries::NpManager::OrbisNpOnlineId visitorOnlineId;
Libraries::Np::OrbisNpOnlineId hostOnlineId;
Libraries::Np::OrbisNpOnlineId visitorOnlineId;
s32 hostUserId;
s32 visitorUserId;
};

View File

@@ -35,7 +35,7 @@
#include "core/libraries/libc_internal/libc_internal.h"
#include "core/libraries/libs.h"
#include "core/libraries/ngs2/ngs2.h"
#include "core/libraries/np_trophy/np_trophy.h"
#include "core/libraries/np/np_trophy.h"
#include "core/libraries/rtc/rtc.h"
#include "core/libraries/save_data/save_backup.h"
#include "core/linker.h"
@@ -196,7 +196,7 @@ void Emulator::Run(std::filesystem::path file, const std::vector<std::string> ar
// Initialize patcher and trophies
if (!id.empty()) {
MemoryPatcher::g_game_serial = id;
Libraries::NpTrophy::game_serial = id;
Libraries::Np::NpTrophy::game_serial = id;
const auto trophyDir =
Common::FS::GetUserPath(Common::FS::PathType::MetaDataDir) / id / "TrophyFiles";
@@ -342,11 +342,11 @@ void Emulator::Run(std::filesystem::path file, const std::vector<std::string> ar
void Emulator::LoadSystemModules(const std::string& game_serial) {
constexpr auto ModulesToLoad = std::to_array<SysModules>(
{{"libSceNgs2.sprx", &Libraries::Ngs2::RegisterlibSceNgs2},
{{"libSceNgs2.sprx", &Libraries::Ngs2::RegisterLib},
{"libSceUlt.sprx", nullptr},
{"libSceJson.sprx", nullptr},
{"libSceJson2.sprx", nullptr},
{"libSceLibcInternal.sprx", &Libraries::LibcInternal::RegisterlibSceLibcInternal},
{"libSceLibcInternal.sprx", &Libraries::LibcInternal::RegisterLib},
{"libSceCesCs.sprx", nullptr},
{"libSceFont.sprx", nullptr},
{"libSceFontFt.sprx", nullptr},