summaryrefslogtreecommitdiff
path: root/src/saveload/game_sl.cpp
diff options
context:
space:
mode:
authorPatric Stout <truebrain@openttd.org>2021-05-30 15:59:40 +0200
committerPatric Stout <github@truebrain.nl>2021-07-02 22:21:58 +0200
commitcdb3dd0493749dd5c62378f318ea61bcb85f988f (patch)
treec1daa1e67c48fc480b7d4cfa0462db4c1bffdff8 /src/saveload/game_sl.cpp
parent7dd5fd6ed497e1da40c13075d6e37b54ab12a082 (diff)
downloadopenttd-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.cpp15
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);