refactor: separate RandoOption enum, use max (#2055)

* refactor: separate RandoOption enum, use max

* missed a couple magic array sizes

* couple more

Co-authored-by: briaguya <briaguya@alice>
This commit is contained in:
briaguya 2022-11-30 01:40:55 -05:00 committed by GitHub
parent d6c528d9d0
commit 8d398f7130
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 287 additions and 189 deletions

View File

@ -2831,7 +2831,7 @@ void DrawRandoEditor(bool& open) {
"Open - Mido no longer blocks the path to the Deku Tree. Kokiri " "Open - Mido no longer blocks the path to the Deku Tree. Kokiri "
"boy no longer blocks the path out of the forest." "boy no longer blocks the path out of the forest."
); );
UIWidgets::EnhancementCombobox("gRandomizeForest", randoForest, 3, RO_FOREST_CLOSED); UIWidgets::EnhancementCombobox("gRandomizeForest", randoForest, RO_FOREST_MAX, RO_FOREST_CLOSED);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -2844,7 +2844,7 @@ void DrawRandoEditor(bool& open) {
"Open - The gate is always open. The happy mask shop " "Open - The gate is always open. The happy mask shop "
"will open immediately after obtaining Zelda's letter." "will open immediately after obtaining Zelda's letter."
); );
UIWidgets::EnhancementCombobox("gRandomizeKakarikoGate", randoKakarikoGate, 2, RO_KAK_GATE_CLOSED); UIWidgets::EnhancementCombobox("gRandomizeKakarikoGate", randoKakarikoGate, RO_KAK_GATE_MAX, RO_KAK_GATE_CLOSED);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -2859,7 +2859,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Open - The Door of Time is permanently open with no requirements." "Open - The Door of Time is permanently open with no requirements."
); );
UIWidgets::EnhancementCombobox("gRandomizeDoorOfTime", randoDoorOfTime, 3, RO_DOOROFTIME_CLOSED); UIWidgets::EnhancementCombobox("gRandomizeDoorOfTime", randoDoorOfTime, RO_DOOROFTIME_MAX, RO_DOOROFTIME_CLOSED);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -2876,7 +2876,7 @@ void DrawRandoEditor(bool& open) {
"Open - King Zora has already mweeped out of the way in both " "Open - King Zora has already mweeped out of the way in both "
"time periods. Ruto's Letter is removed from the item pool." "time periods. Ruto's Letter is removed from the item pool."
); );
UIWidgets::EnhancementCombobox("gRandomizeZorasFountain", randoZorasFountain, 3, RO_ZF_CLOSED); UIWidgets::EnhancementCombobox("gRandomizeZorasFountain", randoZorasFountain, RO_ZF_MAX, RO_ZF_CLOSED);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -2907,7 +2907,7 @@ void DrawRandoEditor(bool& open) {
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true); ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f); ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
} }
UIWidgets::EnhancementCombobox("gRandomizeStartingAge", randoStartingAge, 3, RO_AGE_CHILD); UIWidgets::EnhancementCombobox("gRandomizeStartingAge", randoStartingAge, RO_AGE_MAX, RO_AGE_CHILD);
if (disableRandoStartingAge) { if (disableRandoStartingAge) {
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) {
ImGui::SetTooltip("%s", disableRandoStartingAgeText); ImGui::SetTooltip("%s", disableRandoStartingAgeText);
@ -2931,7 +2931,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Open - The bridge is repaired from the start." "Open - The bridge is repaired from the start."
); );
UIWidgets::EnhancementCombobox("gRandomizeGerudoFortress", randoGerudoFortress, 3, RO_GF_NORMAL); UIWidgets::EnhancementCombobox("gRandomizeGerudoFortress", randoGerudoFortress, RO_GF_MAX, RO_GF_NORMAL);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -2958,7 +2958,7 @@ void DrawRandoEditor(bool& open) {
"Tokens - Obtain the specified amount of Skulltula tokens." "Tokens - Obtain the specified amount of Skulltula tokens."
); );
UIWidgets::EnhancementCombobox("gRandomizeRainbowBridge", randoRainbowBridge, 7, RO_BRIDGE_VANILLA); UIWidgets::EnhancementCombobox("gRandomizeRainbowBridge", randoRainbowBridge, RO_BRIDGE_MAX, RO_BRIDGE_VANILLA);
ImGui::PopItemWidth(); ImGui::PopItemWidth();
switch (CVar_GetS32("gRandomizeRainbowBridge", RO_BRIDGE_VANILLA)) { switch (CVar_GetS32("gRandomizeRainbowBridge", RO_BRIDGE_VANILLA)) {
case RO_BRIDGE_ALWAYS_OPEN: case RO_BRIDGE_ALWAYS_OPEN:
@ -3007,7 +3007,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Random Number - A Random number and set of trials will be required." "Random Number - A Random number and set of trials will be required."
); );
UIWidgets::EnhancementCombobox("gRandomizeGanonTrial", randoGanonsTrial, 3, RO_GANONS_TRIALS_SET_NUMBER); UIWidgets::EnhancementCombobox("gRandomizeGanonTrial", randoGanonsTrial, RO_GANONS_TRIALS_MAX, RO_GANONS_TRIALS_SET_NUMBER);
ImGui::PopItemWidth(); ImGui::PopItemWidth();
if (CVar_GetS32("gRandomizeGanonTrial", RO_GANONS_TRIALS_SET_NUMBER) == RO_GANONS_TRIALS_SET_NUMBER) { if (CVar_GetS32("gRandomizeGanonTrial", RO_GANONS_TRIALS_SET_NUMBER) == RO_GANONS_TRIALS_SET_NUMBER) {
ImGui::Dummy(ImVec2(0.0f, 0.0f)); ImGui::Dummy(ImVec2(0.0f, 0.0f));
@ -3061,7 +3061,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" "- 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." "- Gerudo Training Ground will be open for child after adult has paid to open the gate once."
); );
UIWidgets::EnhancementCombobox("gRandomizeShuffleDungeonsEntrances", randoShuffleDungeonsEntrances, 3, RO_DUNGEON_ENTRANCE_SHUFFLE_OFF); UIWidgets::EnhancementCombobox("gRandomizeShuffleDungeonsEntrances", randoShuffleDungeonsEntrances, RO_DUNGEON_ENTRANCE_SHUFFLE_MAX, RO_DUNGEON_ENTRANCE_SHUFFLE_OFF);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3089,7 +3089,7 @@ void DrawRandoEditor(bool& open) {
"- Temple of Time\n" "- Temple of Time\n"
"- Kakariko Potion Shop" "- Kakariko Potion Shop"
); );
UIWidgets::EnhancementCombobox("gRandomizeShuffleInteriorsEntrances", randoShuffleInteriorsEntrances, 3, RO_INTERIOR_ENTRANCE_SHUFFLE_OFF); UIWidgets::EnhancementCombobox("gRandomizeShuffleInteriorsEntrances", randoShuffleInteriorsEntrances, RO_INTERIOR_ENTRANCE_SHUFFLE_MAX, RO_INTERIOR_ENTRANCE_SHUFFLE_OFF);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3139,7 +3139,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Anywhere - Songs can appear at any location." "Anywhere - Songs can appear at any location."
); );
UIWidgets::EnhancementCombobox("gRandomizeShuffleSongs", randoShuffleSongs, 3, RO_SONG_SHUFFLE_SONG_LOCATIONS); UIWidgets::EnhancementCombobox("gRandomizeShuffleSongs", randoShuffleSongs, RO_SONG_SHUFFLE_MAX, RO_SONG_SHUFFLE_SONG_LOCATIONS);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3157,7 +3157,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"All Tokens - Shuffle all 100 GS tokens." "All Tokens - Shuffle all 100 GS tokens."
); );
UIWidgets::EnhancementCombobox("gRandomizeShuffleTokens", randoTokensanity, 4, RO_TOKENSANITY_OFF); UIWidgets::EnhancementCombobox("gRandomizeShuffleTokens", randoTokensanity, RO_TOKENSANITY_MAX, RO_TOKENSANITY_OFF);
ImGui::Dummy(ImVec2(0,0)); ImGui::Dummy(ImVec2(0,0));
@ -3249,7 +3249,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\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" "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, RO_SHOPSANITY_OFF); UIWidgets::EnhancementCombobox("gRandomizeShopsanity", randoShopsanity, RO_SHOPSANITY_MAX, RO_SHOPSANITY_OFF);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3264,7 +3264,7 @@ void DrawRandoEditor(bool& open) {
"Expensive - Scrubs will be shuffled and their item will cost the vanilla price.\n" "Expensive - Scrubs will be shuffled and their item will cost the vanilla price.\n"
"\n" "\n"
"Random - Scrubs will be shuffled and their item will cost will be between 0-95 rupees.\n"); "Random - Scrubs will be shuffled and their item will cost will be between 0-95 rupees.\n");
UIWidgets::EnhancementCombobox("gRandomizeShuffleScrubs", randoShuffleScrubs, 4, RO_SCRUBS_OFF); UIWidgets::EnhancementCombobox("gRandomizeShuffleScrubs", randoShuffleScrubs, RO_SCRUBS_MAX, RO_SCRUBS_OFF);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3291,7 +3291,7 @@ void DrawRandoEditor(bool& open) {
"On (no hints) - Salesmen will be included but won't tell you what you'll get.\n" "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." "On (with hints) - Salesmen will be included and you'll know what you're buying."
); );
UIWidgets::EnhancementCombobox("gRandomizeShuffleMerchants", randoShuffleMerchants, 3, RO_SHUFFLE_MERCHANTS_OFF); UIWidgets::EnhancementCombobox("gRandomizeShuffleMerchants", randoShuffleMerchants, RO_SHUFFLE_MERCHANTS_MAX, RO_SHUFFLE_MERCHANTS_OFF);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3346,7 +3346,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Anywhere - Spiritual stones and medallions can appear anywhere." "Anywhere - Spiritual stones and medallions can appear anywhere."
); );
UIWidgets::EnhancementCombobox("gRandomizeShuffleDungeonReward", randoShuffleDungeonRewards, 4, RO_DUNGEON_REWARDS_END_OF_DUNGEON); UIWidgets::EnhancementCombobox("gRandomizeShuffleDungeonReward", randoShuffleDungeonRewards, RO_DUNGEON_REWARDS_MAX, RO_DUNGEON_REWARDS_END_OF_DUNGEON);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3365,7 +3365,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Anywhere - Maps & Compasses can appear anywhere in the world." "Anywhere - Maps & Compasses can appear anywhere in the world."
); );
UIWidgets::EnhancementCombobox("gRandomizeStartingMapsCompasses", randoShuffleMapsAndCompasses, 6, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON); UIWidgets::EnhancementCombobox("gRandomizeStartingMapsCompasses", randoShuffleMapsAndCompasses, RO_DUNGEON_ITEM_LOC_MAX, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3384,7 +3384,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Anywhere - Small Keys can appear anywhere in the world." "Anywhere - Small Keys can appear anywhere in the world."
); );
UIWidgets::EnhancementCombobox("gRandomizeKeysanity", randoShuffleSmallKeys, 6, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON); UIWidgets::EnhancementCombobox("gRandomizeKeysanity", randoShuffleSmallKeys, RO_DUNGEON_ITEM_LOC_MAX, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3401,7 +3401,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Selection - Hand select which dungeons will have their keys replaced with keyrings." "Selection - Hand select which dungeons will have their keys replaced with keyrings."
); );
UIWidgets::EnhancementCombobox("gRandomizeShuffleKeyRings", randoShuffleKeyRings, 4, RO_KEYRINGS_OFF); UIWidgets::EnhancementCombobox("gRandomizeShuffleKeyRings", randoShuffleKeyRings, RO_KEYRINGS_MAX, RO_KEYRINGS_OFF);
ImGui::PopItemWidth(); ImGui::PopItemWidth();
switch (CVar_GetS32("gRandomizeShuffleKeyRings", RO_KEYRINGS_OFF)) { switch (CVar_GetS32("gRandomizeShuffleKeyRings", RO_KEYRINGS_OFF)) {
case RO_KEYRINGS_COUNT: case RO_KEYRINGS_COUNT:
@ -3437,7 +3437,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Anywhere - Thieve's Hideout Keys can appear anywhere in the world." "Anywhere - Thieve's Hideout Keys can appear anywhere in the world."
); );
UIWidgets::EnhancementCombobox("gRandomizeGerudoKeys", randoShuffleGerudoFortressKeys, 4, RO_GERUDO_KEYS_VANILLA); UIWidgets::EnhancementCombobox("gRandomizeGerudoKeys", randoShuffleGerudoFortressKeys, RO_GERUDO_KEYS_MAX, RO_GERUDO_KEYS_VANILLA);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3456,7 +3456,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Anywhere - Boss Keys can appear anywhere in the world." "Anywhere - Boss Keys can appear anywhere in the world."
); );
UIWidgets::EnhancementCombobox("gRandomizeBossKeysanity", randoShuffleBossKeys, 6, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON); UIWidgets::EnhancementCombobox("gRandomizeBossKeysanity", randoShuffleBossKeys, RO_DUNGEON_ITEM_LOC_MAX, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3483,7 +3483,7 @@ 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" "- 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." "- Tokens: Obtain the specified amount of Skulltula tokens."
); );
UIWidgets::EnhancementCombobox("gRandomizeShuffleGanonBossKey", randoShuffleGanonsBossKey, 12, RO_GANON_BOSS_KEY_VANILLA); UIWidgets::EnhancementCombobox("gRandomizeShuffleGanonBossKey", randoShuffleGanonsBossKey, RO_GANON_BOSS_KEY_MAX, RO_GANON_BOSS_KEY_VANILLA);
ImGui::PopItemWidth(); ImGui::PopItemWidth();
switch (CVar_GetS32("gRandomizeShuffleGanonBossKey", RO_GANON_BOSS_KEY_VANILLA)) { switch (CVar_GetS32("gRandomizeShuffleGanonBossKey", RO_GANON_BOSS_KEY_VANILLA)) {
case RO_GANON_BOSS_KEY_LACS_MEDALLIONS: case RO_GANON_BOSS_KEY_LACS_MEDALLIONS:
@ -3621,7 +3621,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Minimal - Most excess items are removed." "Minimal - Most excess items are removed."
); );
UIWidgets::EnhancementCombobox("gRandomizeItemPool", randoItemPool, 4, RO_ITEM_POOL_BALANCED); UIWidgets::EnhancementCombobox("gRandomizeItemPool", randoItemPool, RO_ITEM_POOL_MAX, RO_ITEM_POOL_BALANCED);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
// Ice Traps // Ice Traps
@ -3640,7 +3640,7 @@ void DrawRandoEditor(bool& open) {
"Onslaught - All junk items will be replaced by Ice Traps, even those " "Onslaught - All junk items will be replaced by Ice Traps, even those "
"in the base pool." "in the base pool."
); );
UIWidgets::EnhancementCombobox("gRandomizeIceTraps", randoIceTraps, 5, RO_ICE_TRAPS_NORMAL); UIWidgets::EnhancementCombobox("gRandomizeIceTraps", randoIceTraps, RO_ICE_TRAPS_MAX, RO_ICE_TRAPS_NORMAL);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3658,7 +3658,7 @@ void DrawRandoEditor(bool& open) {
"Need Stone of Agony - Hints are only available after obtaining the Stone of Agony.\n" "Need Stone of Agony - Hints are only available after obtaining the Stone of Agony.\n"
"\n" "\n"
"Need Mask of Truth - Hints are only available whilst wearing the Mask of Truth.\n"); "Need Mask of Truth - Hints are only available whilst wearing the Mask of Truth.\n");
UIWidgets::EnhancementCombobox("gRandomizeGossipStoneHints", randoGossipStoneHints, 4, RO_GOSSIP_STONES_NEED_NOTHING); UIWidgets::EnhancementCombobox("gRandomizeGossipStoneHints", randoGossipStoneHints, RO_GOSSIP_STONES_MAX, RO_GOSSIP_STONES_NEED_NOTHING);
if (CVar_GetS32("gRandomizeGossipStoneHints", 1) != 0) { if (CVar_GetS32("gRandomizeGossipStoneHints", 1) != 0) {
// Hint Clarity // Hint Clarity
ImGui::Dummy(ImVec2(0.0f, 0.0f)); ImGui::Dummy(ImVec2(0.0f, 0.0f));
@ -3676,7 +3676,7 @@ void DrawRandoEditor(bool& open) {
"Clear - Hints are clearly written and are unique for each item.\n" "Clear - Hints are clearly written and are unique for each item.\n"
"Ex: Kokiri Sword > the Kokiri Sword" "Ex: Kokiri Sword > the Kokiri Sword"
); );
UIWidgets::EnhancementCombobox("gRandomizeHintClarity", randoHintClarity, 3, RO_HINT_CLARITY_CLEAR); UIWidgets::EnhancementCombobox("gRandomizeHintClarity", randoHintClarity, RO_HINT_CLARITY_MAX, RO_HINT_CLARITY_CLEAR);
// Hint Distribution // Hint Distribution
ImGui::Dummy(ImVec2(0.0f, 0.0f)); ImGui::Dummy(ImVec2(0.0f, 0.0f));
@ -3692,7 +3692,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"Very Strong - Many powerful hints." "Very Strong - Many powerful hints."
); );
UIWidgets::EnhancementCombobox("gRandomizeHintDistribution", randoHintDistribution, 4, RO_HINT_DIST_BALANCED); UIWidgets::EnhancementCombobox("gRandomizeHintDistribution", randoHintDistribution, RO_HINT_DIST_MAX, RO_HINT_DIST_BALANCED);
ImGui::Unindent(); ImGui::Unindent();
} }
@ -3890,7 +3890,7 @@ void DrawRandoEditor(bool& open) {
"\n" "\n"
"No logic - Item placement is completely random. MAY BE IMPOSSIBLE TO BEAT." "No logic - Item placement is completely random. MAY BE IMPOSSIBLE TO BEAT."
); );
UIWidgets::EnhancementCombobox("gRandomizeLogicRules", randoLogicRules, 2, RO_GENERIC_OFF); UIWidgets::EnhancementCombobox("gRandomizeLogicRules", randoLogicRules, RO_LOGIC_MAX, RO_LOGIC_GLITCHLESS);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
@ -3955,7 +3955,7 @@ void DrawRandoEditor(bool& open) {
// TODO: Show this but disabled when we have options for disabled Comboboxes. // TODO: Show this but disabled when we have options for disabled Comboboxes.
if (CVar_GetS32("gRandomizeShuffleDungeonReward", RO_DUNGEON_REWARDS_END_OF_DUNGEON) != RO_DUNGEON_REWARDS_END_OF_DUNGEON) { if (CVar_GetS32("gRandomizeShuffleDungeonReward", RO_DUNGEON_REWARDS_END_OF_DUNGEON) != RO_DUNGEON_REWARDS_END_OF_DUNGEON) {
ImGui::Text(Settings::LinksPocketItem.GetName().c_str()); ImGui::Text(Settings::LinksPocketItem.GetName().c_str());
UIWidgets::EnhancementCombobox("gRandomizeLinksPocket", randoLinksPocket, 4, RO_LINKS_POCKET_DUNGEON_REWARD); UIWidgets::EnhancementCombobox("gRandomizeLinksPocket", randoLinksPocket, RO_LINKS_POCKET_MAX, RO_LINKS_POCKET_DUNGEON_REWARD);
UIWidgets::PaddedSeparator(); UIWidgets::PaddedSeparator();
} }

View File

@ -1070,193 +1070,291 @@ typedef enum {
RSK_MAX RSK_MAX
} RandomizerSettingKey; } RandomizerSettingKey;
typedef enum RandoOption { //Generic Settings (any binary option can use this)
//Generic Settings (any binary option can use this) // off/on
//(off/on, no/yes, don't skip/skip) typedef enum {
RO_GENERIC_OFF, RO_GENERIC_OFF,
RO_GENERIC_ON, RO_GENERIC_ON,
RO_GENERIC_NO = 0, RO_GENERIC_ON_OFF_MAX,
RO_GENERIC_YES, } RandoOptionGenericOffOn;
RO_GENERIC_DONT_SKIP = 0,
RO_GENERIC_SKIP,
//Forest settings (closed, closed deku, open) // no/yes
RO_FOREST_CLOSED = 0, typedef enum {
RO_FOREST_CLOSED_DEKU, RO_GENERIC_NO,
RO_FOREST_OPEN, RO_GENERIC_YES,
RO_GENERIC_NO_YES_MAX,
} RandoOptionGenericNoYes;
//Door of Time settings (closed, song only, open) // don't skip/skip
RO_DOOROFTIME_CLOSED = 0, typedef enum {
RO_DOOROFTIME_SONGONLY, RO_GENERIC_DONT_SKIP,
RO_DOOROFTIME_OPEN, RO_GENERIC_SKIP,
RO_GENERIC_SKIP_MAX,
//Zora's Fountain settings (closed, closed as child, open) } RandoOptionGenericSkip;
RO_ZF_CLOSED = 0,
RO_ZF_CLOSED_CHILD,
RO_ZF_OPEN,
//Starting Age settings (child, adult, random) //Forest settings (closed, closed deku, open)
RO_AGE_CHILD = 0, typedef enum {
RO_AGE_ADULT, RO_FOREST_CLOSED,
RO_AGE_RANDOM, RO_FOREST_CLOSED_DEKU,
RO_FOREST_OPEN,
RO_FOREST_MAX,
} RandoOptionForest;
//Gerudo Fortress settings (normal, fast, open) //Door of Time settings (closed, song only, open)
RO_GF_NORMAL = 0, typedef enum {
RO_GF_FAST, RO_DOOROFTIME_CLOSED,
RO_GF_OPEN, RO_DOOROFTIME_SONGONLY,
RO_DOOROFTIME_OPEN,
RO_DOOROFTIME_MAX,
} RandoOptionDoorOfTime;
//Kakariko Gate settings (closed/open) //Zora's Fountain settings (closed, closed as child, open)
RO_KAK_GATE_CLOSED = 0, typedef enum {
RO_KAK_GATE_OPEN, RO_ZF_CLOSED,
RO_ZF_CLOSED_CHILD,
RO_ZF_OPEN,
RO_ZF_MAX,
} RandoOptionZorasFountain;
//Rainbow Bridge settings (vanilla, always open, stones, medallions, dungeon rewards, dungeons, tokens) //Starting Age settings (child, adult, random)
RO_BRIDGE_VANILLA = 0, typedef enum {
RO_BRIDGE_ALWAYS_OPEN, RO_AGE_CHILD,
RO_BRIDGE_STONES, RO_AGE_ADULT,
RO_BRIDGE_MEDALLIONS, RO_AGE_RANDOM,
RO_BRIDGE_DUNGEON_REWARDS, RO_AGE_MAX,
RO_BRIDGE_DUNGEONS, } RandoOptionStartingAge;
RO_BRIDGE_TOKENS,
//Shopsanity settings (off, 0-4 items, random) //Gerudo Fortress settings (normal, fast, open)
RO_SHOPSANITY_OFF = 0, typedef enum {
RO_SHOPSANITY_ZERO_ITEMS, RO_GF_NORMAL,
RO_SHOPSANITY_ONE_ITEM, RO_GF_FAST,
RO_SHOPSANITY_TWO_ITEMS, RO_GF_OPEN,
RO_SHOPSANITY_THREE_ITEMS, RO_GF_MAX,
RO_SHOPSANITY_FOUR_ITEMS, } RandoOptionGerudoFortress;
RO_SHOPSANITY_RANDOM,
//Scrubsanity settings (off, affordable, expensive, random) //Kakariko Gate settings (closed/open)
RO_SCRUBS_OFF = 0, typedef enum {
RO_SCRUBS_AFFORDABLE, RO_KAK_GATE_CLOSED,
RO_SCRUBS_EXPENSIVE, RO_KAK_GATE_OPEN,
RO_SCRUBS_RANDOM, RO_KAK_GATE_MAX,
} RandoOptionKakarikoGate;
//Ammo drop settings (on, "on+bombchu", off) //Rainbow Bridge settings (vanilla, always open, stones, medallions, dungeon rewards, dungeons, tokens)
RO_AMMO_DROPS_ON = 0, typedef enum {
RO_AMMO_DROPS_ON_PLUS_BOMBCHU, RO_BRIDGE_VANILLA = 0,
RO_AMMO_DROPS_OFF, RO_BRIDGE_ALWAYS_OPEN,
RO_BRIDGE_STONES,
RO_BRIDGE_MEDALLIONS,
RO_BRIDGE_DUNGEON_REWARDS,
RO_BRIDGE_DUNGEONS,
RO_BRIDGE_TOKENS,
RO_BRIDGE_MAX,
} RandoOptionRainbowBridge;
//Any Dungeon Item (start with, vanilla, own dungeon, any dungeon, //Shopsanity settings (off, 0-4 items, random)
//overworld, anywhere) typedef enum {
RO_DUNGEON_ITEM_LOC_STARTWITH = 0, RO_SHOPSANITY_OFF,
RO_DUNGEON_ITEM_LOC_VANILLA, RO_SHOPSANITY_ZERO_ITEMS,
RO_DUNGEON_ITEM_LOC_OWN_DUNGEON, RO_SHOPSANITY_ONE_ITEM,
RO_DUNGEON_ITEM_LOC_ANY_DUNGEON, RO_SHOPSANITY_TWO_ITEMS,
RO_DUNGEON_ITEM_LOC_OVERWORLD, RO_SHOPSANITY_THREE_ITEMS,
RO_DUNGEON_ITEM_LOC_ANYWHERE, RO_SHOPSANITY_FOUR_ITEMS,
RO_SHOPSANITY_RANDOM,
RO_SHOPSANITY_MAX,
} RandoOptionShopsanity;
//Dungeon reward settings //Scrubsanity settings (off, affordable, expensive, random)
RO_DUNGEON_REWARDS_END_OF_DUNGEON = 0, typedef enum {
RO_DUNGEON_REWARDS_ANY_DUNGEON, RO_SCRUBS_OFF,
RO_DUNGEON_REWARDS_OVERWORLD, RO_SCRUBS_AFFORDABLE,
RO_DUNGEON_REWARDS_ANYWHERE, RO_SCRUBS_EXPENSIVE,
RO_SCRUBS_RANDOM,
RO_SCRUBS_MAX,
} RandoOptionScrubsanity;
//Keyring Settings //Ammo drop settings (on, "on+bombchu", off)
RO_KEYRINGS_OFF = 0, typedef enum {
RO_KEYRINGS_RANDOM, RO_AMMO_DROPS_ON,
RO_KEYRINGS_COUNT, RO_AMMO_DROPS_ON_PLUS_BOMBCHU,
RO_KEYRINGS_SELECTION, RO_AMMO_DROPS_OFF,
RO_AMMO_DROPS_MAX,
} RandoOptionAmmoDrops;
//Ganon Boss Key Settings (vanilla, own dungeon, start with, //Any Dungeon Item (start with, vanilla, own dungeon, any dungeon,
//overworld, anywhere) //overworld, anywhere)
RO_GANON_BOSS_KEY_VANILLA = 0, typedef enum {
RO_GANON_BOSS_KEY_OWN_DUNGEON, RO_DUNGEON_ITEM_LOC_STARTWITH,
RO_GANON_BOSS_KEY_STARTWITH, RO_DUNGEON_ITEM_LOC_VANILLA,
RO_GANON_BOSS_KEY_ANY_DUNGEON, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON,
RO_GANON_BOSS_KEY_OVERWORLD, RO_DUNGEON_ITEM_LOC_ANY_DUNGEON,
RO_GANON_BOSS_KEY_ANYWHERE, RO_DUNGEON_ITEM_LOC_OVERWORLD,
RO_GANON_BOSS_KEY_LACS_VANILLA, RO_DUNGEON_ITEM_LOC_ANYWHERE,
RO_GANON_BOSS_KEY_LACS_MEDALLIONS, RO_DUNGEON_ITEM_LOC_MAX,
RO_GANON_BOSS_KEY_LACS_STONES, } RandoOptionDungeonItemLocation;
RO_GANON_BOSS_KEY_LACS_REWARDS,
RO_GANON_BOSS_KEY_LACS_DUNGEONS,
RO_GANON_BOSS_KEY_LACS_TOKENS,
//Ganon's Trials //Dungeon reward settings
RO_GANONS_TRIALS_SKIP = 0, typedef enum {
RO_GANONS_TRIALS_SET_NUMBER, RO_DUNGEON_REWARDS_END_OF_DUNGEON,
RO_GANONS_TRIALS_RANDOM_NUMBER, RO_DUNGEON_REWARDS_ANY_DUNGEON,
RO_DUNGEON_REWARDS_OVERWORLD,
RO_DUNGEON_REWARDS_ANYWHERE,
RO_DUNGEON_REWARDS_MAX,
} RandoOptionDungeonRewards;
//Shuffle Dungeon Entrance Settings (Off, on, plus ganon) //Keyring Settings
RO_DUNGEON_ENTRANCE_SHUFFLE_OFF = 0, typedef enum {
RO_DUNGEON_ENTRANCE_SHUFFLE_ON, RO_KEYRINGS_OFF,
RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON, RO_KEYRINGS_RANDOM,
RO_KEYRINGS_COUNT,
RO_KEYRINGS_SELECTION,
RO_KEYRINGS_MAX,
} RandoOptionKeyrings;
//Shuffle Interior Entrance Settings (Off, simple, all) //Ganon's Boss Key Settings (vanilla, own dungeon, start with,
RO_INTERIOR_ENTRANCE_SHUFFLE_OFF = 0, //overworld, anywhere)
RO_INTERIOR_ENTRANCE_SHUFFLE_SIMPLE, typedef enum {
RO_INTERIOR_ENTRANCE_SHUFFLE_ALL, RO_GANON_BOSS_KEY_VANILLA,
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,
RO_GANON_BOSS_KEY_MAX,
} RandoOptionGanonsBossKey;
//Song shuffle Settings (Song locations, Dungeon rewards, anywhere) //Ganon's Trials
RO_SONG_SHUFFLE_SONG_LOCATIONS = 0, typedef enum {
RO_SONG_SHUFFLE_DUNGEON_REWARDS, RO_GANONS_TRIALS_SKIP,
RO_SONG_SHUFFLE_ANYWHERE, RO_GANONS_TRIALS_SET_NUMBER,
RO_GANONS_TRIALS_RANDOM_NUMBER,
RO_GANONS_TRIALS_MAX,
} RandoOptionGanonsTrials;
//Shuffle Merchants Settings (Off, On no hint, on with wint) //Shuffle Dungeon Entrance Settings (Off, on, plus ganon)
RO_SHUFFLE_MERCHANTS_OFF = 0, typedef enum {
RO_SHUFFLE_MERCHANTS_ON_NO_HINT, RO_DUNGEON_ENTRANCE_SHUFFLE_OFF,
RO_SHUFFLE_MERCHANTS_ON_HINT, RO_DUNGEON_ENTRANCE_SHUFFLE_ON,
RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON,
RO_DUNGEON_ENTRANCE_SHUFFLE_MAX,
} RandoOptionDungeonEntranceShuffle;
//Starting Ocarina Settings (off, fairy) //Shuffle Interior Entrance Settings (Off, simple, all)
RO_STARTING_OCARINA_OFF = 0, typedef enum {
RO_STARTING_OCARINA_FAIRY, RO_INTERIOR_ENTRANCE_SHUFFLE_OFF,
RO_INTERIOR_ENTRANCE_SHUFFLE_SIMPLE,
RO_INTERIOR_ENTRANCE_SHUFFLE_ALL,
RO_INTERIOR_ENTRANCE_SHUFFLE_MAX,
} RandoOptionInteriorEntranceShuffle;
//Item Pool Settings //Song shuffle Settings (Song locations, Dungeon rewards, anywhere)
RO_ITEM_POOL_PLENTIFUL = 0, typedef enum {
RO_ITEM_POOL_BALANCED, RO_SONG_SHUFFLE_SONG_LOCATIONS,
RO_ITEM_POOL_SCARCE, RO_SONG_SHUFFLE_DUNGEON_REWARDS,
RO_ITEM_POOL_MINIMAL, RO_SONG_SHUFFLE_ANYWHERE,
RO_SONG_SHUFFLE_MAX,
} RandoOptionSongShuffle;
//Ice Trap Settings //Shuffle Merchants Settings (Off, On no hint, on with wint)
RO_ICE_TRAPS_OFF = 0, typedef enum {
RO_ICE_TRAPS_NORMAL, RO_SHUFFLE_MERCHANTS_OFF,
RO_ICE_TRAPS_EXTRA, RO_SHUFFLE_MERCHANTS_ON_NO_HINT,
RO_ICE_TRAPS_MAYHEM, RO_SHUFFLE_MERCHANTS_ON_HINT,
RO_ICE_TRAPS_ONSLAUGHT, RO_SHUFFLE_MERCHANTS_MAX,
} RandoOptionShuffleMerchants;
//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) //Starting Ocarina Settings (off, fairy)
RO_HINT_DIST_USELESS = 0, typedef enum {
RO_HINT_DIST_BALANCED, RO_STARTING_OCARINA_OFF,
RO_HINT_DIST_STRONG, RO_STARTING_OCARINA_FAIRY,
RO_HINT_DIST_VERY_STRONG, RO_STARTING_OCARINA_MAX,
} RandoOptionStartingOcarina;
//Gerudo Fortress Key Settings (vanilla, any dungeon, overworld, //Item Pool Settings
//anywhere) typedef enum {
RO_GERUDO_KEYS_VANILLA = 0, RO_ITEM_POOL_PLENTIFUL,
RO_GERUDO_KEYS_ANY_DUNGEON, RO_ITEM_POOL_BALANCED,
RO_GERUDO_KEYS_OVERWORLD, RO_ITEM_POOL_SCARCE,
RO_GERUDO_KEYS_ANYWHERE, RO_ITEM_POOL_MINIMAL,
RO_ITEM_POOL_MAX,
} RandoOptionItemPool;
//Tokensanity settings (off, dungeons, overworld, all) //Ice Trap Settings
RO_TOKENSANITY_OFF = 0, typedef enum {
RO_TOKENSANITY_DUNGEONS, RO_ICE_TRAPS_OFF,
RO_TOKENSANITY_OVERWORLD, RO_ICE_TRAPS_NORMAL,
RO_TOKENSANITY_ALL, RO_ICE_TRAPS_EXTRA,
RO_ICE_TRAPS_MAYHEM,
RO_ICE_TRAPS_ONSLAUGHT,
RO_ICE_TRAPS_MAX,
} RandoOptionIceTraps;
//Link's Pocket Settings (dungeon reward, advancement, anything, nothing) //Gossip Stone Hint Settings (no hints, needs nothing,
RO_LINKS_POCKET_DUNGEON_REWARD = 0, //needs mask of truth, needs stone of agony)
RO_LINKS_POCKET_ADVANCEMENT, typedef enum {
RO_LINKS_POCKET_ANYTHING, RO_GOSSIP_STONES_NONE,
RO_LINKS_POCKET_NOTHING, RO_GOSSIP_STONES_NEED_NOTHING,
RO_GOSSIP_STONES_NEED_TRUTH,
RO_GOSSIP_STONES_NEED_STONE,
RO_GOSSIP_STONES_MAX,
} RandoOptionGossipStones;
//If you're going to add to this enum, please list the default option first //Hint Clarity Settings (obscure, ambiguous, clear)
//with a value of zero. typedef enum {
RO_HINT_CLARITY_OBSCURE,
RO_HINT_CLARITY_AMBIGUOUS,
RO_HINT_CLARITY_CLEAR,
RO_HINT_CLARITY_MAX,
} RandoOptionHintClarity;
} RandoOption; //Hint Distribution Settings (useless, balanced, strong, very strong)
typedef enum {
RO_HINT_DIST_USELESS,
RO_HINT_DIST_BALANCED,
RO_HINT_DIST_STRONG,
RO_HINT_DIST_VERY_STRONG,
RO_HINT_DIST_MAX,
} RandoOptionHintDistribution;
//Gerudo Fortress Key Settings (vanilla, any dungeon, overworld,
//anywhere)
typedef enum {
RO_GERUDO_KEYS_VANILLA,
RO_GERUDO_KEYS_ANY_DUNGEON,
RO_GERUDO_KEYS_OVERWORLD,
RO_GERUDO_KEYS_ANYWHERE,
RO_GERUDO_KEYS_MAX,
} RandoOptionGerudoKeys;
//Tokensanity settings (off, dungeons, overworld, all)
typedef enum {
RO_TOKENSANITY_OFF,
RO_TOKENSANITY_DUNGEONS,
RO_TOKENSANITY_OVERWORLD,
RO_TOKENSANITY_ALL,
RO_TOKENSANITY_MAX,
} RandoOptionTokensanity;
//Link's Pocket Settings (dungeon reward, advancement, anything, nothing)
typedef enum {
RO_LINKS_POCKET_DUNGEON_REWARD,
RO_LINKS_POCKET_ADVANCEMENT,
RO_LINKS_POCKET_ANYTHING,
RO_LINKS_POCKET_NOTHING,
RO_LINKS_POCKET_MAX,
} RandoOptionLinksPocket;
// Logic (glitchless/no logic)
typedef enum {
RO_LOGIC_GLITCHLESS,
RO_LOGIC_NO_LOGIC,
RO_LOGIC_MAX,
} RandoOptionLogic;
typedef enum { typedef enum {
CAN_OBTAIN, CAN_OBTAIN,