diff options
-rw-r--r-- | src/train_cmd.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 31c0eccad..5723f3d47 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3364,8 +3364,11 @@ static void TrainController(Train *v, Vehicle *nomove) } /* If we would reverse but are currently in a PBS block and - * reversing of stuck trains is disabled, don't reverse. */ - if (_settings_game.pf.wait_for_pbs_path == 255 && UpdateSignalsOnSegment(v->tile, enterdir, v->owner) == SIGSEG_PBS) { + * reversing of stuck trains is disabled, don't reverse. + * This does not apply if the reason for reversing is a one-way + * signal blocking us, because a train would then be stuck forever. */ + if (_settings_game.pf.wait_for_pbs_path == 255 && !HasOnewaySignalBlockingTrackdir(gp.new_tile, i) && + UpdateSignalsOnSegment(v->tile, enterdir, v->owner) == SIGSEG_PBS) { v->wait_counter = 0; return; } |