diff --git a/src/strings.cpp b/src/strings.cpp index 0b0947db2a..61aefacdca 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -253,14 +253,24 @@ void GetStringWithArgs(StringBuilder &builder, StringID string, StringParameters switch (tab) { case TEXT_TAB_TOWN: if (index >= 0xC0 && !game_script) { - GetSpecialTownNameString(builder, index - 0xC0, args.GetNextParameter()); + try { + GetSpecialTownNameString(builder, index - 0xC0, args.GetNextParameter()); + } catch (const std::runtime_error &e) { + Debug(misc, 0, "GetStringWithArgs: {}", e.what()); + builder += "(invalid string parameter)"; + } return; } break; case TEXT_TAB_SPECIAL: if (index >= 0xE4 && !game_script) { - GetSpecialNameString(builder, index - 0xE4, args); + try { + GetSpecialNameString(builder, index - 0xE4, args); + } catch (const std::runtime_error &e) { + Debug(misc, 0, "GetStringWithArgs: {}", e.what()); + builder += "(invalid string parameter)"; + } return; } break; diff --git a/src/strings_internal.h b/src/strings_internal.h index 64a20587fd..4d6b1a5b7e 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -94,7 +94,7 @@ public: const auto ¶m = GetNextParameterReference(); const uint64_t *data = std::get_if(¶m.data); if (data != nullptr) return static_cast(*data); - return T{}; + throw std::runtime_error("Attempt to read string parameter as integer"); } /** @@ -108,7 +108,7 @@ public: const auto ¶m = GetNextParameterReference(); const std::string *data = std::get_if(¶m.data); if (data != nullptr) return data->c_str(); - return nullptr; + throw std::runtime_error("Attempt to read integer parameter as string"); } /**