Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# FakeGDMod
This is where she makes a mod.
This is where he makes a mod.

<img src="logo.png" width="150" alt="the mod's logo" />

Expand Down
4 changes: 3 additions & 1 deletion changelog.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# FakeGDMod Changelog
## v1.0.2 (2025-07-30)
- Comments are now displayed as moderators
## v1.0.1 (2025-01-08)
- Geode v4.1.0 support
- Geometry Dash 2.207 support
- macOS support!
## v1.0.0 (2024-09-08)
- Initial release
- Initial release
10 changes: 5 additions & 5 deletions mod.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"geode": "4.1.2",
"geode": "4.6.3",
"gd": {
"win": "2.2074",
"android": "2.2074",
Expand All @@ -14,19 +14,19 @@
"settings": {
"modType": {
"name": "Moderator Type",
"description": "you can choose 1 = Moderator, 2 = Elder Moderator, 3 = Leaderboard Moderator",
"description": "you can choose 1 = Moderator, 2 = Elder Moderator, 3 = Leaderboard Moderator, 4 = No Moderator",
"type": "int",
"default": 1,
"default": 4,
"min": 1,
"max": 3
"max": 4
}
},
"links": {
"source": "https://github.com/iArtie/FakeGDMod",
"community": "https://discord.gg/gXg8w4xJDA"
},
"name": "FakeGDMod",
"version": "v1.0.1",
"version": "v1.0.2",
"developer": "BitZ",
"description": "A cool mod that make you a fake moderator"
}
55 changes: 44 additions & 11 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ using namespace geode::prelude;
#include <Geode/modify/RateStarsLayer.hpp>
#include <Geode/modify/RateDemonLayer.hpp>
#include <Geode/modify/LevelInfoLayer.hpp>
#include <Geode/binding/GJAccountManager.hpp>
#include <Geode/binding/GJUserScore.hpp>
#include <Geode/modify/CommentCell.hpp>
#include <Geode/binding/GJComment.hpp>
#include <Geode/modify/LevelInfoLayer.hpp>


template<typename Base, typename T>
inline bool instanceof(const T* ptr) {
Expand Down Expand Up @@ -33,10 +39,12 @@ class modCheck
if (Mod::get()->getSettingValue<int64_t>("modType") == 1)
{
Check->showSuccessMessage("Success! Moderator access granted.");
Mod::get()->setSavedValue<bool>("alreadyHasMod", true);
}
if (Mod::get()->getSettingValue<int64_t>("modType") == 2)
{
Check->showSuccessMessage("Success! Elder Moderator \n access granted.");
Mod::get()->setSavedValue<bool>("alreadyHasMod", true);
}
}
}
Expand Down Expand Up @@ -71,36 +79,61 @@ class $modify(SupportLayer) {
void onRequestAccess(CCObject* sender) {
auto GM = GameManager::sharedState();

if (Mod::get()->getSettingValue<int64_t>("modType") == 3)
if (Mod::get()->getSavedValue<bool>("alreadyHasMod", false)) {
FLAlertLayer::create("Granted", "This account has access to the rating suggestion system.", "OK")->show();
} else {
if (Mod::get()->getSettingValue<int64_t>("modType") >= 3)
{
SupportLayer::onRequestAccess(sender);
GM->m_hasRP = 0;
}
else
{
{
UploadActionPopup* popup = UploadActionPopup::create(nullptr, "Loading...");
popup->show();
popup->runAction((CCSequence::create(
CCDelayTime::create(1),
CCDelayTime::create(0.2),
CCCallFunc::create(this, callfunc_selector(modCheck::DelayMod)),
nullptr
)));
GM->m_hasRP = Mod::get()->getSettingValue<int64_t>("modType");
}
}
}
};


class $modify(CommentCell) {
void loadFromComment(GJComment* p0) {
auto commentAccID = p0->m_accountID;
if (GJAccountManager::sharedState()->m_accountID == commentAccID) {
p0->m_modBadge = Mod::get()->getSettingValue<int64_t>("modType");
}
CommentCell::loadFromComment(p0);
}
virtual void draw() {
auto commentAccID = this->m_comment->m_accountID;
if (GJAccountManager::sharedState()->m_accountID == commentAccID) {
this->m_comment->m_modBadge = Mod::get()->getSettingValue<int64_t>("modType");
}
CommentCell::draw();
}
};

class $modify(ProfilePage)
{
void loadPageFromUserInfo(GJUserScore* p0)
{
int type = Mod::get()->getSettingValue<int64_t>("modType");
if (this->m_ownProfile)
{
switch(type) {
case 1: p0->m_modBadge = type; break;
case 2: p0->m_modBadge = type; break;
case 3: p0->m_modBadge = type; break;
if (Mod::get()->getSavedValue<bool>("alreadyHasMod", false)) {
if ((this->m_ownProfile) || (this->m_score && this->m_score->m_userID == p0->m_userID))
{
switch(type) {
case 1: p0->m_modBadge = type; break;
case 2: p0->m_modBadge = type; break;
case 3: p0->m_modBadge = type; break;
default: p0->m_modBadge = 0; break;
}
}
}
ProfilePage::loadPageFromUserInfo(p0);
Expand All @@ -117,7 +150,7 @@ class $modify(RateStarsLayer)
UploadActionPopup* popup = UploadActionPopup::create(nullptr, "Sending rating...");
popup->show();
popup->runAction((CCSequence::create(
CCDelayTime::create(1),
CCDelayTime::create(0.1),
CCCallFunc::create(this, callfunc_selector(modCheck::DelayRate)),
nullptr
)));
Expand All @@ -135,7 +168,7 @@ class $modify(RateDemonLayer)
UploadActionPopup* popup = UploadActionPopup::create(nullptr, "Sending rating...");
popup->show();
popup->runAction((CCSequence::create(
CCDelayTime::create(1),
CCDelayTime::create(0.1),
CCCallFunc::create(this, callfunc_selector(modCheck::DelayRate)),
nullptr
)));
Expand Down