diff --git a/src/openrct2-ui/interface/ViewportInteraction.cpp b/src/openrct2-ui/interface/ViewportInteraction.cpp index e59a274ae0..7d89f62318 100644 --- a/src/openrct2-ui/interface/ViewportInteraction.cpp +++ b/src/openrct2-ui/interface/ViewportInteraction.cpp @@ -458,7 +458,13 @@ int32_t viewport_interaction_right_click(int32_t x, int32_t y) case VIEWPORT_INTERACTION_ITEM_SPRITE: if (info.sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE) - ride_construct(get_ride(info.sprite->vehicle.ride)); + { + auto ride = get_ride(info.sprite->vehicle.ride); + if (ride != nullptr) + { + ride_construct(ride); + } + } break; case VIEWPORT_INTERACTION_ITEM_RIDE: tileElement.x = info.x; diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 16992ab5a6..983f1fafd5 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2011,9 +2011,6 @@ static void window_ride_rename(rct_window* w) */ static void window_ride_main_mouseup(rct_window* w, rct_widgetindex widgetIndex) { - ride_id_t rideIndex; - int32_t status; - switch (widgetIndex) { case WIDX_CLOSE: @@ -2032,13 +2029,18 @@ static void window_ride_main_mouseup(rct_window* w, rct_widgetindex widgetIndex) window_ride_set_page(w, widgetIndex - WIDX_TAB_1); break; case WIDX_CONSTRUCTION: - rideIndex = (uint8_t)w->number; - ride_construct(get_ride(rideIndex)); - if (window_find_by_number(WC_RIDE_CONSTRUCTION, rideIndex) != nullptr) + { + auto ride = get_ride(w->number); + if (ride != nullptr) { - window_close(w); + ride_construct(ride); + if (window_find_by_number(WC_RIDE_CONSTRUCTION, ride->id) != nullptr) + { + window_close(w); + } } break; + } case WIDX_RENAME: window_ride_rename(w); break; @@ -2052,29 +2054,31 @@ static void window_ride_main_mouseup(rct_window* w, rct_widgetindex widgetIndex) case WIDX_SIMULATE_LIGHT: case WIDX_TEST_LIGHT: case WIDX_OPEN_LIGHT: - switch (widgetIndex) - { - default: - case WIDX_CLOSE_LIGHT: - status = RIDE_STATUS_CLOSED; - break; - case WIDX_SIMULATE_LIGHT: - status = RIDE_STATUS_SIMULATING; - break; - case WIDX_TEST_LIGHT: - status = RIDE_STATUS_TESTING; - break; - case WIDX_OPEN_LIGHT: - status = RIDE_STATUS_OPEN; - break; - } - + { auto ride = get_ride(w->number); if (ride != nullptr) { + int32_t status; + switch (widgetIndex) + { + default: + case WIDX_CLOSE_LIGHT: + status = RIDE_STATUS_CLOSED; + break; + case WIDX_SIMULATE_LIGHT: + status = RIDE_STATUS_SIMULATING; + break; + case WIDX_TEST_LIGHT: + status = RIDE_STATUS_TESTING; + break; + case WIDX_OPEN_LIGHT: + status = RIDE_STATUS_OPEN; + break; + } ride_set_status(ride, status); } break; + } } }