From 2b1993ee4d9db3c1c2ff86ab941a8da9bf9e46a0 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 11 Nov 2021 18:06:35 +0000 Subject: [PATCH] Fix crash with wrong-way running on multi-aspect signalled tunnel/bridge When using the ignore signals buttons and updating middle signal states --- src/train_cmd.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 5403d215a4..e3f990dbe3 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -5096,6 +5096,8 @@ static bool CheckTrainStayInWormHole(Train *t, TileIndex tile) static void HandleSignalBehindTrain(Train *v, int signal_number) { + if (!IsTunnelBridgeSignalSimulationEntrance(v->tile)) return; + const uint simulated_wormhole_signals = GetTunnelBridgeSignalSimulationSpacing(v->tile); TileIndex tile; @@ -5109,7 +5111,7 @@ static void HandleSignalBehindTrain(Train *v, int signal_number) if (tile == v->tile) { /* Flip signal on ramp. */ - if (IsTunnelBridgeSignalSimulationEntrance(tile)) SetTunnelBridgeEntranceSignalGreen(tile); + SetTunnelBridgeEntranceSignalGreen(tile); } else if (IsBridge(v->tile) && signal_number >= 0) { SetBridgeEntranceSimulatedSignalState(v->tile, signal_number, SIGNAL_STATE_GREEN); MarkSingleBridgeSignalDirty(tile, v->tile); @@ -5517,7 +5519,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse) return false; } /* flip signal in front to red on bridges*/ - if (distance == 0 && IsBridge(v->tile)) { + if (distance == 0 && IsBridge(v->tile) && IsTunnelBridgeSignalSimulationEntrance(v->tile)) { SetBridgeEntranceSimulatedSignalState(v->tile, v->tunnel_bridge_signal_num, SIGNAL_STATE_RED); MarkSingleBridgeSignalDirty(gp.new_tile, v->tile); }