Example #1
0
        private static void ReadFileHeaders(StreamReader sr, SaveGameFile savegame)
        {
            using (var br = new BinaryReader(sr.BaseStream))
            {
                if (br.ReadInt32() == 4)
                {
                    savegame.IsCompressed = true;
                }

                sr.BaseStream.Seek(4, SeekOrigin.Current);

                var blockCount = br.ReadInt32();
                for (int j = 0; j < blockCount; j++)
                {
                    byte[] fileHeader = new byte[ByteBlockSize];
                    br.Read(fileHeader, 0, ByteBlockSize);
                    var internalName = ByteHandler.GetStringFromBytes(fileHeader, 8);

                    savegame.DataBlockNameList.Add(new DataFile()
                    {
                        InternalName = internalName,
                        FileType     = DataFileFacts.GetDataFileFact(internalName).Type,
                        Position     = ByteHandler.GetIntFromBytes(fileHeader, 0),
                        Length       = ByteHandler.GetIntFromBytes(fileHeader, 4)
                    });
                }
            }
        }
Example #2
0
        private static int GetNumberOfRecordsFromDataFile(DataFile dataFile, int sizeOfData, BinaryReader br, out int startReadPosition)
        {
            int numberOfRecords = dataFile.Length / sizeOfData;

            startReadPosition = dataFile.Position;

            if (dataFile.FileFacts.HeaderOverload != null)
            {
                byte[] header = new byte[dataFile.FileFacts.HeaderOverload.MinimumHeaderLength];
                br.BaseStream.Seek(startReadPosition, SeekOrigin.Begin);
                br.BaseStream.Read(header, 0, dataFile.FileFacts.HeaderOverload.MinimumHeaderLength);
                startReadPosition += dataFile.FileFacts.HeaderOverload.MinimumHeaderLength;

                var numberHeaderRows = ByteHandler.GetIntFromBytes(header, dataFile.FileFacts.HeaderOverload.AdditionalHeaderIndicatorPosition);
                numberOfRecords = ByteHandler.GetIntFromBytes(header, dataFile.FileFacts.HeaderOverload.InitialNumberOfRecordsPosition);
                int furtherNumberOfRecords = 0;

                if (numberHeaderRows > 0)
                {
                    for (int headerLoop = 0; headerLoop < numberHeaderRows; headerLoop++)
                    {
                        header = new byte[dataFile.FileFacts.HeaderOverload.ExtraHeaderLength];
                        br.BaseStream.Seek(startReadPosition, SeekOrigin.Begin);
                        br.BaseStream.Read(header, 0, dataFile.FileFacts.HeaderOverload.ExtraHeaderLength);
                        startReadPosition += dataFile.FileFacts.HeaderOverload.ExtraHeaderLength;
                    }
                    furtherNumberOfRecords = ByteHandler.GetIntFromBytes(header, dataFile.FileFacts.HeaderOverload.FurtherNumberOfRecordsPosition);
                }
                numberOfRecords = furtherNumberOfRecords > 0 ? furtherNumberOfRecords : numberOfRecords;
            }

            return(numberOfRecords);
        }
Example #3
0
        private static void LoadGameData(SaveGameFile savegame)
        {
            var general   = savegame.DataBlockNameList.First(x => x.FileType == DataFileType.General);
            var fileFacts = DataFileFacts.GetDataFileFacts().First(x => x.Type == DataFileType.General);

            ByteHandler.GetAllDataFromFile(general, savegame.FileName, fileFacts.DataSize);

            var fileData = ByteHandler.GetAllDataFromFile(general, savegame.FileName, fileFacts.DataSize);

            savegame.GameDate = ByteHandler.GetDateFromBytes(fileData[0], fileFacts.DataSize - 8).Value;
        }
Example #4
0
        private static Dictionary <int, string> GetDataFileStringsDictionary(SaveGameFile savegame, DataFileType type)
        {
            Dictionary <int, string> fileContents = new Dictionary <int, string>();
            var fileFacts = DataFileFacts.GetDataFileFacts().First(x => x.Type == type);
            var fileData  = DataFileLoaders.GetDataFileBytes(savegame, fileFacts.Type, fileFacts.DataSize);

            for (int i = 0; i < fileData.Count; i++)
            {
                fileContents.Add(i, ByteHandler.GetStringFromBytes(fileData[i], 0, fileFacts.StringLength));
            }

            return(fileContents);
        }
Example #5
0
        public static List <byte[]> GetDataFileBytes(SaveGameFile savegame, DataFileType fileType, int sizeOfData)
        {
            DataFile dataFile = savegame.DataBlockNameList.First(x => x.FileType == fileType);

            return(ByteHandler.GetAllDataFromFile(dataFile, savegame.FileName, sizeOfData));
        }