summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Hoey <121978037+A-Green-Spoon@users.noreply.github.com>2025-08-25 15:03:23 -0400
committerGitHub <noreply@github.com>2025-08-25 12:03:23 -0700
commitd8453b2b68f5395f9bdf5279701db59c99b6c274 (patch)
tree394da442b3eb9f4792763a167c6b252043fdb972
parent6e6f8dcc9d16b252fd88a224e8b5617fc70e6a57 (diff)
Prevent MQ Spirit softlock with increased crawl speed (#5667)
* disable crawl speed increase if MQ Spirit boulder exists * bring max speed back to 5
-rw-r--r--soh/soh/Enhancements/TimeSavers/CrawlSpeed.cpp14
-rw-r--r--soh/soh/SohGui/SohMenuEnhancements.cpp2
2 files changed, 13 insertions, 3 deletions
diff --git a/soh/soh/Enhancements/TimeSavers/CrawlSpeed.cpp b/soh/soh/Enhancements/TimeSavers/CrawlSpeed.cpp
index 896f07973..7ada74e98 100644
--- a/soh/soh/Enhancements/TimeSavers/CrawlSpeed.cpp
+++ b/soh/soh/Enhancements/TimeSavers/CrawlSpeed.cpp
@@ -1,4 +1,5 @@
#include <libultraship/bridge.h>
+#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ShipInit.hpp"
#include "global.h"
@@ -102,8 +103,17 @@ void CrawlSpeed_Register() {
COND_VB_SHOULD(VB_CRAWL_SPEED_INCREASE, shouldRegister, {
Player* player = GET_PLAYER(gPlayState);
- IncreaseCrawlSpeed(player, gPlayState);
- *should = false;
+ bool isMQ = ResourceMgr_IsGameMasterQuest();
+ bool boulderExists = !Flags_GetSwitch(gPlayState, 5);
+ bool excludeSpiritMQBoulder =
+ (gPlayState->sceneNum == SCENE_SPIRIT_TEMPLE && player->actor.world.pos.z < -545.0f &&
+ player->actor.world.pos.z > -630.0f && isMQ && boulderExists);
+ if (excludeSpiritMQBoulder) {
+ *should = true;
+ } else {
+ IncreaseCrawlSpeed(player, gPlayState);
+ *should = false;
+ }
});
}
diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp
index f7b571118..6a5585f95 100644
--- a/soh/soh/SohGui/SohMenuEnhancements.cpp
+++ b/soh/soh/SohGui/SohMenuEnhancements.cpp
@@ -468,7 +468,7 @@ void SohMenu::AddMenuEnhancements() {
.Options(IntSliderOptions().Min(0).Max(5).DefaultValue(0).Format("+%d"));
AddWidget(path, "Crawl Speed %dx", WIDGET_CVAR_SLIDER_INT)
.CVar(CVAR_ENHANCEMENT("CrawlSpeed"))
- .Options(IntSliderOptions().Min(1).Max(4).DefaultValue(1).Format("%dx"));
+ .Options(IntSliderOptions().Min(1).Max(5).DefaultValue(1).Format("%dx"));
AddWidget(path, "Exclude Glitch-Aiding Crawlspaces", WIDGET_CVAR_CHECKBOX)
.CVar(CVAR_ENHANCEMENT("GlitchAidingCrawlspaces"))
.PreFunc([](WidgetInfo& info) { info.isHidden = CVarGetInteger(CVAR_ENHANCEMENT("CrawlSpeed"), 0) == 1; })