diff --git a/distribution/changelog.txt b/distribution/changelog.txt index b0837635b3..e7258ae73a 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -29,6 +29,7 @@ - Change: [#17762] Use vertical tabs in the New Game dialog. - Fix: [#5141] Headless server is counted as a player. - Fix: [#7466] Coaster track not drawn at tunnel exit. +- Fix: [#10535] Guests getting stuck at specific level crossings. - Fix: [#14337] Guest blocking ride entrance after ride price changed to be unaffordable. - Fix: [#15328] Wooden Roller Coaster incorrectly draws a railing on the first station piece (original bug). - Fix: [#16392] Scenery on sloped surface is placed at wrong height. diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index df4ff3b883..c1ccb78f1a 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -9250,29 +9250,25 @@ void Vehicle::UpdateCrossings() const xyElement = { backVehicle->TrackLocation, map_get_track_element_at_of_type_seq(backVehicle->TrackLocation, backVehicle->GetTrackType(), 0) }; - curZ = backVehicle->TrackLocation.z; - - if (xyElement.element != nullptr) + if (xyElement.element == nullptr) { - uint8_t freeCount = travellingForwards ? 3 : 1; + return; + } - while (freeCount-- > 0) + uint8_t freeCount = travellingForwards ? 3 : 1; + while (freeCount-- > 0) + { + auto* pathElement = map_get_path_element_at(TileCoordsXYZ(CoordsXYZ{ xyElement, xyElement.element->GetBaseZ() })); + if (pathElement != nullptr) { - if (travellingForwards) - { - if (track_block_get_previous(xyElement, &output)) - { - xyElement.x = output.begin_x; - xyElement.y = output.begin_y; - xyElement.element = output.begin_element; - } - } + pathElement->SetIsBlockedByVehicle(false); + } - auto* pathElement = map_get_path_element_at(TileCoordsXYZ(CoordsXYZ{ xyElement, xyElement.element->GetBaseZ() })); - if (pathElement != nullptr) - { - pathElement->SetIsBlockedByVehicle(false); - } + if (travellingForwards && freeCount > 0 && track_block_get_previous(xyElement, &output)) + { + xyElement.x = output.begin_x; + xyElement.y = output.begin_y; + xyElement.element = output.begin_element; } } }