mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-01-30 23:10:14 -05:00
Fix various randomiser setting bugs (#3742)
* Fix various randomiser setting bugs * Fix shuffle entrences metasetting getting locked on per savefile after an entrance rando seed is generated once
This commit is contained in:
parent
f74ba3c1da
commit
e731380e28
@ -41,7 +41,7 @@ void Settings::CreateOptions() {
|
|||||||
CreateOptionDescriptions();
|
CreateOptionDescriptions();
|
||||||
// clang-format off
|
// clang-format off
|
||||||
mOptions[RSK_FOREST] = Option::U8("Forest", {"Closed", "Closed Deku", "Open"}, OptionCategory::Setting, "gRandomizeForest", mOptionDescriptions[RSK_FOREST], WidgetType::Combobox, RO_FOREST_CLOSED);
|
mOptions[RSK_FOREST] = Option::U8("Forest", {"Closed", "Closed Deku", "Open"}, OptionCategory::Setting, "gRandomizeForest", mOptionDescriptions[RSK_FOREST], WidgetType::Combobox, RO_FOREST_CLOSED);
|
||||||
mOptions[RSK_KAK_GATE] = Option::U8("Kakariko Gate", {"Close", "Open"}, OptionCategory::Setting, "gRandomizeKakarikoGate", mOptionDescriptions[RSK_KAK_GATE]);
|
mOptions[RSK_KAK_GATE] = Option::U8("Kakariko Gate", {"Closed", "Open"}, OptionCategory::Setting, "gRandomizeKakarikoGate", mOptionDescriptions[RSK_KAK_GATE]);
|
||||||
mOptions[RSK_DOOR_OF_TIME] = Option::U8("Door of Time", {"Closed", "Song only", "Open"}, OptionCategory::Setting, "gRandomizeDoorOfTime", mOptionDescriptions[RSK_DOOR_OF_TIME], WidgetType::Combobox);
|
mOptions[RSK_DOOR_OF_TIME] = Option::U8("Door of Time", {"Closed", "Song only", "Open"}, OptionCategory::Setting, "gRandomizeDoorOfTime", mOptionDescriptions[RSK_DOOR_OF_TIME], WidgetType::Combobox);
|
||||||
mOptions[RSK_ZORAS_FOUNTAIN] = Option::U8("Zora's Fountain", {"Closed", "Closed as child", "Open"}, OptionCategory::Setting, "gRandomizeZorasFountain", mOptionDescriptions[RSK_ZORAS_FOUNTAIN]);
|
mOptions[RSK_ZORAS_FOUNTAIN] = Option::U8("Zora's Fountain", {"Closed", "Closed as child", "Open"}, OptionCategory::Setting, "gRandomizeZorasFountain", mOptionDescriptions[RSK_ZORAS_FOUNTAIN]);
|
||||||
mOptions[RSK_GERUDO_FORTRESS] = Option::U8("Gerudo Fortress", {"Normal", "Fast", "Open"}, OptionCategory::Setting, "gRandomizeGerudoFortress", mOptionDescriptions[RSK_GERUDO_FORTRESS]);
|
mOptions[RSK_GERUDO_FORTRESS] = Option::U8("Gerudo Fortress", {"Normal", "Fast", "Open"}, OptionCategory::Setting, "gRandomizeGerudoFortress", mOptionDescriptions[RSK_GERUDO_FORTRESS]);
|
||||||
@ -134,7 +134,7 @@ void Settings::CreateOptions() {
|
|||||||
mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL] = Option::Bool("Bottom of the Well", "gRandomizeShuffleKeyRingsBottomOfTheWell", "", IMFLAG_NONE);
|
mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL] = Option::Bool("Bottom of the Well", "gRandomizeShuffleKeyRingsBottomOfTheWell", "", IMFLAG_NONE);
|
||||||
mOptions[RSK_KEYRINGS_GTG] = Option::Bool("Gerudo Training Grounds", "gRandomizeShuffleKeyRingsGTG", "", IMFLAG_NONE);
|
mOptions[RSK_KEYRINGS_GTG] = Option::Bool("Gerudo Training Grounds", "gRandomizeShuffleKeyRingsGTG", "", IMFLAG_NONE);
|
||||||
mOptions[RSK_KEYRINGS_GANONS_CASTLE] = Option::Bool("Ganon's Castle", "gRandomizeShuffleKeyRingsGanonsCastle");
|
mOptions[RSK_KEYRINGS_GANONS_CASTLE] = Option::Bool("Ganon's Castle", "gRandomizeShuffleKeyRingsGanonsCastle");
|
||||||
mOptions[RSK_SKIP_CHILD_STEALTH] = Option::Bool("Skip Child Stealth", {"Don't Skip", "Skip"}, OptionCategory::Setting, "gRandomizeSkipChildZelda", mOptionDescriptions[RSK_SKIP_CHILD_STEALTH], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP);
|
mOptions[RSK_SKIP_CHILD_STEALTH] = Option::Bool("Skip Child Stealth", {"Don't Skip", "Skip"}, OptionCategory::Setting, "gRandomizeSkipChildStealth", mOptionDescriptions[RSK_SKIP_CHILD_STEALTH], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP);
|
||||||
mOptions[RSK_SKIP_CHILD_ZELDA] = Option::Bool("Skip Child Zelda", {"Don't Skip", "Skip"}, OptionCategory::Setting, "gRandomizeSkipChildZelda", mOptionDescriptions[RSK_SKIP_CHILD_ZELDA], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP);
|
mOptions[RSK_SKIP_CHILD_ZELDA] = Option::Bool("Skip Child Zelda", {"Don't Skip", "Skip"}, OptionCategory::Setting, "gRandomizeSkipChildZelda", mOptionDescriptions[RSK_SKIP_CHILD_ZELDA], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP);
|
||||||
mOptions[RSK_SKIP_TOWER_ESCAPE] = Option::Bool("Skip Tower Escape", {"Don't Skip", "Skip"}, OptionCategory::Setting, "gRandomizeSkipTowerEscape", mOptionDescriptions[RSK_SKIP_TOWER_ESCAPE], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP);
|
mOptions[RSK_SKIP_TOWER_ESCAPE] = Option::Bool("Skip Tower Escape", {"Don't Skip", "Skip"}, OptionCategory::Setting, "gRandomizeSkipTowerEscape", mOptionDescriptions[RSK_SKIP_TOWER_ESCAPE], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP);
|
||||||
mOptions[RSK_SKIP_EPONA_RACE] = Option::Bool("Skip Epona Race", {"Don't Skip", "Skip"}, OptionCategory::Setting, "gRandomizeSkipEponaRace", mOptionDescriptions[RSK_SKIP_EPONA_RACE], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP);
|
mOptions[RSK_SKIP_EPONA_RACE] = Option::Bool("Skip Epona Race", {"Don't Skip", "Skip"}, OptionCategory::Setting, "gRandomizeSkipEponaRace", mOptionDescriptions[RSK_SKIP_EPONA_RACE], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP);
|
||||||
@ -173,7 +173,7 @@ void Settings::CreateOptions() {
|
|||||||
mOptions[RSK_FULL_WALLETS] = Option::Bool("Full Wallets", {"No", "Yes"}, OptionCategory::Setting, "gRandomizeFullWallets", mOptionDescriptions[RSK_FULL_WALLETS], WidgetType::Checkbox, RO_GENERIC_OFF);
|
mOptions[RSK_FULL_WALLETS] = Option::Bool("Full Wallets", {"No", "Yes"}, OptionCategory::Setting, "gRandomizeFullWallets", mOptionDescriptions[RSK_FULL_WALLETS], WidgetType::Checkbox, RO_GENERIC_OFF);
|
||||||
mOptions[RSK_STARTING_ZELDAS_LULLABY] = Option::Bool("Start with Zelda's Lullaby", "gRandomizeStartingZeldasLullaby", "", IMFLAG_NONE);
|
mOptions[RSK_STARTING_ZELDAS_LULLABY] = Option::Bool("Start with Zelda's Lullaby", "gRandomizeStartingZeldasLullaby", "", IMFLAG_NONE);
|
||||||
mOptions[RSK_STARTING_EPONAS_SONG] = Option::Bool("Start with Epona's Song", "gRandomizeStartingEponasSong", "", IMFLAG_NONE);
|
mOptions[RSK_STARTING_EPONAS_SONG] = Option::Bool("Start with Epona's Song", "gRandomizeStartingEponasSong", "", IMFLAG_NONE);
|
||||||
mOptions[RSK_STARTING_SARIAS_SONG] = Option::Bool("Start with Epona's Song", "gRandomizeStartingSariasSong", "", IMFLAG_NONE);
|
mOptions[RSK_STARTING_SARIAS_SONG] = Option::Bool("Start with Saria's Song", "gRandomizeStartingSariasSong", "", IMFLAG_NONE);
|
||||||
mOptions[RSK_STARTING_SUNS_SONG] = Option::Bool("Start with Sun's Song", "gRandomizeStartingSunsSong", "", IMFLAG_NONE);
|
mOptions[RSK_STARTING_SUNS_SONG] = Option::Bool("Start with Sun's Song", "gRandomizeStartingSunsSong", "", IMFLAG_NONE);
|
||||||
mOptions[RSK_STARTING_SONG_OF_TIME] = Option::Bool("Start with Song of Time", "gRandomizeStartingSongOfTime", "", IMFLAG_NONE);
|
mOptions[RSK_STARTING_SONG_OF_TIME] = Option::Bool("Start with Song of Time", "gRandomizeStartingSongOfTime", "", IMFLAG_NONE);
|
||||||
mOptions[RSK_STARTING_SONG_OF_STORMS] = Option::Bool("Start with Song of Storms", "gRandomizeStartingSongOfStorms", "", IMFLAG_NONE);
|
mOptions[RSK_STARTING_SONG_OF_STORMS] = Option::Bool("Start with Song of Storms", "gRandomizeStartingSongOfStorms", "", IMFLAG_NONE);
|
||||||
@ -624,6 +624,7 @@ void Settings::CreateOptions() {
|
|||||||
&mOptions[RSK_SHUFFLE_COWS],
|
&mOptions[RSK_SHUFFLE_COWS],
|
||||||
&mOptions[RSK_SHUFFLE_MAGIC_BEANS],
|
&mOptions[RSK_SHUFFLE_MAGIC_BEANS],
|
||||||
&mOptions[RSK_SHUFFLE_MERCHANTS],
|
&mOptions[RSK_SHUFFLE_MERCHANTS],
|
||||||
|
&mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES],
|
||||||
&mOptions[RSK_SHUFFLE_ADULT_TRADE],
|
&mOptions[RSK_SHUFFLE_ADULT_TRADE],
|
||||||
&mOptions[RSK_SHUFFLE_100_GS_REWARD],
|
&mOptions[RSK_SHUFFLE_100_GS_REWARD],
|
||||||
&mOptions[RSK_SHUFFLE_BOSS_SOULS],
|
&mOptions[RSK_SHUFFLE_BOSS_SOULS],
|
||||||
@ -1138,6 +1139,12 @@ Option& Settings::GetTrickOption(const RandomizerTrick key) {
|
|||||||
return mTrickOptions[key];
|
return mTrickOptions[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Settings::ResetTrickOptions() {
|
||||||
|
for (int count = 0; count < RT_MAX; count++){
|
||||||
|
mTrickOptions[count].SetSelectedIndex(0); //RANDOTODO this can probably be done better
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const std::array<Option, RSK_MAX>& Settings::GetAllOptions() const {
|
const std::array<Option, RSK_MAX>& Settings::GetAllOptions() const {
|
||||||
return mOptions;
|
return mOptions;
|
||||||
}
|
}
|
||||||
@ -1231,7 +1238,7 @@ void Settings::UpdateOptionProperties() {
|
|||||||
if (CVarGetInteger("gRandomizeForest", RO_FOREST_CLOSED) == RO_FOREST_CLOSED ||
|
if (CVarGetInteger("gRandomizeForest", RO_FOREST_CLOSED) == RO_FOREST_CLOSED ||
|
||||||
(CVarGetInteger("gRandomizeDoorOfTime", RO_DOOROFTIME_CLOSED) == RO_DOOROFTIME_CLOSED &&
|
(CVarGetInteger("gRandomizeDoorOfTime", RO_DOOROFTIME_CLOSED) == RO_DOOROFTIME_CLOSED &&
|
||||||
CVarGetInteger("gRandomizeShuffleOcarinas", RO_GENERIC_OFF) == RO_GENERIC_OFF)) /* closed door of time with ocarina shuffle off */ {
|
CVarGetInteger("gRandomizeShuffleOcarinas", RO_GENERIC_OFF) == RO_GENERIC_OFF)) /* closed door of time with ocarina shuffle off */ {
|
||||||
mOptions[RSK_STARTING_AGE].Disable("This option is disabled due to other optionos making the game unbeatable");
|
mOptions[RSK_STARTING_AGE].Disable("This option is disabled due to other options making the game unbeatable");
|
||||||
} else {
|
} else {
|
||||||
mOptions[RSK_STARTING_AGE].Enable();
|
mOptions[RSK_STARTING_AGE].Enable();
|
||||||
}
|
}
|
||||||
@ -1264,7 +1271,7 @@ void Settings::UpdateOptionProperties() {
|
|||||||
// Show Bridge Options and Medallion Count Slider
|
// Show Bridge Options and Medallion Count Slider
|
||||||
mOptions[RSK_RAINBOW_BRIDGE].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
|
mOptions[RSK_RAINBOW_BRIDGE].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
|
||||||
mOptions[RSK_BRIDGE_OPTIONS].Unhide();
|
mOptions[RSK_BRIDGE_OPTIONS].Unhide();
|
||||||
mOptions[RSK_RAINBOW_BRIDGE_REWARD_COUNT].Unhide();
|
mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT].Unhide();
|
||||||
if (bridgeOpt == RO_BRIDGE_GREG_REWARD) {
|
if (bridgeOpt == RO_BRIDGE_GREG_REWARD) {
|
||||||
if (mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT].GetOptionCount() == 7) {
|
if (mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT].GetOptionCount() == 7) {
|
||||||
mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT].ChangeOptions(NumOpts(0, 7));
|
mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT].ChangeOptions(NumOpts(0, 7));
|
||||||
@ -1667,6 +1674,8 @@ void Settings::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocatio
|
|||||||
|| mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES] || mOptions[RSK_SHUFFLE_OWL_DROPS]
|
|| mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES] || mOptions[RSK_SHUFFLE_OWL_DROPS]
|
||||||
|| mOptions[RSK_SHUFFLE_WARP_SONGS] || mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS]) {
|
|| mOptions[RSK_SHUFFLE_WARP_SONGS] || mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS]) {
|
||||||
mOptions[RSK_SHUFFLE_ENTRANCES].SetSelectedIndex(RO_GENERIC_ON);
|
mOptions[RSK_SHUFFLE_ENTRANCES].SetSelectedIndex(RO_GENERIC_ON);
|
||||||
|
} else {
|
||||||
|
mOptions[RSK_SHUFFLE_ENTRANCES].SetSelectedIndex(RO_GENERIC_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) {
|
if (mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) {
|
||||||
@ -1682,6 +1691,7 @@ void Settings::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocatio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Tricks
|
// Tricks
|
||||||
|
ResetTrickOptions();
|
||||||
for (const auto randomizerTrick : enabledTricks) {
|
for (const auto randomizerTrick : enabledTricks) {
|
||||||
mTrickOptions[randomizerTrick].SetSelectedIndex(1);
|
mTrickOptions[randomizerTrick].SetSelectedIndex(1);
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,11 @@ class Settings {
|
|||||||
*/
|
*/
|
||||||
Option& GetTrickOption(RandomizerTrick key);
|
Option& GetTrickOption(RandomizerTrick key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Reset all RandomizerTrick keys.
|
||||||
|
*/
|
||||||
|
void ResetTrickOptions();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns a reference to the entire array of options.
|
* @brief Returns a reference to the entire array of options.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user