diff --git a/src/openrct2/actions/TrackDesignAction.cpp b/src/openrct2/actions/TrackDesignAction.cpp index 4a5fa16c4f..d8611a52ed 100644 --- a/src/openrct2/actions/TrackDesignAction.cpp +++ b/src/openrct2/actions/TrackDesignAction.cpp @@ -241,8 +241,7 @@ GameActions::Result TrackDesignAction::Execute() const ride->lifecycle_flags |= RIDE_LIFECYCLE_NOT_CUSTOM_DESIGN; ride->colour_scheme_type = _td.colour_scheme; - auto stationIdentifier = GetStationIdentifierFromStyle(_td.entrance_style); - ride->entrance_style = objManager.GetLoadedObjectEntryIndex(stationIdentifier); + ride->entrance_style = objManager.GetLoadedObjectEntryIndex(_td.StationObjectIdentifier); if (ride->entrance_style == OBJECT_ENTRY_INDEX_NULL) { ride->entrance_style = gLastEntranceStyle; diff --git a/src/openrct2/rct1/T4Importer.cpp b/src/openrct2/rct1/T4Importer.cpp index 218b36fa1f..bcf2444c58 100644 --- a/src/openrct2/rct1/T4Importer.cpp +++ b/src/openrct2/rct1/T4Importer.cpp @@ -204,6 +204,7 @@ namespace RCT1 td->vehicle_colours[i] = td->vehicle_colours[0]; } + td->StationObjectIdentifier = GetStationIdentifierFromStyle(RCT12_STATION_STYLE_PLAIN); td->depart_flags = td4Base.DepartFlags; td->number_of_trains = td4Base.NumberOfTrains; td->number_of_cars_per_train = td4Base.NumberOfCarsPerTrain; diff --git a/src/openrct2/rct12/RCT12.cpp b/src/openrct2/rct12/RCT12.cpp index 4877514d8d..1fda91e466 100644 --- a/src/openrct2/rct12/RCT12.cpp +++ b/src/openrct2/rct12/RCT12.cpp @@ -769,7 +769,7 @@ std::string_view GetStationIdentifierFromStyle(uint8_t style) { return _stationStyles[style]; } - return {}; + return _stationStyles[RCT12_STATION_STYLE_INVISIBLE]; } uint8_t GetStationStyleFromIdentifier(u8string_view identifier) diff --git a/src/openrct2/rct2/T6Exporter.cpp b/src/openrct2/rct2/T6Exporter.cpp index 5fa48a4c2d..b8ce5ea85b 100644 --- a/src/openrct2/rct2/T6Exporter.cpp +++ b/src/openrct2/rct2/T6Exporter.cpp @@ -63,7 +63,8 @@ namespace RCT2 tempStream.WriteValue(_trackDesign->vehicle_colours[i].Trim); } tempStream.WriteValue(0); - tempStream.WriteValue(_trackDesign->entrance_style); + auto entranceStyle = GetStationStyleFromIdentifier(_trackDesign->StationObjectIdentifier); + tempStream.WriteValue(entranceStyle); tempStream.WriteValue(_trackDesign->total_air_time); tempStream.WriteValue(_trackDesign->depart_flags); tempStream.WriteValue(_trackDesign->number_of_trains); diff --git a/src/openrct2/rct2/T6Importer.cpp b/src/openrct2/rct2/T6Importer.cpp index 06bbbc8f6c..8346b5f44b 100644 --- a/src/openrct2/rct2/T6Importer.cpp +++ b/src/openrct2/rct2/T6Importer.cpp @@ -86,7 +86,7 @@ namespace RCT2 td->vehicle_colours[i].Trim = td6.VehicleColours[i].TrimColour; td->vehicle_colours[i].Tertiary = td6.VehicleAdditionalColour[i]; } - td->entrance_style = td6.EntranceStyle; + td->StationObjectIdentifier = GetStationIdentifierFromStyle(td6.EntranceStyle); td->total_air_time = td6.TotalAirTime; td->depart_flags = td6.DepartFlags; td->number_of_trains = td6.NumberOfTrains; diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 30cfc7e68a..54917b1b04 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -82,6 +82,15 @@ static bool _trackDesignPlaceStateEntranceExitPlaced{}; static void TrackDesignPreviewClearMap(); +static u8string_view TrackDesignGetStationObjectIdentifier(const Ride& ride) +{ + const auto* stationObject = ride.GetStationObject(); + if (stationObject == nullptr) + return ""; + + return stationObject->GetIdentifier(); +} + ResultWithMessage TrackDesign::CreateTrackDesign(TrackDesignState& tds, const Ride& ride) { type = ride.type; @@ -122,7 +131,7 @@ ResultWithMessage TrackDesign::CreateTrackDesign(TrackDesignState& tds, const Ri lift_hill_speed = ride.lift_hill_speed; num_circuits = ride.num_circuits; - entrance_style = ride.GetEntranceStyle(); + StationObjectIdentifier = TrackDesignGetStationObjectIdentifier(ride); max_speed = static_cast(ride.max_speed / 65536); average_speed = static_cast(ride.average_speed / 65536); ride_length = ride.GetTotalLength() / 65536; @@ -564,7 +573,7 @@ void TrackDesign::Serialise(DataSerialiser& stream) stream << DS_TAG(track_flags); stream << DS_TAG(colour_scheme); stream << DS_TAG(vehicle_colours); - stream << DS_TAG(entrance_style); + stream << DS_TAG(StationObjectIdentifier); stream << DS_TAG(total_air_time); stream << DS_TAG(depart_flags); stream << DS_TAG(number_of_trains); @@ -1990,8 +1999,7 @@ static bool TrackDesignPlacePreview(TrackDesignState& tds, TrackDesign* td6, mon ride->custom_name = {}; - auto stationIdentifier = GetStationIdentifierFromStyle(td6->entrance_style); - ride->entrance_style = objManager.GetLoadedObjectEntryIndex(stationIdentifier); + ride->entrance_style = objManager.GetLoadedObjectEntryIndex(td6->StationObjectIdentifier); if (ride->entrance_style == OBJECT_ENTRY_INDEX_NULL) { ride->entrance_style = gLastEntranceStyle; diff --git a/src/openrct2/ride/TrackDesign.h b/src/openrct2/ride/TrackDesign.h index 0f07e8d24a..5325556f19 100644 --- a/src/openrct2/ride/TrackDesign.h +++ b/src/openrct2/ride/TrackDesign.h @@ -126,7 +126,7 @@ struct TrackDesign uint8_t track_flags; uint8_t colour_scheme; std::array vehicle_colours; - uint8_t entrance_style; + u8string StationObjectIdentifier{}; uint8_t total_air_time; uint8_t depart_flags; uint8_t number_of_trains;