private void GetFileInformation(_sFileInformationV1 fileinfo, out long offset, out uint compSize, out uint decompSize, int regionIndex = 0) { var subfile = subFiles[fileinfo.SubFile_Index]; var dirIndex = directoryList[fileinfo.DirectoryIndex >> 8].FullPathHashLengthAndIndex >> 8; var directoryOffset = directoryOffsets[dirIndex]; //redirect if ((fileinfo.Flags & 0x00300000) == 0x00300000) { GetFileInformation(fileInfoV1[subfile.Flags], out offset, out compSize, out decompSize, regionIndex); return; } //regional if (IsRegional(fileinfo)) { subfile = subFiles[(fileinfo.FileTableFlag >> 8) + regionIndex]; directoryOffset = directoryOffsets[dirIndex + 1 + regionIndex]; } offset = (header.FileDataOffset + directoryOffset.Offset + (subfile.Offset << 2)); compSize = subfile.CompSize; decompSize = subfile.DecompSize; }
private bool IsRegional(_sFileInformationV1 info) { return((info.FileTableFlag >> 8) > 0); }