diff --git a/ISLE/emscripten/filesystem.cpp b/ISLE/emscripten/filesystem.cpp index c2bfbc37..e5644608 100644 --- a/ISLE/emscripten/filesystem.cpp +++ b/ISLE/emscripten/filesystem.cpp @@ -1,6 +1,7 @@ #include "filesystem.h" #include "events.h" +#include "extensions/siloader.h" #include "extensions/textureloader.h" #include "legogamestate.h" #include "misc.h" @@ -107,6 +108,14 @@ void Emscripten_SetupFilesystem() Emscripten_SendExtensionProgress("HD Textures", (++i * 100) / sizeOfArray(g_textures)); } } + + if (Extensions::SiLoader::enabled) { + wasmfs_create_directory("/LEGO/extra", 0644, fetchfs); + + for (const auto& file : Extensions::SiLoader::files) { + registerFile(file.c_str()); + } + } #endif if (GameState()->GetSavePath() && *GameState()->GetSavePath() && !Emscripten_OPFSDisabled()) { diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index 9ede5d74..1ccc90a8 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -973,6 +973,8 @@ MxResult IsleApp::SetupWindow() return FAILURE; } + Lego()->LoadSiLoader(); + DetectGameVersion(); GameState()->SerializePlayersInfo(LegoStorage::c_read); GameState()->SerializeScoreHistory(LegoStorage::c_read); diff --git a/LEGO1/lego/legoomni/include/legomain.h b/LEGO1/lego/legoomni/include/legomain.h index c5cb23af..8fdf9ecb 100644 --- a/LEGO1/lego/legoomni/include/legomain.h +++ b/LEGO1/lego/legoomni/include/legomain.h @@ -208,6 +208,7 @@ class LegoOmni : public MxOmni { void SetVersion10(MxBool p_version10) { m_version10 = p_version10; } MxBool IsVersion10() { return m_version10; } + LEGO1_EXPORT void LoadSiLoader(); // SYNTHETIC: LEGO1 0x10058b30 // SYNTHETIC: BETA10 0x1008f8d0 diff --git a/LEGO1/lego/legoomni/src/main/legomain.cpp b/LEGO1/lego/legoomni/src/main/legomain.cpp index 04b1dc34..975933ff 100644 --- a/LEGO1/lego/legoomni/src/main/legomain.cpp +++ b/LEGO1/lego/legoomni/src/main/legomain.cpp @@ -354,9 +354,6 @@ MxResult LegoOmni::Create(MxOmniCreateParam& p_param) else { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to create MxTransitionManager"); } - - Extension::Call(Load); - done: return result; // LINE: BETA10 0x1008e35d @@ -728,3 +725,8 @@ void LegoOmni::Resume() MxOmni::Resume(); SetAppCursor(e_cursorArrow); } + +void LegoOmni::LoadSiLoader() +{ + Extension::Call(Load); +} diff --git a/extensions/include/extensions/siloader.h b/extensions/include/extensions/siloader.h index 92cc3bfe..3fc7ab0a 100644 --- a/extensions/include/extensions/siloader.h +++ b/extensions/include/extensions/siloader.h @@ -19,10 +19,10 @@ class SiLoader { static bool RemoveWith(StreamObject p_object, LegoWorld* world); static std::map options; + static std::vector files; static bool enabled; private: - static std::vector files; static std::vector> startWith; static std::vector> removeWith; diff --git a/extensions/src/siloader.cpp b/extensions/src/siloader.cpp index 3532fc76..bfbddd88 100644 --- a/extensions/src/siloader.cpp +++ b/extensions/src/siloader.cpp @@ -10,24 +10,29 @@ using namespace Extensions; std::map SiLoader::options; +std::vector SiLoader::files; std::vector> SiLoader::startWith; std::vector> SiLoader::removeWith; bool SiLoader::enabled = false; void SiLoader::Initialize() -{ -} - -bool SiLoader::Load() { char* files = SDL_strdup(options["si loader:files"].c_str()); char* saveptr; for (char* file = SDL_strtok_r(files, ",\n", &saveptr); file; file = SDL_strtok_r(NULL, ",\n", &saveptr)) { - LoadFile(file); + SiLoader::files.emplace_back(file); } SDL_free(files); +} + +bool SiLoader::Load() +{ + for (const auto& file : files) { + LoadFile(file.c_str()); + } + return true; }