private static byte[] DecompressData(FileReader reader, string FileName, byte[] data) { reader.ByteOrder = ByteOrder.BigEndian; reader.Position = 0; uint MagicHex = reader.ReadUInt32(); string Magic = reader.ReadMagic(0, 4); reader.Position = 0; if (Magic == "Yaz0") { if (data != null) { return(EveryFileExplorer.YAZ0.Decompress(data)); } else { return(EveryFileExplorer.YAZ0.Decompress(FileName)); } } if (MagicHex == 0x28B52FFD || MagicHex == 0xFD2FB528) { if (data != null) { return(Zstb.SDecompress(data)); } else { return(Zstb.SDecompress(File.ReadAllBytes(FileName))); } } return(data); }
public void DecompressNameBlock(uint magic, byte[] CompressedBlock, SDFTOC_Header header) { byte[] decomp = null; if (magic == 0xDFF25B82 || magic == 0xFD2FB528) { decomp = Zstb.SDecompress(CompressedBlock); } else if (magic == 0x184D2204 || header.Version >= 0x17) { decomp = STLibraryCompression.Type_LZ4.Decompress(CompressedBlock, 0, CompressedBlock.Length, (int)header.DecompressedSize); } else { decomp = STLibraryCompression.ZLIB.Decompress(CompressedBlock); } //Now it's decompressed lets parse! using (var reader = new FileReader(decomp)) { ParseNames(reader); } CompressedBlock = new byte[0]; decomp = new byte[0]; decomp = null; CompressedBlock = null; }
public static void SetASST(FileEntry fileEntry, byte[] data) { if (fileEntry.IsCompressed) { fileEntry.CompressedData = Zstb.SCompress(data); } else { fileEntry.CompressedData = data; } }
public static byte[] GetASSTData(FileEntry entry) { if (entry.IsCompressed) { return(Zstb.SDecompress(entry.CompressedData)); } else { return(entry.CompressedData); } }
public byte[] GetFileBytes() { List <byte[]> Data = new List <byte[]>(); if (File.Exists(FileBlockPath)) { var block = File.Open(FileBlockPath, FileMode.Open); using (var stream = new FileReader(block)) { if (CompressedSizes.Count == 0) { //Decompressed File // string FileNameBlock = Path.Combine(FolderPath, FileName); // string FolerPath = Path.GetDirectoryName(FileNameBlock); // if (!Directory.Exists(FolerPath)) // Directory.CreateDirectory(FolerPath); Data.Add(stream.getSection((int)Offset, (int)DecompressedSize)); } else { var PageSize = (double)0x10000; var DecompOffset = 0; var CompOffset = 0; IsCompressed = true; if (UseDDS) { bool IsDX10 = false; using (var filereader = new FileReader(SDFParent.block2Array[DdsType].Data)) { filereader.Position = 84; IsDX10 = filereader.ReadString(4) == "DX10"; if (IsDX10) { if (SDFParent.block2Array[DdsType].UsedBytes > 0x94) { IsSwizzled = true; } Data.Add(SDFParent.block2Array[DdsType].Data.Take((int)0x94).ToArray()); } else { if (SDFParent.block2Array[DdsType].UsedBytes > 0x80) { IsSwizzled = true; } Data.Add(SDFParent.block2Array[DdsType].Data.Take((int)0x80).ToArray()); } } Console.WriteLine("UsedBytes " + SDFParent.block2Array[DdsType].UsedBytes + " IsSwizzled " + IsSwizzled); } for (var i = 0; i < CompressedSizes.Count; i++) { var decompSize = (int)Math.Min((int)DecompressedSize - DecompOffset, PageSize); if (CompressedSizes[i] == 0 || decompSize == (int)CompressedSizes[i]) { stream.Seek((int)Offset + CompOffset, SeekOrigin.Begin); CompressedSizes[i] = (ulong)decompSize; Data.Add(stream.ReadBytes(decompSize)); } else { stream.Seek((int)Offset + CompOffset, SeekOrigin.Begin); Data.Add(Zstb.SDecompress(stream.ReadBytes((int)CompressedSizes[i]))); } DecompOffset += (int)decompSize; CompOffset += (int)CompressedSizes[i]; } } } block.Dispose(); } return(Utils.CombineByteArray(Data.ToArray())); }