Пример #1
0
        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));
                    }
                }
            }
        }
Пример #2
0
        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}");
            }
        }