From c7de74f1321a39d3acd4b6fd7a79fb2dbf3cffc0 Mon Sep 17 00:00:00 2001 From: Yaroslav Tretyakov Date: Tue, 4 Jul 2017 00:43:25 -0600 Subject: [PATCH] Fix #3846, #5749: ride_create_vehicles_find_first_block could not handle diagonal blocks (#5778) * Fix #3846: Testing or opening (certain) rollercoaster causes game to hang * Fix #5749: Game Crash when I test the roller coaster --- src/openrct2/ride/ride.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/openrct2/ride/ride.c b/src/openrct2/ride/ride.c index 7e608c359e..b8d6e23a92 100644 --- a/src/openrct2/ride/ride.c +++ b/src/openrct2/ride/ride.c @@ -4756,7 +4756,6 @@ static void ride_create_vehicles_find_first_block(rct_ride *ride, rct_xy_element sint32 x = firstX; sint32 y = firstY; - sint32 z = firstZ; rct_map_element *trackElement = firstElement; track_begin_end trackBeginEnd; while (track_block_get_previous(x, y, trackElement, &trackBeginEnd)) { @@ -4780,20 +4779,22 @@ static void ride_create_vehicles_find_first_block(rct_ride *ride, rct_xy_element break; case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_25_DEG_UP: + case TRACK_ELEM_DIAG_60_DEG_UP: if (track_element_is_lift_hill(trackElement)) { rct_map_element *mapElement = map_get_first_element_at(x >> 5, y >> 5); do { if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK) continue; - if (mapElement->base_height != z) continue; if ((mapElement->properties.track.sequence & 0x0F) != 0) continue; - if (mapElement->properties.track.type != trackType) continue; break; } while (!map_element_is_last_for_tile(mapElement++)); - - outXYElement->x = x; - outXYElement->y = y; - outXYElement->element = mapElement; - return; + if (mapElement->properties.track.type == TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT || + mapElement->properties.track.type == TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT) { + outXYElement->x = x; + outXYElement->y = y; + outXYElement->element = mapElement; + return; + } } break; case TRACK_ELEM_END_STATION: