diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp --- a/src/saveload/map_sl.cpp +++ b/src/saveload/map_sl.cpp @@ -8,13 +8,15 @@ /** @file map_sl.cpp Code handling saving and loading of map */ #include "../stdafx.h" + +#include "saveload.h" +#include "compat/map_sl_compat.h" + #include "../map_func.h" #include "../core/bitmath_func.hpp" #include "../fios.h" #include -#include "saveload.h" - #include "../safeguards.h" static uint32 _map_dim_x; @@ -27,6 +29,8 @@ static const SaveLoad _map_desc[] = { static void Save_MAPS() { + SlTableHeader(_map_desc); + _map_dim_x = MapSizeX(); _map_dim_y = MapSizeY(); @@ -36,8 +40,10 @@ static void Save_MAPS() static void Load_MAPS() { + const std::vector slt = SlCompatTableHeader(_map_desc, _map_sl_compat); + if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return; - SlGlobList(_map_desc); + SlGlobList(slt); if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many MAPS entries"); AllocateMap(_map_dim_x, _map_dim_y); @@ -45,8 +51,10 @@ static void Load_MAPS() static void Check_MAPS() { + const std::vector slt = SlCompatTableHeader(_map_desc, _map_sl_compat); + if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return; - SlGlobList(_map_desc); + SlGlobList(slt); if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many MAPS entries"); _load_check_data.map_size_x = _map_dim_x; @@ -303,7 +311,7 @@ static void Save_MAP8() static const ChunkHandler map_chunk_handlers[] = { - { 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_ARRAY }, + { 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_TABLE }, { '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 },