Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public void Read(AssetsFileReader reader)
Header = new AssetBundleHeader();
Header.Read(reader);

if (Header.Version >= 7)
if (Header.NeedAlignAfterHeader)
{
reader.Align16();
}
Expand Down Expand Up @@ -103,7 +103,7 @@ public void Write(AssetsFileWriter writer, long filePos = 0)

Header.Write(writer);

if (Header.Version >= 7)
if (Header.NeedAlignAfterHeader)
{
writer.Align16();
}
Expand Down Expand Up @@ -282,6 +282,8 @@ public void Unpack(AssetsFileWriter writer)
)
}
};

newBundleHeader.NeedAlignAfterHeader = Header.NeedAlignAfterHeader;

long fileSize = newBundleHeader.GetFileDataOffset();
for (int i = 0; i < blockInfos.Length; i++)
Expand Down Expand Up @@ -321,7 +323,7 @@ public void Unpack(AssetsFileWriter writer)
}

newBundleHeader.Write(writer);
if (newBundleHeader.Version >= 7)
if (newBundleHeader.NeedAlignAfterHeader)
{
writer.Align16();
}
Expand Down Expand Up @@ -418,6 +420,8 @@ public void Pack(AssetsFileWriter writer, AssetBundleCompressionType compType,
EngineVersion = Header.EngineVersion,
FileStreamHeader = newFsHeader
};

newHeader.NeedAlignAfterHeader = Header.NeedAlignAfterHeader;

AssetBundleBlockAndDirInfo newBlockAndDirList = new AssetBundleBlockAndDirInfo()
{
Expand All @@ -430,7 +434,7 @@ public void Pack(AssetsFileWriter writer, AssetBundleCompressionType compType,
long startPos = writer.Position;

newHeader.Write(writer);
if (newHeader.Version >= 7)
if (newHeader.NeedAlignAfterHeader)
writer.Align16();

int headerSize = (int)(writer.Position - startPos);
Expand Down Expand Up @@ -604,7 +608,7 @@ public void Pack(AssetsFileWriter writer, AssetBundleCompressionType compType,

writer.Position = 0;
newHeader.Write(writer);
if (newHeader.Version >= 7)
if (newHeader.NeedAlignAfterHeader)
writer.Align16();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Linq;

namespace AssetsTools.NET
{
Expand Down Expand Up @@ -27,6 +28,11 @@ public class AssetBundleHeader
/// </summary>
public AssetBundleFSHeader FileStreamHeader { get; set; }

/// <summary>
/// Weather align after header. Because for 2019.4.30f1 Signature is 0x06 but has align
/// </summary>
public bool NeedAlignAfterHeader { get; set; }

public void Read(AssetsFileReader reader)
{
reader.BigEndian = true;
Expand All @@ -38,6 +44,25 @@ public void Read(AssetsFileReader reader)
{
FileStreamHeader = new AssetBundleFSHeader();
FileStreamHeader.Read(reader);
if (Version >= 7)
{
NeedAlignAfterHeader = true;
}
else if(EngineVersion.StartsWith("2019.4."))
// should check if FileStreamHeader.Flags != AssetBundleFSHeaderFlags.HasDirectoryInfo
// but UABEANext now only save file with none compression and will read saved file again
// to avoid error won't check flag at now time
{
long p = reader.Position;
long len = 16 - p % 16;
byte[] bytes = reader.ReadBytes((int)len);
NeedAlignAfterHeader = bytes.All(x => x == 0);
reader.Position = p;
}
else
{
NeedAlignAfterHeader = false;
}
}
else
{
Expand Down Expand Up @@ -80,7 +105,7 @@ public long GetBundleInfoOffset()
else
{
long ret = GenerationVersion.Length + EngineVersion.Length + 0x1a;
if (Version >= 7)
if (NeedAlignAfterHeader)
{
if ((flags & AssetBundleFSHeaderFlags.OldWebPluginCompatibility) != 0)
return ((ret + 0x0a) + 15) & ~15;
Expand Down Expand Up @@ -111,7 +136,7 @@ public long GetFileDataOffset()
else
ret += Signature.Length + 1;

if (Version >= 7)
if (NeedAlignAfterHeader)
ret = (ret + 15) & ~15;
if ((flags & AssetBundleFSHeaderFlags.BlockAndDirAtEnd) == 0)
ret += compressedSize;
Expand Down