diff options
Diffstat (limited to 'src/saveload/map_sl.cpp')
-rw-r--r-- | src/saveload/map_sl.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp index 5924f4440..de043d513 100644 --- a/src/saveload/map_sl.cpp +++ b/src/saveload/map_sl.cpp @@ -20,7 +20,7 @@ static uint32 _map_dim_x; static uint32 _map_dim_y; -static const SaveLoad _map_dimensions[] = { +static const SaveLoad _map_desc[] = { SLEG_CONDVAR(_map_dim_x, SLE_UINT32, SLV_6, SL_MAX_VERSION), SLEG_CONDVAR(_map_dim_y, SLE_UINT32, SLV_6, SL_MAX_VERSION), }; @@ -29,18 +29,26 @@ static void Save_MAPS() { _map_dim_x = MapSizeX(); _map_dim_y = MapSizeY(); - SlGlobList(_map_dimensions); + + SlSetArrayIndex(0); + SlGlobList(_map_desc); } static void Load_MAPS() { - SlGlobList(_map_dimensions); + if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return; + SlGlobList(_map_desc); + if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many MAPS entries"); + AllocateMap(_map_dim_x, _map_dim_y); } static void Check_MAPS() { - SlGlobList(_map_dimensions); + if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return; + SlGlobList(_map_desc); + if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many MAPS entries"); + _load_check_data.map_size_x = _map_dim_x; _load_check_data.map_size_y = _map_dim_y; } @@ -295,7 +303,7 @@ static void Save_MAP8() static const ChunkHandler map_chunk_handlers[] = { - { 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_RIFF }, + { 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_ARRAY }, { 'MAPT', Save_MAPT, Load_MAPT, nullptr, nullptr, CH_RIFF }, { 'MAPH', Save_MAPH, Load_MAPH, nullptr, nullptr, CH_RIFF }, { 'MAPO', Save_MAP1, Load_MAP1, nullptr, nullptr, CH_RIFF }, |