public static string Combine(this IFileStorage fileStorage, params string[] paths) { var path = paths[0]; for (int i = 1; i < paths.Length; i++) { path = fileStorage.Combine(path, paths[i]); } return(path); }
public Disk(string directory) { _rncDecoder = new RncDecoder(); _fileStorage = ServiceLocator.FileStorage; _platform = ServiceLocator.Platform; var dataPath = _fileStorage.Combine(directory, DataFilename); _dataDiskFile = _fileStorage.OpenFileRead(dataPath); ReadEntries(directory); }
private void ReadEntries(string directory) { var dinnerPath = _fileStorage.Combine(directory, DinnerFilename); using (var dinnerFile = _fileStorage.OpenFileRead(dinnerPath)) { var dinnerReader = new BinaryReader(dinnerFile); _dinnerTableEntries = dinnerReader.ReadInt32(); _entries = new Dictionary <int, DiskEntry>(); for (var i = 0; i < _dinnerTableEntries; i++) { var id = (int)dinnerReader.ReadUInt16(); var tmp = dinnerReader.ReadUInt32(); var tmp2 = (uint)dinnerReader.ReadUInt16(); var offset = (int)(tmp & 0X0FFFFFF); var cflag = (byte)((offset >> 23) & 0x1) == 1; offset &= 0x7FFFFF; if (cflag) { var version = DetermineGameVersion(); if (version.Version.Minor == 331) { offset <<= 3; } else { offset <<= 4; } } var flags = (tmp2 << 8) | (tmp & 0xFF000000) >> 24; var hasHeader = ((flags >> 22) & 0x1) == 1; var isCompressed = ((flags >> 23) & 0x1) == 0; var size = (int)(flags & 0x03fffff); _entries.Add(id, new DiskEntry { Offset = offset, HasHeader = hasHeader, IsCompressed = isCompressed, Size = size }); } } }