From 0364f7076e88acb507a13f368d7b2ad13041d70d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= <159546+serprex@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:59:12 +0000 Subject: [PATCH] Fix seed generation crash (#7140) Also fix excluded locations all colliding with TODO name --- .../Enhancements/randomizer/3drando/spoiler_log.cpp | 3 ++- soh/soh/Enhancements/randomizer/option.cpp | 10 ++++++---- soh/soh/Enhancements/randomizer/settings.cpp | 5 ++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp index 4e5a16264f..6f0dbc7e9f 100644 --- a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp @@ -146,7 +146,8 @@ static void WriteSettings() { auto ctx = Rando::Context::GetInstance(); std::array options = Rando::Settings::GetInstance()->GetAllOptions(); for (const Rando::Option& option : options) { - if (option.GetName() != "") { + // skip unassigned settings (RSK_NONE) + if (option.GetOptionCount() > 0) { jsonData["settings"][option.GetName()] = option.GetOptionText(ctx->GetOption(option.GetKey()).Get()); } } diff --git a/soh/soh/Enhancements/randomizer/option.cpp b/soh/soh/Enhancements/randomizer/option.cpp index 0d970b2f4d..a3b3009a34 100644 --- a/soh/soh/Enhancements/randomizer/option.cpp +++ b/soh/soh/Enhancements/randomizer/option.cpp @@ -1,6 +1,7 @@ #include #include "option.h" +#include "static_data.h" #include "soh/SohGui/SohMenu.h" #include "soh/Enhancements/Lang/Lang.h" #include @@ -124,8 +125,6 @@ static const std::string& MakeTrickDescription(RandomizerTrick key) { #pragma endregion -const static std::string todo = "TODO"; - const std::string& Option::GetName() const { switch (this->GetCategory()) { case OptionCategory::Setting: @@ -134,7 +133,7 @@ const std::string& Option::GetName() const { case OptionCategory::Trick: return MakeTrickName(static_cast(this->key)); case OptionCategory::LocationExclusion: - return todo; + return StaticData::GetLocation(static_cast(this->key))->GetName(); default: assert(false); return error; @@ -149,7 +148,7 @@ const std::string& Option::GetDescription() const { case OptionCategory::Trick: return MakeTrickDescription(static_cast(this->key)); case OptionCategory::LocationExclusion: - return todo; + return empty; default: assert(false); return error; @@ -165,6 +164,9 @@ uint8_t Option::GetMenuOptionDefault() const { } const std::string& Option::GetOptionText(size_t index) const { + if (options.empty()) { + return empty; + } if (index >= options.size()) { index = options.size() - 1; } diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index b2906abbca..b78ca88e05 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -2556,7 +2556,10 @@ void Settings::CreateOptions() { std::unordered_map Settings::PopulateOptionNameToEnum() { std::unordered_map output = {}; for (size_t count = 0; count < RSK_MAX; count++) { - output[mOptions[count].GetName()] = static_cast(count); + // skip unassigned settings (RSK_NONE) + if (mOptions[count].GetOptionCount() > 0) { + output[mOptions[count].GetName()] = static_cast(count); + } } return output; }