mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-24 00:03:11 +01:00
Fix desync caused due to ghost tiles changing the ride mode
This commit is contained in:
@@ -546,43 +546,46 @@ public:
|
||||
|
||||
cost += ((supportHeight / (2 * COORDS_Z_STEP)) * RideTypeDescriptors[ride->type].BuildCosts.SupportPrice) * 5;
|
||||
|
||||
invalidate_test_results(ride);
|
||||
switch (_trackType)
|
||||
{
|
||||
case TrackElemType::OnRidePhoto:
|
||||
ride->lifecycle_flags |= RIDE_LIFECYCLE_ON_RIDE_PHOTO;
|
||||
break;
|
||||
case TrackElemType::CableLiftHill:
|
||||
if (trackBlock->index != 0)
|
||||
break;
|
||||
ride->lifecycle_flags |= RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED;
|
||||
ride->CableLiftLoc = mapLoc;
|
||||
break;
|
||||
case TrackElemType::BlockBrakes:
|
||||
ride->num_block_brakes++;
|
||||
ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_OPERATING;
|
||||
|
||||
ride->mode = RideMode::ContinuousCircuitBlockSectioned;
|
||||
if (ride->type == RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER)
|
||||
ride->mode = RideMode::PoweredLaunchBlockSectioned;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (trackBlock->index == 0)
|
||||
if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST))
|
||||
{
|
||||
invalidate_test_results(ride);
|
||||
switch (_trackType)
|
||||
{
|
||||
case TrackElemType::Up25ToFlat:
|
||||
case TrackElemType::Up60ToFlat:
|
||||
case TrackElemType::DiagUp25ToFlat:
|
||||
case TrackElemType::DiagUp60ToFlat:
|
||||
if (!(_trackPlaceFlags & CONSTRUCTION_LIFT_HILL_SELECTED))
|
||||
break;
|
||||
[[fallthrough]];
|
||||
case TrackElemType::CableLiftHill:
|
||||
ride->num_block_brakes++;
|
||||
case TrackElemType::OnRidePhoto:
|
||||
ride->lifecycle_flags |= RIDE_LIFECYCLE_ON_RIDE_PHOTO;
|
||||
break;
|
||||
case TrackElemType::CableLiftHill:
|
||||
if (trackBlock->index != 0)
|
||||
break;
|
||||
ride->lifecycle_flags |= RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED;
|
||||
ride->CableLiftLoc = mapLoc;
|
||||
break;
|
||||
case TrackElemType::BlockBrakes:
|
||||
ride->num_block_brakes++;
|
||||
ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_OPERATING;
|
||||
|
||||
ride->mode = RideMode::ContinuousCircuitBlockSectioned;
|
||||
if (ride->type == RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER)
|
||||
ride->mode = RideMode::PoweredLaunchBlockSectioned;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (trackBlock->index == 0)
|
||||
{
|
||||
switch (_trackType)
|
||||
{
|
||||
case TrackElemType::Up25ToFlat:
|
||||
case TrackElemType::Up60ToFlat:
|
||||
case TrackElemType::DiagUp25ToFlat:
|
||||
case TrackElemType::DiagUp60ToFlat:
|
||||
if (!(_trackPlaceFlags & CONSTRUCTION_LIFT_HILL_SELECTED))
|
||||
break;
|
||||
[[fallthrough]];
|
||||
case TrackElemType::CableLiftHill:
|
||||
ride->num_block_brakes++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -457,40 +457,43 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
switch (trackType)
|
||||
if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST))
|
||||
{
|
||||
case TrackElemType::OnRidePhoto:
|
||||
ride->lifecycle_flags &= ~RIDE_LIFECYCLE_ON_RIDE_PHOTO;
|
||||
break;
|
||||
case TrackElemType::CableLiftHill:
|
||||
ride->lifecycle_flags &= ~RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED;
|
||||
break;
|
||||
case TrackElemType::BlockBrakes:
|
||||
ride->num_block_brakes--;
|
||||
if (ride->num_block_brakes == 0)
|
||||
{
|
||||
ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_OPERATING;
|
||||
ride->mode = RideMode::ContinuousCircuit;
|
||||
if (ride->type == RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER)
|
||||
{
|
||||
ride->mode = RideMode::PoweredLaunch;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (trackType)
|
||||
{
|
||||
case TrackElemType::Up25ToFlat:
|
||||
case TrackElemType::Up60ToFlat:
|
||||
case TrackElemType::DiagUp25ToFlat:
|
||||
case TrackElemType::DiagUp60ToFlat:
|
||||
if (!isLiftHill)
|
||||
switch (trackType)
|
||||
{
|
||||
case TrackElemType::OnRidePhoto:
|
||||
ride->lifecycle_flags &= ~RIDE_LIFECYCLE_ON_RIDE_PHOTO;
|
||||
break;
|
||||
[[fallthrough]];
|
||||
case TrackElemType::CableLiftHill:
|
||||
ride->num_block_brakes--;
|
||||
break;
|
||||
case TrackElemType::CableLiftHill:
|
||||
ride->lifecycle_flags &= ~RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED;
|
||||
break;
|
||||
case TrackElemType::BlockBrakes:
|
||||
ride->num_block_brakes--;
|
||||
if (ride->num_block_brakes == 0)
|
||||
{
|
||||
ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_OPERATING;
|
||||
ride->mode = RideMode::ContinuousCircuit;
|
||||
if (ride->type == RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER)
|
||||
{
|
||||
ride->mode = RideMode::PoweredLaunch;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (trackType)
|
||||
{
|
||||
case TrackElemType::Up25ToFlat:
|
||||
case TrackElemType::Up60ToFlat:
|
||||
case TrackElemType::DiagUp25ToFlat:
|
||||
case TrackElemType::DiagUp60ToFlat:
|
||||
if (!isLiftHill)
|
||||
break;
|
||||
[[fallthrough]];
|
||||
case TrackElemType::CableLiftHill:
|
||||
ride->num_block_brakes--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
money32 price = RideTypeDescriptors[ride->type].BuildCosts.TrackPrice;
|
||||
|
||||
Reference in New Issue
Block a user