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) }); } } }
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); }
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; }
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); }
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)); }