diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index 19148d4405..50fa077c32 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -768,7 +768,12 @@ namespace OpenRA if (Grid.MaximumTerrainHeight == 0) return Contains((PPos)uv); - foreach (var puv in ProjectedCellsCovering(uv)) + // If the cell has no valid projection, then we're off the map. + var projectedCells = ProjectedCellsCovering(uv); + if (projectedCells.Length == 0) + return false; + + foreach (var puv in projectedCells) if (!Contains(puv)) return false; return true; diff --git a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs index 3b2ce7709e..494a7bb699 100644 --- a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs +++ b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs @@ -65,17 +65,15 @@ namespace OpenRA.Traits .ToArray(); if (Footprint.Length == 0) - throw new ArgumentException(("This frozen actor has no footprint! Please report a bug!\n" + + throw new ArgumentException(("This frozen actor has no footprint.\n" + "Actor Name: {0}\n" + "Actor Location: {1}\n" + "Input footprint: [{2}]\n" + - "Input footprint (shroud.Contains): [{3}]\n" + - "Input footprint (map.Contains): [{4}]") + "Input footprint (after shroud.Contains): [{3}]") .F(actor.Info.Name, actor.Location.ToString(), footprint.Select(p => p.ToString()).JoinWith("|"), - footprint.Select(p => shroud.Contains(p).ToString()).JoinWith("|"), - footprint.Select(p => actor.World.Map.Contains(p).ToString()).JoinWith("|"))); + footprint.Select(p => shroud.Contains(p).ToString()).JoinWith("|"))); CenterPosition = self.CenterPosition; Bounds = self.Bounds;