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/newgrf_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/newgrf_sl.cpp')
-rw-r--r-- | src/saveload/newgrf_sl.cpp | 18 |
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); |