From cdb3dd0493749dd5c62378f318ea61bcb85f988f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 30 May 2021 15:59:40 +0200 Subject: Add: store headers for most savegame chunks When a header is added, the chunk changes from CH_ARRAY type to CH_TABLE type. --- src/saveload/story_sl.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src/saveload/story_sl.cpp') diff --git a/src/saveload/story_sl.cpp b/src/saveload/story_sl.cpp index df5b1406f..9dabd5cbf 100644 --- a/src/saveload/story_sl.cpp +++ b/src/saveload/story_sl.cpp @@ -8,9 +8,11 @@ /** @file story_sl.cpp Code handling saving and loading of story pages */ #include "../stdafx.h" -#include "../story_base.h" #include "saveload.h" +#include "compat/story_sl_compat.h" + +#include "../story_base.h" #include "../safeguards.h" @@ -38,6 +40,8 @@ static const SaveLoad _story_page_elements_desc[] = { static void Save_STORY_PAGE_ELEMENT() { + SlTableHeader(_story_page_elements_desc); + for (StoryPageElement *s : StoryPageElement::Iterate()) { SlSetArrayIndex(s->index); SlObject(s, _story_page_elements_desc); @@ -46,11 +50,13 @@ static void Save_STORY_PAGE_ELEMENT() static void Load_STORY_PAGE_ELEMENT() { + const std::vector slt = SlCompatTableHeader(_story_page_elements_desc, _story_page_elements_sl_compat); + int index; uint32 max_sort_value = 0; while ((index = SlIterateArray()) != -1) { StoryPageElement *s = new (index) StoryPageElement(); - SlObject(s, _story_page_elements_desc); + SlObject(s, slt); if (s->sort_value > max_sort_value) { max_sort_value = s->sort_value; } @@ -72,6 +78,8 @@ static const SaveLoad _story_pages_desc[] = { static void Save_STORY_PAGE() { + SlTableHeader(_story_pages_desc); + for (StoryPage *s : StoryPage::Iterate()) { SlSetArrayIndex(s->index); SlObject(s, _story_pages_desc); @@ -80,11 +88,13 @@ static void Save_STORY_PAGE() static void Load_STORY_PAGE() { + const std::vector slt = SlCompatTableHeader(_story_pages_desc, _story_pages_sl_compat); + int index; uint32 max_sort_value = 0; while ((index = SlIterateArray()) != -1) { StoryPage *s = new (index) StoryPage(); - SlObject(s, _story_pages_desc); + SlObject(s, slt); if (s->sort_value > max_sort_value) { max_sort_value = s->sort_value; } @@ -96,8 +106,8 @@ static void Load_STORY_PAGE() } static const ChunkHandler story_page_chunk_handlers[] = { - { 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_ARRAY }, - { 'STPA', Save_STORY_PAGE, Load_STORY_PAGE, nullptr, nullptr, CH_ARRAY }, + { 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_TABLE }, + { 'STPA', Save_STORY_PAGE, Load_STORY_PAGE, nullptr, nullptr, CH_TABLE }, }; extern const ChunkHandlerTable _story_page_chunk_handlers(story_page_chunk_handlers); -- cgit v1.2.3-54-g00ecf