Saveload: Skip VENC/TNNC chunks entirely on non network server saves
This commit is contained in:
@@ -151,7 +151,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
|||||||
{ XSLFI_ORDER_FLAGS_EXTRA, XSCF_NULL, 1, 1, "order_flags_extra", nullptr, nullptr, nullptr },
|
{ XSLFI_ORDER_FLAGS_EXTRA, XSCF_NULL, 1, 1, "order_flags_extra", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_ONE_WAY_DT_ROAD_STOP, XSCF_NULL, 1, 1, "one_way_dt_road_stop", nullptr, nullptr, nullptr },
|
{ XSLFI_ONE_WAY_DT_ROAD_STOP, XSCF_NULL, 1, 1, "one_way_dt_road_stop", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_ONE_WAY_ROAD_STATE, XSCF_NULL, 1, 1, "one_way_road_state", nullptr, nullptr, nullptr },
|
{ XSLFI_ONE_WAY_ROAD_STATE, XSCF_NULL, 1, 1, "one_way_road_state", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_VENC_CHUNK, XSCF_IGNORABLE_ALL, 1, 1, "venc_chunk", nullptr, nullptr, "VENC" },
|
{ XSLFI_VENC_CHUNK, XSCF_IGNORABLE_ALL, 0, 1, "venc_chunk", nullptr, nullptr, "VENC" },
|
||||||
{ XSLFI_ANIMATED_TILE_EXTRA, XSCF_NULL, 1, 1, "animated_tile_extra", nullptr, nullptr, nullptr },
|
{ XSLFI_ANIMATED_TILE_EXTRA, XSCF_NULL, 1, 1, "animated_tile_extra", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_NEWGRF_INFO_EXTRA, XSCF_NULL, 1, 1, "newgrf_info_extra", nullptr, nullptr, nullptr },
|
{ XSLFI_NEWGRF_INFO_EXTRA, XSCF_NULL, 1, 1, "newgrf_info_extra", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_INDUSTRY_CARGO_ADJ, XSCF_IGNORABLE_UNKNOWN, 1, 1, "industry_cargo_adj", nullptr, nullptr, nullptr },
|
{ XSLFI_INDUSTRY_CARGO_ADJ, XSCF_IGNORABLE_UNKNOWN, 1, 1, "industry_cargo_adj", nullptr, nullptr, nullptr },
|
||||||
@@ -183,7 +183,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
|||||||
{ XSLFI_LINKGRAPH_SPARSE_EDGES, XSCF_NULL, 1, 1, "linkgraph_sparse_edges", nullptr, nullptr, nullptr },
|
{ XSLFI_LINKGRAPH_SPARSE_EDGES, XSCF_NULL, 1, 1, "linkgraph_sparse_edges", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_AUX_TILE_LOOP, XSCF_NULL, 1, 1, "aux_tile_loop", nullptr, nullptr, nullptr },
|
{ XSLFI_AUX_TILE_LOOP, XSCF_NULL, 1, 1, "aux_tile_loop", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_NEWGRF_ENTITY_EXTRA, XSCF_NULL, 1, 1, "newgrf_entity_extra", nullptr, nullptr, nullptr },
|
{ XSLFI_NEWGRF_ENTITY_EXTRA, XSCF_NULL, 1, 1, "newgrf_entity_extra", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_TNNC_CHUNK, XSCF_IGNORABLE_ALL, 1, 1, "tnnc_chunk", nullptr, nullptr, "TNNC" },
|
{ XSLFI_TNNC_CHUNK, XSCF_IGNORABLE_ALL, 0, 1, "tnnc_chunk", nullptr, nullptr, "TNNC" },
|
||||||
{ XSLFI_MULTI_CARGO_SHIPS, XSCF_NULL, 1, 1, "multi_cargo_ships", nullptr, nullptr, nullptr },
|
{ XSLFI_MULTI_CARGO_SHIPS, XSCF_NULL, 1, 1, "multi_cargo_ships", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_SCRIPT_INT64, XSCF_NULL, 1, 1, "script_int64", nullptr, nullptr, nullptr },
|
{ XSLFI_SCRIPT_INT64, XSCF_NULL, 1, 1, "script_int64", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_U64_TICK_COUNTER, XSCF_NULL, 1, 1, "u64_tick_counter", nullptr, nullptr, nullptr },
|
{ XSLFI_U64_TICK_COUNTER, XSCF_NULL, 1, 1, "u64_tick_counter", nullptr, nullptr, nullptr },
|
||||||
@@ -281,6 +281,10 @@ void SlXvSetCurrentState()
|
|||||||
if (IsScenarioSave()) {
|
if (IsScenarioSave()) {
|
||||||
_sl_xv_feature_versions[XSLFI_WHOLE_MAP_CHUNK] = 0;
|
_sl_xv_feature_versions[XSLFI_WHOLE_MAP_CHUNK] = 0;
|
||||||
}
|
}
|
||||||
|
if (IsNetworkServerSave()) {
|
||||||
|
_sl_xv_feature_versions[XSLFI_VENC_CHUNK] = 1;
|
||||||
|
_sl_xv_feature_versions[XSLFI_TNNC_CHUNK] = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -377,6 +377,8 @@ void SlResetTNNC()
|
|||||||
|
|
||||||
void Save_TNNC()
|
void Save_TNNC()
|
||||||
{
|
{
|
||||||
|
assert(_sl_xv_feature_versions[XSLFI_TNNC_CHUNK] != 0);
|
||||||
|
|
||||||
if (!IsNetworkServerSave() || !IsGetTownZonesCallbackHandlerPresent()) {
|
if (!IsNetworkServerSave() || !IsGetTownZonesCallbackHandlerPresent()) {
|
||||||
SlSetLength(0);
|
SlSetLength(0);
|
||||||
return;
|
return;
|
||||||
@@ -414,11 +416,24 @@ void Load_TNNC()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ChunkSaveLoadSpecialOpResult Special_TNNC(uint32 chunk_id, ChunkSaveLoadSpecialOp op)
|
||||||
|
{
|
||||||
|
switch (op) {
|
||||||
|
case CSLSO_SHOULD_SAVE_CHUNK:
|
||||||
|
if (_sl_xv_feature_versions[XSLFI_TNNC_CHUNK] == 0) return CSLSOR_DONT_SAVE_CHUNK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return CSLSOR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/** Chunk handler for towns. */
|
/** Chunk handler for towns. */
|
||||||
static const ChunkHandler town_chunk_handlers[] = {
|
static const ChunkHandler town_chunk_handlers[] = {
|
||||||
{ 'HIDS', Save_HIDS, Load_HIDS, nullptr, nullptr, CH_ARRAY },
|
{ 'HIDS', Save_HIDS, Load_HIDS, nullptr, nullptr, CH_ARRAY },
|
||||||
{ 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, nullptr, CH_ARRAY },
|
{ 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, nullptr, CH_ARRAY },
|
||||||
{ 'TNNC', Save_TNNC, Load_TNNC, nullptr, nullptr, CH_RIFF },
|
{ 'TNNC', Save_TNNC, Load_TNNC, nullptr, nullptr, CH_RIFF, Special_TNNC },
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const ChunkHandlerTable _town_chunk_handlers(town_chunk_handlers);
|
extern const ChunkHandlerTable _town_chunk_handlers(town_chunk_handlers);
|
||||||
|
@@ -1193,6 +1193,8 @@ static std::vector<aircraft_venc> _aircraft_vencs;
|
|||||||
|
|
||||||
void Save_VENC()
|
void Save_VENC()
|
||||||
{
|
{
|
||||||
|
assert(_sl_xv_feature_versions[XSLFI_VENC_CHUNK] != 0);
|
||||||
|
|
||||||
if (!IsNetworkServerSave()) {
|
if (!IsNetworkServerSave()) {
|
||||||
SlSetLength(0);
|
SlSetLength(0);
|
||||||
return;
|
return;
|
||||||
@@ -1415,6 +1417,19 @@ void SlProcessVENC()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ChunkSaveLoadSpecialOpResult Special_VENC(uint32 chunk_id, ChunkSaveLoadSpecialOp op)
|
||||||
|
{
|
||||||
|
switch (op) {
|
||||||
|
case CSLSO_SHOULD_SAVE_CHUNK:
|
||||||
|
if (_sl_xv_feature_versions[XSLFI_VENC_CHUNK] == 0) return CSLSOR_DONT_SAVE_CHUNK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return CSLSOR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
const SaveLoadTable GetVehicleLookAheadDescription()
|
const SaveLoadTable GetVehicleLookAheadDescription()
|
||||||
{
|
{
|
||||||
static const SaveLoad _vehicle_look_ahead_desc[] = {
|
static const SaveLoad _vehicle_look_ahead_desc[] = {
|
||||||
@@ -1507,7 +1522,7 @@ static const ChunkHandler veh_chunk_handlers[] = {
|
|||||||
{ 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, nullptr, CH_SPARSE_ARRAY },
|
{ 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, nullptr, CH_SPARSE_ARRAY },
|
||||||
{ 'VEOX', Save_VEOX, Load_VEOX, nullptr, nullptr, CH_SPARSE_ARRAY },
|
{ 'VEOX', Save_VEOX, Load_VEOX, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||||
{ 'VESR', Save_VESR, Load_VESR, nullptr, nullptr, CH_SPARSE_ARRAY },
|
{ 'VESR', Save_VESR, Load_VESR, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||||
{ 'VENC', Save_VENC, Load_VENC, nullptr, nullptr, CH_RIFF },
|
{ 'VENC', Save_VENC, Load_VENC, nullptr, nullptr, CH_RIFF, Special_VENC },
|
||||||
{ 'VLKA', Save_VLKA, Load_VLKA, nullptr, nullptr, CH_SPARSE_ARRAY },
|
{ 'VLKA', Save_VLKA, Load_VLKA, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user