diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -121,6 +121,8 @@ public: void Save(LanguageStrings *ls) const override { + SlSetStructListLength(ls->lines.size()); + for (const auto &string : ls->lines) { _game_saveload_string = string; SlObject(nullptr, this->GetDescription()); @@ -129,7 +131,9 @@ public: void Load(LanguageStrings *ls) const override { - for (uint32 i = 0; i < _game_saveload_strings; i++) { + uint32 length = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? _game_saveload_strings : (uint32)SlGetStructListLength(UINT32_MAX); + + for (uint32 i = 0; i < length; i++) { SlObject(nullptr, this->GetDescription()); ls->lines.emplace_back(_game_saveload_string); } @@ -138,7 +142,7 @@ public: static const SaveLoad _game_language_desc[] = { SLE_SSTR(LanguageStrings, language, SLE_STR), - SLEG_VAR(_game_saveload_strings, SLE_UINT32), + SLEG_CONDVAR(_game_saveload_strings, SLE_UINT32, SL_MIN_VERSION, SLV_SAVELOAD_LIST_LENGTH), SLEG_STRUCTLIST(SlGameLanguageString), }; @@ -170,9 +174,7 @@ static void Save_GSTR() for (uint i = 0; i < _current_data->raw_strings.size(); i++) { SlSetArrayIndex(i); - LanguageStrings *ls = &_current_data->raw_strings[i]; - _game_saveload_strings = (uint32)ls->lines.size(); - SlObject(ls, _game_language_desc); + SlObject(&_current_data->raw_strings[i], _game_language_desc); } }