diff --git a/OpenRA.Game/Graphics/TerrainSpriteLayer.cs b/OpenRA.Game/Graphics/TerrainSpriteLayer.cs index 7acf569aaf..67c254c691 100644 --- a/OpenRA.Game/Graphics/TerrainSpriteLayer.cs +++ b/OpenRA.Game/Graphics/TerrainSpriteLayer.cs @@ -87,6 +87,10 @@ namespace OpenRA.Graphics else sprite = emptySprite; + // The vertex buffer does not have geometry for cells outside the map + if (!map.Contains(uv)) + return; + var offset = rowStride * uv.V + 6 * uv.U; Util.FastCreateQuad(vertices, pos, sprite, palette.TextureIndex, offset, sprite.Size); diff --git a/OpenRA.Mods.Common/Traits/World/SmudgeLayer.cs b/OpenRA.Mods.Common/Traits/World/SmudgeLayer.cs index d275fd4d01..c6ff277b45 100644 --- a/OpenRA.Mods.Common/Traits/World/SmudgeLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/SmudgeLayer.cs @@ -139,6 +139,9 @@ namespace OpenRA.Mods.Common.Traits public void AddSmudge(CPos loc) { + if (!world.Map.Contains(loc)) + return; + if (Game.CosmeticRandom.Next(0, 100) <= Info.SmokePercentage) world.AddFrameEndTask(w => w.Add(new SpriteEffect(world.Map.CenterOfCell(loc), w, Info.SmokeType, Info.SmokeSequence, Info.SmokePalette))); @@ -167,6 +170,9 @@ namespace OpenRA.Mods.Common.Traits public void RemoveSmudge(CPos loc) { + if (!world.Map.Contains(loc)) + return; + var tile = dirty.ContainsKey(loc) ? dirty[loc] : new Smudge(); // Setting Sprite to null to indicate a deleted smudge.