diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 15cf329813..0e69146f78 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -99,6 +99,7 @@ STR_0094 :Single Rail Roller Coaster STR_0095 :Alpine Coaster STR_0096 :Classic Wooden Roller Coaster STR_0097 :Classic Stand-up Roller Coaster +STR_0098 :LSM Launched Roller Coaster STR_0512 :A compact roller coaster with a spiral lift hill and smooth, twisting drops. STR_0513 :A looping roller coaster where the riders ride in a standing position STR_0514 :Trains suspended beneath the roller coaster track swing out to the side around corners @@ -183,6 +184,7 @@ STR_0604 :Riders ride single file on a narrow monorail track, as they race th STR_0605 :Riders toboggan down a meandering steel track, braking to control their speed STR_0606 :An older-style wooden roller coaster with a fast and rough ride, with plenty of air-time, some lateral G’s, and designed to feel ‘out-of-control’ STR_0607 :An intense, older-style steel looping roller coaster where the riders ride in a standing position +STR_0608 :Roller coaster trains are accelerated by linear synchronous motors, speeding through tight twists and turns STR_0767 :Guest {INT32} STR_0768 :Handyman {INT32} STR_0769 :Mechanic {INT32} @@ -3610,7 +3612,7 @@ STR_6537 :Allow using regular paths as queue STR_6538 :Shows regular paths in the queues dropdown of the Footpaths window. STR_6539 :Brake Closed STR_6540 :{WINDOW_COLOUR_2}Special thanks to the following companies for allowing their likeness: -STR_6541 :{WINDOW_COLOUR_2}Rocky Mountain Construction Group, Josef Wiegand GmbH & Co. KG +STR_6541 :{WINDOW_COLOUR_2}Rocky Mountain Construction Group, Josef Wiegand GmbH & Co. KG, Intamin Amusement Rides Int. Corp. Est. STR_6542 :Contributors STR_6543 :Contributors… STR_6544 :Loan cannot be negative! diff --git a/distribution/changelog.txt b/distribution/changelog.txt index cc81bb8a0c..b149ee2a7b 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,8 +1,10 @@ 0.4.16 (in development) ------------------------------------------------------------------------ +- Feature: [#20810] New ride type: LSM Launched Roller Coaster. - Improved: [#22937] Add banked sloped turns and many other pieces to the Corkscrew, Hypercoaster and Lay-down Roller Coaster. - Improved: [#22967] Add medium and large half loops to the Wooden and Classic Wooden Roller Coasters. - Improved: [#23010] Make AppImage compatible with Ubuntu 22.04 and Debian Bookworm again. +- Change: [#20810] Giga Coaster boosters and launched lift hill track pieces are now locked behind cheats. - Fix: [#21221] Trains use unbanked sprites on flat to gentle diagonal banked track pieces. - Fix: [#22615] Crash when drawing Space Rings with an invalid ride entry. - Fix: [#22633] Crash when drawing loading screen with an outdated g2.dat. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 4282107096..7105f9b22a 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -2711,6 +2711,106 @@ "x": -22, "y": -5 }, + { + "path": "track/lattice_triangle/booster_alt_1.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/booster_alt_2.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/booster_alt_3.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/booster_alt_4.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/block_brake_alt_closed_1.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/block_brake_alt_closed_2.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/block_brake_alt_closed_3.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/block_brake_alt_closed_4.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/block_brake_alt_open_1.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/block_brake_alt_open_2.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/block_brake_alt_open_3.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/block_brake_alt_open_4.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/brake_alt_closed_1.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/brake_alt_closed_2.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/brake_alt_closed_3.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/brake_alt_closed_4.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/brake_alt_open_1.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/brake_alt_open_2.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/brake_alt_open_3.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/brake_alt_open_4.png", + "x": -22, + "y": -4 + }, { "path": "track/lattice_triangle/brake_horizontal_background_open.png", "x": -32, @@ -2748,25 +2848,69 @@ "palette": "keep" }, { - "path": "track/lattice_triangle/liftbooster_0.png", + "path": "track/lattice_triangle/drive_tyre_1.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/drive_tyre_2.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/drive_tyre_3.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/drive_tyre_4.png", + "x": -22, + "y": -4 + }, + { + "path": "track/lattice_triangle/liftbooster_1.png", "x": -21, "y": -20, "palette": "keep" }, { - "path": "track/lattice_triangle/liftbooster_1.png", + "path": "track/lattice_triangle/liftbooster_2.png", "x": -21, "y": -4, "palette": "keep" }, { - "path": "track/lattice_triangle/liftbooster_2.png", + "path": "track/lattice_triangle/liftbooster_3.png", "x": -22, "y": -4, "palette": "keep" }, { - "path": "track/lattice_triangle/liftbooster_3.png", + "path": "track/lattice_triangle/liftbooster_4.png", + "x": -22, + "y": -20, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/liftbooster_alt_1.png", + "x": -21, + "y": -20, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/liftbooster_alt_2.png", + "x": -21, + "y": -4, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/liftbooster_alt_3.png", + "x": -22, + "y": -4, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/liftbooster_alt_4.png", "x": -22, "y": -20, "palette": "keep" diff --git a/resources/g2/track/lattice_triangle/block_brake_alt_closed_1.png b/resources/g2/track/lattice_triangle/block_brake_alt_closed_1.png new file mode 100644 index 0000000000..b0a15201b8 Binary files /dev/null and b/resources/g2/track/lattice_triangle/block_brake_alt_closed_1.png differ diff --git a/resources/g2/track/lattice_triangle/block_brake_alt_closed_2.png b/resources/g2/track/lattice_triangle/block_brake_alt_closed_2.png new file mode 100644 index 0000000000..5e58c90853 Binary files /dev/null and b/resources/g2/track/lattice_triangle/block_brake_alt_closed_2.png differ diff --git a/resources/g2/track/lattice_triangle/block_brake_alt_closed_3.png b/resources/g2/track/lattice_triangle/block_brake_alt_closed_3.png new file mode 100644 index 0000000000..a688b45d76 Binary files /dev/null and b/resources/g2/track/lattice_triangle/block_brake_alt_closed_3.png differ diff --git a/resources/g2/track/lattice_triangle/block_brake_alt_closed_4.png b/resources/g2/track/lattice_triangle/block_brake_alt_closed_4.png new file mode 100644 index 0000000000..6613d0e065 Binary files /dev/null and b/resources/g2/track/lattice_triangle/block_brake_alt_closed_4.png differ diff --git a/resources/g2/track/lattice_triangle/block_brake_alt_open_1.png b/resources/g2/track/lattice_triangle/block_brake_alt_open_1.png new file mode 100644 index 0000000000..4ff47adf7b Binary files /dev/null and b/resources/g2/track/lattice_triangle/block_brake_alt_open_1.png differ diff --git a/resources/g2/track/lattice_triangle/block_brake_alt_open_2.png b/resources/g2/track/lattice_triangle/block_brake_alt_open_2.png new file mode 100644 index 0000000000..6022dff8b8 Binary files /dev/null and b/resources/g2/track/lattice_triangle/block_brake_alt_open_2.png differ diff --git a/resources/g2/track/lattice_triangle/block_brake_alt_open_3.png b/resources/g2/track/lattice_triangle/block_brake_alt_open_3.png new file mode 100644 index 0000000000..a5d3af10a5 Binary files /dev/null and b/resources/g2/track/lattice_triangle/block_brake_alt_open_3.png differ diff --git a/resources/g2/track/lattice_triangle/block_brake_alt_open_4.png b/resources/g2/track/lattice_triangle/block_brake_alt_open_4.png new file mode 100644 index 0000000000..2791fb0474 Binary files /dev/null and b/resources/g2/track/lattice_triangle/block_brake_alt_open_4.png differ diff --git a/resources/g2/track/lattice_triangle/booster_alt_1.png b/resources/g2/track/lattice_triangle/booster_alt_1.png new file mode 100644 index 0000000000..ef82684579 Binary files /dev/null and b/resources/g2/track/lattice_triangle/booster_alt_1.png differ diff --git a/resources/g2/track/lattice_triangle/booster_alt_2.png b/resources/g2/track/lattice_triangle/booster_alt_2.png new file mode 100644 index 0000000000..0c7f079b9c Binary files /dev/null and b/resources/g2/track/lattice_triangle/booster_alt_2.png differ diff --git a/resources/g2/track/lattice_triangle/booster_alt_3.png b/resources/g2/track/lattice_triangle/booster_alt_3.png new file mode 100644 index 0000000000..68232970b1 Binary files /dev/null and b/resources/g2/track/lattice_triangle/booster_alt_3.png differ diff --git a/resources/g2/track/lattice_triangle/booster_alt_4.png b/resources/g2/track/lattice_triangle/booster_alt_4.png new file mode 100644 index 0000000000..6f1e08b7ca Binary files /dev/null and b/resources/g2/track/lattice_triangle/booster_alt_4.png differ diff --git a/resources/g2/track/lattice_triangle/brake_alt_closed_1.png b/resources/g2/track/lattice_triangle/brake_alt_closed_1.png new file mode 100644 index 0000000000..a6dc17f5fe Binary files /dev/null and b/resources/g2/track/lattice_triangle/brake_alt_closed_1.png differ diff --git a/resources/g2/track/lattice_triangle/brake_alt_closed_2.png b/resources/g2/track/lattice_triangle/brake_alt_closed_2.png new file mode 100644 index 0000000000..19370f3fa8 Binary files /dev/null and b/resources/g2/track/lattice_triangle/brake_alt_closed_2.png differ diff --git a/resources/g2/track/lattice_triangle/brake_alt_closed_3.png b/resources/g2/track/lattice_triangle/brake_alt_closed_3.png new file mode 100644 index 0000000000..1fa69a9ab6 Binary files /dev/null and b/resources/g2/track/lattice_triangle/brake_alt_closed_3.png differ diff --git a/resources/g2/track/lattice_triangle/brake_alt_closed_4.png b/resources/g2/track/lattice_triangle/brake_alt_closed_4.png new file mode 100644 index 0000000000..0794391c0f Binary files /dev/null and b/resources/g2/track/lattice_triangle/brake_alt_closed_4.png differ diff --git a/resources/g2/track/lattice_triangle/brake_alt_open_1.png b/resources/g2/track/lattice_triangle/brake_alt_open_1.png new file mode 100644 index 0000000000..1caf0a6e63 Binary files /dev/null and b/resources/g2/track/lattice_triangle/brake_alt_open_1.png differ diff --git a/resources/g2/track/lattice_triangle/brake_alt_open_2.png b/resources/g2/track/lattice_triangle/brake_alt_open_2.png new file mode 100644 index 0000000000..fccd9c9db3 Binary files /dev/null and b/resources/g2/track/lattice_triangle/brake_alt_open_2.png differ diff --git a/resources/g2/track/lattice_triangle/brake_alt_open_3.png b/resources/g2/track/lattice_triangle/brake_alt_open_3.png new file mode 100644 index 0000000000..0af65c732c Binary files /dev/null and b/resources/g2/track/lattice_triangle/brake_alt_open_3.png differ diff --git a/resources/g2/track/lattice_triangle/brake_alt_open_4.png b/resources/g2/track/lattice_triangle/brake_alt_open_4.png new file mode 100644 index 0000000000..a33b1018b2 Binary files /dev/null and b/resources/g2/track/lattice_triangle/brake_alt_open_4.png differ diff --git a/resources/g2/track/lattice_triangle/drive_tyre_1.png b/resources/g2/track/lattice_triangle/drive_tyre_1.png new file mode 100644 index 0000000000..ae2bb9065a Binary files /dev/null and b/resources/g2/track/lattice_triangle/drive_tyre_1.png differ diff --git a/resources/g2/track/lattice_triangle/drive_tyre_2.png b/resources/g2/track/lattice_triangle/drive_tyre_2.png new file mode 100644 index 0000000000..69daa700db Binary files /dev/null and b/resources/g2/track/lattice_triangle/drive_tyre_2.png differ diff --git a/resources/g2/track/lattice_triangle/drive_tyre_3.png b/resources/g2/track/lattice_triangle/drive_tyre_3.png new file mode 100644 index 0000000000..e2852c43b5 Binary files /dev/null and b/resources/g2/track/lattice_triangle/drive_tyre_3.png differ diff --git a/resources/g2/track/lattice_triangle/drive_tyre_4.png b/resources/g2/track/lattice_triangle/drive_tyre_4.png new file mode 100644 index 0000000000..b5fdfbe782 Binary files /dev/null and b/resources/g2/track/lattice_triangle/drive_tyre_4.png differ diff --git a/resources/g2/track/lattice_triangle/liftbooster_1.png b/resources/g2/track/lattice_triangle/liftbooster_1.png index 62aadbb397..1ffc4de8c9 100644 Binary files a/resources/g2/track/lattice_triangle/liftbooster_1.png and b/resources/g2/track/lattice_triangle/liftbooster_1.png differ diff --git a/resources/g2/track/lattice_triangle/liftbooster_2.png b/resources/g2/track/lattice_triangle/liftbooster_2.png index 01f342f00f..62aadbb397 100644 Binary files a/resources/g2/track/lattice_triangle/liftbooster_2.png and b/resources/g2/track/lattice_triangle/liftbooster_2.png differ diff --git a/resources/g2/track/lattice_triangle/liftbooster_3.png b/resources/g2/track/lattice_triangle/liftbooster_3.png index 8a56a1bdc6..01f342f00f 100644 Binary files a/resources/g2/track/lattice_triangle/liftbooster_3.png and b/resources/g2/track/lattice_triangle/liftbooster_3.png differ diff --git a/resources/g2/track/lattice_triangle/liftbooster_4.png b/resources/g2/track/lattice_triangle/liftbooster_4.png new file mode 100644 index 0000000000..8a56a1bdc6 Binary files /dev/null and b/resources/g2/track/lattice_triangle/liftbooster_4.png differ diff --git a/resources/g2/track/lattice_triangle/liftbooster_0.png b/resources/g2/track/lattice_triangle/liftbooster_alt_1.png similarity index 66% rename from resources/g2/track/lattice_triangle/liftbooster_0.png rename to resources/g2/track/lattice_triangle/liftbooster_alt_1.png index 1ffc4de8c9..53fcd60e5d 100644 Binary files a/resources/g2/track/lattice_triangle/liftbooster_0.png and b/resources/g2/track/lattice_triangle/liftbooster_alt_1.png differ diff --git a/resources/g2/track/lattice_triangle/liftbooster_alt_2.png b/resources/g2/track/lattice_triangle/liftbooster_alt_2.png new file mode 100644 index 0000000000..8a3dbf41cf Binary files /dev/null and b/resources/g2/track/lattice_triangle/liftbooster_alt_2.png differ diff --git a/resources/g2/track/lattice_triangle/liftbooster_alt_3.png b/resources/g2/track/lattice_triangle/liftbooster_alt_3.png new file mode 100644 index 0000000000..70f4056169 Binary files /dev/null and b/resources/g2/track/lattice_triangle/liftbooster_alt_3.png differ diff --git a/resources/g2/track/lattice_triangle/liftbooster_alt_4.png b/resources/g2/track/lattice_triangle/liftbooster_alt_4.png new file mode 100644 index 0000000000..ddbf0414f8 Binary files /dev/null and b/resources/g2/track/lattice_triangle/liftbooster_alt_4.png differ diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index ef4043e3d9..b17e59929c 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -105,6 +105,7 @@ namespace OpenRCT2::Ui::Windows RIDE_TYPE_HYBRID_COASTER, RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER, RIDE_TYPE_ALPINE_COASTER, + RIDE_TYPE_LSM_LAUNCHED_ROLLER_COASTER, // Gentle rides RIDE_TYPE_MONORAIL_CYCLES, diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index b88e708d96..7323e94289 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -449,6 +449,7 @@ + @@ -920,6 +921,7 @@ + diff --git a/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp b/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp index 2e8ecaacc3..84f425a21f 100644 --- a/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp +++ b/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp @@ -10341,7 +10341,7 @@ static void LatticeTriangleTrackPoweredLift( const TrackElement& trackElement, SupportType supportType) { PaintAddImageAsParentRotated( - session, direction, session.TrackColours.WithIndex(SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_0 + direction), + session, direction, session.TrackColours.WithIndex(SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_1 + direction), { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) diff --git a/src/openrct2/paint/track/coaster/LatticeTriangleTrackAlt.cpp b/src/openrct2/paint/track/coaster/LatticeTriangleTrackAlt.cpp new file mode 100644 index 0000000000..f2623d6649 --- /dev/null +++ b/src/openrct2/paint/track/coaster/LatticeTriangleTrackAlt.cpp @@ -0,0 +1,217 @@ +/***************************************************************************** + * Copyright (c) 2014-2024 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#include "../../../drawing/Drawing.h" +#include "../../../interface/Viewport.h" +#include "../../../ride/RideData.h" +#include "../../../ride/TrackData.h" +#include "../../../ride/TrackPaint.h" +#include "../../../sprites.h" +#include "../../../world/Map.h" +#include "../../../world/tile_element/TrackElement.h" +#include "../../Paint.h" +#include "../../support/MetalSupports.h" +#include "../../tile_element/Paint.TileElement.h" +#include "../../tile_element/Segment.h" +#include "../../track/Segment.h" +#include "../../track/Support.h" + +using namespace OpenRCT2; + +static constexpr TunnelGroup kTunnelGroup = TunnelGroup::Square; + +static constexpr uint32_t _LatticeTriangleAltBrakeImages[kNumOrthogonalDirections][2] = { + { SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_OPEN_NE_SW, SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_CLOSED_NE_SW }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_OPEN_NW_SE, SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_CLOSED_NW_SE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_OPEN_SW_NE, SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_CLOSED_SW_NE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_OPEN_SE_NW, SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_CLOSED_SE_NW }, +}; + +static constexpr uint32_t _LatticeTriangleAltBlockBrakeImages[kNumOrthogonalDirections][2] = { + { SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_OPEN_NE_SW, SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_CLOSED_NE_SW }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_OPEN_NW_SE, SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_CLOSED_NW_SE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_OPEN_SW_NE, SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_CLOSED_SW_NE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_OPEN_SE_NW, SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_CLOSED_SE_NW }, +}; + +static void LatticeTriangleTrackAltStation( + PaintSession& session, const Ride& ride, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + if (ride.mode == RideMode::PoweredLaunch || ride.mode == RideMode::PoweredLaunchBlockSectioned + || ride.mode == RideMode::PoweredLaunchPasstrough) + { + static constexpr uint32_t imageIds[4][2] = { + { SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_NE_SW, SPR_STATION_BASE_A_SW_NE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_NW_SE, SPR_STATION_BASE_A_NW_SE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_SW_NE, SPR_STATION_BASE_A_SW_NE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_SE_NW, SPR_STATION_BASE_A_NW_SE }, + }; + + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(imageIds[direction][0]), { 0, 0, height }, + { { 0, 6, height + 3 }, { 32, 20, 1 } }); + + PaintAddImageAsParentRotated( + session, direction, GetStationColourScheme(session, trackElement).WithIndex(imageIds[direction][1]), + { 0, 0, height }, { 32, 32, 1 }); + } + else + { + static constexpr uint32_t imageIds[4][2] = { + { SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_NE_SW, SPR_STATION_BASE_A_SW_NE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_NW_SE, SPR_STATION_BASE_A_NW_SE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_SW_NE, SPR_STATION_BASE_A_SW_NE }, + { SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_SE_NW, SPR_STATION_BASE_A_NW_SE }, + }; + if (trackElement.GetTrackType() == TrackElemType::EndStation) + { + bool isClosed = trackElement.IsBrakeClosed(); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(_LatticeTriangleAltBlockBrakeImages[direction][isClosed]), + { 0, 0, height }, { { 0, 6, height + 3 }, { 32, 20, 1 } }); + } + else + { + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(imageIds[direction][0]), { 0, 0, height }, + { { 0, 6, height + 3 }, { 32, 20, 1 } }); + } + + PaintAddImageAsParentRotated( + session, direction, GetStationColourScheme(session, trackElement).WithIndex(imageIds[direction][1]), + { 0, 0, height }, { 32, 32, 1 }); + } + DrawSupportsSideBySide(session, direction, height, session.SupportColours, supportType.metal); + TrackPaintUtilDrawStation2(session, ride, direction, height, trackElement, 9, 11); + TrackPaintUtilDrawStationTunnel(session, direction, height); + PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); +} + +static void LatticeTriangleTrackAltBrakes( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + bool isClosed = trackElement.IsBrakeClosed(); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(_LatticeTriangleAltBrakeImages[direction][isClosed]), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + } + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); +} + +static void LatticeTriangleTrackAltBlockBrakes( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + bool isClosed = trackElement.IsBrakeClosed(); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(_LatticeTriangleAltBlockBrakeImages[direction][isClosed]), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + } + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); +} + +static void LatticeTriangleTrackAltBooster( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_NE_SW), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_NW_SE), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_SW_NE), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_SE_NW), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + } + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); +} + +static void LatticeTriangleTrackAltPoweredLift( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_ALT_1 + direction), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +TRACK_PAINT_FUNCTION GetTrackPaintFunctionLatticeTriangleTrackAlt(TrackElemType trackType) +{ + switch (trackType) + { + case TrackElemType::EndStation: + case TrackElemType::BeginStation: + case TrackElemType::MiddleStation: + return LatticeTriangleTrackAltStation; + case TrackElemType::Brakes: + return LatticeTriangleTrackAltBrakes; + case TrackElemType::BlockBrakes: + return LatticeTriangleTrackAltBlockBrakes; + case TrackElemType::Booster: + return LatticeTriangleTrackAltBooster; + case TrackElemType::PoweredLift: + return LatticeTriangleTrackAltPoweredLift; + + default: + return GetTrackPaintFunctionLatticeTriangleTrack(trackType); + } +} diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 0dc6c046d0..61c19360ed 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -14,7 +14,7 @@ namespace OpenRCT2 constexpr uint32_t PARK_FILE_CURRENT_VERSION = 42; // The minimum version that is forwards compatible with the current version. - constexpr uint32_t PARK_FILE_MIN_VERSION = 40; + constexpr uint32_t PARK_FILE_MIN_VERSION = 42; // The minimum version that is backwards compatible with the current version. // If this is increased beyond 0, uncomment the checks in ParkFile.cpp and Context.cpp! diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index 214cba38b6..882807edbb 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -619,6 +619,7 @@ enum RIDE_TYPE_ALPINE_COASTER, RIDE_TYPE_CLASSIC_WOODEN_ROLLER_COASTER, RIDE_TYPE_CLASSIC_STAND_UP_ROLLER_COASTER, + RIDE_TYPE_LSM_LAUNCHED_ROLLER_COASTER, RIDE_TYPE_COUNT }; diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index bf428be178..e503a233b4 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -49,6 +49,7 @@ #include "rtd/coaster/InvertedRollerCoaster.h" #include "rtd/coaster/JuniorRollerCoaster.h" #include "rtd/coaster/LIMLaunchedRollerCoaster.h" +#include "rtd/coaster/LSMLaunchedRollerCoaster.h" #include "rtd/coaster/LayDownRollerCoaster.h" #include "rtd/coaster/LoopingRollerCoaster.h" #include "rtd/coaster/MineRide.h" @@ -352,6 +353,7 @@ constexpr RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT] = { /* RIDE_TYPE_ALPINE_COASTER */ AlpineCoasterRTD, /* RIDE_TYPE_CLASSIC_WOODEN_ROLLER_COASTER */ ClassicWoodenRollerCoasterRTD, /* RIDE_TYPE_CLASSIC_STAND_UP_ROLLER_COASTER */ ClassicStandUpRollerCoasterRTD, + /* RIDE_TYPE_LSM_LAUNCHED_ROLLER_COASTER */ LSMLaunchedRollerCoasterRTD, }; bool RideTypeDescriptor::HasFlag(RtdFlag flag) const diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index 083ee615db..f82759026c 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -561,6 +561,7 @@ constexpr std::string_view MUSIC_OBJECT_SUMMER = "rct2.music.summer"; constexpr std::string_view MUSIC_OBJECT_TECHNO = "rct2.music.techno"; constexpr std::string_view MUSIC_OBJECT_WATER = "rct2.music.water"; constexpr std::string_view MUSIC_OBJECT_WILD_WEST = "rct2.music.wildwest"; +constexpr std::string_view MUSIC_OBJECT_MODERN = "rct2.music.modern"; constexpr const RideComponentName& GetRideComponentName(const RideComponentType type) { diff --git a/src/openrct2/ride/RideStringIds.h b/src/openrct2/ride/RideStringIds.h index 03855eba37..928ab36163 100644 --- a/src/openrct2/ride/RideStringIds.h +++ b/src/openrct2/ride/RideStringIds.h @@ -37,6 +37,7 @@ enum : StringId STR_RIDE_NAME_JUNIOR_ROLLER_COASTER = 6, STR_RIDE_NAME_LAY_DOWN_ROLLER_COASTER = 64, STR_RIDE_NAME_LIM_LAUNCHED_ROLLER_COASTER = 92, + STR_RIDE_NAME_LSM_LAUNCHED_ROLLER_COASTER = 98, STR_RIDE_NAME_LOOPING_ROLLER_COASTER = 17, STR_RIDE_NAME_MINE_RIDE = 90, STR_RIDE_NAME_MINE_TRAIN_COASTER = 19, @@ -79,6 +80,7 @@ enum : StringId STR_RIDE_DESCRIPTION_JUNIOR_ROLLER_COASTER = 516, STR_RIDE_DESCRIPTION_LAY_DOWN_ROLLER_COASTER = 574, STR_RIDE_DESCRIPTION_LIM_LAUNCHED_ROLLER_COASTER = 602, + STR_RIDE_DESCRIPTION_LSM_LAUNCHED_ROLLER_COASTER = 608, STR_RIDE_DESCRIPTION_LOOPING_ROLLER_COASTER = 527, STR_RIDE_DESCRIPTION_MINE_RIDE = 600, STR_RIDE_DESCRIPTION_MINE_TRAIN_COASTER = 529, diff --git a/src/openrct2/ride/TrackPaint.h b/src/openrct2/ride/TrackPaint.h index 9519baab66..9fdfbb9f85 100644 --- a/src/openrct2/ride/TrackPaint.h +++ b/src/openrct2/ride/TrackPaint.h @@ -607,6 +607,7 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionReverserRC(OpenRCT2::TrackElemType tra TRACK_PAINT_FUNCTION GetTrackPaintFunctionHeartlineTwisterRC(OpenRCT2::TrackElemType trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionMiniGolf(OpenRCT2::TrackElemType trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionLatticeTriangleTrack(OpenRCT2::TrackElemType trackType); +TRACK_PAINT_FUNCTION GetTrackPaintFunctionLatticeTriangleTrackAlt(OpenRCT2::TrackElemType trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionRotoDrop(OpenRCT2::TrackElemType trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionFlyingSaucers(OpenRCT2::TrackElemType trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionCrookedHouse(OpenRCT2::TrackElemType trackType); diff --git a/src/openrct2/ride/rtd/coaster/GigaCoaster.h b/src/openrct2/ride/rtd/coaster/GigaCoaster.h index 135fde8d2e..fdb2ae56d1 100644 --- a/src/openrct2/ride/rtd/coaster/GigaCoaster.h +++ b/src/openrct2/ride/rtd/coaster/GigaCoaster.h @@ -22,8 +22,8 @@ constexpr RideTypeDescriptor GigaCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionLatticeTriangleTrack, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::liftHillCable, TrackGroup::booster, TrackGroup::poweredLift, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeVertical, TrackGroup::curveVertical}, - .extraTrackGroups = {TrackGroup::barrelRoll, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::verticalLoop, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::liftHillCable, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeVertical, TrackGroup::curveVertical}, + .extraTrackGroups = {TrackGroup::barrelRoll, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::verticalLoop, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::booster, TrackGroup::poweredLift}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h b/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h new file mode 100644 index 0000000000..75c8103dbe --- /dev/null +++ b/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h @@ -0,0 +1,90 @@ +/***************************************************************************** + * Copyright (c) 2014-2024 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#pragma once + +#include "../../../sprites.h" +#include "../../RideData.h" +#include "../../ShopItem.h" +#include "../../Track.h" + +// clang-format off +constexpr RideTypeDescriptor LSMLaunchedRollerCoasterRTD = +{ + .Category = RIDE_CATEGORY_ROLLERCOASTER, + .StartTrackPiece = OpenRCT2::TrackElemType::EndStation, + .TrackPaintFunctions = TrackDrawerDescriptor({ + .Drawer = GetTrackPaintFunctionLatticeTriangleTrackAlt, + .supportType = MetalSupportType::Tubes, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::slopeCurveLargeBanked, TrackGroup::booster, TrackGroup::poweredLift, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::barrelRoll, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::verticalLoop, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge }, + .extraTrackGroups = {TrackGroup::liftHill, TrackGroup::liftHillCable}, + }), + .InvertedTrackPaintFunctions = {}, + .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | + EnumsToFlags(RtdFlag::hasLeaveWhenAnotherVehicleArrivesAtStation, RtdFlag::checkGForces, + RtdFlag::allowMultipleCircuits, RtdFlag::allowCableLiftHill, RtdFlag::allowReversedTrains), + .RideModes = EnumsToFlags(RideMode::ContinuousCircuit, RideMode::ContinuousCircuitBlockSectioned, RideMode::PoweredLaunch, RideMode::PoweredLaunchBlockSectioned), + .DefaultMode = RideMode::ContinuousCircuit, + .OperatingSettings = { 2, 10 }, + .TrackSpeedSettings = { 60, 60 }, + .BoosterSettings = { 17, 68 }, + .LegacyBoosterSettings = { 17, 68, 2 }, + .Naming = { STR_RIDE_NAME_LSM_LAUNCHED_ROLLER_COASTER, STR_RIDE_DESCRIPTION_LSM_LAUNCHED_ROLLER_COASTER }, + .NameConvention = { RideComponentType::Train, RideComponentType::Track, RideComponentType::Station }, + .EnumName = "RIDE_TYPE_LSM_LAUNCHED_ROLLER_COASTER", + .AvailableBreakdowns = (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION), + .Heights = { 33, 24, 9, 11, }, + .MaxMass = 31, + .LiftData = { OpenRCT2::Audio::SoundId::LiftClassic, 5, 5 }, + .RatingsMultipliers = { 51, 32, 10 }, + .UpkeepCosts = { 10, 20, 80, 12, 3, 40 }, + .BuildCosts = { 57.00_GBP, 2.50_GBP, 55, }, + .DefaultPrices = { 20, 20 }, + .DefaultMusic = MUSIC_OBJECT_MODERN, + .PhotoItem = ShopItem::Photo, + .BonusValue = 120, + .ColourPresets = TRACK_COLOUR_PRESETS( + { COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_BLACK}, // Taiga + { COLOUR_BRIGHT_GREEN, COLOUR_BRIGHT_GREEN, COLOUR_YELLOW}, // Cheetah Hunt + { COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_DULL_BROWN_LIGHT}, // Maverick + { COLOUR_BLACK, COLOUR_BLACK, COLOUR_DULL_BROWN_DARK}, // Taron + ), + .ColourPreview = { SPR_RIDE_DESIGN_PREVIEW_GIGA_RC, SPR_RIDE_DESIGN_PREVIEW_GIGA_RC_SUPPORTS }, + .ColourKey = RideColourKey::Ride, + .Name = "lsm_rc", + .RatingsData = + { + RatingsCalculationType::Normal, + { RIDE_RATING(3, 85), RIDE_RATING(0, 40), RIDE_RATING(0, 35) }, + 14, + -1, + false, + { + { RatingsModifierType::BonusLength, 6000, 764, 0, 0 }, + { RatingsModifierType::BonusSynchronisation, 0, RIDE_RATING(0, 40), RIDE_RATING(0, 05), 0 }, + { RatingsModifierType::BonusTrainLength, 0, 187245, 0, 0 }, + { RatingsModifierType::BonusMaxSpeed, 0, 44281, 88562, 35424 }, + { RatingsModifierType::BonusAverageSpeed, 0, 291271, 436906, 0 }, + { RatingsModifierType::BonusDuration, 150, 26214, 0, 0 }, + { RatingsModifierType::BonusGForces, 0, 24576, 35746, 49648 }, + { RatingsModifierType::BonusTurns, 0, 26749, 34767, 45749 }, + { RatingsModifierType::BonusDrops, 0, 29127, 46811, 49152 }, + { RatingsModifierType::BonusSheltered, 0, 15420, 32768, 35108 }, + { RatingsModifierType::BonusReversedTrains, 0, 2, 15, 20 }, + { RatingsModifierType::BonusProximity, 0, 20130, 0, 0 }, + { RatingsModifierType::BonusScenery, 0, 6693, 0, 0 }, + { RatingsModifierType::RequirementDropHeight, 10, 2, 2, 2 }, + { RatingsModifierType::RequirementMaxSpeed, 0xA0000, 2, 2, 2 }, + { RatingsModifierType::RequirementNegativeGs, 10, 2, 2, 2 }, + { RatingsModifierType::RequirementNumDrops, 2, 2, 2, 2 }, + { RatingsModifierType::PenaltyLateralGs, 0, 24576, 35746, 49648 }, + }, + }, +}; +// clang-format on diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index e827e024d1..a51ea9ca72 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1226,11 +1226,39 @@ enum : ImageIndex SPR_G2_LATTICE_TRIANGLE_TRACK_BEGIN = SPR_G2_JUNIOR_RC_END, SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_NE_SW = SPR_G2_LATTICE_TRIANGLE_TRACK_BEGIN, SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_NW_SE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_NE_SW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_NW_SE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_SW_NE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BOOSTER_ALT_SE_NW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_CLOSED_NE_SW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_CLOSED_NW_SE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_CLOSED_SW_NE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_CLOSED_SE_NW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_OPEN_NE_SW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_OPEN_NW_SE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_OPEN_SW_NE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BLOCK_BRAKE_ALT_OPEN_SE_NW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_CLOSED_NE_SW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_CLOSED_NW_SE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_CLOSED_SW_NE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_CLOSED_SE_NW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_OPEN_NE_SW, + SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_OPEN_NW_SE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_OPEN_SW_NE, + SPR_G2_LATTICE_TRIANGLE_TRACK_BRAKE_ALT_OPEN_SE_NW, SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BRAKES, - SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_0 = SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BRAKES + 6, + SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_NE_SW = SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BRAKES + 6, + SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_NW_SE, + SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_SW_NE, + SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_SE_NW, SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_1, SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_2, SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_3, + SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_4, + SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_ALT_1, + SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_ALT_2, + SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_ALT_3, + SPR_G2_LATTICE_TRIANGLE_TRACK_POWERED_LIFT_ALT_4, SPR_G2_LATTICE_TRIANGLE_TRACK_VERTICAL, SPR_G2_LATTICE_TRIANGLE_TRACK_VERTICAL_TWIST = SPR_G2_LATTICE_TRIANGLE_TRACK_VERTICAL + 12, SPR_G2_LATTICE_TRIANGLE_TRACK_BARREL_ROLL = SPR_G2_LATTICE_TRIANGLE_TRACK_VERTICAL_TWIST + 12,