From 76a40bb52a9bad01a821ecb9aedd2c3f8a64f2e8 Mon Sep 17 00:00:00 2001 From: AuraSpecs Date: Sun, 24 Nov 2024 21:12:51 +0100 Subject: [PATCH] Add diagonal booster to LSM Launched Coaster --- distribution/changelog.txt | 1 + resources/g2/sprites.json | 30 ++++++++++++++++++ .../lattice_triangle/diagonal_booster_0.png | Bin 0 -> 1232 bytes .../lattice_triangle/diagonal_booster_1.png | Bin 0 -> 1169 bytes .../diagonal_booster_alt_0.png | Bin 0 -> 1257 bytes .../diagonal_booster_alt_1.png | Bin 0 -> 1164 bytes .../diagonal_booster_alt_2.png | Bin 0 -> 1223 bytes .../diagonal_booster_alt_3.png | Bin 0 -> 1167 bytes src/openrct2-ui/ride/Construction.h | 3 +- src/openrct2/network/NetworkBase.cpp | 2 +- .../track/coaster/LatticeTriangleTrack.cpp | 14 ++++++++ .../track/coaster/LatticeTriangleTrackAlt.cpp | 14 ++++++++ src/openrct2/park/ParkFile.h | 4 +-- src/openrct2/ride/Ride.cpp | 1 + src/openrct2/ride/Track.cpp | 9 +++++- src/openrct2/ride/Track.h | 4 ++- src/openrct2/ride/TrackData.cpp | 17 ++++++++-- src/openrct2/ride/VehicleSubpositionData.cpp | 7 ++-- src/openrct2/ride/rtd/coaster/GigaCoaster.h | 2 +- .../rtd/coaster/LSMLaunchedRollerCoaster.h | 2 +- src/openrct2/sprites.h | 8 ++++- 21 files changed, 103 insertions(+), 15 deletions(-) create mode 100644 resources/g2/track/lattice_triangle/diagonal_booster_0.png create mode 100644 resources/g2/track/lattice_triangle/diagonal_booster_1.png create mode 100644 resources/g2/track/lattice_triangle/diagonal_booster_alt_0.png create mode 100644 resources/g2/track/lattice_triangle/diagonal_booster_alt_1.png create mode 100644 resources/g2/track/lattice_triangle/diagonal_booster_alt_2.png create mode 100644 resources/g2/track/lattice_triangle/diagonal_booster_alt_3.png diff --git a/distribution/changelog.txt b/distribution/changelog.txt index f1a895a343..b4c76b4d27 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -5,6 +5,7 @@ - Improved: [#23051] Add large sloped turns and new inversions to the Twister, Vertical Drop, Hyper and Flying Roller Coasters. - Improved: [#23123] Improve sorting of roller coasters in build new ride menu. - Improved: [#23211] Add boosters to classic wooden roller coaster (cheats only). +- Improved: [#23233] Add diagonal booster to LSM Launched Coaster. - Fix: [#22726] ‘Force park rating’ cheat is not saved with the park. - Fix: [#23206] Multiplayer desyncs when FPS is uncapped. - Fix: [#23238] Updating a guest’s favourite ride works differently from vanilla RCT2. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 7b2079f8a4..f2d753e98c 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -2847,6 +2847,36 @@ "y": -9, "palette": "keep" }, + { + "path": "track/lattice_triangle/diagonal_booster_0.png", + "x": -32, + "y": 3 + }, + { + "path": "track/lattice_triangle/diagonal_booster_1.png", + "x": -8, + "y": -9 + }, + { + "path": "track/lattice_triangle/diagonal_booster_alt_0.png", + "x": -32, + "y": 2 + }, + { + "path": "track/lattice_triangle/diagonal_booster_alt_1.png", + "x": -8, + "y": -9 + }, + { + "path": "track/lattice_triangle/diagonal_booster_alt_2.png", + "x": -32, + "y": 3 + }, + { + "path": "track/lattice_triangle/diagonal_booster_alt_3.png", + "x": -8, + "y": -9 + }, { "path": "track/lattice_triangle/drive_tyre_1.png", "x": -22, diff --git a/resources/g2/track/lattice_triangle/diagonal_booster_0.png b/resources/g2/track/lattice_triangle/diagonal_booster_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b3260656d3c3e1ef821240fbd78dadc53aa62f3d GIT binary patch literal 1232 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 literal 0 HcmV?d00001 diff --git a/src/openrct2-ui/ride/Construction.h b/src/openrct2-ui/ride/Construction.h index 42d2f347c1..392edf426c 100644 --- a/src/openrct2-ui/ride/Construction.h +++ b/src/openrct2-ui/ride/Construction.h @@ -47,6 +47,7 @@ namespace OpenRCT2 TrackElemType::LeftHalfBankedHelixDownLarge, TrackElemType::RightHalfBankedHelixDownLarge, TrackElemType::Booster, + TrackElemType::DiagBooster, TrackElemType::Brakes, TrackElemType::DiagBrakes, TrackElemType::Down25Brakes, @@ -143,7 +144,7 @@ namespace OpenRCT2 constexpr size_t DropdownLength = DropdownOrder.size(); // Update the magic number with the current number of track elements to silence - static_assert(EnumValue(TrackElemType::Count) == 340, "Reminder to add new track element to special dropdown list"); + static_assert(EnumValue(TrackElemType::Count) == 341, "Reminder to add new track element to special dropdown list"); constexpr bool TrackPieceDirectionIsDiagonal(const uint8_t direction) { diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 73226b6e07..1ec9033c2f 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -49,7 +49,7 @@ using namespace OpenRCT2; // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -constexpr uint8_t kNetworkStreamVersion = 4; +constexpr uint8_t kNetworkStreamVersion = 5; const std::string kNetworkStreamID = std::string(OPENRCT2_VERSION) + "-" + std::to_string(kNetworkStreamVersion); diff --git a/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp b/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp index 84f425a21f..a6d1f7a09a 100644 --- a/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp +++ b/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp @@ -18421,6 +18421,18 @@ static void LatticeTriangleTrackDiagBrakes( PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); } +static void LatticeTriangleTrackDiagBooster( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + constexpr ImageIndex images[kNumOrthogonalDirections] = { SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_1, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_2, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_1, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_2 }; + + TrackPaintUtilDiagTilesPaintExtra(session, 3, height, direction, trackSequence, images, supportType.metal); +} + TRACK_PAINT_FUNCTION GetTrackPaintFunctionLatticeTriangleTrack(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -18910,6 +18922,8 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionLatticeTriangleTrack(OpenRCT2::TrackEl case TrackElemType::DiagBlockBrakes: case TrackElemType::DiagBrakes: return LatticeTriangleTrackDiagBrakes; + case TrackElemType::DiagBooster: + return LatticeTriangleTrackDiagBooster; default: return nullptr; } diff --git a/src/openrct2/paint/track/coaster/LatticeTriangleTrackAlt.cpp b/src/openrct2/paint/track/coaster/LatticeTriangleTrackAlt.cpp index f2623d6649..fce98ceb48 100644 --- a/src/openrct2/paint/track/coaster/LatticeTriangleTrackAlt.cpp +++ b/src/openrct2/paint/track/coaster/LatticeTriangleTrackAlt.cpp @@ -194,6 +194,18 @@ static void LatticeTriangleTrackAltPoweredLift( PaintUtilSetGeneralSupportHeight(session, height + 56); } +static void LatticeTriangleTrackAltDiagBooster( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + constexpr ImageIndex images[kNumOrthogonalDirections] = { SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_ALT_1, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_ALT_2, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_ALT_3, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_ALT_4 }; + + TrackPaintUtilDiagTilesPaintExtra(session, 3, height, direction, trackSequence, images, supportType.metal); +} + TRACK_PAINT_FUNCTION GetTrackPaintFunctionLatticeTriangleTrackAlt(TrackElemType trackType) { switch (trackType) @@ -210,6 +222,8 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionLatticeTriangleTrackAlt(TrackElemType return LatticeTriangleTrackAltBooster; case TrackElemType::PoweredLift: return LatticeTriangleTrackAltPoweredLift; + case TrackElemType::DiagBooster: + return LatticeTriangleTrackAltDiagBooster; default: return GetTrackPaintFunctionLatticeTriangleTrack(trackType); diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 92d883c79c..5d9a6d3ad5 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -11,10 +11,10 @@ namespace OpenRCT2 struct GameState_t; // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 44; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 45; // The minimum version that is forwards compatible with the current version. - constexpr uint32_t PARK_FILE_MIN_VERSION = 44; + constexpr uint32_t PARK_FILE_MIN_VERSION = 45; // 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.cpp b/src/openrct2/ride/Ride.cpp index 9262504fb2..c9ffa62b2c 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -4939,6 +4939,7 @@ OpenRCT2::BitSet RideEntryGetSupportedTrackPieces( { SpriteGroupType::SlopeFlat, SpritePrecision::Sprites8 }, // TrackGroup::diagBrakes { SpriteGroupType::SlopeFlat, SpritePrecision::Sprites8 }, // TrackGroup::diagBlockBrakes { SpriteGroupType::Slopes25, SpritePrecision::Sprites4 }, // TrackGroup::inclinedBrakes + { SpriteGroupType::SlopeFlat, SpritePrecision::Sprites8 }, // TrackGroup::diagBooster }; static_assert(std::size(trackPieceRequiredSprites) == EnumValue(TrackGroup::count)); diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 78fd353d65..0c080fef7d 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -599,7 +599,14 @@ bool TrackTypeIsBlockBrakes(OpenRCT2::TrackElemType trackType) bool TrackTypeIsBooster(OpenRCT2::TrackElemType trackType) { - return trackType == TrackElemType::Booster; + switch (trackType) + { + case TrackElemType::Booster: + case TrackElemType::DiagBooster: + return true; + default: + return false; + } } bool TrackElementIsCovered(OpenRCT2::TrackElemType trackElementType) diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 9a37c76438..bc7a1a0fcc 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -146,6 +146,7 @@ enum class TrackGroup : uint8_t diagBrakes, diagBlockBrakes, inclinedBrakes, + diagBooster, count, }; @@ -600,8 +601,9 @@ namespace OpenRCT2 DiagBrakes = 337, DiagBlockBrakes = 338, Down25Brakes = 339, + DiagBooster = 340, - Count = 340, + Count = 341, None = 65535, }; } diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 8b7db7a82a..1396e5aead 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -368,7 +368,8 @@ namespace OpenRCT2::TrackMetaData { 4, 1, 0,-48, -32, 64 }, // TrackElemType::RightEighthBankToOrthogonalDown25 { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBrakes { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBlockBrakes - { 0, 0, 16, 0, 0, 0 } // TrackElemType::Down25Brakes + { 0, 0, 16, 0, 0, 0 }, // TrackElemType::Down25Brakes + { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBooster }; static_assert(std::size(_trackCoordinates) == EnumValue(TrackElemType::Count)); @@ -713,6 +714,7 @@ namespace OpenRCT2::TrackMetaData 45, // TrackElemType::DiagBrakes 45, // TrackElemType::DiagBlockBrakes 33, // TrackElemType::Down25Brakes + 45, // TrackElemType::DiagBooster }; static_assert(std::size(TrackPieceLengths) == EnumValue(TrackElemType::Count)); @@ -1058,6 +1060,7 @@ namespace OpenRCT2::TrackMetaData { TrackElemType::DiagBrakes, TrackElemType::DiagBrakes }, // TrackElemType::DiagBrakes { TrackCurve::None, TrackCurve::None }, // TrackElemType::DiagBlockBrakes { TrackElemType::Down25Brakes, TrackElemType::Down25Brakes }, // TrackElemType::Down25Brakes + { TrackElemType::DiagBooster, TrackElemType::DiagBooster }, // TrackElemType::DiagBooster }; static_assert(std::size(gTrackCurveChain) == EnumValue(TrackElemType::Count)); @@ -1592,6 +1595,7 @@ namespace OpenRCT2::TrackMetaData TrackElemType::None, // TrackElemType::DiagBrakes TrackElemType::None, // TrackElemType::DiagBlockBrakes TrackElemType::None, // TrackElemType::Down25Brakes + TrackElemType::None, // TrackElemType::DiagBooster }; static_assert(std::size(AlternativeTrackTypes) == EnumValue(TrackElemType::Count)); @@ -1937,6 +1941,7 @@ namespace OpenRCT2::TrackMetaData 123456, // TrackElemType::DiagBrakes 123456, // TrackElemType::DiagBlockBrakes 109824, // TrackElemType::Down25Brakes + 123456, // TrackElemType::DiagBooster }; static_assert(std::size(TrackPricing) == EnumValue(TrackElemType::Count)); @@ -2282,6 +2287,7 @@ namespace OpenRCT2::TrackMetaData TrackElemType::DiagBrakes, TrackElemType::DiagBlockBrakes, TrackElemType::Down25Brakes, + TrackElemType::DiagBooster, }; static_assert(std::size(TrackElementMirrorMap) == EnumValue(TrackElemType::Count)); @@ -2627,6 +2633,7 @@ namespace OpenRCT2::TrackMetaData (1 << 0), // TrackElemType::DiagBrakes (1 << 0), // TrackElemType::DiagBlockBrakes (1 << 0), // TrackElemType::Down25Brakes + (1 << 0), // TrackElemType::DiagBooster }; static_assert(std::size(TrackHeightMarkerPositions) == EnumValue(TrackElemType::Count)); @@ -2975,6 +2982,7 @@ namespace OpenRCT2::TrackMetaData /* TrackElemType::DiagBrakes */ 0, /* TrackElemType::DiagBlockBrakes */ 0, /* TrackElemType::Down25Brakes */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, + /* TrackElemType::DiagBooster */ 0, }; static_assert(std::size(TrackFlags) == EnumValue(TrackElemType::Count)); // clang-format on @@ -3324,6 +3332,7 @@ namespace OpenRCT2::TrackMetaData { TrackGroup::diagBrakes, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBrakes { TrackGroup::diagBlockBrakes, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBlockBrakes { TrackGroup::inclinedBrakes, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::Down25Brakes + { TrackGroup::diagBooster, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBooster }; static_assert(std::size(TrackDefinitions) == EnumValue(TrackElemType::Count)); @@ -3386,7 +3395,7 @@ namespace OpenRCT2::TrackMetaData SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L9, SpinFunction::R9, SpinFunction::L9, SpinFunction::R9, SpinFunction::L9, SpinFunction::R9, SpinFunction::L9, - SpinFunction::R9, SpinFunction::None, SpinFunction::None, SpinFunction::None + SpinFunction::R9, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None }; static_assert(std::size(TrackTypeToSpinFunction) == EnumValue(TrackElemType::Count)); @@ -4681,6 +4690,7 @@ namespace OpenRCT2::TrackMetaData STR_BRAKES, // TrackElemType::DiagBrakes STR_BLOCK_BRAKES, // TrackElemType::DiagBlockBrakes STR_BRAKES, // TrackElemType::Down25Brakes + STR_BOOSTER, // TrackElemType::DiagBooster }; static_assert(std::size(RideConfigurationStringIds) == EnumValue(TrackElemType::Count)); @@ -12597,7 +12607,8 @@ namespace OpenRCT2::TrackMetaData /* TrackElemType::DiagBlockBrakes */ { 4, { kDiagBlockBrakesSeq0, kDiagBlockBrakesSeq1, kDiagBlockBrakesSeq2, kDiagBlockBrakesSeq3 } }, /* TrackElemType::InclinedBrakes */ - { 1, { kDown25Seq0 } } + { 1, { kDown25Seq0 } }, + /* TrackElemType::DiagBooster */ { 4, { kDiagFlatSeq0, kDiagFlatSeq1, kDiagFlatSeq2, kDiagFlatSeq3 } }, }; static constexpr auto BuildDescriptorTable() diff --git a/src/openrct2/ride/VehicleSubpositionData.cpp b/src/openrct2/ride/VehicleSubpositionData.cpp index e206fa8cde..fd979d5032 100644 --- a/src/openrct2/ride/VehicleSubpositionData.cpp +++ b/src/openrct2/ride/VehicleSubpositionData.cpp @@ -30078,9 +30078,10 @@ static constexpr const VehicleInfoList *TrackVehicleInfoListDefault[] = { &TrackVehicleInfoRightEighthBankToOrthogonalUp250, &TrackVehicleInfoRightEighthBankToOrthogonalUp251, &TrackVehicleInfoRightEighthBankToOrthogonalUp252, &TrackVehicleInfoRightEighthBankToOrthogonalUp253, // TrackElemType::RightEighthBankBankToOrthogonalUp25 &TrackVehicleInfoLeftEighthBankToOrthogonalDown250, &TrackVehicleInfoLeftEighthBankToOrthogonalDown251, &TrackVehicleInfoLeftEighthBankToOrthogonalDown252, &TrackVehicleInfoLeftEighthBankToOrthogonalDown253, // TrackElemType::LeftEighthBankBankToOrthogonalDown25 &TrackVehicleInfoRightEighthBankToOrthogonalDown250, &TrackVehicleInfoRightEighthBankToOrthogonalDown251, &TrackVehicleInfoRightEighthBankToOrthogonalDown252, &TrackVehicleInfoRightEighthBankToOrthogonalDown253, // TrackElemType::RightEighthBankBankToOrthogonalDown25 - &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBrakes - &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBlockBrakes - &TrackVehicleInfo_8C27B2, &TrackVehicleInfo_8C28D4, &TrackVehicleInfo_8C29F6, &TrackVehicleInfo_8C2B18, // SlopedBrakes + &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBrakes + &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBlockBrakes + &TrackVehicleInfo_8C27B2, &TrackVehicleInfo_8C28D4, &TrackVehicleInfo_8C29F6, &TrackVehicleInfo_8C2B18, // SlopedBrakes + &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBooster }; static_assert(std::size(TrackVehicleInfoListDefault) == VehicleTrackSubpositionSizeDefault); diff --git a/src/openrct2/ride/rtd/coaster/GigaCoaster.h b/src/openrct2/ride/rtd/coaster/GigaCoaster.h index fdb2ae56d1..8ee1c30894 100644 --- a/src/openrct2/ride/rtd/coaster/GigaCoaster.h +++ b/src/openrct2/ride/rtd/coaster/GigaCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor GigaCoasterRTD = .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::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}, + .extraTrackGroups = {TrackGroup::barrelRoll, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::verticalLoop, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::booster, TrackGroup::diagBooster, 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 index 75c8103dbe..50ca3f39bf 100644 --- a/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h @@ -22,7 +22,7 @@ constexpr RideTypeDescriptor LSMLaunchedRollerCoasterRTD = .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 }, + .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::diagBooster, 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 = {}, diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index f1c63a15dc..98a16a7a99 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1247,7 +1247,13 @@ enum : ImageIndex 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_DRIVE_TYRE_NE_SW = SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BRAKES + 6, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_1 = SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BRAKES + 6, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_2, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_ALT_1, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_ALT_2, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_ALT_3, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIAG_BOOSTER_ALT_4, + SPR_G2_LATTICE_TRIANGLE_TRACK_DRIVE_TYRE_NE_SW, 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,