Saveload: Add initial table chunk support to non-upstream save backend

This commit is contained in:
Jonathan G Rennison
2024-02-10 20:30:58 +00:00
parent 5aaff39164
commit 195b3b6d1d
4 changed files with 356 additions and 23 deletions

View File

@@ -102,9 +102,11 @@ typedef ChunkSaveLoadSpecialOpResult ChunkSaveLoadSpecialProc(uint32_t, ChunkSav
/** Type of a chunk. */
enum ChunkType {
CH_RIFF = 0,
CH_ARRAY = 1,
CH_RIFF = 0,
CH_ARRAY = 1,
CH_SPARSE_ARRAY = 2,
CH_TABLE = 3,
CH_SPARSE_TABLE = 4,
CH_EXT_HDR = 15, ///< Extended chunk header
CH_UNUSED = 0x80,
@@ -1048,6 +1050,23 @@ void SlObjectSaveFiltered(void *object, const SaveLoadTable &slt);
void SlObjectLoadFiltered(void *object, const SaveLoadTable &slt);
void SlObjectPtrOrNullFiltered(void *object, const SaveLoadTable &slt);
bool SlIsTableChunk();
void SlSkipTableHeader();
std::vector<SaveLoad> SlTableHeader(const NamedSaveLoadTable &slt);
std::vector<SaveLoad> SlTableHeaderOrRiff(const NamedSaveLoadTable &slt);
void SlSaveTableObjectChunk(const SaveLoadTable &slt);
void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt);
inline void SlSaveTableObjectChunk(const NamedSaveLoadTable &slt)
{
SlSaveTableObjectChunk(SlTableHeader(slt));
}
inline void SlLoadTableOrRiffFiltered(const NamedSaveLoadTable &slt)
{
SlLoadTableOrRiffFiltered(SlTableHeaderOrRiff(slt));
}
void NORETURN CDECL SlErrorFmt(StringID string, const char *msg, ...) WARN_FORMAT(2, 3);
bool SaveloadCrashWithMissingNewGRFs();