diff --git a/.gitmodules b/.gitmodules index 82c40f4f9..e54658932 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,10 +2,6 @@ path = externals/zlib-ng url = https://github.com/shadps4-emu/ext-zlib-ng.git shallow = true -[submodule "externals/sdl3"] - path = externals/sdl3 - url = https://github.com/shadps4-emu/ext-SDL.git - shallow = true [submodule "externals/fmt"] path = externals/fmt url = https://github.com/shadps4-emu/ext-fmt.git @@ -123,7 +119,10 @@ [submodule "externals/aacdec/fdk-aac"] path = externals/aacdec/fdk-aac url = https://android.googlesource.com/platform/external/aac -[submodule "externals/ext-CLI11"] - path = externals/ext-CLI11 - url = https://github.com/shadexternals/ext-CLI11.git - branch = main +[submodule "externals/CLI11"] + path = externals/CLI11 + url = https://github.com/shadexternals/CLI11.git +[submodule "externals/sdl3"] + path = externals/sdl3 + url = https://github.com/shadexternals/sdl3.git + diff --git a/externals/CLI11 b/externals/CLI11 new file mode 160000 index 000000000..bf5a16a26 --- /dev/null +++ b/externals/CLI11 @@ -0,0 +1 @@ +Subproject commit bf5a16a26a34a9a7ad75f4a7705585e44675fef0 diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index e243f63db..db03e7679 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -274,4 +274,4 @@ add_subdirectory(miniz) set(CLI11_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(CLI11_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -add_subdirectory(ext-CLI11) \ No newline at end of file +add_subdirectory(CLI11) \ No newline at end of file diff --git a/externals/ext-CLI11 b/externals/ext-CLI11 deleted file mode 160000 index 1cce14833..000000000 --- a/externals/ext-CLI11 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1cce1483345e60997b87720948c37d6a34db2658 diff --git a/src/main.cpp b/src/main.cpp index 9b263e250..1229fdfe2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -39,11 +39,16 @@ int main(int argc, char* argv[]) { // ---- Trophy key migration ---- auto key_manager = KeyManager::GetInstance(); + key_manager->LoadFromFile(); if (key_manager->GetAllKeys().TrophyKeySet.ReleaseTrophyKey.empty() && !Config::getTrophyKey().empty()) { - key_manager->SetAllKeys({.TrophyKeySet = {.ReleaseTrophyKey = KeyManager::HexStringToBytes( - Config::getTrophyKey())}}); - key_manager->SaveToFile(); + auto keys = key_manager->GetAllKeys(); + if (keys.TrophyKeySet.ReleaseTrophyKey.empty() && !Config::getTrophyKey().empty()) { + keys.TrophyKeySet.ReleaseTrophyKey = + KeyManager::HexStringToBytes(Config::getTrophyKey()); + key_manager->SetAllKeys(keys); + key_manager->SaveToFile(); + } } CLI::App app{"shadPS4 Emulator CLI"}; @@ -66,128 +71,11 @@ int main(int argc, char* argv[]) { std::optional setAddonFolder; std::optional patchFile; - // ---- Options ---- - app.add_option("-g,--game", gamePath, "Game path or ID"); - app.add_option("-p,--patch", patchFile, "Patch file to apply"); - app.add_flag("-i,--ignore-game-patch", ignoreGamePatch, - "Disable automatic loading of game patches"); - - // FULLSCREEN: behavior-identical - app.add_option("-f,--fullscreen", fullscreenStr, "Fullscreen mode (true|false)"); - - app.add_option("--override-root", overrideRoot)->check(CLI::ExistingDirectory); - - app.add_flag("--wait-for-debugger", waitForDebugger); - app.add_option("--wait-for-pid", waitPid); - - app.add_flag("--show-fps", showFps); - app.add_flag("--config-clean", configClean); - app.add_flag("--config-global", configGlobal); - app.add_flag("--log-append", logAppend); - - app.add_option("--add-game-folder", addGameFolder)->check(CLI::ExistingDirectory); - app.add_option("--set-addon-folder", setAddonFolder)->check(CLI::ExistingDirectory); - - // ---- Capture args after `--` verbatim ---- - app.allow_extras(); - app.parse_complete_callback([&]() { - const auto& extras = app.remaining(); - if (!extras.empty()) { - gameArgs = extras; - } - }); - - // ---- No-args behavior ---- - if (argc == 1) { - SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, "shadPS4", - "This is a CLI application. Please use the QTLauncher for a GUI:\n" - "https://github.com/shadps4-emu/shadps4-qtlauncher/releases", - nullptr); - std::cout << app.help(); - return -1; - } - - try { - app.parse(argc, argv); - } catch (const CLI::ParseError& e) { - return app.exit(e); - } - - // ---- Utility commands ---- - if (addGameFolder) { - Config::addGameInstallDir(*addGameFolder); - Config::save(user_dir / "config.toml"); - std::cout << "Game folder successfully saved.\n"; - return 0; - } - - if (setAddonFolder) { - Config::setAddonInstallDir(*setAddonFolder); - Config::save(user_dir / "config.toml"); - std::cout << "Addon folder successfully saved.\n"; - return 0; - } - - if (!gamePath.has_value()) { - if (!gameArgs.empty()) { - gamePath = gameArgs.front(); - gameArgs.erase(gameArgs.begin()); - } else { - std::cerr << "Error: Please provide a game path or ID.\n"; - return 1; - } - } - - // ---- Apply flags ---- - if (patchFile) - MemoryPatcher::patch_file = *patchFile; - - if (ignoreGamePatch) - Core::FileSys::MntPoints::ignore_game_patches = true; - - if (fullscreenStr) { - if (*fullscreenStr == "true") { - Config::setIsFullscreen(true); - } else if (*fullscreenStr == "false") { - Config::setIsFullscreen(false); - } else { - std::cerr << "Error: Invalid argument for --fullscreen (use true|false)\n"; - return 1; - } - } - - if (showFps) - Config::setShowFpsCounter(true); - - if (configClean) - Config::setConfigMode(Config::ConfigMode::Clean); - - if (configGlobal) - Config::setConfigMode(Config::ConfigMode::Global); - - if (logAppend) - Common::Log::SetAppend(); - - // ---- Resolve game path or ID ---- - std::filesystem::path ebootPath(*gamePath); - if (!std::filesystem::exists(ebootPath)) { - bool found = false; - constexpr int maxDepth = 5; - for (const auto& installDir : Config::getGameInstallDirs()) { - if (auto foundPath = Common::FS::FindGameByID(installDir, *gamePath, maxDepth)) { - ebootPath = *foundPath; - found = true; - break; - } - } - if (!found) { - std::cerr << "Error: Game ID or file path not found: " << *gamePath << "\n"; - return 1; - } - } - - if (waitPid) - Core::Debugger::WaitForPid(*waitPid); + // const char* const ebootPath = "M:/PS4/dumpedgames/CUSA00207/eboot.bin"; // bloodborne + // const char* const eboot_path = "D:/ps4/shadps4games/CUSA07010/eboot.bin";//sonic mania + // const char* const eboot_path = "C:/ps4tests/CUSA03318/eboot.bin";//carmageddon + const char* const ebootPath = "C:/ps4tests/CUSA04518/eboot.bin"; // project diva x + // const char* const ebootPath = "D:/ps4sdk/rain.elf"; auto* emulator = Common::Singleton::Instance(); emulator->executableName = argv[0];