diff --git a/MapConverter/IniMap.cs b/MapConverter/IniMap.cs index b668e148c8..0c8b0932b5 100644 --- a/MapConverter/IniMap.cs +++ b/MapConverter/IniMap.cs @@ -28,6 +28,19 @@ using OpenRA.FileFormats; namespace MapConverter { + public class MapData + { + public int MapFormat; + public string Title; + public string Theater; + public int2 Size; + public int[] Bounds; + public ushort[] Tiles; + public byte[] Images; + public string[] Resources; + //public string[] Actors; + } + public class IniMap { public readonly string Title; @@ -55,7 +68,50 @@ namespace MapConverter public void Save(string filename) { - + List validResources = new List(){ "gold01", "gold02", "gold03", "gold04", + "gem01", "gem02", "gem03", "gem04"}; + + // Metadata + var data = new MapData(); + data.MapFormat = 1; + data.Title = Title; + data.Theater = Theater; + data.Bounds = new int[] {XOffset, YOffset, Width, Height}; + data.Size = new int2(MapSize,MapSize); + // Tiles + var images = new List(); + var tiles = new List(); + for( int i = 0 ; i < MapSize ; i++ ) + for( int j = 0 ; j < MapSize ; j++ ) + { + tiles.Add(MapTiles[j,i].tile); + if(MapTiles[ j, i ].tile == 0xff || MapTiles[ j, i ].tile == 0xffff) + images.Add(byte.MaxValue); + else + images.Add(MapTiles[j,i].image); + } + + data.Tiles = tiles.ToArray(); + data.Images = images.ToArray(); + + // Resources + var resources = new List(); + for( int i = 0 ; i < MapSize ; i++ ) + for( int j = 0 ; j < MapSize ; j++ ) + { + string res = ""; + if (validResources.Contains(MapTiles[ j, i ].overlay)) + res = MapTiles[ j, i ].overlay; + + resources.Add(res); + } + data.Resources = resources.ToArray(); + + + Dictionary Nodes = new Dictionary(); + Nodes.Add("MAP",FieldSaver.Save(data)); + Nodes.WriteToFile(filename); + } public IniMap(string filename)