From ad19b9d6ccbf474f14edd2dcfdac62244123c2de Mon Sep 17 00:00:00 2001 From: AltoXorg <56553686+Alto1772@users.noreply.github.com> Date: Thu, 31 Jul 2025 09:33:02 +0800 Subject: [PATCH] Fix non-portable build --- src/port/Engine.cpp | 24 ++++++++++-------------- src/port/extractor/GameExtractor.cpp | 7 +++++-- tools/Torch | 2 +- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index d2bee9ec..bc0ccb1f 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -63,6 +63,9 @@ std::vector MemoryPool; GameEngine* GameEngine::Instance; GameEngine::GameEngine() { + // Initialize context properties early to recognize paths properly for non-portable builds + this->context = Ship::Context::CreateUninitializedInstance("Starship", "ship", "starship.cfg.json"); + #ifdef __SWITCH__ Ship::Switch::Init(Ship::PreInitPhase); Ship::Switch::Init(Ship::PostInitPhase); @@ -70,21 +73,12 @@ GameEngine::GameEngine() { std::vector archiveFiles; const std::string main_path = Ship::Context::GetPathRelativeToAppDirectory("sf64.o2r"); -#ifdef __linux__ - const std::string assets_path = Ship::Context::GetPathRelativeToAppBundle("starship.o2r"); -#else - const std::string assets_path = Ship::Context::GetPathRelativeToAppDirectory("starship.o2r"); -#endif - + const std::string assets_path = Ship::Context::LocateFileAcrossAppDirs("starship.o2r"); #ifdef _WIN32 AllocConsole(); #endif - if (!fs::exists("mods")) { - fs::create_directories("mods"); - } - if (std::filesystem::exists(main_path)) { archiveFiles.push_back(main_path); } else { @@ -111,7 +105,11 @@ GameEngine::GameEngine() { } if (const std::string patches_path = Ship::Context::GetPathRelativeToAppDirectory("mods"); - !patches_path.empty() && std::filesystem::exists(patches_path)) { + !patches_path.empty()) { + if (!std::filesystem::exists(patches_path)) { + std::filesystem::create_directories(patches_path); + } + if (std::filesystem::is_directory(patches_path)) { for (const auto& p : std::filesystem::recursive_directory_iterator(patches_path)) { const auto ext = p.path().extension().string(); @@ -127,8 +125,6 @@ GameEngine::GameEngine() { } } - this->context = Ship::Context::CreateUninitializedInstance("Starship", "ship", "starship.cfg.json"); - this->context->InitConfiguration(); // without this line InitConsoleVariables fails at Config::Reload() this->context->InitConsoleVariables(); // without this line the controldeck constructor failes in // ShipDeviceIndexMappingManager::UpdateControllerNamesFromConfig() @@ -849,4 +845,4 @@ extern "C" void GameEngine_Free(void* ptr) { break; } } -} \ No newline at end of file +} diff --git a/src/port/extractor/GameExtractor.cpp b/src/port/extractor/GameExtractor.cpp index f8392bc8..d75ab3c3 100644 --- a/src/port/extractor/GameExtractor.cpp +++ b/src/port/extractor/GameExtractor.cpp @@ -54,7 +54,10 @@ std::optional GameExtractor::ValidateChecksum() const { } bool GameExtractor::GenerateOTR() const { - Companion::Instance = new Companion(this->mGameData, ArchiveType::O2R, false); + const std::string assets_path = Ship::Context::GetAppBundlePath(); + const std::string game_path = Ship::Context::GetAppDirectoryPath(); + + Companion::Instance = new Companion(this->mGameData, ArchiveType::O2R, false, assets_path, game_path); try { Companion::Instance->Init(ExportType::Binary); @@ -63,4 +66,4 @@ bool GameExtractor::GenerateOTR() const { } return true; -} \ No newline at end of file +} diff --git a/tools/Torch b/tools/Torch index f75facb2..a81b16b0 160000 --- a/tools/Torch +++ b/tools/Torch @@ -1 +1 @@ -Subproject commit f75facb20883570ed091e8ae733ec0539f606e57 +Subproject commit a81b16b01fdda0dc82e26cb37f19e3e54b275cf4