summaryrefslogtreecommitdiff
path: root/src/saveload/misc_sl.cpp
diff options
context:
space:
mode:
authorPatric Stout <truebrain@openttd.org>2021-06-06 09:59:33 +0200
committerPatric Stout <github@truebrain.nl>2021-06-15 19:36:15 +0200
commit88edfd4ef16bedd98a07a2142e693ab50fbdcef2 (patch)
treef39b00764786763b3350dd06c2c4014605678ca1 /src/saveload/misc_sl.cpp
parentb9ab9e4d051eea7d6aedfb60930b039b778568af (diff)
downloadopenttd-88edfd4ef16bedd98a07a2142e693ab50fbdcef2.tar.xz
Change: rework several CH_RIFF chunks to use CH_ARRAY instead
This adds two byte extra to those chunks, and might feel a bit silly at first. But in later changes we will prefix CH_ARRAY with a table header, and then this change shines. Without this, we could still add headers to these chunks, but any external reader wouldn't know if the CH_RIFF has them or not. This way is much more practical, as they are now more like any other chunk.
Diffstat (limited to 'src/saveload/misc_sl.cpp')
-rw-r--r--src/saveload/misc_sl.cpp32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp
index 027d68bae..4c66f4e26 100644
--- a/src/saveload/misc_sl.cpp
+++ b/src/saveload/misc_sl.cpp
@@ -118,14 +118,28 @@ static const SaveLoad _date_check_desc[] = {
/* Save load date related variables as well as persistent tick counters
* XXX: currently some unrelated stuff is just put here */
-static void SaveLoad_DATE()
+static void Save_DATE()
{
+ SlSetArrayIndex(0);
SlGlobList(_date_desc);
}
+static void Load_DATE_common(const SaveLoadTable &slt)
+{
+ if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
+ SlGlobList(slt);
+ if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many DATE entries");
+}
+
+static void Load_DATE()
+{
+ Load_DATE_common(_date_desc);
+}
+
static void Check_DATE()
{
- SlGlobList(_date_check_desc);
+ Load_DATE_common(_date_check_desc);
+
if (IsSavegameVersionBefore(SLV_31)) {
_load_check_data.current_date += DAYS_TILL_ORIGINAL_BASE_YEAR;
}
@@ -140,14 +154,22 @@ static const SaveLoad _view_desc[] = {
SLEG_VAR(_saved_scrollpos_zoom, SLE_UINT8),
};
-static void SaveLoad_VIEW()
+static void Save_VIEW()
+{
+ SlSetArrayIndex(0);
+ SlGlobList(_view_desc);
+}
+
+static void Load_VIEW()
{
+ if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
SlGlobList(_view_desc);
+ if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many DATE entries");
}
static const ChunkHandler misc_chunk_handlers[] = {
- { 'DATE', SaveLoad_DATE, SaveLoad_DATE, nullptr, Check_DATE, CH_RIFF },
- { 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, nullptr, nullptr, CH_RIFF },
+ { 'DATE', Save_DATE, Load_DATE, nullptr, Check_DATE, CH_ARRAY },
+ { 'VIEW', Save_VIEW, Load_VIEW, nullptr, nullptr, CH_ARRAY },
};
extern const ChunkHandlerTable _misc_chunk_handlers(misc_chunk_handlers);