From fa124330fa9d514b420a57af37a923db7331fe51 Mon Sep 17 00:00:00 2001 From: Spacek531 Date: Mon, 10 Nov 2025 22:47:22 -0800 Subject: [PATCH] Convert flags field to FlagHolder --- src/openrct2-ui/ride/Construction.cpp | 5 +- src/openrct2-ui/windows/Ride.cpp | 2 +- src/openrct2-ui/windows/TrackDesignPlace.cpp | 5 +- src/openrct2/actions/TrackPlaceAction.cpp | 25 +- src/openrct2/actions/TrackRemoveAction.cpp | 10 +- src/openrct2/actions/WallPlaceAction.cpp | 2 +- src/openrct2/ride/Ride.cpp | 28 +- src/openrct2/ride/RideConstruction.cpp | 7 +- src/openrct2/ride/Track.h | 16 +- src/openrct2/ride/TrackData.cpp | 260 ++++++++++++------- src/openrct2/ride/TrackData.h | 9 +- src/openrct2/ride/Vehicle.cpp | 4 +- src/openrct2/world/Footpath.cpp | 16 +- 13 files changed, 235 insertions(+), 154 deletions(-) diff --git a/src/openrct2-ui/ride/Construction.cpp b/src/openrct2-ui/ride/Construction.cpp index cd89e8e3f1..e9e5e26a22 100644 --- a/src/openrct2-ui/ride/Construction.cpp +++ b/src/openrct2-ui/ride/Construction.cpp @@ -377,7 +377,7 @@ namespace OpenRCT2 if (trackElement->GetRideIndex() == gRideEntranceExitPlaceRideIndex) { const auto& ted = GetTrackElementDescriptor(trackElement->GetTrackType()); - if (ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN) + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) { if (trackElement->GetTrackType() == TrackElemType::Maze) { @@ -472,7 +472,8 @@ namespace OpenRCT2 // get the ride entrance's side relative to the TrackElement Direction direction = (DirectionReverse(entranceExitCoords.direction) - tileElement->GetDirection()) & 3; const auto& ted = GetTrackElementDescriptor(trackElement->GetTrackType()); - if (ted.sequences[trackElement->GetSequenceIndex()].flags & (1 << direction)) + auto connectionSides = ted.sequences[trackElement->GetSequenceIndex()].getEntranceConnectionSides(); + if (connectionSides & (1 << direction)) { // if that side of the TrackElement supports stations, the ride entrance is valid and faces away from // the station diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 83dcb5fb26..1e4cfd87a5 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -7033,7 +7033,7 @@ namespace OpenRCT2::Ui::Windows auto trackElement = tileElement->AsTrack(); auto trackType = trackElement->GetTrackType(); const auto& ted = GetTrackElementDescriptor(trackType); - if (ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN) + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) { auto stationIndex = trackElement->GetStationIndex(); return WindowRideOpenStation(*ride, stationIndex); diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index e70175a380..54bc3b029f 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -650,8 +650,9 @@ namespace OpenRCT2::Ui::Windows auto bits = trackBlock.quarterTile.Rotate(curTrackRotation & 3).GetBaseQuarterOccupied(); // Station track is a lighter colour - uint8_t colour = (ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN) ? kPaletteIndexColourStation - : kPaletteIndexColourTrack; + uint8_t colour = ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN) + ? kPaletteIndexColourStation + : kPaletteIndexColourTrack; for (int32_t i = 0; i < 4; i++) { diff --git a/src/openrct2/actions/TrackPlaceAction.cpp b/src/openrct2/actions/TrackPlaceAction.cpp index 44e2bf7303..a4e6af0791 100644 --- a/src/openrct2/actions/TrackPlaceAction.cpp +++ b/src/openrct2/actions/TrackPlaceAction.cpp @@ -345,8 +345,7 @@ namespace OpenRCT2::GameActions } } - int32_t entranceDirections = ted.sequences[0].flags; - if ((entranceDirections & TRACK_SEQUENCE_FLAG_ORIGIN) && blockIndex == 0) + if ((ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) && blockIndex == 0) { const auto addElementResult = TrackAddStationElement( { mapLoc, baseZ, _origin.direction }, _rideIndex, {}, _fromTrackDesign); @@ -540,16 +539,16 @@ namespace OpenRCT2::GameActions supportCosts += (supportHeight / (2 * kCoordsZStep)) * rtd.BuildCosts.SupportPrice; - int32_t entranceDirections = 0; + bool isOrigin = false; if (!ride->overallView.IsNull()) { if (!(GetFlags().has(CommandFlag::noSpend))) { - entranceDirections = ted.sequences[0].flags; + isOrigin = ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN); } } - if (entranceDirections & TRACK_SEQUENCE_FLAG_ORIGIN || ride->overallView.IsNull()) + if (isOrigin || ride->overallView.IsNull()) { ride->overallView = mapLoc; } @@ -607,18 +606,17 @@ namespace OpenRCT2::GameActions } trackElement->SetColourScheme(static_cast(_colour)); - entranceDirections = ted.sequences[0].flags; - if (entranceDirections & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH) + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) { - uint32_t availableDirections = entranceDirections & 0x0F; - if (availableDirections != 0) + uint32_t connectionSides = ted.sequences[0].getEntranceConnectionSides(); + if (connectionSides != 0) { if (!(GetFlags().has(CommandFlag::ghost)) && !gameState.cheats.disableClearanceChecks) { - for (int32_t chosenDirection = Numerics::bitScanForward(availableDirections); chosenDirection != -1; - chosenDirection = Numerics::bitScanForward(availableDirections)) + for (int32_t chosenDirection = Numerics::bitScanForward(connectionSides); chosenDirection != -1; + chosenDirection = Numerics::bitScanForward(connectionSides)) { - availableDirections &= ~(1 << chosenDirection); + connectionSides &= ~(1 << chosenDirection); CoordsXY tempLoc{ mapLoc.x, mapLoc.y }; int32_t tempDirection = (_origin.direction + chosenDirection) & 3; tempLoc.x += CoordsDirectionDelta[tempDirection].x; @@ -633,7 +631,8 @@ namespace OpenRCT2::GameActions // If the placed tile is a station modify station properties. // Don't do this if the tile is a ghost to prevent desyncs // However, ghost tiles from track designs need to modify station data to display properly - if (entranceDirections & TRACK_SEQUENCE_FLAG_ORIGIN && (!(GetFlags().has(CommandFlag::ghost)) || _fromTrackDesign)) + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN) + && (!(GetFlags().has(CommandFlag::ghost)) || _fromTrackDesign)) { if (blockIndex == 0) { diff --git a/src/openrct2/actions/TrackRemoveAction.cpp b/src/openrct2/actions/TrackRemoveAction.cpp index 62a5315c9e..eee34da1af 100644 --- a/src/openrct2/actions/TrackRemoveAction.cpp +++ b/src/openrct2/actions/TrackRemoveAction.cpp @@ -209,8 +209,8 @@ namespace OpenRCT2::GameActions return Result(Status::unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_ERR_TRACK_ELEMENT_NOT_FOUND); } - int32_t entranceDirections = ted.sequences[0].flags; - if (entranceDirections & TRACK_SEQUENCE_FLAG_ORIGIN && (tileElement->AsTrack()->GetSequenceIndex() == 0)) + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN) + && (tileElement->AsTrack()->GetSequenceIndex() == 0)) { const auto removeElementResult = TrackRemoveStationElement({ mapLoc, _origin.direction }, rideIndex, {}); if (!removeElementResult.Successful) @@ -379,8 +379,8 @@ namespace OpenRCT2::GameActions return Result(Status::unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_ERR_TRACK_ELEMENT_NOT_FOUND); } - int32_t entranceDirections = ted.sequences[0].flags; - if (entranceDirections & TRACK_SEQUENCE_FLAG_ORIGIN && (tileElement->AsTrack()->GetSequenceIndex() == 0)) + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN) + && (tileElement->AsTrack()->GetSequenceIndex() == 0)) { const auto removeElementResult = TrackRemoveStationElement({ mapLoc, _origin.direction }, rideIndex, {}); if (!removeElementResult.Successful) @@ -406,7 +406,7 @@ namespace OpenRCT2::GameActions // If the removed tile is a station modify station properties. // Don't do this if the ride is simulating and the tile is a ghost to prevent desyncs. - if (entranceDirections & TRACK_SEQUENCE_FLAG_ORIGIN + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN) && (!(GetFlags().has(CommandFlag::ghost)) || (GetFlags().has(CommandFlag::trackDesign))) && (tileElement->AsTrack()->GetSequenceIndex() == 0)) { diff --git a/src/openrct2/actions/WallPlaceAction.cpp b/src/openrct2/actions/WallPlaceAction.cpp index 431506a770..93e64630c9 100644 --- a/src/openrct2/actions/WallPlaceAction.cpp +++ b/src/openrct2/actions/WallPlaceAction.cpp @@ -438,7 +438,7 @@ namespace OpenRCT2::GameActions int32_t z; if (sequence == 0) { - if (ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_DISALLOW_DOORS) + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_DISALLOW_DOORS)) { return false; } diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index a231c74ec3..e044f2c8e8 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -507,7 +507,7 @@ bool RideTryGetOriginElement(const Ride& ride, CoordsXYE* output) bool specialTrackPiece = (it.element->AsTrack()->GetTrackType() != TrackElemType::BeginStation && it.element->AsTrack()->GetTrackType() != TrackElemType::MiddleStation - && (ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)); + && (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN))); // Set result tile to this track piece if first found track or a ??? if (resultTileElement == nullptr || specialTrackPiece) @@ -2397,22 +2397,22 @@ static void RideShopConnected(const Ride& ride) return; const auto& ted = GetTrackElementDescriptor(track_type); - uint8_t entrance_directions = ted.sequences[0].flags & 0xF; + uint8_t connectionSides = ted.sequences[0].getEntranceConnectionSides(); uint8_t tile_direction = trackElement->GetDirection(); - entrance_directions = Numerics::rol4(entrance_directions, tile_direction); + connectionSides = Numerics::rol4(connectionSides, tile_direction); - // Now each bit in entrance_directions stands for an entrance direction to check - if (entrance_directions == 0) + // Now each bit in connectionSides stands for an entrance direction to check + if (connectionSides == 0) return; - for (auto count = 0; entrance_directions != 0; count++) + for (auto count = 0; connectionSides != 0; count++) { - if (!(entrance_directions & 1)) + if (!(connectionSides & 1)) { - entrance_directions >>= 1; + connectionSides >>= 1; continue; } - entrance_directions >>= 1; + connectionSides >>= 1; // Flip direction north<->south, east<->west uint8_t face_direction = DirectionReverse(count); @@ -2936,7 +2936,7 @@ static int32_t RideCheckStationLength(const CoordsXYE& input, CoordsXYE* output) do { const auto& ted = GetTrackElementDescriptor(output->element->AsTrack()->GetTrackType()); - if (ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN) + if (ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) { num_station_elements++; last_good_station = *output; @@ -2985,7 +2985,7 @@ static bool RideCheckStartAndEndIsStation(const CoordsXYE& input) TrackGetBack(input, &trackBack); auto trackType = trackBack.element->AsTrack()->GetTrackType(); const auto* ted = &GetTrackElementDescriptor(trackType); - if (!(ted->sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!ted->sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) { return false; } @@ -2995,7 +2995,7 @@ static bool RideCheckStartAndEndIsStation(const CoordsXYE& input) TrackGetFront(input, &trackFront); trackType = trackFront.element->AsTrack()->GetTrackType(); ted = &GetTrackElementDescriptor(trackType); - if (!(ted->sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!ted->sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) { return false; } @@ -4060,7 +4060,7 @@ TrackElement* Ride::getOriginElement(StationIndex stationIndex) const auto* trackElement = tileElement->AsTrack(); const auto& ted = GetTrackElementDescriptor(trackElement->GetTrackType()); - if (!(ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) continue; if (trackElement->GetRideIndex() == id) @@ -5055,7 +5055,7 @@ static int32_t RideGetTrackLength(const Ride& ride) trackType = tileElement->AsTrack()->GetTrackType(); const auto& ted = GetTrackElementDescriptor(trackType); - if (!(ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) continue; if (tileElement->GetBaseZ() != trackStart.z) diff --git a/src/openrct2/ride/RideConstruction.cpp b/src/openrct2/ride/RideConstruction.cpp index 7defccdfa7..649c894ed4 100644 --- a/src/openrct2/ride/RideConstruction.cpp +++ b/src/openrct2/ride/RideConstruction.cpp @@ -1225,7 +1225,7 @@ void Ride::validateStations() const auto& ted = GetTrackElementDescriptor(tileElement->AsTrack()->GetTrackType()); // keep searching for a station piece (coaster station, tower ride base, shops, and flat ride base) - if (!(ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) continue; trackFound = true; @@ -1275,7 +1275,7 @@ void Ride::validateStations() continue; const auto& ted2 = GetTrackElementDescriptor(tileElement->AsTrack()->GetTrackType()); - if (!(ted2.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!ted2.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN)) continue; trackFound = true; @@ -1382,7 +1382,8 @@ void Ride::validateStations() // if the ride entrance is not on a valid side, remove it const auto& ted = GetTrackElementDescriptor(trackType); - if (!(ted.sequences[trackSequence].flags & (1 << direction))) + auto connectionSides = ted.sequences[trackSequence].getEntranceConnectionSides(); + if (!(connectionSides & (1 << direction))) { continue; } diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index bd789e37ed..c146e01dad 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -631,15 +631,15 @@ namespace OpenRCT2 }; } -enum +enum class SequenceFlag : uint8_t { - TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE = (1 << 0), // Ride Entrances and path connect to front - TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE = (1 << 1), // connect to right - TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW = (1 << 2), // connect to back - TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW = (1 << 3), // connect to left - TRACK_SEQUENCE_FLAG_ORIGIN = (1 << 4), // 0x10 - TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH = (1 << 5), // 0x20 - TRACK_SEQUENCE_FLAG_DISALLOW_DOORS = (1 << 6), // 0x40 + TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, // Ride Entrances and path connect to front + TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, // connect to right + TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, // connect to back + TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, // connect to left + TRACK_SEQUENCE_FLAG_ORIGIN, // 0x10 + TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH, // 0x20 + TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, // 0x40 }; enum diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 111e005f4c..db74ee1609 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -4863,8 +4863,9 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kEndStationSeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN - | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN, + SequenceFlag::TRACK_SEQUENCE_FLAG_DISALLOW_DOORS }, .woodenSupports = { WoodenSupportSubType::neSw }, .metalSupports = { MetalSupportPlace::centre, true }, .blockedSegments = blockedSegmentsAllTypes(kSegmentsAll), @@ -4872,8 +4873,9 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kBeginStationSeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN - | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN, + SequenceFlag::TRACK_SEQUENCE_FLAG_DISALLOW_DOORS }, .woodenSupports = { WoodenSupportSubType::neSw }, .metalSupports = { MetalSupportPlace::centre, true }, .blockedSegments = blockedSegmentsAllTypes(kSegmentsAll), @@ -4881,8 +4883,9 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kMiddleStationSeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN - | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN, + SequenceFlag::TRACK_SEQUENCE_FLAG_DISALLOW_DOORS }, .woodenSupports = { WoodenSupportSubType::neSw }, .metalSupports = { MetalSupportPlace::centre, true }, .blockedSegments = blockedSegmentsAllTypes(kSegmentsAll), @@ -6389,55 +6392,59 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kTowerBaseSeq0 = { .clearance = { 0, 0, 0, 64, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kTowerBaseSeq1 = { .clearance = { -32, -32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kTowerBaseSeq2 = { .clearance = { -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kTowerBaseSeq3 = { .clearance = { -32, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kTowerBaseSeq4 = { .clearance = { 0, -32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kTowerBaseSeq5 = { .clearance = { 0, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kTowerBaseSeq6 = { .clearance = { 32, -32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kTowerBaseSeq7 = { .clearance = { 32, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kTowerBaseSeq8 = { .clearance = { 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -7512,84 +7519,116 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kMazeSeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kMazeSeq1 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq2 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq3 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq4 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq5 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq6 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq7 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq8 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq9 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq10 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq11 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq12 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq13 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq14 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kMazeSeq15 = { - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, }; static constexpr SequenceDescriptor kLeftQuarterBankedHelixLargeUpSeq0 = { @@ -9786,7 +9825,7 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kSpinningTunnelSeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, .allowedWallEdges = 0b1010, - .flags = TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_DISALLOW_DOORS }, .woodenSupports = { WoodenSupportSubType::neSw }, .blockedSegments = { { kSegmentsAll, // narrow @@ -11840,7 +11879,8 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack1x4ASeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -11851,7 +11891,8 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack1x4ASeq2 = { .clearance = { -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -11862,55 +11903,61 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack2x2Seq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x2Seq1 = { .clearance = { 0, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x2Seq2 = { .clearance = { 32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x2Seq3 = { .clearance = { 32, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq1 = { .clearance = { 0, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq2 = { .clearance = { 0, 64, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq3 = { .clearance = { 0, 96, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq4 = { .clearance = { 32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -11926,13 +11973,13 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack4x4Seq7 = { .clearance = { 32, 96, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq8 = { .clearance = { 64, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -11948,85 +11995,92 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack4x4Seq11 = { .clearance = { 64, 96, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq12 = { .clearance = { 96, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq13 = { .clearance = { 96, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq14 = { .clearance = { 96, 64, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack4x4Seq15 = { .clearance = { 96, 96, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x4Seq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x4Seq1 = { .clearance = { 0, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x4Seq2 = { .clearance = { 0, 64, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x4Seq3 = { .clearance = { 0, 96, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x4Seq4 = { .clearance = { 32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x4Seq5 = { .clearance = { 32, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x4Seq6 = { .clearance = { 32, 64, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack2x4Seq7 = { .clearance = { 32, 96, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack1x5Seq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -12037,13 +12091,15 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack1x5Seq2 = { .clearance = { -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack1x5Seq3 = { .clearance = { 32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -12054,13 +12110,14 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack1x1ASeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN, + SequenceFlag::TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack1x4BSeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -12071,7 +12128,7 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack1x4BSeq2 = { .clearance = { -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; @@ -12082,86 +12139,99 @@ namespace OpenRCT2::TrackMetaData static constexpr SequenceDescriptor kFlatTrack1x1BSeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW - | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN, + SequenceFlag::TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack1x4CSeq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW | TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack1x4CSeq1 = { .clearance = { -64, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack1x4CSeq2 = { .clearance = { -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack1x4CSeq3 = { .clearance = { 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq0 = { .clearance = { 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ORIGIN, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq1 = { .clearance = { -32, -32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq2 = { .clearance = { -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq3 = { .clearance = { -32, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq4 = { .clearance = { 0, -32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq5 = { .clearance = { 0, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq6 = { .clearance = { 32, -32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_NW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq7 = { .clearance = { 32, 32, 0, 0, { 0b1111, 0 }, 0 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE | TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SE, + SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; static constexpr SequenceDescriptor kFlatTrack3x3Seq8 = { .clearance = { 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, - .flags = TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW, + .flags = { SequenceFlag::TRACK_SEQUENCE_FLAG_ENTRANCE_CONNECTS_SW }, .woodenSupports = { WoodenSupportSubType::neSw }, }; diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index 099ccf87c0..f292e867f2 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -90,18 +90,25 @@ namespace OpenRCT2::TrackMetaData uint8_t alternates = false; }; + using SequenceFlags = FlagHolder; + struct SequenceDescriptor { SequenceClearance clearance{}; /** rct2: 0x00999A94 */ uint8_t allowedWallEdges{}; /** rct2: 0x0099BA64 */ - uint8_t flags{}; + SequenceFlags flags{}; SequenceWoodenSupport woodenSupports{}; SequenceMetalSupport metalSupports{}; int8_t extraSupportRotation = 0; bool invertSegmentBlocking = false; std::array blockedSegments{ kSegmentsNone, kSegmentsNone, kSegmentsNone }; + + const uint8_t getEntranceConnectionSides() const + { + return flags.holder & 0xF; + } }; using TrackComputeFunction = int32_t (*)(const int16_t); diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index c736f773cf..c2603efea5 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -6502,7 +6502,7 @@ void Vehicle::Sub6DBF3E() auto trackType = GetTrackType(); const auto& ted = GetTrackElementDescriptor(trackType); - if (!(ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!(ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN))) { return; } @@ -7906,7 +7906,7 @@ void Vehicle::Loc6DCE02(const Ride& curRide) auto trackType = GetTrackType(); const auto& ted = GetTrackElementDescriptor(trackType); - if (!(ted.sequences[0].flags & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!(ted.sequences[0].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_ORIGIN))) { return; } diff --git a/src/openrct2/world/Footpath.cpp b/src/openrct2/world/Footpath.cpp index fa03190db0..468b8b9965 100644 --- a/src/openrct2/world/Footpath.cpp +++ b/src/openrct2/world/Footpath.cpp @@ -596,13 +596,13 @@ static void Loc6A6D7E( const auto trackType = tileElement->AsTrack()->GetTrackType(); const uint8_t trackSequence = tileElement->AsTrack()->GetSequenceIndex(); const auto& ted = GetTrackElementDescriptor(trackType); - if (!(ted.sequences[trackSequence].flags & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) + if (!(ted.sequences[trackSequence].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH))) { return; } uint16_t dx = DirectionReverse((direction - tileElement->GetDirection()) & kTileElementDirectionMask); - - if (!(ted.sequences[trackSequence].flags & (1 << dx))) + auto connectionSides = ted.sequences[trackSequence].getEntranceConnectionSides(); + if (!(connectionSides & (1 << dx))) { return; } @@ -682,12 +682,13 @@ static void Loc6A6C85( const auto trackType = tileElementPos.element->AsTrack()->GetTrackType(); const uint8_t trackSequence = tileElementPos.element->AsTrack()->GetSequenceIndex(); const auto& ted = GetTrackElementDescriptor(trackType); - if (!(ted.sequences[trackSequence].flags & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) + if (!(ted.sequences[trackSequence].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH))) { return; } uint16_t dx = (direction - tileElementPos.element->GetDirection()) & kTileElementDirectionMask; - if (!(ted.sequences[trackSequence].flags & (1 << dx))) + auto connectionSides = ted.sequences[trackSequence].getEntranceConnectionSides(); + if (!(connectionSides & (1 << dx))) { return; } @@ -1691,10 +1692,11 @@ bool TileElementWantsPathConnectionTowards(const TileCoordsXYZD& coords, const T const auto trackType = tileElement->AsTrack()->GetTrackType(); const uint8_t trackSequence = tileElement->AsTrack()->GetSequenceIndex(); const auto& ted = GetTrackElementDescriptor(trackType); - if (ted.sequences[trackSequence].flags & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH) + if (ted.sequences[trackSequence].flags.has(SequenceFlag::TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) { uint16_t dx = ((coords.direction - tileElement->GetDirection()) & kTileElementDirectionMask); - if (ted.sequences[trackSequence].flags & (1 << dx)) + auto connectionSides = ted.sequences[trackSequence].getEntranceConnectionSides(); + if (connectionSides & (1 << dx)) { // Track element has the flags required for the given direction return true;