diff --git a/FModel/PakReader/Pak/PakFileReader.cs b/FModel/PakReader/Pak/PakFileReader.cs index ae08bf9c..e4c1f259 100644 --- a/FModel/PakReader/Pak/PakFileReader.cs +++ b/FModel/PakReader/Pak/PakFileReader.cs @@ -328,6 +328,17 @@ namespace FModel.PakReader.Pak uint Value = BitConverter.ToUInt32(encodedPakEntries, pakLocation); pakLocation += sizeof(uint); + if ((Value & 0x3f) == 0x3f) // flag value to load a field + { + CompressionBlockSize = BitConverter.ToUInt32(encodedPakEntries, pakLocation); + pakLocation += sizeof(uint); + } + else + { + // for backwards compatibility with old paks : + CompressionBlockSize = (Value & 0x3f) << 11; + } + CompressionMethodIndex = ((Value >> 23) & 0x3f); // Test for 32-bit safe values. Grab it, or memcpy the 64-bit value @@ -392,11 +403,8 @@ namespace FModel.PakReader.Pak FPakCompressedBlock[] CompressionBlocks = new FPakCompressedBlock[CompressionBlocksCount]; // Filter the compression block size or use the UncompressedSize if less that 64k. - CompressionBlockSize = 0; - if (CompressionBlocksCount > 0) - { - CompressionBlockSize = UncompressedSize < 65536 ? (uint)UncompressedSize : ((Value & 0x3f) << 11); - } + if (CompressionBlocksCount > 0 && UncompressedSize < 65536) + CompressionBlockSize = (uint)UncompressedSize; // Set bDeleteRecord to false, because it obviously isn't deleted if we are here. Deleted = false; diff --git a/FModel/PakReader/Parsers/Class/USoundWave.cs b/FModel/PakReader/Parsers/Class/USoundWave.cs index 1c093d58..78b9d273 100644 --- a/FModel/PakReader/Parsers/Class/USoundWave.cs +++ b/FModel/PakReader/Parsers/Class/USoundWave.cs @@ -63,6 +63,7 @@ namespace FModel.PakReader.Parsers.Class private void Serialize(PackageReader reader, Stream ubulk, long ubulkOffset) { + bStreaming = FModel.Globals.Game.Version >= EPakVersion.PATH_HASH_INDEX; bCooked = reader.ReadInt32() != 0; if (this.TryGetValue("bStreaming", out var v) && v is BoolProperty b) bStreaming = b.Value;