Widen Vehicle::update_flags to 32 bits (#19340)

* Expand update_flags to uint32

* move IsCrashedVehicle to update_flags

* rename update_flags to Flags

* Update replays

---------

Co-authored-by: duncanspumpkin <duncans_pumpkin@hotmail.co.uk>
This commit is contained in:
spacek531 2023-02-10 13:46:06 -08:00 committed by GitHub
parent 96bfa633fe
commit 1dfbb5f124
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 53 additions and 34 deletions

View File

@ -76,9 +76,9 @@ set(OPENMSX_VERSION "1.0.1")
set(OPENMSX_URL "https://github.com/OpenRCT2/OpenMusic/releases/download/v${OPENMSX_VERSION}/openmusic.zip")
set(OPENMSX_SHA1 "8ff94490180e2fbfdd13a4130eb300da726ca406")
set(REPLAYS_VERSION "0.0.72")
set(REPLAYS_VERSION "0.0.73")
set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v${REPLAYS_VERSION}/replays.zip")
set(REPLAYS_SHA1 "93744627E3F1FE5ED6317D5A292D15B63AA71765")
set(REPLAYS_SHA1 "5AAFEE5DBEFACA454004742CECCC99E5DD3FD4F7")
option(FORCE32 "Force 32-bit build. It will add `-m32` to compiler flags.")
option(WITH_TESTS "Build tests")

View File

@ -51,8 +51,8 @@
<OpenSFXSha1>8f04aea33f8034131c3069f6accacce0d94f80c1</OpenSFXSha1>
<OpenMSXUrl>https://github.com/OpenRCT2/OpenMusic/releases/download/v1.0.1/openmusic.zip</OpenMSXUrl>
<OpenMSXSha1>8ff94490180e2fbfdd13a4130eb300da726ca406</OpenMSXSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.72/replays.zip</ReplaysUrl>
<ReplaysSha1>93744627E3F1FE5ED6317D5A292D15B63AA71765</ReplaysSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.73/replays.zip</ReplaysUrl>
<ReplaysSha1>5AAFEE5DBEFACA454004742CECCC99E5DD3FD4F7</ReplaysSha1>
</PropertyGroup>
<ItemGroup>

View File

@ -404,7 +404,7 @@ struct GameStateSnapshots final : public IGameStateSnapshots
COMPARE_FIELD(Vehicle, next_vehicle_on_ride);
COMPARE_FIELD(Vehicle, var_44);
COMPARE_FIELD(Vehicle, mass);
COMPARE_FIELD(Vehicle, update_flags);
COMPARE_FIELD(Vehicle, Flags);
COMPARE_FIELD(Vehicle, SwingSprite);
COMPARE_FIELD(Vehicle, current_station);
COMPARE_FIELD(Vehicle, SwingPosition);
@ -455,7 +455,6 @@ struct GameStateSnapshots final : public IGameStateSnapshots
COMPARE_FIELD(Vehicle, target_seat_rotation);
COMPARE_FIELD(Vehicle, BoatLocation.x);
COMPARE_FIELD(Vehicle, BoatLocation.y);
COMPARE_FIELD(Vehicle, IsCrashedVehicle);
}
void CompareSpriteDataLitter(const Litter& spriteBase, const Litter& spriteCmp, GameStateSpriteChange& changeData) const

View File

@ -43,7 +43,7 @@
// It is used for making sure only compatible builds get connected, even within
// single OpenRCT2 version.
#define NETWORK_STREAM_VERSION "4"
#define NETWORK_STREAM_VERSION "5"
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION

View File

@ -1887,7 +1887,16 @@ namespace OpenRCT2
cs.ReadWrite(entity.next_vehicle_on_ride);
cs.ReadWrite(entity.var_44);
cs.ReadWrite(entity.mass);
cs.ReadWrite(entity.update_flags);
if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < 18)
{
uint16_t updateFlags = 0;
cs.ReadWrite(updateFlags);
entity.Flags = updateFlags;
}
else
{
cs.ReadWrite(entity.Flags);
}
cs.ReadWrite(entity.SwingSprite);
cs.ReadWrite(entity.current_station);
cs.ReadWrite(entity.current_time);
@ -1940,7 +1949,15 @@ namespace OpenRCT2
cs.ReadWrite(entity.colours.Tertiary);
cs.ReadWrite(entity.seat_rotation);
cs.ReadWrite(entity.target_seat_rotation);
cs.ReadWrite(entity.IsCrashedVehicle);
if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < 18)
{
bool isCrashedVehicle = false;
cs.ReadWrite(isCrashedVehicle);
if (isCrashedVehicle)
{
entity.SetUpdateFlag(VEHICLE_UPDATE_FLAG_CRASHED);
}
}
}
template<> void ParkFile::ReadWriteEntity(OrcaStream& os, OrcaStream::ChunkStream& cs, Guest& guest)

View File

@ -8,10 +8,10 @@ struct ObjectRepositoryItem;
namespace OpenRCT2
{
// Current version that is saved.
constexpr uint32_t PARK_FILE_CURRENT_VERSION = 17;
constexpr uint32_t PARK_FILE_CURRENT_VERSION = 18;
// The minimum version that is forwards compatible with the current version.
constexpr uint32_t PARK_FILE_MIN_VERSION = 17;
constexpr uint32_t PARK_FILE_MIN_VERSION = 18;
// The minimum version that is backwards compatible with the current version.
// If this is increased beyond 0, uncomment the checks in ParkFile.cpp and Context.cpp!

View File

@ -2804,7 +2804,7 @@ namespace RCT1
dst->track_progress = src->TrackProgress;
dst->vertical_drop_countdown = src->VerticalDropCountdown;
dst->sub_state = src->SubState;
dst->update_flags = src->UpdateFlags;
dst->Flags = src->UpdateFlags;
SetVehicleColours(dst, src);
@ -2815,7 +2815,10 @@ namespace RCT1
dst->num_peeps = src->NumPeeps;
dst->next_free_seat = src->NextFreeSeat;
dst->IsCrashedVehicle = src->Flags & RCT12_ENTITY_FLAGS_IS_CRASHED_VEHICLE_ENTITY;
if (src->Flags & RCT12_ENTITY_FLAGS_IS_CRASHED_VEHICLE_ENTITY)
{
dst->SetUpdateFlag(VEHICLE_UPDATE_FLAG_CRASHED);
}
}
template<> void S4Importer::ImportEntity<Guest>(const RCT12EntityBase& srcBase)

View File

@ -1995,7 +1995,7 @@ namespace RCT2
dst->next_vehicle_on_ride = EntityId::FromUnderlying(src->NextVehicleOnRide);
dst->var_44 = src->Var44;
dst->mass = src->Mass;
dst->update_flags = src->UpdateFlags;
dst->Flags = src->UpdateFlags;
dst->SwingSprite = src->SwingSprite;
dst->current_station = StationIndex::FromUnderlying(src->CurrentStation);
dst->current_time = src->CurrentTime;
@ -2044,7 +2044,10 @@ namespace RCT2
dst->ride_subtype = RCTEntryIndexToOpenRCT2EntryIndex(src->RideSubtype);
dst->seat_rotation = src->SeatRotation;
dst->target_seat_rotation = src->TargetSeatRotation;
dst->IsCrashedVehicle = src->Flags & RCT12_ENTITY_FLAGS_IS_CRASHED_VEHICLE_ENTITY;
if (src->Flags & RCT12_ENTITY_FLAGS_IS_CRASHED_VEHICLE_ENTITY)
{
dst->SetUpdateFlag(VEHICLE_UPDATE_FLAG_CRASHED);
}
}
static uint32_t AdjustScenarioToCurrentTicks(const S6Data& s6, uint32_t tick)

View File

@ -73,12 +73,11 @@ Vehicle* CableLiftSegmentCreate(
current->SetTrackType(TrackElemType::CableLiftHill);
current->SetTrackDirection(current->sprite_direction >> 3);
current->track_progress = 164;
current->update_flags = VEHICLE_UPDATE_FLAG_COLLISION_DISABLED;
current->Flags = VEHICLE_UPDATE_FLAG_COLLISION_DISABLED;
current->SetState(Vehicle::Status::MovingToEndOfStation, 0);
current->num_peeps = 0;
current->next_free_seat = 0;
current->BoatLocation.SetNull();
current->IsCrashedVehicle = false;
return current;
}

View File

@ -3167,7 +3167,7 @@ static Vehicle* VehicleCreateCar(
vehicle->SetTrackType(trackElement->GetTrackType());
vehicle->track_progress = 0;
vehicle->SetState(Vehicle::Status::MovingToEndOfStation);
vehicle->update_flags = 0;
vehicle->Flags = 0;
CoordsXY chosenLoc;
auto numAttempts = 0;
@ -3266,7 +3266,7 @@ static Vehicle* VehicleCreateCar(
{
vehicle->track_progress = 15;
}
vehicle->update_flags = VEHICLE_UPDATE_FLAG_COLLISION_DISABLED;
vehicle->Flags = VEHICLE_UPDATE_FLAG_COLLISION_DISABLED;
if (carEntry.flags & CAR_ENTRY_FLAG_HAS_INVERTED_SPRITE_SET)
{
if (trackElement->IsInverted())
@ -3281,7 +3281,6 @@ static Vehicle* VehicleCreateCar(
vehicle->num_peeps = 0;
vehicle->next_free_seat = 0;
vehicle->BoatLocation.SetNull();
vehicle->IsCrashedVehicle = false;
return vehicle;
}

View File

@ -3231,7 +3231,7 @@ void Vehicle::UpdateDeparting()
}
if (curRide->mode == RideMode::Shuttle)
{
update_flags ^= VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE;
Flags ^= VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE;
velocity = 0;
// We have turned, so treat it like entering a new tile
@ -3494,7 +3494,7 @@ void Vehicle::UpdateCollisionSetup()
VehicleCrashParticle::Create(train->colours, trainLoc);
}
train->IsCrashedVehicle = true;
train->SetUpdateFlag(VEHICLE_UPDATE_FLAG_CRASHED);
train->animationState = ScenarioRand() & 0xFFFF;
train->animation_frame = ScenarioRand() & 0x7;
@ -3676,7 +3676,7 @@ void Vehicle::UpdateTravelling()
}
if (curRide->mode == RideMode::Shuttle)
{
update_flags ^= VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE;
Flags ^= VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE;
velocity = 0;
}
else
@ -5275,7 +5275,7 @@ void Vehicle::CrashOnLand()
while (numParticles-- != 0)
VehicleCrashParticle::Create(colours, curLoc);
IsCrashedVehicle = true;
SetUpdateFlag(VEHICLE_UPDATE_FLAG_CRASHED);
animation_frame = 0;
animationState = 0;
sprite_width = 13;
@ -5344,7 +5344,7 @@ void Vehicle::CrashOnWater()
for (int32_t i = 0; i < 10; ++i)
VehicleCrashParticle::Create(colours, curLoc + CoordsXYZ{ -4, 8, 0 });
IsCrashedVehicle = true;
SetUpdateFlag(VEHICLE_UPDATE_FLAG_CRASHED);
animation_frame = 0;
animationState = 0;
sprite_width = 13;
@ -7559,7 +7559,7 @@ bool Vehicle::UpdateTrackMotionForwardsGetNewTrack(uint16_t trackType, const Rid
}
if (trackType == TrackElemType::RotationControlToggle)
{
update_flags ^= VEHICLE_UPDATE_FLAG_ROTATION_OFF_WILD_MOUSE;
Flags ^= VEHICLE_UPDATE_FLAG_ROTATION_OFF_WILD_MOUSE;
}
// Change from original: this used to check if the vehicle allowed doors.
UpdateSceneryDoorBackwards();
@ -9370,7 +9370,7 @@ void Vehicle::Serialise(DataSerialiser& stream)
stream << next_vehicle_on_ride;
stream << var_44;
stream << mass;
stream << update_flags;
stream << Flags;
stream << SwingSprite;
stream << current_station;
stream << SwingPosition;
@ -9410,5 +9410,4 @@ void Vehicle::Serialise(DataSerialiser& stream)
stream << seat_rotation;
stream << target_seat_rotation;
stream << BoatLocation;
stream << IsCrashedVehicle;
}

View File

@ -131,7 +131,7 @@ struct Vehicle : EntityBase
uint16_t var_44;
uint16_t mass;
uint16_t update_flags;
uint32_t Flags;
uint8_t SwingSprite;
StationIndex current_station;
union
@ -207,7 +207,6 @@ struct Vehicle : EntityBase
uint8_t seat_rotation;
uint8_t target_seat_rotation;
CoordsXY BoatLocation;
bool IsCrashedVehicle;
constexpr bool IsHead() const
{
@ -258,15 +257,15 @@ struct Vehicle : EntityBase
}
bool HasUpdateFlag(uint32_t flag) const
{
return (update_flags & flag) != 0;
return (Flags & flag) != 0;
}
void ClearUpdateFlag(uint32_t flag)
{
update_flags &= ~flag;
Flags &= ~flag;
}
void SetUpdateFlag(uint32_t flag)
{
update_flags |= flag;
Flags |= flag;
}
void ApplyMass(int16_t appliedMass);
void Serialise(DataSerialiser& stream);
@ -457,6 +456,7 @@ enum : uint32_t
VEHICLE_UPDATE_FLAG_ROTATION_OFF_WILD_MOUSE = (1 << 13), // After passing a rotation toggle track piece this will enable
VEHICLE_UPDATE_FLAG_SINGLE_CAR_POSITION = (1 << 14), // OpenRCT2 Flag: Used to override UpdateMotion to move the position of
// an individual car on a train
VEHICLE_UPDATE_FLAG_CRASHED = (1 << 15),
};
enum

View File

@ -3671,7 +3671,7 @@ void Vehicle::Paint(PaintSession& session, int32_t imageDirection) const
{
const CarEntry* carEntry;
if (IsCrashedVehicle)
if (HasUpdateFlag(VEHICLE_UPDATE_FLAG_CRASHED))
{
PaintAddImageAsParent(
session, ImageId(SPR_WATER_PARTICLES_DENSE_0 + animation_frame), { 0, 0, z }, { 1, 1, 0 }, { 0, 0, z + 2 });