From 157261171b05afdf5f685fdbd4826c5626072e8b Mon Sep 17 00:00:00 2001 From: altalk23 <45172705+altalk23@users.noreply.github.com> Date: Sat, 30 Dec 2023 21:34:04 +0300 Subject: [PATCH] temporary dependency bandaid --- loader/src/loader/LoaderImpl.cpp | 24 +++++++++++++++++++----- loader/src/loader/ModMetadataImpl.cpp | 2 +- loader/src/platform/android/ModImpl.cpp | 1 + loader/src/platform/android/crashlog.cpp | 2 ++ loader/test/members/Android32.cpp | 4 ++++ 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/loader/src/loader/LoaderImpl.cpp b/loader/src/loader/LoaderImpl.cpp index eb8896a9..aa454789 100644 --- a/loader/src/loader/LoaderImpl.cpp +++ b/loader/src/loader/LoaderImpl.cpp @@ -353,25 +353,39 @@ void Loader::Impl::buildModGraph() { } void Loader::Impl::loadModGraph(Mod* node, bool early) { + if (node->isEnabled()) { + return; + } if (early && !node->needsEarlyLoad()) { m_modsToLoad.push_back(node); return; } - if (node->hasUnresolvedDependencies()) + if (node->hasUnresolvedDependencies()) { + log::debug("{} {} has unresolved dependencies", node->getID(), node->getVersion()); return; - if (node->hasUnresolvedIncompatibilities()) + } + if (node->hasUnresolvedIncompatibilities()) { + log::debug("{} {} has unresolved incompatibilities", node->getID(), node->getVersion()); return; + } log::debug("{} {}", node->getID(), node->getVersion()); log::pushNest(); - if (node->isEnabled()) { + if (node->shouldLoad()) { + bool hasUnresolvedDependencies = false; for (auto const& dep : node->m_impl->m_dependants) { + if (dep->isEnabled()) + continue; m_modsToLoad.push_front(dep); + hasUnresolvedDependencies = true; + } + if (hasUnresolvedDependencies) { + log::debug("Has unresolved dependencies, loading later"); + log::popNest(); + return; } - log::popNest(); - return; } m_currentlyLoadingMod = node; diff --git a/loader/src/loader/ModMetadataImpl.cpp b/loader/src/loader/ModMetadataImpl.cpp index 2603b9ea..57f261e0 100644 --- a/loader/src/loader/ModMetadataImpl.cpp +++ b/loader/src/loader/ModMetadataImpl.cpp @@ -17,7 +17,7 @@ ModMetadata::Impl& ModMetadataImpl::getImpl(ModMetadata& info) { bool ModMetadata::Dependency::isResolved() const { return this->importance != Importance::Required || - this->mod && this->mod->isEnabled() && this->version.compare(this->mod->getVersion()); + this->mod && this->mod->shouldLoad() && this->version.compare(this->mod->getVersion()); } bool ModMetadata::Incompatibility::isResolved() const { diff --git a/loader/src/platform/android/ModImpl.cpp b/loader/src/platform/android/ModImpl.cpp index 998ed8d8..042e63a5 100644 --- a/loader/src/platform/android/ModImpl.cpp +++ b/loader/src/platform/android/ModImpl.cpp @@ -19,6 +19,7 @@ Result<> Mod::Impl::loadPlatformBinary() { return Ok(); } std::string err = dlerror(); + log::error("Unable to load the SO: dlerror returned ({})", err); return Err("Unable to load the SO: dlerror returned (" + err + ")"); } diff --git a/loader/src/platform/android/crashlog.cpp b/loader/src/platform/android/crashlog.cpp index 754c1b58..d9d15455 100644 --- a/loader/src/platform/android/crashlog.cpp +++ b/loader/src/platform/android/crashlog.cpp @@ -243,6 +243,8 @@ void printModsAndroid(std::stringstream& stream) { static std::string s_result; bool crashlog::setupPlatformHandler() { + (void)utils::file::createDirectoryAll(crashlog::getCrashLogDirectory()); + JniMethodInfo t; if (JniHelper::getStaticMethodInfo(t, "com/geode/launcher/utils/GeodeUtils", "getLogcatCrashBuffer", "()Ljava/lang/String;")) { diff --git a/loader/test/members/Android32.cpp b/loader/test/members/Android32.cpp index 9fd26bfa..2ba389c5 100644 --- a/loader/test/members/Android32.cpp +++ b/loader/test/members/Android32.cpp @@ -59,6 +59,10 @@ GEODE_SIZE_CHECK(StartPosObject, 0x668); GEODE_SIZE_CHECK(LabelGameObject, 0x690); // GEODE_SIZE_CHECK(EventLinkTrigger, 0x688); +GEODE_SIZE_CHECK(GJBaseGameLayer, 0x2d40); +GEODE_MEMBER_CHECK(GJBaseGameLayer, m_level, 0x5f0); +GEODE_MEMBER_CHECK(GameManager, m_gameLayer, 0x174); + // GEODE_MEMBER_CHECK(CCNode, m_pUserObject, 0xcc); // needed classes are ones in the ids folder and some generic ones (i think they are already done though so only ids)