public static void replaceDDS(string spd, string dds) { List <DDS> ddsFiles = getDDSFiles(spd); byte[] ddsBytes = FileIOWrapper.ReadAllBytes(dds); foreach (var ddsFile in ddsFiles) { if (ddsFile.name == Path.GetFileNameWithoutExtension(dds)) { if (ddsBytes.Length == ddsFile.size) { using (Stream stream = FileIOWrapper.Open(spd, FileMode.Open)) { stream.Position = ddsFile.pos; stream.Write(ddsBytes, 0, ddsFile.size); } } else { byte[] spdBytes = FileIOWrapper.ReadAllBytes(spd); byte[] newSpd = new byte[spdBytes.Length + (ddsBytes.Length - ddsFile.size)]; SliceArray(spdBytes, 0, ddsFile.pos).CopyTo(newSpd, 0); SliceArray(spdBytes, ddsFile.pos + ddsFile.size, spdBytes.Length).CopyTo(newSpd, ddsFile.pos + ddsBytes.Length); ddsBytes.CopyTo(newSpd, ddsFile.pos); FileIOWrapper.WriteAllBytes(spd, newSpd); updateOffsets(spd, getDDSOffsets(spd)); } } } }
public static void replaceTmx(string spr, string tmx) { string tmxPattern = Path.GetFileNameWithoutExtension(tmx); int offset = findTmx(spr, tmxPattern); if (offset > -1) { Console.WriteLine($"[INFO] Merging {tmx} onto {spr}"); byte[] tmxBytes = FileIOWrapper.ReadAllBytes(tmx); int repTmxLen = tmxBytes.Length; int ogTmxLen = BitConverter.ToInt32(FileIOWrapper.ReadAllBytes(spr), (offset + 4)); if (repTmxLen == ogTmxLen) { using (Stream stream = FileIOWrapper.Open(spr, FileMode.Open)) { stream.Position = offset; stream.Write(tmxBytes, 0, repTmxLen); } } else // Insert and update offsets { byte[] sprBytes = FileIOWrapper.ReadAllBytes(spr); byte[] newSpr = new byte[sprBytes.Length + (repTmxLen - ogTmxLen)]; SliceArray(sprBytes, 0, offset).CopyTo(newSpr, 0); SliceArray(sprBytes, offset + ogTmxLen, sprBytes.Length).CopyTo(newSpr, offset + repTmxLen); tmxBytes.CopyTo(newSpr, offset); FileIOWrapper.WriteAllBytes(spr, newSpr); updateOffsets(spr, getTmxOffsets(spr)); } } else { Console.WriteLine($"[WARNING] Couldn't find {tmx} in {spr}"); } }