summaryrefslogtreecommitdiff
path: root/src/saveload/game_sl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/saveload/game_sl.cpp')
-rw-r--r--src/saveload/game_sl.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp
index af01d5bd0..76a81e167 100644
--- 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);
}
}