diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 08aacae246..e4e55d9924 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -4083,7 +4083,25 @@ static void DeleteLastWagon(Train *v) if (IsLevelCrossingTile(tile)) UpdateLevelCrossing(tile); /* Update signals */ - if (IsTileType(tile, MP_TUNNELBRIDGE) || IsRailDepotTile(tile)) { + if (IsTileType(tile, MP_TUNNELBRIDGE)) { + UpdateSignalsOnSegment(tile, INVALID_DIAGDIR, owner); + if (IsTunnelBridgeWithSignalSimulation(tile)) { + TileIndex end = GetOtherTunnelBridgeEnd(tile); + UpdateSignalsOnSegment(end, INVALID_DIAGDIR, owner); + bool is_entrance = IsTunnelBridgeSignalSimulationEntrance(tile); + TileIndex entrance = is_entrance ? tile : end; + if (TunnelBridgeIsFree(tile, end, nullptr).Succeeded()) { + if (IsBridge(entrance)) { + SetAllBridgeEntranceSimulatedSignalsGreen(entrance); + MarkBridgeDirty(entrance, ZOOM_LVL_DRAW_MAP); + } + if (IsTunnelBridgeSignalSimulationEntrance(entrance) && GetTunnelBridgeSignalState(entrance) == SIGNAL_STATE_RED) { + SetTunnelBridgeSignalState(entrance, SIGNAL_STATE_GREEN); + MarkTileDirtyByTile(entrance); + } + } + } + } else if (IsRailDepotTile(tile)) { UpdateSignalsOnSegment(tile, INVALID_DIAGDIR, owner); } else { SetSignalsOnBothDir(tile, track, owner);