private void BtnExportMapsToEditor_Click(object sender, EventArgs e) { StringBuilder sbDefines = new StringBuilder(); StringBuilder sbIndexes = new StringBuilder(); StringBuilder sbArray = new StringBuilder(); int index = 0; int mapNumber = 0; List <int> mapIndexes = new List <int>(); List <string> mapLines = new List <string>(); foreach (var map in mapList.Maps) { List <byte> tmpData = new List <byte>(); sbDefines.AppendLine(string.Format(defineTemplate, mapNumber, index)); mapIndexes.Add(index); foreach (var element in map.Elements) { var set = PluginInstance.PluginRequestCharSet(element.CharSetId, null, null)?.FirstOrDefault(); if (set == null) { continue; } var idxName = set.Name.Replace(" ", "").ToUpper() + "_INDEX"; if (idxName.StartsWith("DEFLECTOR")) { idxName = "DEFLECTOR_INDEX"; } int realIndex = Array.IndexOf(namedIndexes, idxName); if (realIndex == -1) { continue; } ushort toStore = (ushort)((((element.CharY + 1) & 31) << 10) | (((element.CharX + 1) & 31) << 5) | ((realIndex + 1) & 31)); tmpData.AddRange(BitConverter.GetBytes(toStore)); //Just for testing, need to retrieve extended info of the item switch (idxName) { case "DEFLECTOR_INDEX": byte extra = element.ExtraData; var objName = set.Name.Replace(" ", "").ToUpper(); switch (objName) { case "DEFLECTORA": extra = (byte)(extra | (1 << 4)); break; case "DEFLECTORB": extra = (byte)(extra | (2 << 4)); break; case "DEFLECTORC": extra = (byte)(extra | (3 << 4)); break; case "DEFLECTORD": extra = (byte)(extra | (4 << 4)); break; } tmpData.Add(extra); break; case "MOTHERSHIP_INDEX": case "HANGAR_INDEX": tmpData.Add(element.ExtraData); break; } } index += tmpData.Count + 1; mapNumber++; tmpData.Add(0); mapLines.Add(ByteArrayToHex(tmpData.ToArray())); } string arrayContent = string.Format(mapTemplate, index, string.Join(", _\r\n", mapLines) + " _"); string indexesContent = string.Format(indexesArrayTemplate, mapIndexes.Count, string.Join(", _\r\n", mapIndexes.Select(i => i.ToString())) + " _"); string finalContent = "'----DEFINES----\r\n" + sbDefines.ToString() + "\r\n\r\n'----INDEXES----\r\n" + indexesContent + "\r\n\r\n'----MAP_CONTENT----\r\n" + arrayContent; PluginInstance.PluginRequestEditorWindow("BattleGrid compiled map", finalContent); }