Skip to content

Commit 1823a82

Browse files
committed
dev mode, other tweaks
1 parent 94a888f commit 1823a82

9 files changed

Lines changed: 93 additions & 65 deletions

File tree

mod.json

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
},
5858
"chances": {
5959
"type": "title",
60-
"name": "Joke Chances",
60+
"name": "Mod Chances",
6161
"description": "Change the chances of each effect happening."
6262
},
6363
"grief-chance": {
@@ -111,6 +111,23 @@
111111
"big-arrow-step": 20
112112
}
113113
},
114+
"freeze-chance": {
115+
"type": "int",
116+
"name": "Framerate Freeze Chance",
117+
"description": "<cj>Random 90%+ FPS Drop</c> - Chance of your game freezing after reaching 90% in a classic level.",
118+
"default": 10,
119+
"min": 0,
120+
"max": 100,
121+
"control": {
122+
"input": true,
123+
"slider": true,
124+
"slider-step": 1,
125+
"arrows": true,
126+
"arrow-step": 10,
127+
"big-arrows": true,
128+
"big-arrow-step": 20
129+
}
130+
},
114131
"sleepy-chance": {
115132
"type": "int",
116133
"name": "Sleep Chance",
@@ -303,7 +320,7 @@
303320
"name": "More Settings",
304321
"description": "Other settings you can change."
305322
},
306-
"developer-mode": {
323+
"dev-mode": {
307324
"type": "bool",
308325
"name": "Developer Mode",
309326
"description": "Shows extra information in the mod menu interface.",

src/hooks/GJBaseGameLayer/RandomMirror.cpp

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,21 @@ class $modify(RandomMirrorGJBaseGameLayer, GJBaseGameLayer) {
2222
// log::debug("flip buffer ended");
2323
};
2424

25+
void toggleFlipped(bool p0, bool p1) {
26+
m_fields->isFlipped = p0;
27+
log::debug("{}", m_fields->isFlipped ? "flipped" : "unflipped");
28+
29+
GJBaseGameLayer::toggleFlipped(p0, p1);
30+
};
31+
2532
void update(float p0) {
2633
auto rnd = Rand::tiny();
2734
// log::debug("gjbasegamelayer update chance {}", rnd);
2835

2936
if (m_fields->enabled) {
3037
if (!m_fields->inBuffer && rnd <= m_fields->chance) {
3138
if (auto playLayer = PlayLayer::get()) {
32-
// flip state
33-
if (!m_fields->isFlipped) {
34-
toggleFlipped(true, false); // bool 1 = flip, bool 2 = instant
35-
log::debug("flipped");
36-
37-
m_fields->isFlipped = true;
38-
} else {
39-
toggleFlipped(false, false);
40-
log::debug("unflipped");
41-
42-
m_fields->isFlipped = false;
43-
};
39+
toggleFlipped(!m_fields->isFlipped, false);
4440

4541
// Start 5s buffer to prevent immediate re-flip
4642
m_fields->inBuffer = true;

src/hooks/PlayLayer/CrashGame.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <HorribleIdeas.hpp>
33

44
#include <Geode/Geode.hpp>
5+
56
#include <Geode/modify/PlayLayer.hpp>
67

78
using namespace geode::prelude;

src/hooks/PlayLayer/ForceLevels.cpp

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,10 @@ class $modify(ForceLevelsPlayLayer, PlayLayer) {
2121
};
2222

2323
bool init(GJGameLevel * level, bool useReplay, bool dontCreateObjects) {
24-
if (!PlayLayer::init(level, useReplay, dontCreateObjects))
25-
return false;
24+
if (!PlayLayer::init(level, useReplay, dontCreateObjects)) return false;
2625

27-
if (m_fields->griefEnabled)
28-
LevelManager::DownloadGriefLevel();
29-
if (m_fields->congregEnabled)
30-
LevelManager::DownloadCongregLevel();
26+
if (m_fields->griefEnabled) LevelManager::DownloadGriefLevel();
27+
if (m_fields->congregEnabled) LevelManager::DownloadCongregLevel();
3128

3229
return true;
3330
};
@@ -37,10 +34,8 @@ class $modify(ForceLevelsPlayLayer, PlayLayer) {
3734

3835
// get back to grief
3936
if (m_fields->griefEnabled) {
40-
if (p1 == m_anticheatSpike && p0 && !p0->m_isDead)
41-
return;
42-
if (!m_fields->m_destroyingObject)
43-
m_fields->m_destroyingObject = p1;
37+
if (p1 == m_anticheatSpike && p0 && !p0->m_isDead) return;
38+
if (!m_fields->m_destroyingObject) m_fields->m_destroyingObject = p1;
4439

4540
// chance to play grief level
4641
if (rng <= m_fields->griefChance) {
@@ -55,17 +50,15 @@ class $modify(ForceLevelsPlayLayer, PlayLayer) {
5550
auto scene = PlayLayer::scene(griefLevel, m_useReplay, m_fields->m_dontCreateObjects);
5651

5752
CCDirector::get()->replaceScene(scene);
58-
5953
log::info("Switching to Grief level (105001928)");
60-
61-
return;
6254
} else if (griefLevel && !griefLevel->m_levelNotDownloaded) {
6355
log::debug("Already in grief level");
64-
}
56+
};
6557
} else {
6658
log::info("Grief jumpscare not triggered {}", m_fields->griefChance);
67-
}
68-
}
59+
};
60+
};
61+
6962
// congregation jumpscare
7063
if (m_fields->congregEnabled) {
7164
// 10% chance to play congregation level
@@ -81,17 +74,15 @@ class $modify(ForceLevelsPlayLayer, PlayLayer) {
8174
auto scene = PlayLayer::scene(congregLevel, m_useReplay, m_fields->m_dontCreateObjects);
8275

8376
CCDirector::get()->replaceScene(scene);
84-
8577
log::info("Switching to Congregation level (93437568)");
86-
return;
8778
} else if (congregLevel && !congregLevel->m_levelNotDownloaded) {
8879
log::debug("Already in congregation level");
89-
}
80+
};
9081
} else {
9182
log::info("Congregation jumpscare not triggered {}", m_fields->congregChance);
92-
}
93-
}
83+
};
84+
};
9485

9586
PlayLayer::destroyPlayer(p0, p1);
96-
}
87+
};
9788
};

src/hooks/PlayLayer/FreezeFPS.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,17 @@ using namespace horrible;
1111
class $modify(FreezePlayLayer, PlayLayer) {
1212
struct Fields {
1313
bool enabled = HorribleIdeas::get("freeze");
14+
int chance = HorribleIdeas::getChance("freeze");
1415
};
1516

1617
bool init(GJGameLevel * level, bool useReplay, bool dontCreateObjects) {
17-
if (!PlayLayer::init(level, useReplay, dontCreateObjects))
18-
return false;
18+
if (!PlayLayer::init(level, useReplay, dontCreateObjects)) return false;
1919

2020
if (m_fields->enabled) {
21-
auto rnd = Rand::fast();
2221
if (auto gm = GameManager::sharedState()) {
23-
if (rnd % 100 < 10) { // 10% chance
24-
capFPS(1.f);
25-
}
26-
}
22+
auto rnd = Rand::fast();
23+
if (rnd % 100 < m_fields->chance) capFPS(1.f);
24+
};
2725
} else {
2826
log::warn("Random freezing at 90% is disabled");
2927
};
@@ -60,8 +58,7 @@ class $modify(FreezePlayLayer, PlayLayer) {
6058
gm->setGameVariable("0116", true);
6159

6260
float interval = 1.f / value; // cap fps to 60
63-
if (interval <= 0.0f || interval > 1.0f)
64-
interval = 1.f / 60.f; // fallback to 60 FPS if invalid
61+
if (interval <= 0.0f || interval > 1.0f) interval = 1.f / 60.f; // fallback to 60 FPS if invalid
6562

6663
CCDirector::sharedDirector()->setAnimationInterval(interval);
6764
log::debug("cap fps to {} (interval {})", value, interval);

src/hooks/PlayLayer/OxygenBar.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class $modify(OxygenBarPlayLayer, PlayLayer) {
2121
Ref<CCSprite> m_oxygenBar;
2222
CCSprite* m_oxygenBarFill;
2323
};
24+
2425
bool init(GJGameLevel * level, bool useReplay, bool dontCreateObjects) {
2526
if (!PlayLayer::init(level, useReplay, dontCreateObjects)) return false;
2627

@@ -79,6 +80,7 @@ class $modify(OxygenBarPlayLayer, PlayLayer) {
7980
} else {
8081
log::warn("Oxygen meter is disabled");
8182
};
83+
8284
return true;
8385
};
8486

src/hooks/PlayLayer/UpsideDown.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@ class $modify(ForceLevelsPlayLayer, PlayLayer) {
1515
};
1616

1717
bool init(GJGameLevel * level, bool useReplay, bool dontCreateObjects) {
18-
if (!PlayLayer::init(level, useReplay, dontCreateObjects))
19-
return false;
18+
if (!PlayLayer::init(level, useReplay, dontCreateObjects)) return false;
2019

2120
if (horribleMod && m_fields->enabled) {
2221
float rng = Rand::fast(); // random float between 0 and 100
2322
log::debug("scene rng {} chance {}", rng, m_fields->chance);
23+
2424
if (rng <= m_fields->chance) {
2525
log::debug("setting scene upside down");
2626
setRotation(-180.f);
27-
}
28-
}
27+
};
28+
};
2929

3030
return true;
31-
}
31+
};
3232
};

src/menu/HorribleMenuPopup.cpp

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ void filterOptionsByTier(ScrollLayer* optionsScrollLayer, const std::vector<Opti
2727
{
2828
optionsScrollLayer->m_contentLayer->getScaledContentWidth(),
2929
32.f
30-
},
31-
id, name, desc, silly, restart
30+
}, id, name, desc, silly, restart
3231
)) optionsScrollLayer->m_contentLayer->addChild(modOption);
3332
};
3433
};
@@ -49,6 +48,7 @@ bool HorribleMenuPopup::setup() {
4948
optionScrollBg->setPosition({ mainLayerSize.width / 2.f - 80.f, mainLayerSize.height / 2.f - 10.f });
5049
optionScrollBg->setContentSize({ mainLayerSize.width / 1.5f - 25.f, mainLayerSize.height - 45.f });
5150
optionScrollBg->setOpacity(50);
51+
5252
m_mainLayer->addChild(optionScrollBg);
5353

5454
// add a list button background
@@ -57,6 +57,7 @@ bool HorribleMenuPopup::setup() {
5757
listBtnBg->setPosition({ mainLayerSize.width - (mainLayerSize.width / 2.f - 25.f) + 115.f, mainLayerSize.height / 2.f - 10.f });
5858
listBtnBg->setContentSize({ mainLayerSize.width / 3.f, mainLayerSize.height - 45.f });
5959
listBtnBg->setOpacity(50);
60+
6061
m_mainLayer->addChild(listBtnBg);
6162

6263
// filter buttons :o
@@ -77,18 +78,20 @@ bool HorribleMenuPopup::setup() {
7778

7879
float btnY = 0.f;
7980
for (const auto& btn : btns) {
80-
auto normalBS = ButtonSprite::create(btn.label, 0, false, "bigFont.fnt", "GJ_button_01.png", 0, 0.8f);
81-
if (normalBS && normalBS->m_label) {
81+
if (auto normalBS = ButtonSprite::create(btn.label, 0, false, "bigFont.fnt", "GJ_button_01.png", 0, 0.8f)) {
8282
normalBS->m_label->setColor(btn.color);
8383
normalBS->setScale(.8f);
84-
}
8584

86-
auto filterBtn = CCMenuItemSpriteExtra::create(normalBS, this, menu_selector(HorribleMenuPopup::filterTierCallback));
87-
filterBtn->setTag(static_cast<int>(btn.tier));
88-
filterBtn->setPosition({ 0.f, btnY });
89-
filterMenu->addChild(filterBtn);
90-
btnY -= 40.f;
91-
}
85+
auto filterBtn = CCMenuItemSpriteExtra::create(normalBS, this, menu_selector(HorribleMenuPopup::filterTierCallback));
86+
filterBtn->setTag(static_cast<int>(btn.tier));
87+
filterBtn->setPosition({ 0.f, btnY });
88+
filterMenu->addChild(filterBtn);
89+
90+
btnY -= 40.f;
91+
} else {
92+
log::error("Failed to create filter button sprite");
93+
};
94+
};
9295

9396
m_mainLayer->addChild(filterMenu);
9497

@@ -120,12 +123,14 @@ bool HorribleMenuPopup::setup() {
120123
CircleBaseColor::Green,
121124
CircleBaseSize::Medium);
122125
modSettingsBtnSprite->setScale(0.75f);
126+
123127
auto modSettingsBtn = CCMenuItemSpriteExtra::create(
124128
modSettingsBtnSprite,
125129
this,
126130
menu_selector(HorribleMenuPopup::openModSettings));
127131
modSettingsMenu->setPosition({ 0.f, 0.f });
128132
modSettingsMenu->addChild(modSettingsBtn);
133+
129134
m_mainLayer->addChild(modSettingsMenu);
130135

131136
auto safeModeLabel = CCLabelBMFont::create("Safe Mode: INACTIVE", "bigFont.fnt");
@@ -143,21 +148,22 @@ bool HorribleMenuPopup::setup() {
143148
};
144149

145150
m_mainLayer->addChild(safeModeLabel, 100);
151+
146152
return true;
147-
}
153+
};
148154

149155
void HorribleMenuPopup::filterTierCallback(CCObject* sender) {
150156
auto filterBtn = typeinfo_cast<CCMenuItemSpriteExtra*>(sender);
151-
if (!filterBtn)
152-
return;
157+
if (!filterBtn) return;
158+
153159
SillyTier tier = static_cast<SillyTier>(filterBtn->getTag());
154160

155161
// Toggle: clicking same button disables filter
156162
if (s_selectedTier == tier) {
157163
s_selectedTier = SillyTier::None;
158164
} else {
159165
s_selectedTier = tier;
160-
}
166+
};
161167

162168
// Find scroll layer and options
163169
auto optionsScrollLayer = static_cast<ScrollLayer*>(m_mainLayer->getChildByID("scrollLayer"));

src/menu/toggle/ModOption.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,24 @@ bool ModOption::init(CCSize const& size, std::string id, std::string name, std::
9494

9595
addChild(nameLabel);
9696

97+
if (horribleMod->getSettingValue<bool>("dev-mode")) {
98+
auto idLabel = CCLabelBMFont::create(
99+
m_modID.c_str(),
100+
"chatFont.fnt",
101+
getContentSize().width - 20.f,
102+
kCCTextAlignmentLeft
103+
);
104+
idLabel->setID("id");
105+
idLabel->setLineBreakWithoutSpace(true);
106+
idLabel->setPosition({ x, yCenter - 10.f });
107+
idLabel->setAnchorPoint({ 0.f, 0.5f });
108+
idLabel->setColor({ 0, 0, 0 });
109+
idLabel->setOpacity(200);
110+
idLabel->setScale(0.5f);
111+
112+
addChild(idLabel);
113+
};
114+
97115
x += nameLabel->getScaledContentSize().width + 15.f;
98116

99117
auto descBtnSprite = CCSprite::createWithSpriteFrameName("GJ_infoIcon_001.png");

0 commit comments

Comments
 (0)