コード例 #1
0
        private void SezializeSaveFile(Stream stream, SaveFile save)
        {
            var saveDataStream = new MemoryStream();
            var nameTableStream = new MemoryStream();

            var newSave = new SaveFile
            {
                Header =
                {
                    UnkInt1 = save.Header.UnkInt1
                },
                SaveDataHeader =
                {
                    HeaderSize = save.SaveDataHeader.HeaderSize,
                    UnkInt2 = save.SaveDataHeader.UnkInt2
                }
            };

            newSave.SaveData = FillSaveData();

            saveDataStream.SerializeObject(newSave.SaveData, newSave.NameTable.Names);

            nameTableStream.WriteInt32(newSave.NameTable.Names.Count);
            for (var i = 0; i < newSave.NameTable.Names.Count; i++)
            {
                nameTableStream.WriteString(newSave.NameTable.Names[i]);
            }

            newSave.SaveDataHeader.SaveDataSize = (int) saveDataStream.Length + 12; // 12 = SaveDataHeader size
            newSave.Header.FileSize = (int) saveDataStream.Length + 12 + (int) nameTableStream.Length;

            stream.Seek(0, SeekOrigin.Begin);

            // File header
            stream.WriteInt32(newSave.Header.UnkInt1);
            stream.WriteInt32(newSave.Header.FileSize);

            // Save data header
            stream.WriteInt32(newSave.SaveDataHeader.HeaderSize);
            stream.WriteInt32(newSave.SaveDataHeader.SaveDataSize);
            stream.WriteInt32(newSave.SaveDataHeader.UnkInt2);

            // Save data
            saveDataStream.WriteTo(stream);
            //stream.WriteInt32(255);

            // Name table
            nameTableStream.WriteTo(stream);
        }
コード例 #2
0
        private SaveFile DeserializeSaveFile(Stream stream)
        {
            var save = new SaveFile();

            // File header
            stream.Seek(0, SeekOrigin.Begin);
            save.Header = new FileHeader
            {
                UnkInt1 = stream.ReadInt32(),
                FileSize = stream.ReadInt32()
            };

            // Save data header
            save.SaveDataHeader = new SaveDataHeader
            {
                HeaderSize = stream.ReadInt32(),
                SaveDataSize = stream.ReadInt32(),
                UnkInt2 = stream.ReadInt32()
            };

            // Name table
            stream.Seek(save.SaveDataHeader.SaveDataSize + 8, SeekOrigin.Begin);
            var count = stream.ReadInt32();
            save.NameTable = new NameTable();
            for (var i = 0; i < count; i++)
            {
                save.NameTable.Names.Add(stream.ReadString());
            }

            // Save data
            stream.Seek(20, SeekOrigin.Begin);
            save.SaveData = new WhatIfSaveData();
            var saveDataStream = new byte[save.SaveDataHeader.SaveDataSize - 12];
            stream.Read(saveDataStream, 0, save.SaveDataHeader.SaveDataSize - 12);
            var ms = new MemoryStream(saveDataStream);
            ms.Seek(0, SeekOrigin.Begin);
            ms.DeserializeObject(save.SaveData, save.NameTable.Names);

            return save;
        }