Fix #17310: Reversed reversible vehicles not imported properly from S4

This commit is contained in:
Michael Steenbeek 2022-06-05 09:40:53 +02:00 committed by GitHub
parent 673ec0fa10
commit 339edcd0f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 28 additions and 8 deletions

View File

@ -32,6 +32,7 @@
- Fix: [#17261] Hand cursor position is incorrect when dragging items in the Inventions List window.
- Fix: [#17292] Rows in shortcut key list stay highlighted when cursor leaves list.
- Fix: [#17295] Pause status not cleared when loading a scenario made from a converted paused save.
- Fix: [#17310] Reversed reversible vehicles not imported properly when loading RCT1 parks.
0.4.0 (2022-04-25)
------------------------------------------------------------------------

View File

@ -1200,6 +1200,9 @@ namespace RCT1
MINE_TRAIN_CARRIAGE = 36,
CORKSCREW_RC_FRONT = 38,
CORKSCREW_RC_CARRIAGE = 39,
LOG_FLUME_BOAT = 45,
LOG_FLUME_BOAT_REVERSED = 61,
GHOST_TRAIN_CAR = 63,
TWISTER_RC_SPOILER = 64,
TWISTER_RC_CARRIAGE = 65,
@ -1214,6 +1217,11 @@ namespace RCT1
MINIGOLF_BALL = 82,
SPLASH_BOAT = 83,
SPLASH_BOAT_INVISIBLE = 84,
HEARTLINE_TWISTER_FORWARDS = 88, // Used for both regular cars and “starting reversed“ cars that have been reversed
// again.
HEARTLINE_TWISTER_BACKWARDS = 89, // Used for both regular cars that went through a reverser, as well as reversed cars
// in the starting position.
REVERSER_RC_CAR_REVERSED = 95,
HYPERCOASTER_FRONT = 96,
HYPERCOASTER_CARRIAGE = 97,
INVERTED_4_ACROSS_CARRIAGE = 98,

View File

@ -2706,7 +2706,8 @@ namespace RCT1
if (ride == nullptr)
return;
uint8_t vehicleEntryIndex = RCT1::GetVehicleSubEntryIndex(src->vehicle_type);
const auto& rct1Ride = _s4.rides[src->ride];
uint8_t vehicleEntryIndex = RCT1::GetVehicleSubEntryIndex(rct1Ride.vehicle_type, src->vehicle_type);
dst->ride = RideId::FromUnderlying(src->ride);
dst->ride_subtype = RCTEntryIndexToOpenRCT2EntryIndex(ride->subtype);

View File

@ -422,7 +422,7 @@ namespace RCT1
return pathAdditionType;
}
uint8_t GetVehicleSubEntryIndex(uint8_t vehicleSubEntry)
uint8_t GetVehicleSubEntryIndex(uint8_t rct1VehicleType, uint8_t vehicleSubEntry)
{
static constexpr const uint8_t map[] =
{
@ -471,6 +471,7 @@ namespace RCT1
0,
0,
0,
0, // LOG_FLUME_BOAT
0,
0,
0,
@ -486,8 +487,7 @@ namespace RCT1
0,
0,
0,
0,
0,
1, // LOG_FLUME_BOAT_REVERSED
0,
0, // GHOST_TRAIN_CAR
1, // TWISTER_RC_SPOILER
@ -514,14 +514,14 @@ namespace RCT1
0,
0,
0,
0, // HEARTLINE_TWISTER_FORWARDS
0, // HEARTLINE_TWISTER_BACKWARDS
0,
0,
0,
0,
0,
0,
0,
0,
1, // REVERSER_RC_CAR_REVERSED
0, // HYPERCOASTER_FRONT
1, // HYPERCOASTER_CARRIAGE
0, // INVERTED_4_ACROSS_CARRIAGE
@ -683,6 +683,16 @@ namespace RCT1
0,
0,
};
if (rct1VehicleType == RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS)
{
return vehicleSubEntry == HEARTLINE_TWISTER_FORWARDS ? 0 : 1;
}
if (rct1VehicleType == RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS_REVERSED)
{
return vehicleSubEntry == HEARTLINE_TWISTER_BACKWARDS ? 0 : 1;
}
return map[vehicleSubEntry];
}

View File

@ -32,7 +32,7 @@ namespace RCT1
bool RideTypeUsesVehicles(RideType rideType);
bool PathIsQueue(uint8_t pathType);
uint8_t NormalisePathAddition(uint8_t pathAdditionType);
uint8_t GetVehicleSubEntryIndex(uint8_t vehicleSubEntry);
uint8_t GetVehicleSubEntryIndex(uint8_t rct1VehicleType, uint8_t vehicleSubEntry);
std::string_view GetRideTypeObject(RideType rideType);
std::string_view GetVehicleObject(uint8_t vehicleType);