diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index d73cebca7..3383b63eb 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -259,16 +259,60 @@ 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 (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_LOBBY_EYES); + } + 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 +1909,52 @@ 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 (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); + } + 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..c4898069b 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_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) 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)