mirror of https://github.com/OpenRCT2/OpenRCT2.git
import block brake from legacy file types
This commit is contained in:
parent
99ffaa8b71
commit
115fc957c0
|
@ -1674,6 +1674,8 @@ namespace RCT1
|
|||
// Skipping IsHighlighted()
|
||||
|
||||
auto trackType = dst2->GetTrackType();
|
||||
// Brakes import as closed to preserve legacy behaviour
|
||||
dst2->SetBrakeClosed(trackType == TrackElemType::Brakes);
|
||||
if (TrackTypeHasSpeedSetting(trackType))
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(src2->GetBrakeBoosterSpeed());
|
||||
|
@ -2817,6 +2819,7 @@ namespace RCT1
|
|||
{
|
||||
dst->SetFlag(VehicleFlags::Crashed);
|
||||
}
|
||||
dst->BlockBrakeSpeed = kRCT2DefaultBlockBrakeSpeed;
|
||||
}
|
||||
|
||||
template<> void S4Importer::ImportEntity<Guest>(const RCT12EntityBase& srcBase)
|
||||
|
|
|
@ -1440,11 +1440,17 @@ namespace RCT2
|
|||
dst2->SetInverted(src2->IsInverted());
|
||||
dst2->SetStationIndex(StationIndex::FromUnderlying(src2->GetStationIndex()));
|
||||
dst2->SetHasGreenLight(src2->HasGreenLight());
|
||||
dst2->SetBrakeClosed(src2->BlockBrakeClosed());
|
||||
// Brakes import as closed to preserve legacy behaviour
|
||||
dst2->SetBrakeClosed(src2->BlockBrakeClosed() || (trackType == TrackElemType::Brakes));
|
||||
dst2->SetIsIndestructible(src2->IsIndestructible());
|
||||
// Skipping IsHighlighted()
|
||||
|
||||
if (TrackTypeHasSpeedSetting(trackType))
|
||||
// Import block brakes to keep legacy behaviour
|
||||
if (trackType == TrackElemType::BlockBrakes)
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(kRCT2DefaultBlockBrakeSpeed);
|
||||
}
|
||||
else if (TrackTypeHasSpeedSetting(trackType))
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(src2->GetBrakeBoosterSpeed());
|
||||
}
|
||||
|
@ -2009,6 +2015,10 @@ namespace RCT2
|
|||
if (tileElement2 != nullptr)
|
||||
dst->SetTrackType(TrackElemType::RotationControlToggle);
|
||||
}
|
||||
else if (src->GetTrackType() == TrackElemType::BlockBrakes)
|
||||
{
|
||||
dst->brake_speed = kRCT2DefaultBlockBrakeSpeed;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2075,6 +2085,7 @@ namespace RCT2
|
|||
{
|
||||
dst->SetFlag(VehicleFlags::Crashed);
|
||||
}
|
||||
dst->BlockBrakeSpeed = kRCT2DefaultBlockBrakeSpeed;
|
||||
}
|
||||
|
||||
static uint32_t AdjustScenarioToCurrentTicks(const S6Data& s6, uint32_t tick)
|
||||
|
|
|
@ -182,6 +182,8 @@ ResultWithMessage TrackDesign::CreateTrackDesignTrack(TrackDesignState& tds, con
|
|||
return { false, STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY };
|
||||
}
|
||||
|
||||
StringId warningMessage = STR_NONE;
|
||||
|
||||
RideGetStartOfTrack(&trackElement);
|
||||
|
||||
int32_t z = trackElement.element->GetBaseZ();
|
||||
|
@ -222,7 +224,8 @@ ResultWithMessage TrackDesign::CreateTrackDesignTrack(TrackDesignState& tds, con
|
|||
track.type = trackElement.element->AsTrack()->GetTrackType();
|
||||
|
||||
uint8_t trackFlags;
|
||||
if (TrackTypeHasSpeedSetting(track.type))
|
||||
// This if-else block only applies to td6. New track design format will always encode speed and seat rotation.
|
||||
if (TrackTypeHasSpeedSetting(track.type) && track.type != TrackElemType::BlockBrakes)
|
||||
{
|
||||
trackFlags = trackElement.element->AsTrack()->GetBrakeBoosterSpeed() >> 1;
|
||||
}
|
||||
|
@ -231,6 +234,13 @@ ResultWithMessage TrackDesign::CreateTrackDesignTrack(TrackDesignState& tds, con
|
|||
trackFlags = trackElement.element->AsTrack()->GetSeatRotation();
|
||||
}
|
||||
|
||||
// This warning will not apply to new track design format
|
||||
if (track.type == TrackElemType::BlockBrakes
|
||||
&& trackElement.element->AsTrack()->GetBrakeBoosterSpeed() != kRCT2DefaultBlockBrakeSpeed)
|
||||
{
|
||||
warningMessage = STR_TRACK_DESIGN_BLOCK_BRAKE_SPEED_RESET;
|
||||
}
|
||||
|
||||
if (trackElement.element->AsTrack()->HasChain())
|
||||
trackFlags |= RCT12_TRACK_ELEMENT_TYPE_FLAG_CHAIN_LIFT;
|
||||
trackFlags |= trackElement.element->AsTrack()->GetColourScheme() << 4;
|
||||
|
@ -349,7 +359,7 @@ ResultWithMessage TrackDesign::CreateTrackDesignTrack(TrackDesignState& tds, con
|
|||
|
||||
space_required_x = ((tds.PreviewMax.x - tds.PreviewMin.x) / 32) + 1;
|
||||
space_required_y = ((tds.PreviewMax.y - tds.PreviewMin.y) / 32) + 1;
|
||||
return { true };
|
||||
return { true, warningMessage };
|
||||
}
|
||||
|
||||
ResultWithMessage TrackDesign::CreateTrackDesignMaze(TrackDesignState& tds, const Ride& ride)
|
||||
|
@ -1617,7 +1627,17 @@ static GameActions::Result TrackDesignPlaceRide(TrackDesignState& tds, TrackDesi
|
|||
// di
|
||||
int16_t tempZ = newCoords.z - trackCoordinates->z_begin;
|
||||
uint32_t trackColour = (track.flags >> 4) & 0x3;
|
||||
uint32_t brakeSpeed = (track.flags & 0x0F) * 2;
|
||||
uint32_t brakeSpeed;
|
||||
// RCT2-created track designs write brake speed to all tracks; block brake speed must be treated as
|
||||
// garbage data.
|
||||
if (trackType == TrackElemType::BlockBrakes)
|
||||
{
|
||||
brakeSpeed = kRCT2DefaultBlockBrakeSpeed;
|
||||
}
|
||||
else
|
||||
{
|
||||
brakeSpeed = (track.flags & 0x0F) * 2;
|
||||
}
|
||||
uint32_t seatRotation = track.flags & 0x0F;
|
||||
|
||||
int32_t liftHillAndAlternativeState = 0;
|
||||
|
|
Loading…
Reference in New Issue