diff --git a/src/signal.cpp b/src/signal.cpp index a1e84a59b3..588d2ba68f 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -711,7 +711,7 @@ static uint8 GetForwardAspect(const SigInfo &info, TileIndex tile, Trackdir trac static uint8 GetForwardAspectAndIncrement(const SigInfo &info, TileIndex tile, Trackdir trackdir, bool combined_normal_mode = false) { - return std::min(GetForwardAspect(info, tile, trackdir) + (combined_normal_mode ? 2 : 1), GetMaximumSignalAspect()); + return IncrementAspectForSignal(GetForwardAspect(info, tile, trackdir), combined_normal_mode); } static inline bool IsRailCombinedNormalShuntSignalStyle(TileIndex tile, Track track) @@ -844,7 +844,8 @@ static void UpdateSignalsAroundSegment(SigInfo info) if (newstate == SIGNAL_STATE_GREEN) { aspect = 1; if (info.out_signal_tile != INVALID_TILE) { - aspect = std::min(GetSignalAspectGeneric(info.out_signal_tile, info.out_signal_trackdir, true) + 1, GetMaximumSignalAspect()); + /* Combined normal/shunt signals should never be encountered here as they are PBS-only and so will never be green if not reserved */ + aspect = IncrementAspectForSignal(GetSignalAspectGeneric(info.out_signal_tile, info.out_signal_trackdir, true), false); } } else { aspect = 0; diff --git a/src/signal_func.h b/src/signal_func.h index b65097c43e..7197d459e5 100644 --- a/src/signal_func.h +++ b/src/signal_func.h @@ -204,9 +204,16 @@ inline void AdjustSignalAspectIfNonIncStyle(TileIndex tile, Track track, uint8 & if (aspect > 0 && (_signal_style_masks.non_aspect_inc != 0 || _signal_style_masks.combined_normal_shunt != 0)) AdjustSignalAspectIfNonIncStyleIntl(tile, track, aspect); } +inline uint8 IncrementAspectForSignal(uint8 aspect, bool combined_normal_mode) +{ + aspect = std::min(aspect + 1, GetMaximumSignalAspect()); + if (combined_normal_mode) aspect = std::min(aspect + 1, 7); + return aspect; +} + inline uint8 GetForwardAspectFollowingTrackAndIncrement(TileIndex tile, Trackdir trackdir, bool combined_normal_mode = false) { - return std::min(GetForwardAspectFollowingTrack(tile, trackdir) + (combined_normal_mode ? 2 : 1), GetMaximumSignalAspect()); + return IncrementAspectForSignal(GetForwardAspectFollowingTrack(tile, trackdir), combined_normal_mode); } void UpdateSignalReserveThroughBit(TileIndex tile, Track track, bool update_signal);