1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-04 13:42:55 +01:00

Fix #19339: Incorrect import of crashed particles from SV4 (#19404)

This commit is contained in:
Michael Steenbeek
2023-02-14 23:08:42 +01:00
committed by GitHub
parent 6e9c10167e
commit b4dc2d3fe6
2 changed files with 33 additions and 4 deletions

View File

@@ -42,6 +42,7 @@
- Fix: [#19136] SV6 saves with experimental RCT1 paths not imported correctly.
- Fix: [#19250] MusicObjects do not free their preview images.
- Fix: [#19292] Overflow in totalRideValue.
- Fix: [#19339] Incorrect import of crashed particles from SV4.
- Fix: [#19379] "No platforms" station style shows platforms on the Junior Roller Coaster.
- Fix: [#19380] Startup crash when no sequences are installed and random sequences are enabled.
- Fix: [#19391] String corruption caused by an improper buffer handling in GfxWrapString.

View File

@@ -2946,6 +2946,7 @@ namespace RCT1
ImportEntityCommonProperties(dst, src);
dst->SubType = Litter::Type(src->Type);
dst->creationTick = src->CreationTick;
}
template<> void S4Importer::ImportEntity<SteamParticle>(const RCT12EntityBase& srcBase)
@@ -2955,6 +2956,7 @@ namespace RCT1
ImportEntityCommonProperties(dst, src);
dst->frame = src->Frame;
dst->time_to_move = src->TimeToMove;
}
template<> void S4Importer::ImportEntity<MoneyEffect>(const RCT12EntityBase& srcBase)
@@ -2965,6 +2967,7 @@ namespace RCT1
ImportEntityCommonProperties(dst, src);
dst->MoveDelay = src->MoveDelay;
dst->NumMovements = src->NumMovements;
dst->Vertical = src->Vertical;
dst->Value = src->Value;
dst->OffsetX = src->OffsetX;
dst->Wiggle = src->Wiggle;
@@ -2975,6 +2978,17 @@ namespace RCT1
auto* dst = CreateEntityAt<VehicleCrashParticle>(EntityId::FromUnderlying(srcBase.EntityIndex));
auto* src = static_cast<const RCT12EntityCrashedVehicleParticle*>(&srcBase);
ImportEntityCommonProperties(dst, src);
dst->frame = src->Frame;
dst->time_to_live = src->TimeToLive;
dst->colour[0] = RCT1::GetColour(src->Colour[0]);
dst->colour[1] = RCT1::GetColour(src->Colour[1]);
dst->crashed_sprite_base = src->CrashedEntityBase;
dst->velocity_x = src->VelocityX;
dst->velocity_y = src->VelocityY;
dst->velocity_z = src->VelocityZ;
dst->acceleration_x = src->AccelerationX;
dst->acceleration_y = src->AccelerationY;
dst->acceleration_z = src->AccelerationZ;
}
template<> void S4Importer::ImportEntity<ExplosionCloud>(const RCT12EntityBase& srcBase)
@@ -2982,6 +2996,7 @@ namespace RCT1
auto* dst = CreateEntityAt<ExplosionCloud>(EntityId::FromUnderlying(srcBase.EntityIndex));
auto* src = static_cast<const RCT12EntityParticle*>(&srcBase);
ImportEntityCommonProperties(dst, src);
dst->frame = src->Frame;
}
template<> void S4Importer::ImportEntity<ExplosionFlare>(const RCT12EntityBase& srcBase)
@@ -2989,6 +3004,7 @@ namespace RCT1
auto* dst = CreateEntityAt<ExplosionFlare>(EntityId::FromUnderlying(srcBase.EntityIndex));
auto* src = static_cast<const RCT12EntityParticle*>(&srcBase);
ImportEntityCommonProperties(dst, src);
dst->frame = src->Frame;
}
template<> void S4Importer::ImportEntity<CrashSplashParticle>(const RCT12EntityBase& srcBase)
@@ -2996,6 +3012,7 @@ namespace RCT1
auto* dst = CreateEntityAt<CrashSplashParticle>(EntityId::FromUnderlying(srcBase.EntityIndex));
auto* src = static_cast<const RCT12EntityParticle*>(&srcBase);
ImportEntityCommonProperties(dst, src);
dst->frame = src->Frame;
}
template<> void S4Importer::ImportEntity<JumpingFountain>(const RCT12EntityBase& srcBase)
@@ -3003,12 +3020,18 @@ namespace RCT1
auto* dst = CreateEntityAt<JumpingFountain>(EntityId::FromUnderlying(srcBase.EntityIndex));
auto* src = static_cast<const RCT12EntityJumpingFountain*>(&srcBase);
auto fountainType = JumpingFountainType::Water;
if (RCT12MiscEntityType(src->Type) == RCT12MiscEntityType::JumpingFountainSnow)
fountainType = JumpingFountainType::Snow;
ImportEntityCommonProperties(dst, src);
dst->FountainFlags = src->FountainFlags;
dst->Iteration = src->Iteration;
dst->NumTicksAlive = src->NumTicksAlive;
dst->frame = src->Frame;
dst->FountainType = JumpingFountainType::Water;
dst->FountainType = fountainType;
dst->NumTicksAlive = src->NumTicksAlive;
dst->FountainFlags = src->FountainFlags;
dst->TargetX = src->TargetX;
dst->TargetY = src->TargetY;
dst->Iteration = src->Iteration;
}
template<> void S4Importer::ImportEntity<Balloon>(const RCT12EntityBase& srcBase)
@@ -3017,6 +3040,9 @@ namespace RCT1
auto* src = static_cast<const RCT12EntityBalloon*>(&srcBase);
ImportEntityCommonProperties(dst, src);
dst->frame = src->Frame;
dst->popped = src->Popped;
dst->time_to_move = src->TimeToMove;
// Balloons were always blue in RCT1 without AA/LL
if (_gameVersion == FILE_VERSION_RCT1)
{
@@ -3035,6 +3061,8 @@ namespace RCT1
ImportEntityCommonProperties(dst, src);
dst->frame = src->Frame;
dst->target_x = src->TargetX;
dst->target_y = src->TargetY;
dst->state = static_cast<Duck::DuckState>(src->State);
}