From a6b0d0cde4c1e47a6ae30461d3f90fefc21233d0 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 20 Aug 2021 22:28:08 +0100 Subject: [PATCH] Fix signals on bridge middle parts not using per-railtype custom signals --- src/tunnelbridge_cmd.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 456a5b0506..a9eb44dd40 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1801,15 +1801,21 @@ static void DrawBridgeSignalOnMiddlePart(const TileInfo *ti, TileIndex bridge_st z += 5; SignalVariant variant = IsTunnelBridgeSemaphore(bridge_start_tile) ? SIG_SEMAPHORE : SIG_ELECTRIC; + SignalState state = GetBridgeEntranceSimulatedSignalState(bridge_start_tile, m2_position); - SpriteID sprite = (GetBridgeEntranceSimulatedSignalState(bridge_start_tile, m2_position) == SIGNAL_STATE_GREEN); + const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(bridge_start_tile)); + SpriteID sprite = GetCustomSignalSprite(rti, bridge_start_tile, SIGTYPE_NORMAL, variant, state); - if (variant == SIG_ELECTRIC) { - /* Normal electric signals are picked from original sprites. */ - sprite += SPR_ORIGINAL_SIGNALS_BASE + (position << 1); + if (sprite != 0) { + sprite += position; } else { - /* All other signals are picked from add on sprites. */ - sprite += SPR_SIGNALS_BASE + (variant * 64) + (position << 1) - 16; + if (variant == SIG_ELECTRIC) { + /* Normal electric signals are picked from original sprites. */ + sprite = SPR_ORIGINAL_SIGNALS_BASE + (position << 1) + (state == SIGNAL_STATE_GREEN ? 1 : 0); + } else { + /* All other signals are picked from add on sprites. */ + sprite = SPR_SIGNALS_BASE + (variant * 64) + (position << 1) - 16 + (state == SIGNAL_STATE_GREEN ? 1 : 0); + } } AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, TILE_HEIGHT, z, false, 0, 0, BB_Z_SEPARATOR);