diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 615782783b..7b52ffdf9d 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -5476,6 +5476,10 @@ sint32 ride_is_valid_for_open(sint32 rideIndex, sint32 goingToBeOpen, sint32 isA return 1; } +/** + * Given a track element of the ride, find the start of the track. + * It has to do this as a backwards loop in case this is an incomplete track. + */ void ride_get_start_of_track(CoordsXYE * output) { track_begin_end trackBeginEnd; @@ -5515,8 +5519,6 @@ sint32 ride_get_refund_price(sint32 ride_id) // Find the start in case it is not a complete circuit ride_get_start_of_track(&trackElement); - int z = trackElement.element->base_height * 8; - uint8 track_type = track_element_get_type(trackElement.element); uint8 direction = tile_element_get_direction(trackElement.element); // Used in the following loop to know when we have @@ -5540,9 +5542,7 @@ sint32 ride_get_refund_price(sint32 ride_id) if (!track_block_get_next(&trackElement, &trackElement, NULL, NULL)) break; - z = trackElement.element->base_height * 8; direction = tile_element_get_direction(trackElement.element); - track_type = track_element_get_type(trackElement.element); } while (trackElement.element != initial_map); diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index fd0ac9d120..b32719ecc0 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -1064,6 +1064,8 @@ bool track_block_get_next_from_zero(sint16 x, sint16 y, sint16 z_start, uint8 ri bool track_block_get_previous(sint32 x, sint32 y, rct_tile_element *tileElement, track_begin_end *outTrackBeginEnd); bool track_block_get_previous_from_zero(sint16 x, sint16 y, sint16 z, uint8 rideIndex, uint8 direction, track_begin_end *outTrackBeginEnd); +void ride_get_start_of_track(CoordsXYE * output); + void window_ride_construction_update_active_elements(); void ride_construction_remove_ghosts(); money32 ride_entrance_exit_place_ghost(sint32 rideIndex, sint32 x, sint32 y, sint32 direction, sint32 placeType, sint32 stationNum); diff --git a/src/openrct2/ride/TrackDesignSave.cpp b/src/openrct2/ride/TrackDesignSave.cpp index 7681f3f25c..9a2ca6b294 100644 --- a/src/openrct2/ride/TrackDesignSave.cpp +++ b/src/openrct2/ride/TrackDesignSave.cpp @@ -935,33 +935,15 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track { Ride *ride = get_ride(rideIndex); CoordsXYE trackElement; - track_begin_end trackBeginEnd; if (!ride_try_get_origin_element(rideIndex, &trackElement)) { gGameCommandErrorText = STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY; return false; } - sint32 z = 0; - // Find the start of the track. - // It has to do this as a backwards loop in case this is an incomplete track. - if (track_block_get_previous(trackElement.x, trackElement.y, trackElement.element, &trackBeginEnd)) { - rct_tile_element* initial_map = trackElement.element; - do { - CoordsXYE lastGood = { - /* .x = */ trackBeginEnd.begin_x, - /* .y = */ trackBeginEnd.begin_y, - /* .element = */ trackBeginEnd.begin_element - }; + ride_get_start_of_track(&trackElement); - if (!track_block_get_previous(trackBeginEnd.end_x, trackBeginEnd.end_y, trackBeginEnd.begin_element, &trackBeginEnd)) { - trackElement = lastGood; - break; - } - } while (initial_map != trackBeginEnd.begin_element); - } - - z = trackElement.element->base_height * 8; + sint32 z = trackElement.element->base_height * 8; uint8 track_type = track_element_get_type(trackElement.element); uint8 direction = tile_element_get_direction(trackElement.element); _trackSaveDirection = direction;