Saveload: Fix upstream version handling of league table chunks
This commit is contained in:
@@ -10,9 +10,14 @@
|
|||||||
|
|
||||||
#include "saveload.h"
|
#include "saveload.h"
|
||||||
|
|
||||||
|
extern SaveLoadVersion _sl_xv_upstream_version;
|
||||||
|
|
||||||
struct GetLeagueChunkLoadInfo
|
struct GetLeagueChunkLoadInfo
|
||||||
{
|
{
|
||||||
static SaveLoadVersion GetVersion() { return SLV_MULTITRACK_LEVEL_CROSSINGS; }
|
static SaveLoadVersion GetLoadVersion()
|
||||||
|
{
|
||||||
|
return _sl_xv_upstream_version != SL_MIN_VERSION ? _sl_xv_upstream_version : SLV_MULTITRACK_LEVEL_CROSSINGS;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const ChunkHandler league_chunk_handlers[] = {
|
static const ChunkHandler league_chunk_handlers[] = {
|
||||||
|
@@ -2298,8 +2298,10 @@ static void SlSaveChunk(const ChunkHandler &ch)
|
|||||||
if (ch.type == CH_UPSTREAM_SAVE) {
|
if (ch.type == CH_UPSTREAM_SAVE) {
|
||||||
SaveLoadVersion old_ver = _sl_version;
|
SaveLoadVersion old_ver = _sl_version;
|
||||||
_sl_version = MAX_LOAD_SAVEGAME_VERSION;
|
_sl_version = MAX_LOAD_SAVEGAME_VERSION;
|
||||||
|
auto guard = scope_guard([&]() {
|
||||||
|
_sl_version = old_ver;
|
||||||
|
});
|
||||||
upstream_sl::SlSaveChunkChunkByID(ch.id);
|
upstream_sl::SlSaveChunkChunkByID(ch.id);
|
||||||
_sl_version = old_ver;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
#include "../fileio_type.h"
|
#include "../fileio_type.h"
|
||||||
#include "../fios.h"
|
#include "../fios.h"
|
||||||
#include "../strings_type.h"
|
#include "../strings_type.h"
|
||||||
|
#include "../scope.h"
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -112,8 +113,10 @@ void SlExecWithSlVersion(SaveLoadVersion use_version, F proc)
|
|||||||
extern SaveLoadVersion _sl_version;
|
extern SaveLoadVersion _sl_version;
|
||||||
SaveLoadVersion old_ver = _sl_version;
|
SaveLoadVersion old_ver = _sl_version;
|
||||||
_sl_version = use_version;
|
_sl_version = use_version;
|
||||||
|
auto guard = scope_guard([&]() {
|
||||||
|
_sl_version = old_ver;
|
||||||
|
});
|
||||||
proc();
|
proc();
|
||||||
_sl_version = old_ver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace upstream_sl {
|
namespace upstream_sl {
|
||||||
@@ -129,7 +132,7 @@ namespace upstream_sl {
|
|||||||
nullptr,
|
nullptr,
|
||||||
SlUnreachablePlaceholder,
|
SlUnreachablePlaceholder,
|
||||||
[]() {
|
[]() {
|
||||||
SlExecWithSlVersion(F::GetVersion(), []() {
|
SlExecWithSlVersion(F::GetLoadVersion(), []() {
|
||||||
SlFixPointerChunkByID(id);
|
SlFixPointerChunkByID(id);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -140,12 +143,12 @@ namespace upstream_sl {
|
|||||||
assert(id == chunk_id);
|
assert(id == chunk_id);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case CSLSO_PRE_LOAD:
|
case CSLSO_PRE_LOAD:
|
||||||
SlExecWithSlVersion(F::GetVersion(), []() {
|
SlExecWithSlVersion(F::GetLoadVersion(), []() {
|
||||||
SlLoadChunkByID(id);
|
SlLoadChunkByID(id);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case CSLSO_PRE_LOADCHECK:
|
case CSLSO_PRE_LOADCHECK:
|
||||||
SlExecWithSlVersion(F::GetVersion(), []() {
|
SlExecWithSlVersion(F::GetLoadVersion(), []() {
|
||||||
SlLoadCheckChunkByID(id);
|
SlLoadCheckChunkByID(id);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user