Fix savegames with incorrect signal always reserve through bits

See: #620
This commit is contained in:
Jonathan G Rennison
2023-12-30 15:15:34 +00:00
parent 8256bb8359
commit f3614c419d
4 changed files with 7 additions and 4 deletions

View File

@@ -4347,7 +4347,8 @@ bool AfterLoadGame()
extern void YapfCheckRailSignalPenalties(); extern void YapfCheckRailSignalPenalties();
YapfCheckRailSignalPenalties(); YapfCheckRailSignalPenalties();
UpdateExtraAspectsVariable(); bool update_always_reserve_through = SlXvIsFeaturePresent(XSLFI_REALISTIC_TRAIN_BRAKING, 8, 10);
UpdateExtraAspectsVariable(update_always_reserve_through);
if (_networking && !_network_server) { if (_networking && !_network_server) {
SlProcessVENC(); SlProcessVENC();

View File

@@ -1892,7 +1892,7 @@ static bool DetermineExtraAspectsVariable()
return changed; return changed;
} }
void UpdateExtraAspectsVariable() void UpdateExtraAspectsVariable(bool update_always_reserve_through)
{ {
std::array<NewSignalStyleMapping, MAX_NEW_SIGNAL_STYLES> new_mapping; std::array<NewSignalStyleMapping, MAX_NEW_SIGNAL_STYLES> new_mapping;
DetermineSignalStyleMapping(new_mapping); DetermineSignalStyleMapping(new_mapping);
@@ -1915,6 +1915,8 @@ void UpdateExtraAspectsVariable()
if (_extra_aspects > 0) UpdateAllSignalAspects(); if (_extra_aspects > 0) UpdateAllSignalAspects();
UpdateAllBlockSignals(); UpdateAllBlockSignals();
MarkWholeScreenDirty(); MarkWholeScreenDirty();
} else if (update_always_reserve_through) {
UpdateAllSignalReserveThroughBits();
} }
} }

View File

@@ -195,7 +195,7 @@ void UpdateLookaheadCombinedNormalShuntSignalDeferred(TileIndex tile, Trackdir t
void FlushDeferredAspectUpdates(); void FlushDeferredAspectUpdates();
void FlushDeferredDetermineCombineNormalShuntMode(Train *v); void FlushDeferredDetermineCombineNormalShuntMode(Train *v);
void UpdateAllSignalAspects(); void UpdateAllSignalAspects();
void UpdateExtraAspectsVariable(); void UpdateExtraAspectsVariable(bool update_always_reserve_through = false);
void InitialiseExtraAspectsVariable(); void InitialiseExtraAspectsVariable();
bool IsRailSpecialSignalAspect(TileIndex tile, Track track); bool IsRailSpecialSignalAspect(TileIndex tile, Track track);

View File

@@ -157,7 +157,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
{ 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 },
{ XSLFI_REALISTIC_TRAIN_BRAKING, XSCF_NULL, 10, 10, "realistic_train_braking", nullptr, nullptr, "VLKA" }, { XSLFI_REALISTIC_TRAIN_BRAKING, XSCF_NULL, 11, 11, "realistic_train_braking", nullptr, nullptr, "VLKA" },
{ XSLFI_INFLATION_FIXED_DATES, XSCF_IGNORABLE_ALL, 1, 1, "inflation_fixed_dates", nullptr, nullptr, nullptr }, { XSLFI_INFLATION_FIXED_DATES, XSCF_IGNORABLE_ALL, 1, 1, "inflation_fixed_dates", nullptr, nullptr, nullptr },
{ XSLFI_WATER_FLOODING, XSCF_NULL, 2, 2, "water_flooding", nullptr, nullptr, nullptr }, { XSLFI_WATER_FLOODING, XSCF_NULL, 2, 2, "water_flooding", nullptr, nullptr, nullptr },
{ XSLFI_MORE_HOUSES, XSCF_NULL, 2, 2, "more_houses", nullptr, nullptr, nullptr }, { XSLFI_MORE_HOUSES, XSCF_NULL, 2, 2, "more_houses", nullptr, nullptr, nullptr },