From 6e6b3c248dbf31ec4cc4cae606d96693ed555493 Mon Sep 17 00:00:00 2001 From: BeatACVR <75857504+BeatACVR@users.noreply.github.com> Date: Fri, 17 Oct 2025 18:31:52 -0500 Subject: [PATCH] add 'Download Mods Here' message when the user hasnt opened the geode menu before (and hasnt installed any mods) theyll get a message on the main menu with an arrow pointing to the geode icon that says "Download mods here" --- loader/resources/download-mods-here.png | Bin 0 -> 9951 bytes loader/src/hooks/MenuLayer.cpp | 14 ++++++++++++++ loader/src/ui/mods/ModsLayer.cpp | 2 ++ 3 files changed, 16 insertions(+) create mode 100644 loader/resources/download-mods-here.png diff --git a/loader/resources/download-mods-here.png b/loader/resources/download-mods-here.png new file mode 100644 index 0000000000000000000000000000000000000000..8f6269296e9099724c2d3222c3f6c67a0e10e906 GIT binary patch literal 9951 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� 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 literal 0 HcmV?d00001 diff --git a/loader/src/hooks/MenuLayer.cpp b/loader/src/hooks/MenuLayer.cpp index 53184149b..f2a47e23c 100644 --- a/loader/src/hooks/MenuLayer.cpp +++ b/loader/src/hooks/MenuLayer.cpp @@ -85,6 +85,20 @@ struct CustomMenuLayer : Modify { } } + // show "download mods here" tip if the geode menu hasnt ever been opened and there arent mods already installed + if (!Mod::get()->getSavedValue("has-used-geode-before") && Loader::get()->getAllMods().size() == 1) { + if (auto bottomMenu = this->getChildByID("bottom-menu")) { + auto geodeBtn = bottomMenu->getChildByID("geode-button"_spr); + + if (auto downloadModsHereSpr = CCSprite::createWithSpriteFrameName("download-mods-here.png"_spr)) { + downloadModsHereSpr->setID("download-mods-here"_spr); + downloadModsHereSpr->setPosition(this->convertToNodeSpace(geodeBtn->convertToWorldSpace(CCPointZero) + CCPoint(75.f, 55.f))); + downloadModsHereSpr->setScale(0.8f); + this->addChild(downloadModsHereSpr); + } + } + } + // show if some mods failed to load if (Loader::get()->getLoadProblems().size()) { static bool shownProblemPopup = false; diff --git a/loader/src/ui/mods/ModsLayer.cpp b/loader/src/ui/mods/ModsLayer.cpp index 5c824812a..414595b2a 100644 --- a/loader/src/ui/mods/ModsLayer.cpp +++ b/loader/src/ui/mods/ModsLayer.cpp @@ -104,6 +104,8 @@ bool ModsStatusNode::init() { return ListenerResult::Propagate; }); + Mod::get()->setSavedValue("has-used-geode-before", true); + this->updateState(); return true;