From 5b99a587d511d27f9d5ba6a1ab7e53fc3794e6f5 Mon Sep 17 00:00:00 2001 From: FlynnsPixel Date: Sun, 20 Sep 2015 17:44:20 +1000 Subject: [PATCH] Stopped infinite loop in boat_hire_return_point --- src/ride/ride.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ride/ride.c b/src/ride/ride.c index be387edeb8..5ff8e7e958 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -4100,12 +4100,17 @@ bool ride_check_start_and_end_is_station(rct_xy_element *input, rct_xy_element * */ void ride_set_boat_hire_return_point(rct_ride *ride, rct_xy_element *startElement) { - int trackType; + int trackType = -1; int returnX = startElement->x; int returnY = startElement->y; + int startX = returnX; + int startY = returnY; rct_map_element *returnTrackElement = startElement->element; track_begin_end trackBeginEnd; while (track_block_get_previous(returnX, returnY, returnTrackElement, &trackBeginEnd)) { + // If previous track is back to the starting x, y, then break loop (otherwise possible infinite loop) + if (trackType != -1 && startX == trackBeginEnd.begin_x && startY == trackBeginEnd.begin_y) break; + int x = trackBeginEnd.begin_x; int y = trackBeginEnd.begin_y; int z = trackBeginEnd.begin_z;