From a4ee5a5be2c1499e87cdd021f3acc753ab4ce9d0 Mon Sep 17 00:00:00 2001 From: iAmAsval Date: Sat, 25 Jul 2020 00:23:49 +0200 Subject: [PATCH] FModel 3.1.1 --- FModel/FModel.csproj | 6 +-- FModel/MainWindow.xaml | 10 ++--- .../Parsers/Objects/FByteBulkData.cs | 39 +++++++++---------- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index b862abe3..0286cb58 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -8,13 +8,13 @@ FModel.App Asval - 3.1.0.5 - 3.1.0.5 + 3.1.1.0 + 3.1.1.0 FModel.ico https://github.com/iAmAsval/FModel - 3.1.0 + 3.1.1 x64 false diff --git a/FModel/MainWindow.xaml b/FModel/MainWindow.xaml index 4b8ed169..0b5f7e10 100644 --- a/FModel/MainWindow.xaml +++ b/FModel/MainWindow.xaml @@ -154,6 +154,11 @@ + + + + + @@ -169,11 +174,6 @@ - - - - - diff --git a/FModel/PakReader/Parsers/Objects/FByteBulkData.cs b/FModel/PakReader/Parsers/Objects/FByteBulkData.cs index 629d3caf..41b23c6d 100644 --- a/FModel/PakReader/Parsers/Objects/FByteBulkData.cs +++ b/FModel/PakReader/Parsers/Objects/FByteBulkData.cs @@ -17,29 +17,28 @@ namespace PakReader.Parsers.Objects Data = null; if ((BulkDataFlags & 0x20) != 0 || ElementCount == 0) return; - if ((BulkDataFlags & (uint)EBulkDataFlags.BULKDATA_PayloadAtEndOfFile) != 0) - { - long rememberMe = reader.BaseStream.Position; - if (BulkDataOffsetInFile + ElementCount <= reader.BaseStream.Length) - { - reader.BaseStream.Seek(BulkDataOffsetInFile, SeekOrigin.Begin); - Data = reader.ReadBytes(ElementCount); - } - reader.BaseStream.Seek(rememberMe, SeekOrigin.Begin); - } if ((BulkDataFlags & (uint)EBulkDataFlags.BULKDATA_OptionalPayload) != 0) //.uptnl return; - if ((BulkDataFlags & (uint)EBulkDataFlags.BULKDATA_ForceInlinePayload) != 0) //.uexp - Data = reader.ReadBytes(ElementCount); - if ((BulkDataFlags & (uint)EBulkDataFlags.BULKDATA_PayloadInSeperateFile) != 0) //.ubulk + + if ((BulkDataFlags & (uint)EBulkDataFlags.BULKDATA_PayloadAtEndOfFile) != 0 && + BulkDataOffsetInFile > 0 && ElementCount > 0 && + BulkDataOffsetInFile + ElementCount <= reader.BaseStream.Length) //.uasset { - if (ubulk != null) - { - ubulk.Position = BulkDataOffsetInFile + ubulkOffset; - Data = new byte[ElementCount]; - ubulk.Read(Data, 0, (int)ElementCount); - } - //else throw new FileLoadException("No ubulk specified for texture"); + long rememberMe = reader.BaseStream.Position; + reader.BaseStream.Seek(BulkDataOffsetInFile, SeekOrigin.Begin); + Data = reader.ReadBytes(ElementCount); + reader.BaseStream.Seek(rememberMe, SeekOrigin.Begin); + } + else if ((BulkDataFlags & (uint)EBulkDataFlags.BULKDATA_ForceInlinePayload) != 0) //.uexp + { + Data = reader.ReadBytes(ElementCount); + } + else if ((BulkDataFlags & (uint)EBulkDataFlags.BULKDATA_PayloadInSeperateFile) != 0 && + ubulk != null && BulkDataOffsetInFile + ubulkOffset >= 0) //.ubulk + { + ubulk.Position = BulkDataOffsetInFile + ubulkOffset; + Data = new byte[ElementCount]; + ubulk.Read(Data, 0, (int)ElementCount); } } }