diff --git a/src/settings.cpp b/src/settings.cpp index f0524ff258..f5250bf2ca 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -3693,28 +3693,9 @@ static void Check_PATX() LoadSettingsPatx(&_load_check_data.settings); } -struct PATSChunkInfo -{ - static SaveLoadVersion GetLoadVersion() - { - extern SaveLoadVersion _sl_xv_upstream_version; - return _sl_xv_upstream_version; - } - - static bool SaveUpstream() - { - return true; - } - - static bool LoadUpstream() - { - return SlXvIsFeaturePresent(XSLFI_TABLE_PATS); - } -}; - static const ChunkHandler setting_chunk_handlers[] = { { 'OPTS', nullptr, Load_OPTS, nullptr, nullptr, CH_RIFF }, - MakeConditionallyUpstreamChunkHandler<'PATS', PATSChunkInfo>(nullptr, Load_PATS, nullptr, Check_PATS, CH_RIFF), + MakeSaveUpstreamFeatureConditionalLoadUpstreamChunkHandler<'PATS', XSLFI_TABLE_PATS>(Load_PATS, nullptr, Check_PATS), { 'PATX', nullptr, Load_PATX, nullptr, Check_PATX, CH_RIFF }, }; diff --git a/src/sl/saveload.h b/src/sl/saveload.h index fc9640bffb..eeeac233a0 100644 --- a/src/sl/saveload.h +++ b/src/sl/saveload.h @@ -133,6 +133,26 @@ void SlExecWithSlVersion(SaveLoadVersion use_version, F proc) proc(); } +template +struct SaveUpstreamFeatureConditionalLoadUpstreamChunkInfo +{ + static SaveLoadVersion GetLoadVersion() + { + extern SaveLoadVersion _sl_xv_upstream_version; + return _sl_xv_upstream_version; + } + + static bool SaveUpstream() + { + return true; + } + + static bool LoadUpstream() + { + return SlXvIsFeaturePresent(feature, min_version, max_version); + } +}; + namespace upstream_sl { template ChunkHandler MakeUpstreamChunkHandler() @@ -220,10 +240,17 @@ namespace upstream_sl { }; return ch; } + + template + ChunkHandler MakeSaveUpstreamFeatureConditionalLoadUpstreamChunkHandler(ChunkSaveLoadProc *load_proc, ChunkSaveLoadProc *ptrs_proc, ChunkSaveLoadProc *load_check_proc) + { + return MakeConditionallyUpstreamChunkHandler>(nullptr, load_proc, ptrs_proc, load_check_proc, CH_UNUSED); + } } using upstream_sl::MakeUpstreamChunkHandler; using upstream_sl::MakeConditionallyUpstreamChunkHandler; +using upstream_sl::MakeSaveUpstreamFeatureConditionalLoadUpstreamChunkHandler; struct NullStruct { byte null;