diff --git a/OpenRA.Mods.Common/Traits/World/Locomotor.cs b/OpenRA.Mods.Common/Traits/World/Locomotor.cs index 320e348d2a..944d2f9867 100644 --- a/OpenRA.Mods.Common/Traits/World/Locomotor.cs +++ b/OpenRA.Mods.Common/Traits/World/Locomotor.cs @@ -443,6 +443,8 @@ namespace OpenRA.Mods.Common.Traits foreach (var actor in actors) { var actorBlocksPlayers = world.AllPlayersMask; + var actorCrushablePlayers = world.NoPlayersMask; + var crushables = actor.TraitsImplementing(); var mobile = actor.OccupiesSpace as Mobile; var isMoving = mobile != null && mobile.CurrentMovementTypes.HasMovementType(MovementType.Horizontal); @@ -451,10 +453,8 @@ namespace OpenRA.Mods.Common.Traits { cellFlag |= CellFlag.HasCrushableActor; foreach (var crushable in crushables) - cellCrushablePlayers = cellCrushablePlayers.Intersect(crushable.CrushableBy(actor, Info.Crushes)); + actorCrushablePlayers = actorCrushablePlayers.Union(crushable.CrushableBy(actor, Info.Crushes)); } - else - cellCrushablePlayers = world.NoPlayersMask; if (isMoving) { @@ -470,6 +470,7 @@ namespace OpenRA.Mods.Common.Traits cellFlag |= CellFlag.HasTemporaryBlocker; } + cellCrushablePlayers = cellCrushablePlayers.Intersect(actorCrushablePlayers); cellBlockedPlayers = cellBlockedPlayers.Union(actorBlocksPlayers); }