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 dc639339..b2a1bb79 100644 --- a/loader/src/loader/ModImpl.cpp +++ b/loader/src/loader/ModImpl.cpp @@ -670,8 +670,17 @@ static ModInfo getModImplInfo() { } } -void Loader::Impl::setupInternalMod() { +Mod* Loader::Impl::createInternalMod() { auto& mod = Mod::sharedMod<>; - if (mod) return; - mod = new Mod(getModImplInfo()); -} \ No newline at end of file + if (!mod) { + mod = new Mod(getModImplInfo()); + } + return mod; +} + +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 7babfc83..9e063073 100644 --- a/loader/src/main.cpp +++ b/loader/src/main.cpp @@ -176,9 +176,19 @@ int geodeEntry(void* platformData) { return 1; } + // set up internal mod, settings and data + 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." + ); + LoaderImpl::get()->reset(); + return 1; + } + // 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 "