summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalkierian <malkierian@gmail.com>2026-04-06 18:07:20 -0700
committerGitHub <noreply@github.com>2026-04-07 01:07:20 +0000
commit876d512a4beb0d6bd0d3eb1181f9392ee494b86e (patch)
tree6abe3856c81a0fcb45c07292b72e131aabb07d97
parent978a2192131ec8de8793da10d515a12a7c4590d5 (diff)
Fix Skip Planting Beans crash (#6463)
Move code to set beans as planted after getting the bean pack to rando item give handler.
-rw-r--r--soh/soh/Enhancements/randomizer/hook_handlers.cpp48
-rw-r--r--soh/soh/Enhancements/randomizer/randomizer.cpp45
2 files changed, 48 insertions, 45 deletions
diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp
index 340aad287..04f9fc80e 100644
--- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp
+++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp
@@ -446,6 +446,54 @@ void RandomizerOnItemReceiveHandler(GetItemEntry receivedItemEntry) {
randomizerQueuedItemEntry = GET_ITEM_NONE;
}
+ if (receivedItemEntry.modIndex == MOD_RANDOMIZER && receivedItemEntry.getItemId == RG_MAGIC_BEAN_PACK) {
+ if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SKIP_PLANTING_BEANS)) {
+ gSaveContext.sceneFlags[SCENE_DEATH_MOUNTAIN_CRATER].swch |= (1 << 3);
+ if (gPlayState->sceneNum == SCENE_DEATH_MOUNTAIN_CRATER) {
+ Flags_SetSwitch(gPlayState, 3);
+ }
+ gSaveContext.sceneFlags[SCENE_DEATH_MOUNTAIN_TRAIL].swch |= (1 << 6);
+ if (gPlayState->sceneNum == SCENE_DEATH_MOUNTAIN_TRAIL) {
+ Flags_SetSwitch(gPlayState, 6);
+ }
+ gSaveContext.sceneFlags[SCENE_DESERT_COLOSSUS].swch |= (1 << 24);
+ if (gPlayState->sceneNum == SCENE_DESERT_COLOSSUS) {
+ Flags_SetSwitch(gPlayState, 24);
+ }
+ gSaveContext.sceneFlags[SCENE_GERUDO_VALLEY].swch |= (1 << 3);
+ if (gPlayState->sceneNum == SCENE_GERUDO_VALLEY) {
+ Flags_SetSwitch(gPlayState, 3);
+ }
+ gSaveContext.sceneFlags[SCENE_GRAVEYARD].swch |= (1 << 3);
+ if (gPlayState->sceneNum == SCENE_GRAVEYARD) {
+ Flags_SetSwitch(gPlayState, 3);
+ }
+ gSaveContext.sceneFlags[SCENE_KOKIRI_FOREST].swch |= (1 << 9);
+ if (gPlayState->sceneNum == SCENE_KOKIRI_FOREST) {
+ Flags_SetSwitch(gPlayState, 9);
+ }
+ gSaveContext.sceneFlags[SCENE_LAKE_HYLIA].swch |= (1 << 1);
+ if (gPlayState->sceneNum == SCENE_LAKE_HYLIA) {
+ Flags_SetSwitch(gPlayState, 1);
+ }
+ gSaveContext.sceneFlags[SCENE_LOST_WOODS].swch |= (1 << 4) | (1 << 18);
+ if (gPlayState->sceneNum == SCENE_LOST_WOODS) {
+ Flags_SetSwitch(gPlayState, 4);
+ Flags_SetSwitch(gPlayState, 18);
+ }
+ gSaveContext.sceneFlags[SCENE_ZORAS_RIVER].swch |= (1 << 3);
+ if (gPlayState->sceneNum == SCENE_ZORAS_RIVER) {
+ Flags_SetSwitch(gPlayState, 3);
+ }
+ ObjBean* bean = (ObjBean*)Actor_Find(&gPlayState->actorCtx, ACTOR_OBJ_BEAN, ACTORCAT_BG);
+ if (bean != nullptr) {
+ Flags_SetSwitch(gPlayState, bean->dyna.actor.params & 0x3F);
+ func_80B8FE00(bean);
+ }
+ AMMO(ITEM_BEAN) = 0;
+ }
+ }
+
if (receivedItemEntry.modIndex == MOD_NONE &&
(receivedItemEntry.itemId == ITEM_HEART_PIECE || receivedItemEntry.itemId == ITEM_HEART_PIECE_2 ||
receivedItemEntry.itemId == ITEM_HEART_CONTAINER)) {
diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp
index aa3a05dff..924d22ab6 100644
--- a/soh/soh/Enhancements/randomizer/randomizer.cpp
+++ b/soh/soh/Enhancements/randomizer/randomizer.cpp
@@ -3867,51 +3867,6 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
if (INV_CONTENT(ITEM_BEAN) == ITEM_NONE) {
INV_CONTENT(ITEM_BEAN) = ITEM_BEAN;
AMMO(ITEM_BEAN) = 10;
- if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SKIP_PLANTING_BEANS)) {
- gSaveContext.sceneFlags[SCENE_DEATH_MOUNTAIN_CRATER].swch |= (1 << 3);
- if (gPlayState->sceneNum == SCENE_DEATH_MOUNTAIN_CRATER) {
- Flags_SetSwitch(gPlayState, 3);
- }
- gSaveContext.sceneFlags[SCENE_DEATH_MOUNTAIN_TRAIL].swch |= (1 << 6);
- if (gPlayState->sceneNum == SCENE_DEATH_MOUNTAIN_TRAIL) {
- Flags_SetSwitch(gPlayState, 6);
- }
- gSaveContext.sceneFlags[SCENE_DESERT_COLOSSUS].swch |= (1 << 24);
- if (gPlayState->sceneNum == SCENE_DESERT_COLOSSUS) {
- Flags_SetSwitch(gPlayState, 24);
- }
- gSaveContext.sceneFlags[SCENE_GERUDO_VALLEY].swch |= (1 << 3);
- if (gPlayState->sceneNum == SCENE_GERUDO_VALLEY) {
- Flags_SetSwitch(gPlayState, 3);
- }
- gSaveContext.sceneFlags[SCENE_GRAVEYARD].swch |= (1 << 3);
- if (gPlayState->sceneNum == SCENE_GRAVEYARD) {
- Flags_SetSwitch(gPlayState, 3);
- }
- gSaveContext.sceneFlags[SCENE_KOKIRI_FOREST].swch |= (1 << 9);
- if (gPlayState->sceneNum == SCENE_KOKIRI_FOREST) {
- Flags_SetSwitch(gPlayState, 9);
- }
- gSaveContext.sceneFlags[SCENE_LAKE_HYLIA].swch |= (1 << 1);
- if (gPlayState->sceneNum == SCENE_LAKE_HYLIA) {
- Flags_SetSwitch(gPlayState, 1);
- }
- gSaveContext.sceneFlags[SCENE_LOST_WOODS].swch |= (1 << 4) | (1 << 18);
- if (gPlayState->sceneNum == SCENE_LOST_WOODS) {
- Flags_SetSwitch(gPlayState, 4);
- Flags_SetSwitch(gPlayState, 18);
- }
- gSaveContext.sceneFlags[SCENE_ZORAS_RIVER].swch |= (1 << 3);
- if (gPlayState->sceneNum == SCENE_ZORAS_RIVER) {
- Flags_SetSwitch(gPlayState, 3);
- }
- ObjBean* bean = (ObjBean*)Actor_Find(&gPlayState->actorCtx, ACTOR_OBJ_BEAN, ACTORCAT_BG);
- if (bean != nullptr) {
- Flags_SetSwitch(gPlayState, bean->dyna.actor.params & 0x3F);
- func_80B8FE00(bean);
- }
- AMMO(ITEM_BEAN) = 0;
- }
}
break;
case RG_DOUBLE_DEFENSE: