summaryrefslogtreecommitdiff
path: root/src/saveload/newgrf_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/newgrf_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/newgrf_sl.cpp')
-rw-r--r--src/saveload/newgrf_sl.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp
index f92da0db3..20b658562 100644
--- a/src/saveload/newgrf_sl.cpp
+++ b/src/saveload/newgrf_sl.cpp
@@ -8,10 +8,12 @@
/** @file newgrf_sl.cpp Code handling saving and loading of newgrf config */
#include "../stdafx.h"
-#include "../fios.h"
#include "saveload.h"
+#include "compat/newgrf_sl_compat.h"
+
#include "newgrf_sl.h"
+#include "../fios.h"
#include "../safeguards.h"
@@ -28,6 +30,8 @@ static const SaveLoad _newgrf_mapping_desc[] = {
*/
void Save_NewGRFMapping(const OverrideManagerBase &mapping)
{
+ SlTableHeader(_newgrf_mapping_desc);
+
for (uint i = 0; i < mapping.GetMaxMapping(); i++) {
if (mapping.mapping_ID[i].grfid == 0 &&
mapping.mapping_ID[i].entity_id == 0) continue;
@@ -42,6 +46,8 @@ void Save_NewGRFMapping(const OverrideManagerBase &mapping)
*/
void Load_NewGRFMapping(OverrideManagerBase &mapping)
{
+ const std::vector<SaveLoad> slt = SlCompatTableHeader(_newgrf_mapping_desc, _newgrf_mapping_sl_compat);
+
/* Clear the current mapping stored.
* This will create the manager if ever it is not yet done */
mapping.ResetMapping();
@@ -51,7 +57,7 @@ void Load_NewGRFMapping(OverrideManagerBase &mapping)
int index;
while ((index = SlIterateArray()) != -1) {
if ((uint)index >= max_id) SlErrorCorrupt("Too many NewGRF entity mappings");
- SlObject(&mapping.mapping_ID[index], _newgrf_mapping_desc);
+ SlObject(&mapping.mapping_ID[index], slt);
}
}
@@ -69,6 +75,8 @@ static const SaveLoad _grfconfig_desc[] = {
static void Save_NGRF()
{
+ SlTableHeader(_grfconfig_desc);
+
int index = 0;
for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) {
@@ -81,10 +89,12 @@ static void Save_NGRF()
static void Load_NGRF_common(GRFConfig *&grfconfig)
{
+ const std::vector<SaveLoad> slt = SlCompatTableHeader(_grfconfig_desc, _grfconfig_sl_compat);
+
ClearGRFConfigList(&grfconfig);
while (SlIterateArray() != -1) {
GRFConfig *c = new GRFConfig();
- SlObject(c, _grfconfig_desc);
+ SlObject(c, slt);
if (IsSavegameVersionBefore(SLV_101)) c->SetSuitablePalette();
AppendToGRFConfigList(&grfconfig, c);
}
@@ -112,7 +122,7 @@ static void Check_NGRF()
}
static const ChunkHandler newgrf_chunk_handlers[] = {
- { 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_ARRAY }
+ { 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_TABLE }
};
extern const ChunkHandlerTable _newgrf_chunk_handlers(newgrf_chunk_handlers);