mirror of https://github.com/OpenRCT2/OpenRCT2.git
add import code
This commit is contained in:
parent
516314af41
commit
2b9e714f15
|
@ -44,6 +44,7 @@
|
|||
#include "../object/ObjectManager.h"
|
||||
#include "../object/ObjectRepository.h"
|
||||
#include "../peep/RideUseSystem.h"
|
||||
#include "../ride/RideData.h"
|
||||
#include "../ride/ShopItem.h"
|
||||
#include "../ride/Vehicle.h"
|
||||
#include "../scenario/Scenario.h"
|
||||
|
@ -65,6 +66,7 @@
|
|||
#include <vector>
|
||||
|
||||
constexpr uint32_t BlockBrakeImprovementsVersion = 27;
|
||||
constexpr uint32_t UnifyBoosterSpeedVersion = 33;
|
||||
|
||||
using namespace OpenRCT2;
|
||||
|
||||
|
@ -1102,12 +1104,21 @@ namespace OpenRCT2
|
|||
{
|
||||
it.element->SetInvisible(true);
|
||||
}
|
||||
if (os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion)
|
||||
if (os.GetHeader().TargetVersion < UnifyBoosterSpeedVersion)
|
||||
{
|
||||
if (trackType == TrackElemType::Brakes)
|
||||
trackElement->SetBrakeClosed(true);
|
||||
if (trackType == TrackElemType::BlockBrakes)
|
||||
trackElement->SetBrakeBoosterSpeed(kRCT2DefaultBlockBrakeSpeed);
|
||||
auto brakeSpeed = trackElement->GetBrakeBoosterSpeed() * kLegacyBrakeSpeedMultiplier;
|
||||
if (trackType == TrackElemType::Booster)
|
||||
{
|
||||
brakeSpeed = GetAbsoluteBoosterSpeed(trackElement->GetRideType(), brakeSpeed);
|
||||
}
|
||||
if (os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion)
|
||||
{
|
||||
if (trackType == TrackElemType::Brakes)
|
||||
trackElement->SetBrakeClosed(true);
|
||||
if (trackType == TrackElemType::BlockBrakes)
|
||||
brakeSpeed = kRCT2DefaultBlockBrakeSpeed;
|
||||
}
|
||||
trackElement->SetBrakeBoosterSpeed(brakeSpeed);
|
||||
}
|
||||
}
|
||||
else if (
|
||||
|
@ -1297,6 +1308,8 @@ namespace OpenRCT2
|
|||
cs.ReadWrite(ride.status);
|
||||
cs.ReadWrite(ride.depart_flags);
|
||||
cs.ReadWrite(ride.lifecycle_flags);
|
||||
if (version < UnifyBoosterSpeedVersion)
|
||||
ride.SetLifecycleFlag(RIDE_LIFECYCLE_LEGACY_BOOSTER_SPEED, true);
|
||||
|
||||
// Meta
|
||||
cs.ReadWrite(ride.custom_name);
|
||||
|
@ -2100,13 +2113,36 @@ namespace OpenRCT2
|
|||
cs.ReadWrite(entity.scream_sound_id);
|
||||
cs.ReadWrite(entity.TrackSubposition);
|
||||
cs.ReadWrite(entity.NumLaps);
|
||||
if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion)
|
||||
|
||||
if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < UnifyBoosterSpeedVersion)
|
||||
{
|
||||
entity.SetFlag(VehicleFlags::LegacyBoosterSpeed);
|
||||
uint8_t brakeSpeed;
|
||||
cs.ReadWrite(brakeSpeed);
|
||||
if (entity.GetTrackType() == TrackElemType::BlockBrakes)
|
||||
brakeSpeed = kRCT2DefaultBlockBrakeSpeed;
|
||||
entity.brake_speed = brakeSpeed;
|
||||
auto trackType = entity.GetTrackType();
|
||||
auto rtd = entity.GetRide()->GetRideTypeDescriptor();
|
||||
if (trackType == TrackElemType::Booster)
|
||||
{
|
||||
entity.BoosterAcceleration = rtd.OperatingSettings.BoosterAcceleration;
|
||||
brakeSpeed = rtd.GetAbsoluteBoosterSpeed(brakeSpeed);
|
||||
}
|
||||
else if (
|
||||
(trackType == TrackElemType::PoweredLift)
|
||||
|| (trackType == TrackElemType::Flat && entity.GetRide()->type == RIDE_TYPE_REVERSE_FREEFALL_COASTER))
|
||||
{
|
||||
entity.BoosterAcceleration = rtd.OperatingSettings.PoweredLiftAcceleration;
|
||||
entity.SetFlag(VehicleFlags::OnPoweredLift);
|
||||
}
|
||||
entity.brake_speed = brakeSpeed * kLegacyBrakeSpeedMultiplier;
|
||||
|
||||
if (os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion)
|
||||
{
|
||||
if (entity.GetTrackType() == TrackElemType::BlockBrakes)
|
||||
{
|
||||
entity.brake_speed = kRCT2DefaultBlockBrakeSpeed;
|
||||
}
|
||||
entity.BlockBrakeSpeed = entity.brake_speed;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2130,6 +2166,7 @@ namespace OpenRCT2
|
|||
entity.SetFlag(VehicleFlags::Crashed);
|
||||
}
|
||||
}
|
||||
|
||||
if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion)
|
||||
{
|
||||
entity.BlockBrakeSpeed = kRCT2DefaultBlockBrakeSpeed;
|
||||
|
@ -2138,6 +2175,11 @@ namespace OpenRCT2
|
|||
{
|
||||
cs.ReadWrite(entity.BlockBrakeSpeed);
|
||||
}
|
||||
|
||||
if (os.GetHeader().TargetVersion >= UnifyBoosterSpeedVersion)
|
||||
{
|
||||
cs.ReadWrite(entity.BoosterAcceleration);
|
||||
}
|
||||
}
|
||||
|
||||
template<> void ParkFile::ReadWriteEntity(OrcaStream& os, OrcaStream::ChunkStream& cs, Guest& guest)
|
||||
|
|
|
@ -862,6 +862,7 @@ namespace RCT1
|
|||
{
|
||||
dst->lifecycle_flags |= RIDE_LIFECYCLE_REVERSED_TRAINS;
|
||||
}
|
||||
dst->SetLifecycleFlag(RIDE_LIFECYCLE_LEGACY_BOOSTER_SPEED, true);
|
||||
|
||||
// Station
|
||||
if (src->OverallView.IsNull())
|
||||
|
@ -1696,7 +1697,15 @@ namespace RCT1
|
|||
dst2->SetBrakeClosed(trackType == TrackElemType::Brakes);
|
||||
if (TrackTypeHasSpeedSetting(trackType))
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(src2->GetBrakeBoosterSpeed());
|
||||
auto brakeSpeed = src2->GetBrakeBoosterSpeed() * kLegacyBrakeSpeedMultiplier;
|
||||
if (dst2->GetTrackType() != TrackElemType::Booster)
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(brakeSpeed);
|
||||
}
|
||||
else
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(GetAbsoluteBoosterSpeed(rideType, brakeSpeed));
|
||||
}
|
||||
}
|
||||
else if (trackType == TrackElemType::OnRidePhoto)
|
||||
{
|
||||
|
@ -2111,7 +2120,7 @@ namespace RCT1
|
|||
void InsertResearchVehicle(const ResearchItem& researchItem, bool researched)
|
||||
{
|
||||
uint8_t vehicle = researchItem.Item;
|
||||
// RCT1 research sometimes contain vehicles that aren’t actually researched.
|
||||
// RCT1 research sometimes contain vehicles that aren<EFBFBD>t actually researched.
|
||||
// In such cases, `_vehicleTypeToRideEntryMap` will return OBJECT_ENTRY_INDEX_NULL. This is expected.
|
||||
auto rideEntryIndex = _vehicleTypeToRideEntryMap[vehicle];
|
||||
|
||||
|
@ -2847,7 +2856,6 @@ namespace RCT1
|
|||
dst->num_seats = src->NumSeats;
|
||||
dst->speed = src->Speed;
|
||||
dst->powered_acceleration = src->PoweredAcceleration;
|
||||
dst->brake_speed = src->BrakeSpeed;
|
||||
|
||||
dst->velocity = src->Velocity;
|
||||
dst->acceleration = src->Acceleration;
|
||||
|
@ -2912,10 +2920,26 @@ namespace RCT1
|
|||
dst->SetTrackDirection(0);
|
||||
dst->SetTrackType(0);
|
||||
}
|
||||
|
||||
dst->brake_speed = src->BrakeSpeed * kLegacyBrakeSpeedMultiplier;
|
||||
dst->BlockBrakeSpeed = kRCT2DefaultBlockBrakeSpeed;
|
||||
dst->Flags = src->UpdateFlags;
|
||||
|
||||
dst->SetFlag(VehicleFlags::LegacyBoosterSpeed);
|
||||
if ((dst->GetTrackType() == TrackElemType::PoweredLift)
|
||||
|| (dst->GetTrackType() == TrackElemType::Flat && ride->type == RIDE_TYPE_REVERSE_FREEFALL_COASTER))
|
||||
{
|
||||
dst->BoosterAcceleration = ride->GetRideTypeDescriptor().OperatingSettings.PoweredLiftAcceleration;
|
||||
dst->SetFlag(VehicleFlags::OnPoweredLift);
|
||||
}
|
||||
else if (dst->GetTrackType() == TrackElemType::Booster)
|
||||
{
|
||||
dst->brake_speed = ride->GetRideTypeDescriptor().GetAbsoluteBoosterSpeed(dst->brake_speed);
|
||||
dst->BoosterAcceleration = ride->GetRideTypeDescriptor().OperatingSettings.BoosterAcceleration;
|
||||
}
|
||||
dst->track_progress = src->TrackProgress;
|
||||
dst->vertical_drop_countdown = src->VerticalDropCountdown;
|
||||
dst->sub_state = src->SubState;
|
||||
dst->Flags = src->UpdateFlags;
|
||||
|
||||
SetVehicleColours(dst, src);
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "../ride/Ride.h"
|
||||
#include "../ride/Track.h"
|
||||
#include "../ride/TrackDesign.h"
|
||||
#include "../ride/Vehicle.h"
|
||||
#include "../scenario/Scenario.h"
|
||||
#include "../world/Banner.h"
|
||||
#include "../world/Footpath.h"
|
||||
|
@ -248,7 +249,7 @@ uint8_t RCT12TrackElement::GetBrakeBoosterSpeed() const
|
|||
{
|
||||
if (TrackTypeHasSpeedSetting(GetTrackType()))
|
||||
{
|
||||
return (Sequence >> 4) << 1;
|
||||
return Sequence >> 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1588,6 +1588,7 @@ namespace RCT2
|
|||
dst->lift_hill_speed = src->LiftHillSpeed;
|
||||
dst->guests_favourite = src->GuestsFavourite;
|
||||
dst->lifecycle_flags = src->LifecycleFlags;
|
||||
dst->SetLifecycleFlag(RIDE_LIFECYCLE_LEGACY_BOOSTER_SPEED, true);
|
||||
|
||||
for (uint8_t i = 0; i < Limits::MaxTrainsPerRide; i++)
|
||||
{
|
||||
|
@ -1964,7 +1965,15 @@ namespace RCT2
|
|||
}
|
||||
else if (TrackTypeHasSpeedSetting(trackType))
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(src2->GetBrakeBoosterSpeed());
|
||||
auto brakeSpeed = src2->GetBrakeBoosterSpeed() * kLegacyBrakeSpeedMultiplier;
|
||||
if (dst2->GetTrackType() == TrackElemType::Booster)
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(GetAbsoluteBoosterSpeed(rideType, brakeSpeed));
|
||||
}
|
||||
else
|
||||
{
|
||||
dst2->SetBrakeBoosterSpeed(brakeSpeed);
|
||||
}
|
||||
}
|
||||
else if (trackType == TrackElemType::OnRidePhoto)
|
||||
{
|
||||
|
@ -2584,7 +2593,22 @@ namespace RCT2
|
|||
dst->scream_sound_id = static_cast<OpenRCT2::Audio::SoundId>(src->ScreamSoundId);
|
||||
dst->TrackSubposition = VehicleTrackSubposition{ src->TrackSubposition };
|
||||
dst->NumLaps = src->NumLaps;
|
||||
dst->brake_speed = src->BrakeSpeed;
|
||||
|
||||
dst->brake_speed = src->BrakeSpeed * kLegacyBrakeSpeedMultiplier;
|
||||
|
||||
dst->SetFlag(VehicleFlags::LegacyBoosterSpeed);
|
||||
if ((dst->GetTrackType() == TrackElemType::PoweredLift)
|
||||
|| (dst->GetTrackType() == TrackElemType::Flat && ride.Type == RIDE_TYPE_REVERSE_FREEFALL_COASTER))
|
||||
{
|
||||
dst->BoosterAcceleration = GetRideTypeDescriptor(ride.Type).OperatingSettings.PoweredLiftAcceleration;
|
||||
dst->SetFlag(VehicleFlags::OnPoweredLift);
|
||||
}
|
||||
else if (dst->GetTrackType() == TrackElemType::Booster)
|
||||
{
|
||||
dst->brake_speed = GetRideTypeDescriptor(ride.Type).GetAbsoluteBoosterSpeed(dst->brake_speed);
|
||||
dst->BoosterAcceleration = GetRideTypeDescriptor(ride.Type).OperatingSettings.BoosterAcceleration;
|
||||
}
|
||||
|
||||
dst->lost_time_out = src->LostTimeOut;
|
||||
dst->vertical_drop_countdown = src->VerticalDropCountdown;
|
||||
dst->var_D3 = src->VarD3;
|
||||
|
|
|
@ -227,8 +227,40 @@ ResultWithMessage TrackDesign::CreateTrackDesignTrack(TrackDesignState& tds, con
|
|||
track.BrakeBoosterSpeed = element->GetBrakeBoosterSpeed();
|
||||
track.SeatRotation = element->GetSeatRotation();
|
||||
|
||||
uint8_t trackFlags;
|
||||
// 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();
|
||||
if (track.Type == TrackElemType::Booster)
|
||||
{
|
||||
trackFlags = ride.GetRideTypeDescriptor().GetRelativeBoosterSpeed(trackFlags);
|
||||
}
|
||||
|
||||
// check to ensure the value is serializable. This warning will not apply to new track design format
|
||||
bool tooHigh = trackFlags > kLegacyBrakeSpeedMask;
|
||||
bool tooPrecise = trackFlags & 1;
|
||||
if (tooPrecise || tooHigh)
|
||||
{
|
||||
warningMessage = STR_TRACK_DESIGN_SPEED_UNSERIALIZABLE;
|
||||
}
|
||||
if (tooPrecise)
|
||||
{
|
||||
trackFlags += 1;
|
||||
}
|
||||
trackFlags = std::min<uint8_t>(trackFlags, kLegacyBrakeSpeedMask);
|
||||
|
||||
trackFlags /= kLegacyBrakeSpeedMultiplier;
|
||||
trackFlags &= 0xF;
|
||||
}
|
||||
else
|
||||
{
|
||||
trackFlags = trackElement.element->AsTrack()->GetSeatRotation();
|
||||
}
|
||||
|
||||
// This warning will not apply to new track design format
|
||||
if (track.Type == TrackElemType::BlockBrakes && element->GetBrakeBoosterSpeed() != kRCT2DefaultBlockBrakeSpeed)
|
||||
if (track.Type == TrackElemType::BlockBrakes && element->GetBrakeBoosterSpeed() != kRCT2DefaultBlockBrakeSpeed
|
||||
&& warningMessage == STR_NONE)
|
||||
{
|
||||
warningMessage = STR_TRACK_DESIGN_BLOCK_BRAKE_SPEED_RESET;
|
||||
}
|
||||
|
|
|
@ -345,7 +345,7 @@ private:
|
|||
// - Bits 1 and 2 are set when a vehicle triggers the on-ride photo and act like a countdown from 3.
|
||||
// - If any of the bits 1-4 are set, the game counts it as a photo being taken.
|
||||
uint8_t OnridePhotoBits;
|
||||
// Contains the brake/booster speed, divided by 2.
|
||||
// Contains the brake/booster speed
|
||||
uint8_t BrakeBoosterSpeed;
|
||||
};
|
||||
StationIndex stationIndex;
|
||||
|
|
Loading…
Reference in New Issue