diff --git a/OpenRA.Editor/Form1.cs b/OpenRA.Editor/Form1.cs index 92bc01f224..47027f7cf8 100644 --- a/OpenRA.Editor/Form1.cs +++ b/OpenRA.Editor/Form1.cs @@ -402,6 +402,7 @@ namespace OpenRA.Editor map.Players.Clear(); map.MakeDefaultPlayers(); + map.FixOpenAreas(); NewMap(map); } @@ -484,18 +485,7 @@ namespace OpenRA.Editor void FixOpenAreas(object sender, EventArgs e) { dirty = true; - var r = new Random(); - - for (var j = surface1.Map.Bounds.Top; j < surface1.Map.Bounds.Bottom; j++) - for (var i = surface1.Map.Bounds.Left; i < surface1.Map.Bounds.Right; i++) - { - var tr = surface1.Map.MapTiles.Value[i, j]; - if (tr.Type == 0xff || tr.Type == 0xffff || tr.Type == 1 || tr.Type == 2) - tr.Index = (byte)r.Next(0, surface1.TileSetRenderer.Data(tr.Type).Count); - - surface1.Map.MapTiles.Value[i, j] = tr; - } - + surface1.Map.FixOpenAreas(); surface1.Chunks.Clear(); surface1.Invalidate(); } diff --git a/OpenRA.Game/Map.cs b/OpenRA.Game/Map.cs index 2d0e477659..5f36b5f4b4 100644 --- a/OpenRA.Game/Map.cs +++ b/OpenRA.Game/Map.cs @@ -474,5 +474,24 @@ namespace OpenRA Enemies = Players.Where(p => p.Value.Playable).Select(p => p.Key).ToArray() }); } + + public void FixOpenAreas() + { + var r = new Random(); + var tileset = OpenRA.Rules.TileSets[Tileset]; + + for (var j = Bounds.Top; j < Bounds.Bottom; j++) + { + for (var i = Bounds.Left; i < Bounds.Right; i++) + { + var tr = MapTiles.Value[i, j]; + var template = tileset.Templates[tr.Type]; + if (!template.PickAny) + continue; + tr.Index = (byte)r.Next(0, template.Tiles.Count); + MapTiles.Value[i, j] = tr; + } + } + } } } diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index 4f846c5a1d..2e373bbeaf 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -342,6 +342,7 @@ namespace OpenRA.Utility var map = LegacyMapImporter.Import(filename, e => Console.WriteLine(e)); map.RequiresMod = mod; map.MakeDefaultPlayers(); + map.FixOpenAreas(); var dest = map.Title + ".oramap"; map.Save(dest); Console.WriteLine(dest + " saved."); diff --git a/mods/cnc/tilesets/desert.yaml b/mods/cnc/tilesets/desert.yaml index cde9f0a7e8..900f389be8 100644 --- a/mods/cnc/tilesets/desert.yaml +++ b/mods/cnc/tilesets/desert.yaml @@ -60,6 +60,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@65535: Id: 65535 Image: clear1 @@ -67,6 +82,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@0: Id: 0 Image: clear1 @@ -74,6 +104,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@1: Id: 1 Image: w1 diff --git a/mods/cnc/tilesets/snow.yaml b/mods/cnc/tilesets/snow.yaml index 4a8d24886f..a91c54587e 100644 --- a/mods/cnc/tilesets/snow.yaml +++ b/mods/cnc/tilesets/snow.yaml @@ -60,6 +60,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@65535: Id: 65535 Image: clear1 @@ -67,6 +82,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@0: Id: 0 Image: clear1 @@ -74,6 +104,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@1: Id: 1 Image: w1 diff --git a/mods/cnc/tilesets/temperat.yaml b/mods/cnc/tilesets/temperat.yaml index 7dbe8c3528..570024a2d6 100644 --- a/mods/cnc/tilesets/temperat.yaml +++ b/mods/cnc/tilesets/temperat.yaml @@ -60,6 +60,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@65535: Id: 65535 Image: clear1 @@ -67,6 +82,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@0: Id: 0 Image: clear1 @@ -74,6 +104,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@1: Id: 1 Image: w1 diff --git a/mods/cnc/tilesets/winter.yaml b/mods/cnc/tilesets/winter.yaml index b3b3ab2b29..23e56cf7d6 100644 --- a/mods/cnc/tilesets/winter.yaml +++ b/mods/cnc/tilesets/winter.yaml @@ -60,6 +60,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@65535: Id: 65535 Image: clear1 @@ -67,6 +82,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@0: Id: 0 Image: clear1 @@ -74,6 +104,21 @@ Templates: PickAny: True Tiles: 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear Template@1: Id: 1 Image: w1 diff --git a/mods/d2k/tilesets/arrakis.yaml b/mods/d2k/tilesets/arrakis.yaml index 54c531b82e..2d4bbeef60 100644 --- a/mods/d2k/tilesets/arrakis.yaml +++ b/mods/d2k/tilesets/arrakis.yaml @@ -64,7 +64,7 @@ Templates: Image: BLOXBASE Frames: 0 Size: 1,1 - PickAny: False + PickAny: True # TODO: add more Frames and Tiles here Tiles: 0: Sand Template@1: @@ -108,7 +108,7 @@ Templates: Image: BLOXBASE Frames: 16,17,36,37 Size: 2,2 - Category: Dune + Category: Dune PickAny: False Tiles: 0: Sand @@ -120,7 +120,7 @@ Templates: Image: BLOXBASE Frames: 18,19,38,39 Size: 2,2 - Category: Dune + Category: Dune PickAny: False Tiles: 0: Dune @@ -132,7 +132,7 @@ Templates: Image: BLOXBASE Frames: 58,59,78,79 Size: 2,2 - Category: Dune + Category: Dune PickAny: False Tiles: 1: Dune diff --git a/mods/ra/tilesets/desert.yaml b/mods/ra/tilesets/desert.yaml index 1ba9d9a4e8..d43c9a3641 100644 --- a/mods/ra/tilesets/desert.yaml +++ b/mods/ra/tilesets/desert.yaml @@ -75,6 +75,7 @@ Templates: Image: clear1 Size: 1,1 Category: Terrain + PickAny: True Tiles: 0: Clear 1: Clear @@ -97,6 +98,7 @@ Templates: Image: clear1 Size: 1,1 Category: Terrain + PickAny: True Tiles: 0: Clear 1: Clear @@ -115,14 +117,14 @@ Templates: 14: Clear 15: Clear Template@256: - Id: 256 + Id: 256 Image: w1 Size: 1,1 Category: Terrain Tiles: 0: Water Template@257: - Id: 257 + Id: 257 Image: sh17 Size: 2,2 Category: Terrain @@ -132,7 +134,7 @@ Templates: 2: Water 3: Water Template@258: - Id: 258 + Id: 258 Image: sh18 Size: 2,2 Category: Terrain diff --git a/mods/ra/tilesets/interior.yaml b/mods/ra/tilesets/interior.yaml index 30ddb2b4bb..9f40b6d756 100644 --- a/mods/ra/tilesets/interior.yaml +++ b/mods/ra/tilesets/interior.yaml @@ -56,6 +56,7 @@ Templates: Id: 255 Image: clear1 Size: 1,1 + PickAny: True Tiles: 0: Clear 1: Clear @@ -76,6 +77,7 @@ Templates: Template@65535: Id: 65535 Image: clear1 + PickAny: True Size: 1,1 Tiles: 0: Clear diff --git a/mods/ra/tilesets/temperat.yaml b/mods/ra/tilesets/temperat.yaml index 940fcddc86..ae7bb37b6d 100644 --- a/mods/ra/tilesets/temperat.yaml +++ b/mods/ra/tilesets/temperat.yaml @@ -58,6 +58,7 @@ Templates: Image: clear1 Size: 1,1 Category: Terrain + PickAny: True Tiles: 0: Clear 1: Clear @@ -80,6 +81,7 @@ Templates: Image: clear1 Size: 1,1 Category: Terrain + PickAny: True Tiles: 0: Clear 1: Clear