From 24749d88668dc0eaed75be6a5803f465a6d6a7ae Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Mon, 14 Jul 2025 00:48:54 +0000 Subject: [PATCH 1/2] more perm flags --- .../Enhancements/randomizer/hook_handlers.cpp | 107 +++++++++++++++--- .../Enhancements/randomizer/randomizer_inf.h | 8 ++ 2 files changed, 100 insertions(+), 15 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index d73cebca7..de2f07fa4 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -259,16 +259,56 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) { } void RandomizerOnSceneFlagSetHandler(int16_t sceneNum, int16_t flagType, int16_t flag) { - if (RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF && - sceneNum == SCENE_GERUDOS_FORTRESS && flagType == FLAG_SCENE_SWITCH && flag == 0x3A) { - Flags_SetRandomizerInf(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN); - } + if (flagType == FLAG_SCENE_SWITCH) { + auto dungeonInfo = Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(sceneNum); + bool isVanilla = dungeonInfo == nullptr || dungeonInfo->IsVanilla(); - if (sceneNum == SCENE_SPIRIT_TEMPLE && flagType == FLAG_SCENE_SWITCH) { - bool isVanilla = - Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(SCENE_SPIRIT_TEMPLE)->IsVanilla(); - if (isVanilla && flag == 0x23) { - Flags_SetRandomizerInf(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON); + switch (sceneNum) { + case SCENE_GERUDOS_FORTRESS: + if (RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF && flag == 0x3A) { + Flags_SetRandomizerInf(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN); + } + break; + case SCENE_DEKU_TREE: + if (!isVanilla && flag == 0x27) { + Flags_SetRandomizerInf(RAND_INF_DEKU_TREE_MQ_TORCH_SWITCH); + } + break; + + case SCENE_DODONGOS_CAVERN: + if (!isVanilla && flag == 0x25) { + Flags_SetRandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEES); + } + break; + + case SCENE_JABU_JABU: + if (isVanilla && flag == 0x3b) { + Flags_SetRandomizerInf(RAND_INF_JABU_JABUS_BELLY_FIRST_SWITCH); + } + break; + + case SCENE_FOREST_TEMPLE: + if (!isVanilla && flag == 0x21) { + Flags_SetRandomizerInf(RAND_INF_FOREST_MQ_NORTH_WEST_EYE); + } else if (!isVanilla && flag == 0x25) { + Flags_SetRandomizerInf(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT); + } else if (!isVanilla && flag == 0x2a) { + Flags_SetRandomizerInf(RAND_INF_FOREST_MQ_NORTH_EAST_EYE); + } + break; + + case SCENE_FIRE_TEMPLE: + if (!isVanilla && flag == 0x28) { + Flags_SetRandomizerInf(RAND_INF_FIRE_MQ_LOBBY_TORCHES); + } + break; + case SCENE_SPIRIT_TEMPLE: + if (isVanilla && flag == 0x23) { + Flags_SetRandomizerInf(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON); + } else if (!isVanilla && flag == 0x37) { + Flags_SetRandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEES); + } + break; } } @@ -1865,12 +1905,49 @@ void RandomizerOnActorInitHandler(void* actorRef) { Actor* actor = static_cast(actorRef); if (actor->id == ACTOR_PLAYER) { - if (gPlayState->sceneNum == SCENE_SPIRIT_TEMPLE) { - bool isVanilla = - Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(SCENE_SPIRIT_TEMPLE)->IsVanilla(); - if (isVanilla && Flags_GetRandomizerInf(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON)) { - Flags_SetSwitch(gPlayState, 0x23); - } + auto dungeonInfo = Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(gPlayState->sceneNum); + bool isVanilla = dungeonInfo == nullptr || dungeonInfo->IsVanilla(); + switch (gPlayState->sceneNum) { + case SCENE_DEKU_TREE: + if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_DEKU_TREE_MQ_TORCH_SWITCH)) { + Flags_SetSwitch(gPlayState, 0x27); + } + break; + + case SCENE_DODONGOS_CAVERN: + if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEES)) { + Flags_SetSwitch(gPlayState, 0x25); + } + break; + + case SCENE_JABU_JABU: + if (isVanilla && Flags_GetRandomizerInf(RAND_INF_JABU_JABUS_BELLY_FIRST_SWITCH)) { + Flags_SetSwitch(gPlayState, 0x3b); + } + break; + + case SCENE_FOREST_TEMPLE: + if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_MQ_NORTH_WEST_EYE)) { + Flags_SetSwitch(gPlayState, 0x21); + } else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT)) { + Flags_SetSwitch(gPlayState, 0x25); + } else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_MQ_NORTH_EAST_EYE)) { + Flags_SetSwitch(gPlayState, 0x2a); + } + break; + + case SCENE_FIRE_TEMPLE: + if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FIRE_MQ_LOBBY_TORCHES)) { + Flags_SetSwitch(gPlayState, 0x28); + } + break; + case SCENE_SPIRIT_TEMPLE: + if (isVanilla && Flags_GetRandomizerInf(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON)) { + Flags_SetSwitch(gPlayState, 0x23); + } else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEES)) { + Flags_SetSwitch(gPlayState, 0x37); + } + break; } } diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index d42e14cb1..97c6a7e4a 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -1091,8 +1091,16 @@ DEFINE_RAND_INF(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5) DEFINE_RAND_INF(RAND_INF_TH_ITEM_FROM_LEADER_OF_FORTRESS) DEFINE_RAND_INF(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN) +DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_TORCH_SWITCH) +DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEES) +DEFINE_RAND_INF(RAND_INF_JABU_JABUS_BELLY_FIRST_SWITCH) +DEFINE_RAND_INF(RAND_INF_FOREST_MQ_NORTH_WEST_EYE) +DEFINE_RAND_INF(RAND_INF_FOREST_MQ_NORTH_EAST_EYE) +DEFINE_RAND_INF(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT) +DEFINE_RAND_INF(RAND_INF_FIRE_MQ_LOBBY_TORCHES) DEFINE_RAND_INF(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON) DEFINE_RAND_INF(RAND_INF_SPIRIT_BIG_MIRROR_STATUE_TURNED) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEES) DEFINE_RAND_INF(RAND_INF_ZELDAS_LETTER) DEFINE_RAND_INF(RAND_INF_WEIRD_EGG) From b58f08f4939b27d500fe6313974e3ff91254275a Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Mon, 14 Jul 2025 22:09:13 +0000 Subject: [PATCH 2/2] forest well, plus pepperoni requested lobby eyes be combined --- .../Enhancements/randomizer/hook_handlers.cpp | 19 +++++++++++++------ .../Enhancements/randomizer/randomizer_inf.h | 4 ++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index de2f07fa4..3383b63eb 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -288,12 +288,16 @@ void RandomizerOnSceneFlagSetHandler(int16_t sceneNum, int16_t flagType, int16_t break; case SCENE_FOREST_TEMPLE: - if (!isVanilla && flag == 0x21) { - Flags_SetRandomizerInf(RAND_INF_FOREST_MQ_NORTH_WEST_EYE); + if (flag == 0x26) { + Flags_SetRandomizerInf(RAND_INF_FOREST_DRAINED_WELL); + } else if (isVanilla && flag == 0x25) { + Flags_SetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES); + } else if (!isVanilla && flag == 0x21) { + Flags_SetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES); } else if (!isVanilla && flag == 0x25) { Flags_SetRandomizerInf(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT); } else if (!isVanilla && flag == 0x2a) { - Flags_SetRandomizerInf(RAND_INF_FOREST_MQ_NORTH_EAST_EYE); + Flags_SetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES); } break; @@ -1927,12 +1931,15 @@ void RandomizerOnActorInitHandler(void* actorRef) { break; case SCENE_FOREST_TEMPLE: - if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_MQ_NORTH_WEST_EYE)) { + if (Flags_GetRandomizerInf(RAND_INF_FOREST_DRAINED_WELL)) { + Flags_SetSwitch(gPlayState, 0x26); + } else if (isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES)) { + Flags_SetSwitch(gPlayState, 0x25); + } else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES)) { Flags_SetSwitch(gPlayState, 0x21); + Flags_SetSwitch(gPlayState, 0x2a); } else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT)) { Flags_SetSwitch(gPlayState, 0x25); - } else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_MQ_NORTH_EAST_EYE)) { - Flags_SetSwitch(gPlayState, 0x2a); } break; diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 97c6a7e4a..c4898069b 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -1094,8 +1094,8 @@ DEFINE_RAND_INF(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN) DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_TORCH_SWITCH) DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEES) DEFINE_RAND_INF(RAND_INF_JABU_JABUS_BELLY_FIRST_SWITCH) -DEFINE_RAND_INF(RAND_INF_FOREST_MQ_NORTH_WEST_EYE) -DEFINE_RAND_INF(RAND_INF_FOREST_MQ_NORTH_EAST_EYE) +DEFINE_RAND_INF(RAND_INF_FOREST_LOBBY_EYES) +DEFINE_RAND_INF(RAND_INF_FOREST_DRAINED_WELL) DEFINE_RAND_INF(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT) DEFINE_RAND_INF(RAND_INF_FIRE_MQ_LOBBY_TORCHES) DEFINE_RAND_INF(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON)