diff options
author | Patric Stout <truebrain@openttd.org> | 2021-05-30 15:59:40 +0200 |
---|---|---|
committer | Patric Stout <github@truebrain.nl> | 2021-07-02 22:21:58 +0200 |
commit | cdb3dd0493749dd5c62378f318ea61bcb85f988f (patch) | |
tree | c1daa1e67c48fc480b7d4cfa0462db4c1bffdff8 /src/saveload/game_sl.cpp | |
parent | 7dd5fd6ed497e1da40c13075d6e37b54ab12a082 (diff) | |
download | openttd-cdb3dd0493749dd5c62378f318ea61bcb85f988f.tar.xz |
Add: store headers for most savegame chunks
When a header is added, the chunk changes from CH_ARRAY type to
CH_TABLE type.
Diffstat (limited to 'src/saveload/game_sl.cpp')
-rw-r--r-- | src/saveload/game_sl.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index 1ef513c63..059e17333 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -9,9 +9,11 @@ #include "../stdafx.h" #include "../debug.h" + #include "saveload.h" -#include "../string_func.h" +#include "compat/game_sl_compat.h" +#include "../string_func.h" #include "../game/game.hpp" #include "../game/game_config.hpp" #include "../network/network.h" @@ -25,7 +27,7 @@ static int _game_saveload_version; static std::string _game_saveload_settings; static bool _game_saveload_is_random; -static const SaveLoad _game_script[] = { +static const SaveLoad _game_script_desc[] = { SLEG_SSTR("name", _game_saveload_name, SLE_STR), SLEG_SSTR("settings", _game_saveload_settings, SLE_STR), SLEG_VAR("version", _game_saveload_version, SLE_UINT32), @@ -48,19 +50,21 @@ static void SaveReal_GSDT(int *index_ptr) _game_saveload_is_random = config->IsRandom(); _game_saveload_settings = config->SettingsToString(); - SlObject(nullptr, _game_script); + SlObject(nullptr, _game_script_desc); Game::Save(); } static void Load_GSDT() { + const std::vector<SaveLoad> slt = SlCompatTableHeader(_game_script_desc, _game_script_sl_compat); + /* Free all current data */ GameConfig::GetConfig(GameConfig::SSS_FORCE_GAME)->Change(nullptr); if (SlIterateArray() == -1) return; _game_saveload_version = -1; - SlObject(nullptr, _game_script); + SlObject(nullptr, slt); if (_networking && !_network_server) { GameInstance::LoadEmpty(); @@ -104,6 +108,7 @@ static void Load_GSDT() static void Save_GSDT() { + SlTableHeader(_game_script_desc); SlSetArrayIndex(0); SlAutolength((AutolengthProc *)SaveReal_GSDT, nullptr); } @@ -180,7 +185,7 @@ static void Save_GSTR() static const ChunkHandler game_chunk_handlers[] = { { 'GSTR', Save_GSTR, Load_GSTR, nullptr, nullptr, CH_ARRAY }, - { 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_ARRAY }, + { 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_TABLE }, }; extern const ChunkHandlerTable _game_chunk_handlers(game_chunk_handlers); |