public static void Run(string mapPath, string ROMpath, int offset, int? mapPointerOffset, bool insertMapChange, int? mapChangePointerOffset) { XmlDocument doc = new XmlDocument(); doc.Load(mapPath); Map map = new Map(doc); if (map.TileWidth != 16 || map.TileHeight != 16) { throw new Exception("Tilesize is not 16x16"); } var tileChanges = new Dictionary<int, Tuple<Rectangle, TileLayer>>(map.Layers.Count); int mainLayerIndex = HandleLayers(map, tileChanges); //byte[] ROMData = File.ReadAllBytes(ROMpath); //MemoryStream stream = new MemoryStream(ROMData); ChangeStream stream = new ChangeStream(); InsertMap(offset, mapPointerOffset, insertMapChange, mapChangePointerOffset, map, tileChanges, mainLayerIndex, stream); stream.WriteToFile(ROMpath); //File.WriteAllBytes(ROMpath, ROMData); }
public static void Assemble(string inputFile, string outputFile, string languageName, ILog messageLog) { TextReader reader; bool close; if (inputFile != null) { reader = File.OpenText(inputFile); close = true; } else { reader = Console.In; close = false; } EACodeLanguage language = languages[languageName]; if (outputFile != null) { if (File.Exists(outputFile)) { if (File.GetAttributes(outputFile).HasFlag(FileAttributes.ReadOnly)) { messageLog.AddError("outputFile is read-only."); goto end; } } var cache = new ChangeStream(); using (BinaryWriter writer = new BinaryWriter(cache)) { Assemble(language, reader, writer, messageLog); if (messageLog.ErrorCount == 0) { using (Stream stream = File.OpenWrite(outputFile)) { cache.WriteToFile(stream); } } } } else { messageLog.AddError("outputFile needs to be specified for assembly."); } end: if (close) reader.Close(); }