mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-06-14 06:33:15 +00:00
Add support for game folder and fail early if eboot.bin is missing or corrupt (#3027)
This commit is contained in:
parent
ca0f458505
commit
c09d1c3cff
2 changed files with 18 additions and 3 deletions
|
@ -1,6 +1,7 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
|
|
||||||
|
@ -62,8 +63,13 @@ Emulator::~Emulator() {
|
||||||
Config::saveMainWindow(config_dir / "config.toml");
|
Config::saveMainWindow(config_dir / "config.toml");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Emulator::Run(const std::filesystem::path& file, const std::vector<std::string> args) {
|
void Emulator::Run(std::filesystem::path file, const std::vector<std::string> args) {
|
||||||
|
if (std::filesystem::is_directory(file)) {
|
||||||
|
file /= "eboot.bin";
|
||||||
|
}
|
||||||
|
|
||||||
const auto eboot_name = file.filename().string();
|
const auto eboot_name = file.filename().string();
|
||||||
|
|
||||||
auto game_folder = file.parent_path();
|
auto game_folder = file.parent_path();
|
||||||
if (const auto game_folder_name = game_folder.filename().string();
|
if (const auto game_folder_name = game_folder.filename().string();
|
||||||
game_folder_name.ends_with("-UPDATE") || game_folder_name.ends_with("-patch")) {
|
game_folder_name.ends_with("-UPDATE") || game_folder_name.ends_with("-patch")) {
|
||||||
|
@ -114,6 +120,11 @@ void Emulator::Run(const std::filesystem::path& file, const std::vector<std::str
|
||||||
Common::Log::Initialize();
|
Common::Log::Initialize();
|
||||||
}
|
}
|
||||||
Common::Log::Start();
|
Common::Log::Start();
|
||||||
|
if (!std::filesystem::exists(file)) {
|
||||||
|
LOG_CRITICAL(Loader, "eboot.bin does not exist: {}",
|
||||||
|
std::filesystem::absolute(file).string());
|
||||||
|
std::quick_exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
LOG_INFO(Loader, "Starting shadps4 emulator v{} ", Common::g_version);
|
LOG_INFO(Loader, "Starting shadps4 emulator v{} ", Common::g_version);
|
||||||
LOG_INFO(Loader, "Revision {}", Common::g_scm_rev);
|
LOG_INFO(Loader, "Revision {}", Common::g_scm_rev);
|
||||||
|
@ -250,7 +261,11 @@ void Emulator::Run(const std::filesystem::path& file, const std::vector<std::str
|
||||||
|
|
||||||
// Load the module with the linker
|
// Load the module with the linker
|
||||||
const auto eboot_path = mnt->GetHostPath("/app0/" + eboot_name);
|
const auto eboot_path = mnt->GetHostPath("/app0/" + eboot_name);
|
||||||
linker->LoadModule(eboot_path);
|
if (linker->LoadModule(eboot_path) == -1) {
|
||||||
|
LOG_CRITICAL(Loader, "Failed to load game's eboot.bin: {}",
|
||||||
|
std::filesystem::absolute(eboot_path).string());
|
||||||
|
std::quick_exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
// check if we have system modules to load
|
// check if we have system modules to load
|
||||||
LoadSystemModules(game_info.game_serial);
|
LoadSystemModules(game_info.game_serial);
|
||||||
|
|
|
@ -25,7 +25,7 @@ public:
|
||||||
Emulator();
|
Emulator();
|
||||||
~Emulator();
|
~Emulator();
|
||||||
|
|
||||||
void Run(const std::filesystem::path& file, const std::vector<std::string> args = {});
|
void Run(std::filesystem::path file, const std::vector<std::string> args = {});
|
||||||
void UpdatePlayTime(const std::string& serial);
|
void UpdatePlayTime(const std::string& serial);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue