diff --git a/src/common/path_util.cpp b/src/common/path_util.cpp index d82c8730..35ac4448 100644 --- a/src/common/path_util.cpp +++ b/src/common/path_util.cpp @@ -36,6 +36,7 @@ static auto UserPaths = [] { create_path(PathType::ScreenshotsDir, user_dir / SCREENSHOTS_DIR); create_path(PathType::ShaderDir, user_dir / SHADER_DIR); create_path(PathType::SaveDataDir, user_dir / SAVEDATA_DIR); + create_path(PathType::SysModuleDir, user_dir / SYSMODULES_DIR); return paths; }(); diff --git a/src/common/path_util.h b/src/common/path_util.h index 618d0bda..ea457040 100644 --- a/src/common/path_util.h +++ b/src/common/path_util.h @@ -14,6 +14,7 @@ enum class PathType { ScreenshotsDir, // Where screenshots are stored. ShaderDir, // Where shaders are stored. SaveDataDir, // Where guest save data is stored. + SysModuleDir, // Where system modules are stored. }; constexpr auto PORTABLE_DIR = "user"; @@ -23,6 +24,7 @@ constexpr auto LOG_DIR = "log"; constexpr auto SCREENSHOTS_DIR = "screenshots"; constexpr auto SHADER_DIR = "shader"; constexpr auto SAVEDATA_DIR = "savedata"; +constexpr auto SYSMODULES_DIR = "sys_modules"; // Filenames constexpr auto LOG_FILE = "shad_log.txt"; diff --git a/src/main.cpp b/src/main.cpp index b37702b2..ce93bca5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -70,6 +70,14 @@ int main(int argc, char* argv[]) { Libraries::InitHLELibs(&linker->getHLESymbols()); linker->LoadModule(path); + // check if we have system modules to load + const auto& sys_module_path = Common::FS::GetUserPath(Common::FS::PathType::SysModuleDir); + for (const auto& entry : std::filesystem::directory_iterator(sys_module_path)) { + if (entry.path().filename() == "libSceNgs2.sprx") { + LOG_INFO(Loader, "Loading {}", entry.path().string().c_str()); + linker->LoadModule(entry.path().string().c_str()); + } + } // Check if there is a libc.prx in sce_module folder bool found = false; if (Config::isLleLibc()) {