summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordjevangelia <263709373+djevangelia@users.noreply.github.com>2026-07-13 17:02:11 +0200
committerGitHub <noreply@github.com>2026-07-13 15:02:11 +0000
commitd1d6a564e57a80f6f091b036e325516cffb8b009 (patch)
tree600aa3c621901e4bb6cce87f7edeebd16885df55
parent80fb8a8aa58c885327734915b4396c1d336fb36d (diff)
Bugfix, grotto boulder block respawn from water voidout (#6854)
-rw-r--r--soh/soh/Enhancements/randomizer/hook_handlers.cpp4
-rw-r--r--soh/src/overlays/actors/ovl_player_actor/z_player.c4
2 files changed, 7 insertions, 1 deletions
diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp
index 3225bd0ff..bed8946b2 100644
--- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp
+++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp
@@ -2790,7 +2790,8 @@ f32 triforcePieceScale;
void RandomizerOnPlayerUpdateHandler() {
if ((GET_PLAYER(gPlayState)->stateFlags1 & PLAYER_STATE1_IN_WATER) && !Flags_GetRandomizerInf(RAND_INF_CAN_SWIM) &&
- CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS) != EQUIP_VALUE_BOOTS_IRON) {
+ CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS) != EQUIP_VALUE_BOOTS_IRON &&
+ gPlayState->transitionTrigger == TRANS_TRIGGER_OFF) {
// if you void out in water temple without swim you get instantly kicked out to prevent softlocks
if (gPlayState->sceneNum == SCENE_WATER_TEMPLE) {
GameInteractor::RawAction::TeleportPlayer(
@@ -2816,6 +2817,7 @@ void RandomizerOnPlayerUpdateHandler() {
gSaveContext.respawnFlag = 0;
} else {
Play_TriggerVoidOut(gPlayState);
+ Grotto_ForceGrottoReturnOnSpecialEntrance();
}
}
}
diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c
index 6ef4e4648..7ba300b63 100644
--- a/soh/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c
@@ -10677,6 +10677,10 @@ void Player_StartMode_Door(PlayState* play, Player* this) {
}
void Player_StartMode_Grotto(PlayState* play, Player* this) {
+ // If can respawn from water to grotto, need to set normal speed factor for the jump
+ if (IS_RANDO) {
+ sWaterSpeedFactor = 1.0f;
+ }
func_808389E8(this, &gPlayerAnim_link_normal_jump, 12.0f, play);
Player_SetupAction(play, this, Player_Action_8084F9C0, 0);
this->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE;