From c74984740b3c87d8bf08f75049e97978690e80b1 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 1 Oct 2021 13:48:27 +0200 Subject: [PATCH 1/2] Pass ride ref to paint_swinging_inverter_ship_structure() --- .../ride/thrill/SwingingInverterShip.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/openrct2/ride/thrill/SwingingInverterShip.cpp b/src/openrct2/ride/thrill/SwingingInverterShip.cpp index faca18d95b..31eccf4b27 100644 --- a/src/openrct2/ride/thrill/SwingingInverterShip.cpp +++ b/src/openrct2/ride/thrill/SwingingInverterShip.cpp @@ -49,19 +49,19 @@ static constexpr const uint32_t swinging_inverter_ship_frame_sprites[] = { SPR_S SPR_SWINGING_INVERTER_SHIP_FRAME_3 }; static void paint_swinging_inverter_ship_structure( - paint_session* session, const Ride* ride, uint8_t direction, int8_t axisOffset, uint16_t height) + paint_session* session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) { const TileElement* savedTileElement = static_cast(session->CurrentlyDrawnItem); - rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); + rct_ride_entry* rideEntry = get_ride_entry(ride.subtype); Vehicle* vehicle = nullptr; int8_t xOffset = !(direction & 1) ? axisOffset : 0; int8_t yOffset = (direction & 1) ? axisOffset : 0; - if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL) + if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride.vehicles[0] != SPRITE_INDEX_NULL) { - vehicle = GetEntity(ride->vehicles[0]); + vehicle = GetEntity(ride.vehicles[0]); session->InteractionType = ViewportInteractionItem::Entity; session->CurrentlyDrawnItem = vehicle; @@ -92,7 +92,7 @@ static void paint_swinging_inverter_ship_structure( uint32_t colourFlags = session->TrackColours[SCHEME_MISC]; if (colourFlags == IMAGE_TYPE_REMAP) { - colourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim); + colourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride.vehicle_colours[0].Body, ride.vehicle_colours[0].Trim); } swinging_inverter_ship_bound_box boundBox = swinging_inverter_ship_bounds[direction]; @@ -179,16 +179,16 @@ static void paint_swinging_inverter_ship( switch (relativeTrackSequence) { case 1: - paint_swinging_inverter_ship_structure(session, ride, direction, 48, height + 7); + paint_swinging_inverter_ship_structure(session, *ride, direction, 48, height + 7); break; case 2: - paint_swinging_inverter_ship_structure(session, ride, direction, 16, height + 7); + paint_swinging_inverter_ship_structure(session, *ride, direction, 16, height + 7); break; case 0: - paint_swinging_inverter_ship_structure(session, ride, direction, -16, height + 7); + paint_swinging_inverter_ship_structure(session, *ride, direction, -16, height + 7); break; case 3: - paint_swinging_inverter_ship_structure(session, ride, direction, -48, height + 7); + paint_swinging_inverter_ship_structure(session, *ride, direction, -48, height + 7); break; } } From d3cfa07a2af20e1fb85993f0ae849f62f3a600e3 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 1 Oct 2021 13:50:04 +0200 Subject: [PATCH 2/2] Fix #15496: crash in paint_swinging_inverter_ship_structure() --- distribution/changelog.txt | 1 + src/openrct2/ride/thrill/SwingingInverterShip.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 14ded1411b..5b1ac91904 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -28,6 +28,7 @@ - Fix: [#15257] Chat icon shows in scenario/track editor. Other icons don't disable when deactivated in options menu. - Fix: [#15289] Unexpected behavior with duplicated banners which also caused desyncs in multiplayer. - Fix: [#15487] Map animations do not work correctly when loading an exported SV6 file in vanilla RCT2. +- Fix: [#15496] Crash in paint_swinging_inverter_ship_structure(). - Improved: [#3417] Crash dumps are now placed in their own folder. - Change: [#8601] Revert ToonTower base block fix to re-enable support blocking. - Change: [#15174] [Plugin] Deprecate the type "peep" and add support to target a specific scripting api version. diff --git a/src/openrct2/ride/thrill/SwingingInverterShip.cpp b/src/openrct2/ride/thrill/SwingingInverterShip.cpp index 31eccf4b27..eac661e59e 100644 --- a/src/openrct2/ride/thrill/SwingingInverterShip.cpp +++ b/src/openrct2/ride/thrill/SwingingInverterShip.cpp @@ -54,6 +54,9 @@ static void paint_swinging_inverter_ship_structure( const TileElement* savedTileElement = static_cast(session->CurrentlyDrawnItem); rct_ride_entry* rideEntry = get_ride_entry(ride.subtype); + if (rideEntry == nullptr) + return; + Vehicle* vehicle = nullptr; int8_t xOffset = !(direction & 1) ? axisOffset : 0;