diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 599b19a575..225d4aea1d 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -3,6 +3,7 @@ - Feature: [#22646] New scenario files now contain a minimap image, shown in the scenario selection window. - Feature: [#23774] Climates can now be customised using objects. - Feature: [#23876] New park save files now contain a preview image, shown in the load/save window. +- Improved: [#24078] Handrails on Wooden Roller Coaster station sprites with no platforms have been removed. - Change: [#23932] The land rights window now checks “Land Owned” by default. - Change: [#23936] The ‘guests prefer less/more intense rides’ settings have been turned into a dropdown. - Change: [#24059] The ‘select other ride’ button is now available in the track manager. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 5f009b90a2..2631c7ea90 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -9726,6 +9726,36 @@ "x": -30, "y": -8 }, + { + "path": "track/wooden/station_no_platform_sw_ne.png", + "x": -34, + "y": -8 + }, + { + "path": "track/wooden/station_no_platform_nw_se.png", + "x": -30, + "y": -8 + }, + { + "path": "track/wooden/station_no_platform_block_brake_open_sw_ne.png", + "x": -34, + "y": -8 + }, + { + "path": "track/wooden/station_no_platform_block_brake_open_nw_se.png", + "x": -30, + "y": -8 + }, + { + "path": "track/wooden/station_no_platform_block_brake_closed_sw_ne.png", + "x": -34, + "y": -8 + }, + { + "path": "track/wooden/station_no_platform_block_brake_closed_nw_se.png", + "x": -30, + "y": -8 + }, { "path": "track/wooden/classic_wooden_preview_track.png", "x": 1, diff --git a/resources/g2/track/wooden/station_no_platform_block_brake_closed_nw_se.png b/resources/g2/track/wooden/station_no_platform_block_brake_closed_nw_se.png new file mode 100644 index 0000000000..ee3e26d20a Binary files /dev/null and b/resources/g2/track/wooden/station_no_platform_block_brake_closed_nw_se.png differ diff --git a/resources/g2/track/wooden/station_no_platform_block_brake_closed_sw_ne.png b/resources/g2/track/wooden/station_no_platform_block_brake_closed_sw_ne.png new file mode 100644 index 0000000000..51fd52f6f0 Binary files /dev/null and b/resources/g2/track/wooden/station_no_platform_block_brake_closed_sw_ne.png differ diff --git a/resources/g2/track/wooden/station_no_platform_block_brake_open_nw_se.png b/resources/g2/track/wooden/station_no_platform_block_brake_open_nw_se.png new file mode 100644 index 0000000000..3339985da9 Binary files /dev/null and b/resources/g2/track/wooden/station_no_platform_block_brake_open_nw_se.png differ diff --git a/resources/g2/track/wooden/station_no_platform_block_brake_open_sw_ne.png b/resources/g2/track/wooden/station_no_platform_block_brake_open_sw_ne.png new file mode 100644 index 0000000000..a0af6aa105 Binary files /dev/null and b/resources/g2/track/wooden/station_no_platform_block_brake_open_sw_ne.png differ diff --git a/resources/g2/track/wooden/station_no_platform_nw_se.png b/resources/g2/track/wooden/station_no_platform_nw_se.png new file mode 100644 index 0000000000..b179c74b95 Binary files /dev/null and b/resources/g2/track/wooden/station_no_platform_nw_se.png differ diff --git a/resources/g2/track/wooden/station_no_platform_sw_ne.png b/resources/g2/track/wooden/station_no_platform_sw_ne.png new file mode 100644 index 0000000000..bf5f6edccd Binary files /dev/null and b/resources/g2/track/wooden/station_no_platform_sw_ne.png differ diff --git a/src/openrct2/SpriteIds.h b/src/openrct2/SpriteIds.h index f885dbe96f..c5a860d5db 100644 --- a/src/openrct2/SpriteIds.h +++ b/src/openrct2/SpriteIds.h @@ -1386,6 +1386,12 @@ enum : ImageIndex SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_NW_SE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_SW_NE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_NW_SE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_SW_NE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_NW_SE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_OPEN_SW_NE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_OPEN_NW_SE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_CLOSED_SW_NE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_CLOSED_NW_SE, SPR_RIDE_DESIGN_PREVIEW_CLASSIC_WOODEN_ROLLER_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_CLASSIC_WOODEN_ROLLER_COASTER_SUPPORTS, diff --git a/src/openrct2/paint/track/coaster/WoodenRollerCoaster.cpp b/src/openrct2/paint/track/coaster/WoodenRollerCoaster.cpp index d614093712..fa57a46bec 100644 --- a/src/openrct2/paint/track/coaster/WoodenRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/WoodenRollerCoaster.cpp @@ -851,11 +851,23 @@ static constexpr uint32_t kBlockBrakesImageIds[4][3] = { { SPR_WOODEN_RC_BLOCK_BRAKES_NW_SE_OPEN, SPR_WOODEN_RC_BLOCK_BRAKES_NW_SE_CLOSED, SPR_WOODEN_RC_BLOCK_BRAKES_RAILS_NW_SE }, }; -static constexpr uint32_t kStationBlockBrakesImageIds[4][2] = { - { SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_SW_NE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_SW_NE }, - { SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_NW_SE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_NW_SE }, - { SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_SW_NE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_SW_NE }, - { SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_NW_SE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_NW_SE }, +static constexpr ImageIndex kStationBlockBrakesImageIds[2][kNumOrthogonalDirections][2] = { + { + { SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_OPEN_SW_NE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_CLOSED_SW_NE }, + { SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_OPEN_NW_SE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_CLOSED_NW_SE }, + { SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_OPEN_SW_NE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_CLOSED_SW_NE }, + { SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_OPEN_NW_SE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_BLOCK_BRAKE_CLOSED_NW_SE }, + }, + { + { SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_SW_NE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_SW_NE }, + { SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_NW_SE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_NW_SE }, + { SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_SW_NE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_SW_NE }, + { SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_OPEN_NW_SE, SPR_G2_WOODEN_RC_STATION_BLOCK_BRAKE_CLOSED_NW_SE }, + }, }; static constexpr const uint32_t kWoodenRCDiagBrakeImages[kNumOrthogonalDirections] = { @@ -2036,30 +2048,37 @@ static void WoodenRCTrackStation( PaintSession& session, const Ride& ride, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement, SupportType supportType) { - static constexpr uint32_t stationImageIds[4][2] = { - { SPR_WOODEN_RC_STATION_SW_NE, SPR_WOODEN_RC_STATION_RAILS_SW_NE }, - { SPR_WOODEN_RC_STATION_NW_SE, SPR_WOODEN_RC_STATION_RAILS_NW_SE }, - { SPR_WOODEN_RC_STATION_SW_NE, SPR_WOODEN_RC_STATION_RAILS_SW_NE }, - { SPR_WOODEN_RC_STATION_NW_SE, SPR_WOODEN_RC_STATION_RAILS_NW_SE }, + static constexpr ImageIndex stationImageIds[2][kNumOrthogonalDirections] = { + { + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_SW_NE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_NW_SE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_SW_NE, + SPR_G2_WOODEN_RC_STATION_NO_PLATFORM_NW_SE, + }, + { + SPR_WOODEN_RC_STATION_SW_NE, + SPR_WOODEN_RC_STATION_NW_SE, + SPR_WOODEN_RC_STATION_SW_NE, + SPR_WOODEN_RC_STATION_NW_SE, + }, }; - - auto trackType = trackElement.GetTrackType(); - if (trackType == TrackElemType::EndStation) + const bool drewStation = TrackPaintUtilDrawStation2( + session, ride, direction, height, trackElement, StationBaseType::none, 0, 9, 11); + const ImageId colours = isClassic ? session.TrackColours : session.SupportColours; + if (trackElement.GetTrackType() == TrackElemType::EndStation) { - const auto brakeImg = trackElement.IsBrakeClosed() ? kStationBlockBrakesImageIds[direction][1] - : kStationBlockBrakesImageIds[direction][0]; - WoodenRCTrackPaint( - session, direction, brakeImg, SPR_G2_EMPTY, { 0, 2, height }, { { 0, 2, height }, { 32, 27, 2 } }); + const ImageIndex imageIndex = kStationBlockBrakesImageIds[drewStation][direction][trackElement.IsBrakeClosed()]; + PaintAddImageAsParentRotated( + session, direction, colours.WithIndex(imageIndex), { 0, 2, height }, { { 0, 2, height }, { 32, 27, 2 } }); } else { - WoodenRCTrackPaint( - session, direction, stationImageIds[direction][0], stationImageIds[direction][1], { 0, 2, height }, + PaintAddImageAsParentRotated( + session, direction, colours.WithIndex(stationImageIds[drewStation][direction]), { 0, 2, height }, { { 0, 2, height }, { 32, 27, 2 } }); } WoodenASupportsPaintSetupRotated( session, supportType.wooden, WoodenSupportSubType::NeSw, direction, height, session.SupportColours); - TrackPaintUtilDrawStation2(session, ride, direction, height, trackElement, StationBaseType::none, 0, 9, 11); TrackPaintUtilDrawStationTunnel(session, direction, height); PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight);