Skip to content

Commit

Permalink
fix level stats saving and the tower back click page id
Browse files Browse the repository at this point in the history
  • Loading branch information
user95401 committed Jul 19, 2024
1 parent f33ad45 commit 312443f
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 7 deletions.
2 changes: 1 addition & 1 deletion mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"win": "2.206",
"android": "*"
},
"version": "v7.0.0-beta.10",
"version": "v7.0.0-beta.11",
"id": "user95401.mainlevelseditor",
"name": "Main Levels Editor",
"developer": "user95401",
Expand Down
4 changes: 4 additions & 0 deletions src/_main.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ using namespace geode::prelude;
//lol
#define SETTING(type, key_name) Mod::get()->getSettingValue<type>(key_name)

#define MEMBER_BY_OFFSET(type, class, offset) *reinterpret_cast<type*>(reinterpret_cast<uintptr_t>(class) + offset)
template<typename T, typename U> constexpr size_t OFFSET_BY_MEMBER(U T::* member) { return (char*)&((T*)nullptr->*member) - (char*)nullptr; }

inline auto levels_path = Mod::get()->getConfigDir() / "levels";
inline auto levels_meta_path = levels_path / "_meta";
inline auto songs_path = Mod::get()->getConfigDir() / "songs";
Expand Down Expand Up @@ -1214,6 +1217,7 @@ namespace mle_ui {
if (not p1) return;
applyInputs();
//save json
m_level->m_levelType = GJLevelType::Local;
mle_leveltools::updateLevelDataAndMetaFiles(m_level->m_levelString, m_level);
//call custom func
this->m_onSave();
Expand Down
33 changes: 29 additions & 4 deletions src/level_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,19 @@ using namespace mle_leveltools;
#include <Geode/modify/PlayLayer.hpp>
class $modify(PlayLayer) {
$override bool init(GJGameLevel * level, bool useReplay, bool dontCreateObjects) {
auto oldID = level->m_levelID.value();
level->m_levelID = 999; //temp "Load Failed" bypass
auto levelType = level->m_levelType;
level->m_levelType = GJLevelType::Saved; //temp "Load Failed" bypass
auto rtn = PlayLayer::init(level, useReplay, dontCreateObjects);
level->m_levelID = oldID;
level->m_levelType = levelType;
return rtn;
}
$override void resetLevel() {
PlayLayer::resetLevel();
//fuck
auto lm = GameLevelManager::sharedState();
lm->m_mainLevels->setObject(m_level, lm->getLevelKey(m_level->m_levelID.value()));
GameManager::get()->save();
};
};

#include <Geode/modify/LocalLevelManager.hpp>
Expand Down Expand Up @@ -41,11 +48,29 @@ class $modify(LevelTools) {
level->m_levelString = LocalLevelManager::get()->getMainLevelString(levelID);
}
level->m_levelID = levelID;
//progress
auto manager = GameLevelManager::sharedState();
if (GJGameLevel* lvlFromDict = (GJGameLevel*)manager->m_mainLevels->objectForKey(manager->getLevelKey(levelID))) {
level->m_attempts = lvlFromDict->m_attempts;
level->m_jumps = lvlFromDict->m_jumps;
level->m_clicks = lvlFromDict->m_clicks;
level->m_attemptTime = lvlFromDict->m_attemptTime;
level->m_chk = lvlFromDict->m_chk;
level->m_isChkValid = lvlFromDict->m_isChkValid;
level->m_isCompletionLegitimate = lvlFromDict->m_isCompletionLegitimate;
level->m_normalPercent = lvlFromDict->m_normalPercent;
level->m_orbCompletion = lvlFromDict->m_orbCompletion;
level->m_newNormalPercent2 = lvlFromDict->m_newNormalPercent2;
level->m_practicePercent = lvlFromDict->m_practicePercent;
level->m_bestTime = lvlFromDict->m_bestTime;
level->m_bestPoints = lvlFromDict->m_bestPoints;
level->m_k111 = lvlFromDict->m_k111;
};
//json meta
updateLevelByJson(level);
return level;
};
$override static bool NOT_NOW___verifyLevelIntegrity(gd::string p0, int p1) {
$override static bool /*NOT_NOW___*/verifyLevelIntegrity(int p0, int p1) {
//hooking error lol
return 1;
}
Expand Down
6 changes: 4 additions & 2 deletions src/level_listing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,11 @@ class $modify(LevelPage) {
class $modify(LevelAreaLayerExt, CCLayer) {
void onBack(CCObject*) {
GameManager::get()->playMenuMusic();
auto levelsCount = SETTING(int64_t, "max_id");
auto specialLevels = string::explode(",", SETTING(std::string, "special_ids"));
auto specialLevelsCount = specialLevels[0].empty() ? 0 : specialLevels.size();
switchToScene(LevelSelectLayer::create(
SETTING(int64_t, "max_id")
+ string::explode(",", SETTING(std::string, "special_ids")).size()
levelsCount + specialLevelsCount
));
}
auto customSetupSch(float) {
Expand Down

0 comments on commit 312443f

Please sign in to comment.