From aaae77f3bcb0a93b6fd34bbb82784ba046726083 Mon Sep 17 00:00:00 2001 From: Fabien Romano Date: Fri, 9 Jan 2026 19:13:37 +0100 Subject: [PATCH] Fix NON_PORTABLE build. Ship::Context needs to be initialized first. (#618) * Fix NON_PORTABLE build. Ship::Context needs to be initialized before resolving files. Move offending calls inside functions where they are used. Those will always be called after GameEngine() which runs Ship::Context::CreateUninitializedInstance() early. * Replace hardcoded string mk64.o2r and spaghetti.o2r with variables game_asset_file and engine_asset_file. --- src/engine/mods/ModManager.cpp | 7 +++++-- src/port/Engine.cpp | 2 +- src/port/Engine.h | 13 ++++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/engine/mods/ModManager.cpp b/src/engine/mods/ModManager.cpp index a94d8f558..137fb9743 100644 --- a/src/engine/mods/ModManager.cpp +++ b/src/engine/mods/ModManager.cpp @@ -19,8 +19,6 @@ void DetectOutdatedDependencies(); void SortModsByDependencies(); std::vector>> Mods = {}; -const std::string main_path = Ship::Context::GetPathRelativeToAppDirectory("mk64.o2r"); -const std::string assets_path = Ship::Context::LocateFileAcrossAppDirs("spaghetti.o2r"); void InitModsSystem() { CheckMK64O2RExists(); @@ -65,6 +63,9 @@ void GenerateAssetsMods() { } std::vector ListMods() { + const std::string main_path = Ship::Context::GetPathRelativeToAppDirectory(game_asset_file); + const std::string assets_path = Ship::Context::LocateFileAcrossAppDirs(engine_asset_file); + std::vector archiveFiles; if (std::filesystem::exists(main_path)) { archiveFiles.push_back(main_path); @@ -202,6 +203,8 @@ void AddCoreDependencies() { } void CheckMK64O2RExists() { + const std::string main_path = Ship::Context::GetPathRelativeToAppDirectory(game_asset_file); + if (!std::filesystem::exists(main_path)) { GenerateAssetsMods(); } diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index 5a4b75c39..2cd2c99b9 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -166,7 +166,7 @@ GameEngine::GameEngine() { { BTN_DDOWN, "DDown" }, }); auto controlDeck = std::make_shared(std::vector(), defaultMappings, buttonNames); - const std::string assets_path = Ship::Context::LocateFileAcrossAppDirs("spaghetti.o2r"); + const std::string assets_path = Ship::Context::LocateFileAcrossAppDirs(engine_asset_file); this->context->InitResourceManager({assets_path}, {}, 3); // without this line InitWindow fails in Gui::Init() this->context->InitConsole(); // without this line the GuiWindow constructor fails in ConsoleWindow::InitElement() diff --git a/src/port/Engine.h b/src/port/Engine.h index d837bcaa3..d5368a92f 100644 --- a/src/port/Engine.h +++ b/src/port/Engine.h @@ -2,14 +2,17 @@ #include "port/audio/HMAS.h" +static const char game_asset_file[] = "mk64.o2r"; +static const char engine_asset_file[] = "spaghetti.o2r"; + #define LOAD_ASSET(path) \ (path == NULL ? NULL \ : (GameEngine_OTRSigCheck((const char*) path) ? ResourceGetDataByName((const char*) path) : path)) - #define LOAD_ASSET_RAW(path) ResourceGetDataByName((const char*) path) - - #ifdef __cplusplus - #include - #include +#define LOAD_ASSET_RAW(path) ResourceGetDataByName((const char*) path) + +#ifdef __cplusplus +#include +#include #include #include #include "ship/Context.h"