diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 871be91295..56f4f8a857 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2310,6 +2310,10 @@ static void SlSaveChunk(const ChunkHandler &ch) /* Don't save any chunk information if there is no save handler. */ if (proc == nullptr) return; + if (ch.special_proc != nullptr) { + if (ch.special_proc(ch.id, CSLSO_SHOULD_SAVE_CHUNK) == CSLSOR_DONT_SAVE_CHUNK) return; + } + SlWriteUint32(ch.id); DEBUG(sl, 2, "Saving chunk %c%c%c%c", ch.id >> 24, ch.id >> 16, ch.id >> 8, ch.id); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 49d4300763..72dc988727 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -85,10 +85,12 @@ void SlUnreachablePlaceholder(); enum ChunkSaveLoadSpecialOp { CSLSO_PRE_LOAD, CSLSO_PRE_LOADCHECK, + CSLSO_SHOULD_SAVE_CHUNK, }; enum ChunkSaveLoadSpecialOpResult { CSLSOR_NONE, CSLSOR_LOAD_CHUNK_CONSUMED, + CSLSOR_DONT_SAVE_CHUNK, }; typedef ChunkSaveLoadSpecialOpResult ChunkSaveLoadSpecialProc(uint32, ChunkSaveLoadSpecialOp);