コード例 #1
0
ファイル: ARC.cs プロジェクト: ScanMountGoat/ArcCross
        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;
        }
コード例 #2
0
ファイル: ARC.cs プロジェクト: ScanMountGoat/ArcCross
 private bool IsRegional(_sFileInformationV1 info)
 {
     return((info.FileTableFlag >> 8) > 0);
 }