Rando: Settings Enum (#1761)

* added rando option enum; added options to load from spoiler file

* whoops

* Moved to `randomizerTypes` header; fixed ammo drop enum

* Actually populated options with new enums

* Added add'l enums for ganon boss key
This commit is contained in:
Ralphie Morell 2022-11-22 17:11:05 -05:00 committed by GitHub
parent 0fca1019a2
commit 9cfe7bff47
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 354 additions and 149 deletions

View File

@ -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;
gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_OVERWORLD;
} else if(it.value() == "Anywhere") {
gSaveContext.randoSettings[index].value = 5;
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();
}

View File

@ -13,7 +13,6 @@
#define NUM_NAVI_MESSAGES 19
#define NUM_ICE_TRAP_MESSAGES 23
class Randomizer {
private:
std::unordered_map<RandomizerCheck, RandomizerGetData> itemLocations;

View File

@ -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,