From 9c269ae94b372d039b5319563c0fa22987bf80fd Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 25 Jun 2017 17:52:21 +0100 Subject: [PATCH] Fix #5489: Sprite index crash for car view on car ride --- distribution/changelog.txt | 1 + src/openrct2/windows/ride.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 500581e639..7562c71657 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -18,6 +18,7 @@ - Fix: [#4055] Sort rides by track type: Sorting rule is not really clear (inconsistent?) - Fix: [#5400] New Ride window does not focus properly on newly invented ride. - Fix: [#5009] Ride rating calculations can overflow +- Fix: [#5489] Sprite index crash for car view on car ride. - Fix: Non-invented vehicles can be used via track designs in select-by-track-type mode. - Fix: Track components added by OpenRCT2 are now usable in older scenarios. - Technical: [#5047] Add ride ratings tests diff --git a/src/openrct2/windows/ride.c b/src/openrct2/windows/ride.c index 4c39177575..8b61b0017c 100644 --- a/src/openrct2/windows/ride.c +++ b/src/openrct2/windows/ride.c @@ -1789,9 +1789,13 @@ static void window_ride_init_viewport(rct_window *w) rct_ride_entry* ride_entry = get_ride_entry_by_ride(ride); if (ride_entry && ride_entry->tab_vehicle != 0){ rct_vehicle* vehicle = GET_VEHICLE(focus.sprite.sprite_id); - focus.sprite.sprite_id = vehicle->next_vehicle_on_train; + if (vehicle->next_vehicle_on_train != SPRITE_INDEX_NULL) { + focus.sprite.sprite_id = vehicle->next_vehicle_on_train; + } + } + if (focus.sprite.sprite_id != SPRITE_INDEX_NULL) { + focus.sprite.type |= VIEWPORT_FOCUS_TYPE_SPRITE; } - focus.sprite.type |= 0xC0; } else if (eax >= ride->num_vehicles && eax < (ride->num_vehicles + ride->num_stations)){ sint32 stationIndex = -1; @@ -1807,7 +1811,7 @@ static void window_ride_init_viewport(rct_window *w) focus.coordinate.x = (eax & 0xFF) << 5; focus.coordinate.y = (eax & 0xFF00) >> 3; focus.coordinate.z = ride->station_heights[stationIndex] << 3; - focus.sprite.type |= 0x40; + focus.sprite.type |= VIEWPORT_FOCUS_TYPE_COORDINATE; } else{ if (eax > 0){ @@ -1821,7 +1825,7 @@ static void window_ride_init_viewport(rct_window *w) focus.coordinate.z = view->z; focus.coordinate.zoom = view->zoom; - focus.sprite.type |= 0x40; + focus.sprite.type |= VIEWPORT_FOCUS_TYPE_COORDINATE; } focus.coordinate.var_480 = w->viewport_focus_coordinates.var_480;