From d8c0ba6799d3279eeb8a9c5f67844caa36797777 Mon Sep 17 00:00:00 2001 From: altalk23 <45172705+altalk23@users.noreply.github.com> Date: Sat, 21 Jan 2023 19:54:19 +0300 Subject: [PATCH 1/2] fix internal mod setting up at static init time --- bindings/GeometryDash.bro | 1 + loader/src/loader/LoaderImpl.cpp | 7 ++++--- loader/src/loader/LoaderImpl.hpp | 1 + loader/src/loader/ModImpl.cpp | 9 ++++++--- loader/src/main.cpp | 11 +++++++++++ 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/bindings/GeometryDash.bro b/bindings/GeometryDash.bro index d63b6b95..284703a5 100644 --- a/bindings/GeometryDash.bro +++ b/bindings/GeometryDash.bro @@ -3799,6 +3799,7 @@ class LevelSettingsObject : cocos2d::CCNode { int m_groundIndex; int m_fontIndex; bool m_startsWithStartPos; + bool m_isFlipped; GJGameLevel* m_level; gd::string m_guidelineString; int m_unknown; diff --git a/loader/src/loader/LoaderImpl.cpp b/loader/src/loader/LoaderImpl.cpp index 6e46dc8c..ddb5604b 100644 --- a/loader/src/loader/LoaderImpl.cpp +++ b/loader/src/loader/LoaderImpl.cpp @@ -591,13 +591,14 @@ ResourceDownloadFilter::ResourceDownloadFilter() {} void Loader::Impl::provideNextMod(Mod* mod) { m_nextModLock.lock(); - m_nextMod = mod; + if (mod) { + m_nextMod = mod; + } } Mod* Loader::Impl::takeNextMod() { if (!m_nextMod) { - this->setupInternalMod(); - m_nextMod = Mod::sharedMod<>; + m_nextMod = this->createInternalMod(); } auto ret = m_nextMod; return ret; diff --git a/loader/src/loader/LoaderImpl.hpp b/loader/src/loader/LoaderImpl.hpp index ee715655..c96853db 100644 --- a/loader/src/loader/LoaderImpl.hpp +++ b/loader/src/loader/LoaderImpl.hpp @@ -134,6 +134,7 @@ namespace geode { bool isReadyToHook() const; void addInternalHook(Hook* hook, Mod* mod); + Mod* createInternalMod(); void setupInternalMod(); }; diff --git a/loader/src/loader/ModImpl.cpp b/loader/src/loader/ModImpl.cpp index 37da6a7a..38f33736 100644 --- a/loader/src/loader/ModImpl.cpp +++ b/loader/src/loader/ModImpl.cpp @@ -669,12 +669,15 @@ static ModInfo getModImplInfo() { } } -void Loader::Impl::setupInternalMod() { +Mod* Loader::Impl::createInternalMod() { auto& mod = Mod::sharedMod<>; - if (mod) return; + if (mod) return mod; mod = new Mod(getModImplInfo()); + return mod; +} - auto setupRes = mod->m_impl->setup(); +void Loader::Impl::setupInternalMod() { + auto setupRes = Mod::get()->m_impl->setup(); if (!setupRes) { log::error("Failed to setup internal mod! ({})", setupRes.unwrapErr()); } diff --git a/loader/src/main.cpp b/loader/src/main.cpp index dc7fb615..f7a6d176 100644 --- a/loader/src/main.cpp +++ b/loader/src/main.cpp @@ -164,6 +164,17 @@ int geodeEntry(void* platformData) { return 1; } + // set up internal mod, settings and data + if (!LoaderImpl::get()->setup()) { + LoaderImpl::get()->setupInternalMod( + "Unable to Load Geode!", + "There was an unknown fatal error setting up " + "the internal mod and Geode can not be loaded." + ); + LoaderImpl::get()->reset(); + return 1; + } + // set up loader, load mods, etc. auto setupRes = LoaderImpl::get()->setup(); if (!setupRes) { From 394cb967330c020be09c0a1b5783727763e9467e Mon Sep 17 00:00:00 2001 From: altalk23 <45172705+altalk23@users.noreply.github.com> Date: Sat, 21 Jan 2023 19:56:01 +0300 Subject: [PATCH 2/2] fix silly entry --- loader/src/main.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/loader/src/main.cpp b/loader/src/main.cpp index f7a6d176..e4ce0ea5 100644 --- a/loader/src/main.cpp +++ b/loader/src/main.cpp @@ -165,8 +165,8 @@ int geodeEntry(void* platformData) { } // set up internal mod, settings and data - if (!LoaderImpl::get()->setup()) { - LoaderImpl::get()->setupInternalMod( + if (!LoaderImpl::get()->setupInternalMod()) { + LoaderImpl::get()->platformMessageBox( "Unable to Load Geode!", "There was an unknown fatal error setting up " "the internal mod and Geode can not be loaded." @@ -176,8 +176,7 @@ int geodeEntry(void* platformData) { } // set up loader, load mods, etc. - auto setupRes = LoaderImpl::get()->setup(); - if (!setupRes) { + if (!LoaderImpl::get()->setup()) { LoaderImpl::get()->platformMessageBox( "Unable to Load Geode!", "There was an unknown fatal error setting up "