diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index b55ba701b..d554714af 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -594,69 +594,69 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) { switch(gSaveContext.randoSettings[index].key) { case RSK_FOREST: if(it.value() == "Closed") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_FOREST_CLOSED; } else if(it.value() == "Open") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_FOREST_CLOSED_DEKU; } else if(it.value() == "Closed Deku") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_FOREST_OPEN; } break; case RSK_KAK_GATE: if(it.value() == "Closed") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_GENERIC_OFF; } else if(it.value() == "Open") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_GENERIC_ON; } break; case RSK_DOOR_OF_TIME: if(it.value() == "Open") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_DOOROFTIME_OPEN; } else if(it.value() == "Song only") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_DOOROFTIME_SONGONLY; } else if(it.value() == "Closed") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_DOOROFTIME_CLOSED; } break; case RSK_ZORAS_FOUNTAIN: if(it.value() == "Closed") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_ZF_CLOSED; } else if(it.value() == "Closed as child") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_ZF_CLOSED_CHILD; } else if(it.value() == "Open") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_ZF_OPEN; } break; case RSK_STARTING_AGE: if(it.value() == "Child") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_AGE_CHILD; } else if (it.value() == "Adult") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_AGE_ADULT; } break; case RSK_GERUDO_FORTRESS: if(it.value() == "Normal") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_GF_NORMAL; } else if(it.value() == "Fast") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_GF_FAST; } else if(it.value() == "Open") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_GF_OPEN; } break; case RSK_RAINBOW_BRIDGE: - if(it.value() == "Always open") { - gSaveContext.randoSettings[index].value = 0; - } else if(it.value() == "Vanilla") { - gSaveContext.randoSettings[index].value = 1; + if(it.value() == "Vanilla") { + gSaveContext.randoSettings[index].value = RO_BRIDGE_VANILLA; + } else if(it.value() == "Always open") { + gSaveContext.randoSettings[index].value = RO_BRIDGE_ALWAYS_OPEN; } else if(it.value() == "Stones") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_BRIDGE_STONES; } else if(it.value() == "Medallions") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_BRIDGE_MEDALLIONS; } else if(it.value() == "Dungeon rewards") { - gSaveContext.randoSettings[index].value = 4; + gSaveContext.randoSettings[index].value = RO_BRIDGE_DUNGEON_REWARDS; } else if(it.value() == "Dungeons") { - gSaveContext.randoSettings[index].value = 5; + gSaveContext.randoSettings[index].value = RO_BRIDGE_DUNGEONS; } else if(it.value() == "Tokens") { - gSaveContext.randoSettings[index].value = 6; + gSaveContext.randoSettings[index].value = RO_BRIDGE_TOKENS; } break; case RSK_RAINBOW_BRIDGE_STONE_COUNT: @@ -678,30 +678,30 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) { break; case RSK_SHOPSANITY: if(it.value() == "Off") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = SHOPSANITY_OFF; } else if(it.value() == "0 Items") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = SHOPSANITY_ZERO; } else if(it.value() == "1 Item") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = SHOPSANITY_ONE; } else if(it.value() == "2 Items") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = SHOPSANITY_TWO; } else if(it.value() == "3 Items") { - gSaveContext.randoSettings[index].value = 4; + gSaveContext.randoSettings[index].value = SHOPSANITY_THREE; } else if(it.value() == "4 Items") { - gSaveContext.randoSettings[index].value = 5; + gSaveContext.randoSettings[index].value = SHOPSANITY_FOUR; } else if(it.value() == "Random") { - gSaveContext.randoSettings[index].value = 6; + gSaveContext.randoSettings[index].value = SHOPSANITY_RANDOM; } break; case RSK_SHUFFLE_SCRUBS: if(it.value() == "Off") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_SCRUBS_OFF; } else if(it.value() == "Affordable") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_SCRUBS_AFFORDABLE; } else if(it.value() == "Expensive") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_SCRUBS_EXPENSIVE; } else if(it.value() == "Random Prices") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_SCRUBS_RANDOM; } break; case RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD: @@ -722,149 +722,171 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) { case RSK_SHUFFLE_OVERWORLD_ENTRANCES: case RSK_SHUFFLE_GROTTO_ENTRANCES: if(it.value() == "Off") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_GENERIC_OFF; } else if(it.value() == "On") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_GENERIC_ON; } break; case RSK_SHUFFLE_MERCHANTS: if(it.value() == "Off") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_SHUFFLE_MERCHANTS_OFF; } else if (it.value() == "On (No Hints)") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_SHUFFLE_MERCHANTS_ON_NO_HINT; } else if (it.value() == "On (With Hints)") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_SHUFFLE_MERCHANTS_ON_HINT; } break; // Uses Ammo Drops option for now. "Off" not yet implemented case RSK_ENABLE_BOMBCHU_DROPS: if (it.value() == "On") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_AMMO_DROPS_ON; } else if (it.value() == "On + Bombchu") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_AMMO_DROPS_ON_PLUS_BOMBCHU; } else if (it.value() == "Off") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_AMMO_DROPS_OFF; } break; case RSK_STARTING_MAPS_COMPASSES: if(it.value() == "Start With") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_STARTWITH; } else if(it.value() == "Vanilla") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_VANILLA; } else if(it.value() == "Own Dungeon") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_OWN_DUNGEON; } else if(it.value() == "Any Dungeon") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_ANY_DUNGEON; } else if(it.value() == "Overworld") { - gSaveContext.randoSettings[index].value = 4; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_OVERWORLD; } else if(it.value() == "Anywhere") { - gSaveContext.randoSettings[index].value = 5; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_ANYWHERE; } break; case RSK_STARTING_OCARINA: if(it.value() == "Off") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_STARTING_OCARINA_OFF; } else if(it.value() == "Fairy Ocarina") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_STARTING_OCARINA_FAIRY; } break; + case RSK_ITEM_POOL: + if(it.value() == "Plentiful") { + gSaveContext.randoSettings[index].value = RO_ITEM_POOL_PLENTIFUL; + } else if(it.value() == "Balanced") { + gSaveContext.randoSettings[index].value = RO_ITEM_POOL_BALANCED; + } else if(it.value() == "Scarce") { + gSaveContext.randoSettings[index].value = RO_ITEM_POOL_SCARCE; + } else if(it.value() == "Minimal") { + gSaveContext.randoSettings[index].value = RO_ITEM_POOL_MINIMAL; + } + case RSK_ICE_TRAPS: + if(it.value() == "Off") { + gSaveContext.randoSettings[index].value = RO_ICE_TRAPS_OFF; + } else if(it.value() == "Normal") { + gSaveContext.randoSettings[index].value = RO_ICE_TRAPS_NORMAL; + } else if(it.value() == "Extra") { + gSaveContext.randoSettings[index].value = RO_ICE_TRAPS_EXTRA; + } else if(it.value() == "Mayhem") { + gSaveContext.randoSettings[index].value = RO_ICE_TRAPS_MAYHEM; + } else if(it.value() == "Onslaught") { + gSaveContext.randoSettings[index].value = RO_ICE_TRAPS_ONSLAUGHT; + } case RSK_GOSSIP_STONE_HINTS: if(it.value() == "No Hints") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_GOSSIP_STONES_NONE; } else if(it.value() == "Need Nothing") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_GOSSIP_STONES_NEED_NOTHING; } else if(it.value() == "Mask of Truth") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_GOSSIP_STONES_NEED_TRUTH; } else if(it.value() == "Stone of Agony") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_GOSSIP_STONES_NEED_STONE; } break; case RSK_HINT_CLARITY: if(it.value() == "Obscure") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_HINT_CLARITY_OBSCURE; } else if(it.value() == "Ambiguous") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_HINT_CLARITY_AMBIGUOUS; } else if(it.value() == "Clear") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_HINT_CLARITY_CLEAR; } break; case RSK_HINT_DISTRIBUTION: if(it.value() == "Useless") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_HINT_DIST_USELESS; } else if(it.value() == "Balanced") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_HINT_DIST_BALANCED; } else if(it.value() == "Strong") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_HINT_DIST_STRONG; } else if(it.value() == "Very Strong") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_HINT_DIST_VERY_STRONG; } break; case RSK_GERUDO_KEYS: if (it.value() == "Vanilla") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_GERUDO_KEYS_VANILLA; } else if (it.value() == "Any Dungeon") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_GERUDO_KEYS_ANY_DUNGEON; } else if (it.value() == "Overworld") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_GERUDO_KEYS_OVERWORLD; } else if (it.value() == "Anywhere") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_GERUDO_KEYS_ANYWHERE; } break; case RSK_KEYSANITY: if(it.value() == "Start With") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_STARTWITH; } else if(it.value() == "Vanilla") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_VANILLA; } else if(it.value() == "Own Dungeon") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_OWN_DUNGEON; } else if(it.value() == "Any Dungeon") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_ANY_DUNGEON; } else if(it.value() == "Overworld") { - gSaveContext.randoSettings[index].value = 4; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_OVERWORLD; } else if(it.value() == "Anywhere") { - gSaveContext.randoSettings[index].value = 5; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_ANYWHERE; } break; case RSK_BOSS_KEYSANITY: if(it.value() == "Start With") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_STARTWITH; } else if(it.value() == "Vanilla") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_VANILLA; } else if(it.value() == "Own Dungeon") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_OWN_DUNGEON; } else if(it.value() == "Any Dungeon") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_ANY_DUNGEON; } else if(it.value() == "Overworld") { - gSaveContext.randoSettings[index].value = 4; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_OVERWORLD; } else if(it.value() == "Anywhere") { - gSaveContext.randoSettings[index].value = 5; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ITEM_LOC_ANYWHERE; } break; case RSK_GANONS_BOSS_KEY: if(it.value() == "Vanilla") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_VANILLA; } else if(it.value() == "Own dungeon") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_OWN_DUNGEON; } else if(it.value() == "Start with") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_STARTWITH; } else if(it.value() == "Any Dungeon") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_ANY_DUNGEON; } else if(it.value() == "Overworld") { - gSaveContext.randoSettings[index].value = 4; - } else if(it.value() == "Anywhere") { - gSaveContext.randoSettings[index].value = 5; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_OVERWORLD; + } else if(it.value() == "Anywhere") { + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_ANYWHERE; } else if(it.value() == "LACS-Vanilla") { - gSaveContext.randoSettings[index].value = 6; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_LACS_VANILLA; } else if(it.value() == "LACS-Medallions") { - gSaveContext.randoSettings[index].value = 7; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_LACS_MEDALLIONS; } else if(it.value() == "LACS-Stones") { - gSaveContext.randoSettings[index].value = 8; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_LACS_STONES; } else if(it.value() == "LACS-Rewards") { - gSaveContext.randoSettings[index].value = 9; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_LACS_REWARDS; } else if(it.value() == "LACS-Dungeons") { - gSaveContext.randoSettings[index].value = 10; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_LACS_DUNGEONS; } else if(it.value() == "LACS-Tokens") { - gSaveContext.randoSettings[index].value = 11; + gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_LACS_TOKENS; } break; case RSK_SKIP_CHILD_ZELDA: @@ -873,40 +895,40 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) { case RSK_STARTING_CONSUMABLES: case RSK_FULL_WALLETS: if(it.value() == "No") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_GENERIC_NO; } else if(it.value() == "Yes") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_GENERIC_YES; } break; case RSK_SKIP_CHILD_STEALTH: case RSK_SKIP_EPONA_RACE: case RSK_SKIP_TOWER_ESCAPE: if(it.value() == "Don't Skip") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_GENERIC_DONT_SKIP; } else if (it.value() == "Skip") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_GENERIC_SKIP; } break; case RSK_SHUFFLE_TOKENS: if (it.value() == "Off") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_TOKENSANITY_OFF; } else if (it.value() == "Dungeons") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_TOKENSANITY_DUNGEONS; } else if (it.value() == "Overworld") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_TOKENSANITY_OVERWORLD; } else if (it.value() == "All Tokens") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_TOKENSANITY_ALL; } break; case RSK_LINKS_POCKET: if (it.value() == "Dungeon Reward") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_LINKS_POCKET_DUNGEON_REWARD; } else if (it.value() == "Advancement") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_LINKS_POCKET_ADVANCEMENT; } else if (it.value() == "Anything") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_LINKS_POCKET_ANYTHING; } else if (it.value() == "Nothing") { - gSaveContext.randoSettings[index].value = 3; + gSaveContext.randoSettings[index].value = RO_LINKS_POCKET_NOTHING; } break; case RSK_MQ_DUNGEON_COUNT: @@ -919,20 +941,20 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) { break; case RSK_SHUFFLE_DUNGEON_ENTRANCES: if (it.value() == "Off") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ENTRANCE_SHUFFLE_OFF; } else if (it.value() == "On") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ENTRANCE_SHUFFLE_ON; } else if (it.value() == "On + Ganon") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON; } break; case RSK_SHUFFLE_INTERIOR_ENTRANCES: if (it.value() == "Off") { - gSaveContext.randoSettings[index].value = 0; + gSaveContext.randoSettings[index].value = RO_INTERIOR_ENTRANCE_SHUFFLE_OFF; } else if (it.value() == "Simple") { - gSaveContext.randoSettings[index].value = 1; + gSaveContext.randoSettings[index].value = RO_INTERIOR_ENTRANCE_SHUFFLE_SIMPLE; } else if (it.value() == "All") { - gSaveContext.randoSettings[index].value = 2; + gSaveContext.randoSettings[index].value = RO_INTERIOR_ENTRANCE_SHUFFLE_ALL; } break; } @@ -2806,7 +2828,7 @@ void DrawRandoEditor(bool& open) { "Open - Mido no longer blocks the path to the Deku Tree. Kokiri " "boy no longer blocks the path out of the forest." ); - UIWidgets::EnhancementCombobox("gRandomizeForest", randoForest, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeForest", randoForest, 3, RO_FOREST_CLOSED); UIWidgets::PaddedSeparator(); @@ -2819,7 +2841,7 @@ void DrawRandoEditor(bool& open) { "Open - The gate is always open. The happy mask shop " "will open immediately after obtaining Zelda's letter." ); - UIWidgets::EnhancementCombobox("gRandomizeKakarikoGate", randoKakarikoGate, 2, 0); + UIWidgets::EnhancementCombobox("gRandomizeKakarikoGate", randoKakarikoGate, 2, RO_GENERIC_DONT_SKIP); UIWidgets::PaddedSeparator(); @@ -2834,7 +2856,7 @@ void DrawRandoEditor(bool& open) { "\n" "Open - The Door of Time is permanently open with no requirements." ); - UIWidgets::EnhancementCombobox("gRandomizeDoorOfTime", randoDoorOfTime, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeDoorOfTime", randoDoorOfTime, 3, RO_DOOROFTIME_CLOSED); UIWidgets::PaddedSeparator(); @@ -2851,7 +2873,7 @@ void DrawRandoEditor(bool& open) { "Open - King Zora has already mweeped out of the way in both " "time periods. Ruto's Letter is removed from the item pool." ); - UIWidgets::EnhancementCombobox("gRandomizeZorasFountain", randoZorasFountain, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeZorasFountain", randoZorasFountain, 3, RO_ZF_CLOSED); UIWidgets::PaddedSeparator(); @@ -2882,12 +2904,12 @@ void DrawRandoEditor(bool& open) { ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true); ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f); } - UIWidgets::EnhancementCombobox("gRandomizeStartingAge", randoStartingAge, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeStartingAge", randoStartingAge, 3, RO_AGE_CHILD); if (disableRandoStartingAge) { if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { ImGui::SetTooltip("%s", disableRandoStartingAgeText); } - CVar_SetS32("gRandomizeStartingAge", 0); + CVar_SetS32("gRandomizeStartingAge", RO_AGE_CHILD); ImGui::PopStyleVar(1); ImGui::PopItemFlag(); } @@ -2906,7 +2928,7 @@ void DrawRandoEditor(bool& open) { "\n" "Open - The bridge is repaired from the start." ); - UIWidgets::EnhancementCombobox("gRandomizeGerudoFortress", randoGerudoFortress, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeGerudoFortress", randoGerudoFortress, 3, RO_GF_NORMAL); UIWidgets::PaddedSeparator(); @@ -2933,7 +2955,7 @@ void DrawRandoEditor(bool& open) { "Tokens - Obtain the specified amount of Skulltula tokens." ); - UIWidgets::EnhancementCombobox("gRandomizeRainbowBridge", randoRainbowBridge, 7, 0); + UIWidgets::EnhancementCombobox("gRandomizeRainbowBridge", randoRainbowBridge, 7, RO_BRIDGE_VANILLA); ImGui::PopItemWidth(); switch (CVar_GetS32("gRandomizeRainbowBridge", 0)) { case 0: @@ -3037,7 +3059,7 @@ void DrawRandoEditor(bool& open) { "- Bottom of the Well will be open for adult after playing Song of Storms to the Windmill guy as child.\n" "- Gerudo Training Ground will be open for child after adult has paid to open the gate once." ); - UIWidgets::EnhancementCombobox("gRandomizeShuffleDungeonsEntrances", randoShuffleDungeonsEntrances, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeShuffleDungeonsEntrances", randoShuffleDungeonsEntrances, 3, RO_DUNGEON_ENTRANCE_SHUFFLE_OFF); UIWidgets::PaddedSeparator(); @@ -3065,7 +3087,7 @@ void DrawRandoEditor(bool& open) { "- Temple of Time\n" "- Kakariko Potion Shop" ); - UIWidgets::EnhancementCombobox("gRandomizeShuffleInteriorsEntrances", randoShuffleInteriorsEntrances, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeShuffleInteriorsEntrances", randoShuffleInteriorsEntrances, 3, RO_INTERIOR_ENTRANCE_SHUFFLE_OFF); UIWidgets::PaddedSeparator(); @@ -3115,7 +3137,7 @@ void DrawRandoEditor(bool& open) { "\n" "Anywhere - Songs can appear at any location." ); - UIWidgets::EnhancementCombobox("gRandomizeShuffleSongs", randoShuffleSongs, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeShuffleSongs", randoShuffleSongs, 3, RO_SONG_SHUFFLE_SONG_LOCATIONS); UIWidgets::PaddedSeparator(); @@ -3133,7 +3155,7 @@ void DrawRandoEditor(bool& open) { "\n" "All Tokens - Shuffle all 100 GS tokens." ); - UIWidgets::EnhancementCombobox("gRandomizeShuffleTokens", randoTokensanity, 4, 0); + UIWidgets::EnhancementCombobox("gRandomizeShuffleTokens", randoTokensanity, 4, RO_TOKENSANITY_OFF); ImGui::Dummy(ImVec2(0,0)); @@ -3225,7 +3247,7 @@ void DrawRandoEditor(bool& open) { "\n" "Random - Vanilla shop items will be shuffled among different shops, and each shop will contain a random number(1-4) of non-vanilla shop items.\n" ); - UIWidgets::EnhancementCombobox("gRandomizeShopsanity", randoShopsanity, 7, 0); + UIWidgets::EnhancementCombobox("gRandomizeShopsanity", randoShopsanity, 7, RO_SHOPSANITY_OFF); UIWidgets::PaddedSeparator(); @@ -3240,7 +3262,7 @@ void DrawRandoEditor(bool& open) { "Expensive - Scrubs will be shuffled and their item will cost the vanilla price.\n" "\n" "Random - Scrubs will be shuffled and their item will cost will be between 0-95 rupees.\n"); - UIWidgets::EnhancementCombobox("gRandomizeShuffleScrubs", randoShuffleScrubs, 4, 0); + UIWidgets::EnhancementCombobox("gRandomizeShuffleScrubs", randoShuffleScrubs, 4, RO_SCRUBS_OFF); UIWidgets::PaddedSeparator(); @@ -3267,7 +3289,7 @@ void DrawRandoEditor(bool& open) { "On (no hints) - Salesmen will be included but won't tell you what you'll get.\n" "On (with hints) - Salesmen will be included and you'll know what you're buying." ); - UIWidgets::EnhancementCombobox("gRandomizeShuffleMerchants", randoShuffleMerchants, 3, 0); + UIWidgets::EnhancementCombobox("gRandomizeShuffleMerchants", randoShuffleMerchants, 3, RO_SHUFFLE_MERCHANTS_OFF); UIWidgets::PaddedSeparator(); @@ -3322,7 +3344,7 @@ void DrawRandoEditor(bool& open) { "\n" "Anywhere - Spiritual stones and medallions can appear anywhere." ); - UIWidgets::EnhancementCombobox("gRandomizeShuffleDungeonReward", randoShuffleDungeonRewards, 4, 0); + UIWidgets::EnhancementCombobox("gRandomizeShuffleDungeonReward", randoShuffleDungeonRewards, 4, RO_DUNGEON_REWARDS_END_OF_DUNGEON); UIWidgets::PaddedSeparator(); @@ -3341,7 +3363,7 @@ void DrawRandoEditor(bool& open) { "\n" "Anywhere - Maps & Compasses can appear anywhere in the world." ); - UIWidgets::EnhancementCombobox("gRandomizeStartingMapsCompasses", randoShuffleMapsAndCompasses, 6, 2); + UIWidgets::EnhancementCombobox("gRandomizeStartingMapsCompasses", randoShuffleMapsAndCompasses, 6, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON); UIWidgets::PaddedSeparator(); @@ -3360,7 +3382,7 @@ void DrawRandoEditor(bool& open) { "\n" "Anywhere - Small Keys can appear anywhere in the world." ); - UIWidgets::EnhancementCombobox("gRandomizeKeysanity", randoShuffleSmallKeys, 6, 2); + UIWidgets::EnhancementCombobox("gRandomizeKeysanity", randoShuffleSmallKeys, 6, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON); UIWidgets::PaddedSeparator(); @@ -3377,15 +3399,15 @@ void DrawRandoEditor(bool& open) { "\n" "Selection - Hand select which dungeons will have their keys replaced with keyrings." ); - UIWidgets::EnhancementCombobox("gRandomizeShuffleKeyRings", randoShuffleKeyRings, 4, 0); + UIWidgets::EnhancementCombobox("gRandomizeShuffleKeyRings", randoShuffleKeyRings, 4, RO_KEYRINGS_OFF); ImGui::PopItemWidth(); - switch (CVar_GetS32("gRandomizeShuffleKeyRings", 0)) { - case 2: + switch (CVar_GetS32("gRandomizeShuffleKeyRings", RO_KEYRINGS_OFF)) { + case RO_KEYRINGS_COUNT: ImGui::Dummy(ImVec2(0.0f, 0.0f)); UIWidgets::EnhancementSliderInt("Key Ring Count: %d", "##RandomizeShuffleKeyRingsRandomCount", "gRandomizeShuffleKeyRingsRandomCount", 1, 8, "", 8, true); break; - case 3: + case RO_KEYRINGS_SELECTION: UIWidgets::EnhancementCheckbox("Forest Temple##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsForestTemple"); UIWidgets::EnhancementCheckbox("Fire Temple##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsFireTemple"); UIWidgets::EnhancementCheckbox("Water Temple##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsWaterTemple"); @@ -3413,7 +3435,7 @@ void DrawRandoEditor(bool& open) { "\n" "Anywhere - Thieve's Hideout Keys can appear anywhere in the world." ); - UIWidgets::EnhancementCombobox("gRandomizeGerudoKeys", randoShuffleGerudoFortressKeys, 4, 0); + UIWidgets::EnhancementCombobox("gRandomizeGerudoKeys", randoShuffleGerudoFortressKeys, 4, RO_GERUDO_KEYS_VANILLA); UIWidgets::PaddedSeparator(); @@ -3432,7 +3454,7 @@ void DrawRandoEditor(bool& open) { "\n" "Anywhere - Boss Keys can appear anywhere in the world." ); - UIWidgets::EnhancementCombobox("gRandomizeBossKeysanity", randoShuffleBossKeys, 6, 2); + UIWidgets::EnhancementCombobox("gRandomizeBossKeysanity", randoShuffleBossKeys, 6, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON); UIWidgets::PaddedSeparator(); @@ -3459,30 +3481,30 @@ void DrawRandoEditor(bool& open) { "- Dungeons: Complete the specified amount of dungeons. Dungeons are considered complete after stepping in to the blue warp after the boss.\n" "- Tokens: Obtain the specified amount of Skulltula tokens." ); - UIWidgets::EnhancementCombobox("gRandomizeShuffleGanonBossKey", randoShuffleGanonsBossKey, 12, 1); + UIWidgets::EnhancementCombobox("gRandomizeShuffleGanonBossKey", randoShuffleGanonsBossKey, 12, RO_GANON_BOSS_KEY_VANILLA); ImGui::PopItemWidth(); - switch (CVar_GetS32("gRandomizeShuffleGanonBossKey", 1)) { - case 7: + switch (CVar_GetS32("gRandomizeShuffleGanonBossKey", RO_GANON_BOSS_KEY_OWN_DUNGEON)) { + case RO_GANON_BOSS_KEY_LACS_MEDALLIONS: ImGui::Dummy(ImVec2(0.0f, 0.0f)); UIWidgets::EnhancementSliderInt("Medallion Count: %d", "##RandoLacsMedallionCount", "gRandomizeLacsMedallionCount", 1, 6, "", 6, true); break; - case 8: + case RO_GANON_BOSS_KEY_LACS_STONES: ImGui::Dummy(ImVec2(0.0f, 0.0f)); UIWidgets::EnhancementSliderInt("Stone Count: %d", "##RandoLacsStoneCount", "gRandomizeLacsStoneCount", 1, 3, "", 3, true); break; - case 9: + case RO_GANON_BOSS_KEY_LACS_REWARDS: ImGui::Dummy(ImVec2(0.0f, 0.0f)); UIWidgets::EnhancementSliderInt("Reward Count: %d", "##RandoLacsRewardCount", "gRandomizeLacsRewardCount", 1, 9, "", 9, true); break; - case 10: + case RO_GANON_BOSS_KEY_LACS_DUNGEONS: ImGui::Dummy(ImVec2(0.0f, 0.0f)); UIWidgets::EnhancementSliderInt("Dungeon Count: %d", "##RandoLacsDungeonCount", "gRandomizeLacsDungeonCount", 1, 8, "", 8, true); break; - case 11: + case RO_GANON_BOSS_KEY_LACS_TOKENS: ImGui::Dummy(ImVec2(0.0f, 0.0f)); UIWidgets::EnhancementSliderInt("Token Count: %d", "##RandoLacsTokenCount", "gRandomizeLacsTokenCount", 1, 100, "", 100, true); @@ -3597,7 +3619,7 @@ void DrawRandoEditor(bool& open) { "\n" "Minimal - Most excess items are removed." ); - UIWidgets::EnhancementCombobox("gRandomizeItemPool", randoItemPool, 4, 1); + UIWidgets::EnhancementCombobox("gRandomizeItemPool", randoItemPool, 4, RO_ITEM_POOL_BALANCED); UIWidgets::PaddedSeparator(); // Ice Traps @@ -3616,7 +3638,7 @@ void DrawRandoEditor(bool& open) { "Onslaught - All junk items will be replaced by Ice Traps, even those " "in the base pool." ); - UIWidgets::EnhancementCombobox("gRandomizeIceTraps", randoIceTraps, 5, 1); + UIWidgets::EnhancementCombobox("gRandomizeIceTraps", randoIceTraps, 5, RO_ICE_TRAPS_NORMAL); UIWidgets::PaddedSeparator(); @@ -3634,7 +3656,7 @@ void DrawRandoEditor(bool& open) { "Need Stone of Agony - Hints are only available after obtaining the Stone of Agony.\n" "\n" "Need Mask of Truth - Hints are only available whilst wearing the Mask of Truth.\n"); - UIWidgets::EnhancementCombobox("gRandomizeGossipStoneHints", randoGossipStoneHints, 4, 1); + UIWidgets::EnhancementCombobox("gRandomizeGossipStoneHints", randoGossipStoneHints, 4, RO_GOSSIP_STONES_NEED_NOTHING); if (CVar_GetS32("gRandomizeGossipStoneHints", 1) != 0) { // Hint Clarity ImGui::Dummy(ImVec2(0.0f, 0.0f)); @@ -3652,7 +3674,7 @@ void DrawRandoEditor(bool& open) { "Clear - Hints are clearly written and are unique for each item.\n" "Ex: Kokiri Sword > the Kokiri Sword" ); - UIWidgets::EnhancementCombobox("gRandomizeHintClarity", randoHintClarity, 3, 2); + UIWidgets::EnhancementCombobox("gRandomizeHintClarity", randoHintClarity, 3, RO_HINT_CLARITY_CLEAR); // Hint Distribution ImGui::Dummy(ImVec2(0.0f, 0.0f)); @@ -3668,7 +3690,7 @@ void DrawRandoEditor(bool& open) { "\n" "Very Strong - Many powerful hints." ); - UIWidgets::EnhancementCombobox("gRandomizeHintDistribution", randoHintDistribution, 4, 1); + UIWidgets::EnhancementCombobox("gRandomizeHintDistribution", randoHintDistribution, 4, RO_HINT_DIST_BALANCED); ImGui::Unindent(); } @@ -3866,7 +3888,7 @@ void DrawRandoEditor(bool& open) { "\n" "No logic - Item placement is completely random. MAY BE IMPOSSIBLE TO BEAT." ); - UIWidgets::EnhancementCombobox("gRandomizeLogicRules", randoLogicRules, 2, 0); + UIWidgets::EnhancementCombobox("gRandomizeLogicRules", randoLogicRules, 2, RO_GENERIC_OFF); UIWidgets::PaddedSeparator(); @@ -3931,7 +3953,7 @@ void DrawRandoEditor(bool& open) { // TODO: Show this but disabled when we have options for disabled Comboboxes. if (CVar_GetS32("gRandomizeShuffleDungeonReward", 0) != 0) { ImGui::Text(Settings::LinksPocketItem.GetName().c_str()); - UIWidgets::EnhancementCombobox("gRandomizeLinksPocket", randoLinksPocket, 4, 0); + UIWidgets::EnhancementCombobox("gRandomizeLinksPocket", randoLinksPocket, 4, RO_LINKS_POCKET_DUNGEON_REWARD); UIWidgets::PaddedSeparator(); } diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index d05b24b4d..cca97fd86 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -13,7 +13,6 @@ #define NUM_NAVI_MESSAGES 19 #define NUM_ICE_TRAP_MESSAGES 23 - class Randomizer { private: std::unordered_map itemLocations; diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 82689cd8d..459768321 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -1070,6 +1070,190 @@ typedef enum { RSK_MAX } RandomizerSettingKey; +typedef enum RandoOption { + //Generic Settings (any binary option can use this) + //(off/on, no/yes, don't skip/skip) + RO_GENERIC_OFF, + RO_GENERIC_ON, + RO_GENERIC_NO = 0, + RO_GENERIC_YES, + RO_GENERIC_DONT_SKIP = 0, + RO_GENERIC_SKIP, + + //Forest settings (closed, closed deku, open) + RO_FOREST_CLOSED = 0, + RO_FOREST_CLOSED_DEKU, + RO_FOREST_OPEN, + + //Door of Time settings (open, song only, closed) + RO_DOOROFTIME_OPEN = 0, + RO_DOOROFTIME_SONGONLY, + RO_DOOROFTIME_CLOSED, + + //Zora's Fountain settings (closed, closed as child, open) + RO_ZF_CLOSED = 0, + RO_ZF_CLOSED_CHILD, + RO_ZF_OPEN, + + //Starting Age settings (child, adult, random) + RO_AGE_CHILD = 0, + RO_AGE_ADULT, + RO_AGE_RANDOM, + + //Gerudo Fortress settings (normal, fast, open) + RO_GF_NORMAL = 0, + RO_GF_FAST, + RO_GF_OPEN, + + //Rainbow Bridge settings (always open, vanilla, stones, medallions, dungeon rewards, dungeons, tokens) + RO_BRIDGE_VANILLA = 0, + RO_BRIDGE_ALWAYS_OPEN, + RO_BRIDGE_STONES, + RO_BRIDGE_MEDALLIONS, + RO_BRIDGE_DUNGEON_REWARDS, + RO_BRIDGE_DUNGEONS, + RO_BRIDGE_TOKENS, + + //Shopsanity settings (off, 0-4 items, random) + RO_SHOPSANITY_OFF = 0, + RO_SHOPSANITY_ZERO_ITEMS, + RO_SHOPSANITY_ONE_ITEM, + RO_SHOPSANITY_TWO_ITEMS, + RO_SHOPSANITY_THREE_ITEMS, + RO_SHOPSANITY_FOUR_ITEMS, + RO_SHOPSANITY_RANDOM, + + //Scrubsanity settings (off, affordable, expensive, random) + RO_SCRUBS_OFF = 0, + RO_SCRUBS_AFFORDABLE, + RO_SCRUBS_EXPENSIVE, + RO_SCRUBS_RANDOM, + + //Shuffle Merchants settings (off, on w/o hints, on w/hints) + RO_MERCHANTS_OFF = 0, + RO_MERCHANTS_ON_NO_HINTS, + RO_MERCHANTS_ON_WITH_HINTS, + + //Ammo drop settings (on, "on+bombchu", off) + RO_AMMO_DROPS_ON = 0, + RO_AMMO_DROPS_ON_PLUS_BOMBCHU, + RO_AMMO_DROPS_OFF, + + //Any Dungeon Item (start with, vanilla, own dungeon, any dungeon, + //overworld, anywhere) + RO_DUNGEON_ITEM_LOC_STARTWITH = 0, + RO_DUNGEON_ITEM_LOC_VANILLA, + RO_DUNGEON_ITEM_LOC_OWN_DUNGEON, + RO_DUNGEON_ITEM_LOC_ANY_DUNGEON, + RO_DUNGEON_ITEM_LOC_OVERWORLD, + RO_DUNGEON_ITEM_LOC_ANYWHERE, + + //Dungeon reward settings + RO_DUNGEON_REWARDS_END_OF_DUNGEON = 0, + RO_DUNGEON_REWARDS_ANY_DUNGEON, + RO_DUNGEON_REWARDS_OVERWORLD, + RO_DUNGEON_REWARDS_ANYWHERE, + + //Keyring Settings + RO_KEYRINGS_OFF = 0, + RO_KEYRINGS_RANDOM, + RO_KEYRINGS_COUNT, + RO_KEYRINGS_SELECTION, + + //Ganon Boss Key Settings (vanilla, own dungeon, start with, + //overworld, anywhere) + RO_GANON_BOSS_KEY_VANILLA = 0, + RO_GANON_BOSS_KEY_OWN_DUNGEON, + RO_GANON_BOSS_KEY_STARTWITH, + RO_GANON_BOSS_KEY_ANY_DUNGEON, + RO_GANON_BOSS_KEY_OVERWORLD, + RO_GANON_BOSS_KEY_ANYWHERE, + RO_GANON_BOSS_KEY_LACS_VANILLA, + RO_GANON_BOSS_KEY_LACS_MEDALLIONS, + RO_GANON_BOSS_KEY_LACS_STONES, + RO_GANON_BOSS_KEY_LACS_REWARDS, + RO_GANON_BOSS_KEY_LACS_DUNGEONS, + RO_GANON_BOSS_KEY_LACS_TOKENS, + + //Shuffle Dungeon Entrance Settings (Off, on, plus ganon) + RO_DUNGEON_ENTRANCE_SHUFFLE_OFF = 0, + RO_DUNGEON_ENTRANCE_SHUFFLE_ON, + RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON, + + //Shuffle Interior Entrance Settings (Off, simple, all) + RO_INTERIOR_ENTRANCE_SHUFFLE_OFF = 0, + RO_INTERIOR_ENTRANCE_SHUFFLE_SIMPLE, + RO_INTERIOR_ENTRANCE_SHUFFLE_ALL, + + //Song shuffle Settings (Song locations, Dungeon rewards, anywhere) + RO_SONG_SHUFFLE_SONG_LOCATIONS = 0, + RO_SONG_SHUFFLE_DUNGEON_REWARDS, + RO_SONG_SHUFFLE_ANYWHERE, + + //Shuffle Merchants Settings (Off, On no hint, on with wint) + RO_SHUFFLE_MERCHANTS_OFF = 0, + RO_SHUFFLE_MERCHANTS_ON_NO_HINT, + RO_SHUFFLE_MERCHANTS_ON_HINT, + + //Starting Ocarina Settings (off, fairy) + RO_STARTING_OCARINA_OFF = 0, + RO_STARTING_OCARINA_FAIRY, + + //Item Pool Settings + RO_ITEM_POOL_PLENTIFUL = 0, + RO_ITEM_POOL_BALANCED, + RO_ITEM_POOL_SCARCE, + RO_ITEM_POOL_MINIMAL, + + //Ice Trap Settings + RO_ICE_TRAPS_OFF = 0, + RO_ICE_TRAPS_NORMAL, + RO_ICE_TRAPS_EXTRA, + RO_ICE_TRAPS_MAYHEM, + RO_ICE_TRAPS_ONSLAUGHT, + + //Gossip Stone Hint Settings (no hints, needs nothing, + //needs mask of truth, needs stone of agony) + RO_GOSSIP_STONES_NONE = 0, + RO_GOSSIP_STONES_NEED_NOTHING, + RO_GOSSIP_STONES_NEED_TRUTH, + RO_GOSSIP_STONES_NEED_STONE, + + //Hint Clarity Settings (obscure, ambiguous, clear) + RO_HINT_CLARITY_OBSCURE = 0, + RO_HINT_CLARITY_AMBIGUOUS, + RO_HINT_CLARITY_CLEAR, + + //Hint Distribution Settings (useless, balanced, strong, very strong) + RO_HINT_DIST_USELESS = 0, + RO_HINT_DIST_BALANCED, + RO_HINT_DIST_STRONG, + RO_HINT_DIST_VERY_STRONG, + + //Gerudo Fortress Key Settings (vanilla, any dungeon, overworld, + //anywhere) + RO_GERUDO_KEYS_VANILLA = 0, + RO_GERUDO_KEYS_ANY_DUNGEON, + RO_GERUDO_KEYS_OVERWORLD, + RO_GERUDO_KEYS_ANYWHERE, + + //Tokensanity settings (off, dungeons, overworld, all) + RO_TOKENSANITY_OFF = 0, + RO_TOKENSANITY_DUNGEONS, + RO_TOKENSANITY_OVERWORLD, + RO_TOKENSANITY_ALL, + + //Link's Pocket Settings (dungeon reward, advancement, anything, nothing) + RO_LINKS_POCKET_DUNGEON_REWARD = 0, + RO_LINKS_POCKET_ADVANCEMENT, + RO_LINKS_POCKET_ANYTHING, + RO_LINKS_POCKET_NOTHING, + + //If you're going to add to this enum, please list the default option first + //with a value of zero. + +} RandoOption; + typedef enum { CAN_OBTAIN, CANT_OBTAIN_MISC,