# HG changeset patch # User Koen Bussemaker # Date 2023-06-30 19:17:26 # Node ID 9ef479faae5f115e3311550543575b365d95a4c0 # Parent a14b989855d2fa4f8400d962f36032ea6adade49 Change: Autorail / autoroad tools can start dragging from invalid tiles diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -875,8 +875,8 @@ static CommandCost ValidateAutoDrag(Trac * @param railtype railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev), only used for building * @param track track-orientation * @param remove remove tracks? - * @param auto_remove_signals false = build up to an obstacle, true = fail if an obstacle is found (used for AIs), only used for building - * @param fail_on_obstacle false = error on signal in the way, true = auto remove signals when in the way, only used for building + * @param auto_remove_signals false = error on signal in the way, true = auto remove signals when in the way, only used for building + * @param fail_on_obstacle false = build starting from and up to an obstacle, true = fail if an obstacle is found (used for AIs) * @return the cost of this operation or an error */ static CommandCost CmdRailTrackHelper(DoCommandFlag flags, TileIndex tile, TileIndex end_tile, RailType railtype, Track track, bool remove, bool auto_remove_signals, bool fail_on_obstacle) @@ -900,7 +900,7 @@ static CommandCost CmdRailTrackHelper(Do last_error = ret; if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT && !remove) { if (fail_on_obstacle) return last_error; - break; + if (had_success) break; // Keep going if we haven't constructed any rail yet, skipping the start of the drag } /* Ownership errors are more important. */ diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1034,7 +1034,7 @@ CommandCost CmdBuildLongRoad(DoCommandFl last_error = ret; if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT) { if (is_ai) return last_error; - break; + if (had_success) break; // Keep going if we haven't constructed any road yet, skipping the start of the drag } } else { had_success = true;