1
0
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:
Manuel Vögele
2020-10-26 21:36:09 +01:00
committed by GitHub
parent c440dac600
commit e4e7a0f2f2
2 changed files with 71 additions and 65 deletions

View File

@@ -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;
}
}
}

View File

@@ -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;