Rewrite pack code
This commit is contained in:
@@ -110,35 +110,30 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
var mr0k = (Mr0k)game;
|
var mr0k = (Mr0k)game;
|
||||||
|
|
||||||
var bundleSize = 0;
|
long readSize = 0;
|
||||||
|
long bundleSize = 0;
|
||||||
reader.Position = 0;
|
reader.Position = 0;
|
||||||
Header header = null;
|
|
||||||
var pack = new { IsMr0k = false, BlockSize = -1 };
|
|
||||||
while (reader.Remaining > 0)
|
while (reader.Remaining > 0)
|
||||||
{
|
{
|
||||||
var pos = reader.Position;
|
var pos = reader.Position;
|
||||||
var signature = reader.ReadStringToNull(4);
|
var signature = reader.ReadStringToNull(4);
|
||||||
if (signature == PackSignature)
|
if (signature == PackSignature)
|
||||||
{
|
{
|
||||||
pack = new {
|
var isMr0k = reader.ReadBoolean();
|
||||||
IsMr0k = reader.ReadBoolean(),
|
var blockSize = BinaryPrimitives.ReadInt32LittleEndian(reader.ReadBytes(4));
|
||||||
BlockSize = BinaryPrimitives.ReadInt32LittleEndian(reader.ReadBytes(4))
|
|
||||||
};
|
|
||||||
|
|
||||||
Span<byte> buffer = new byte[pack.BlockSize];
|
Span<byte> buffer = new byte[blockSize];
|
||||||
reader.Read(buffer);
|
reader.Read(buffer);
|
||||||
if (pack.IsMr0k)
|
if (isMr0k)
|
||||||
{
|
{
|
||||||
buffer = Mr0kUtils.Decrypt(buffer, mr0k);
|
buffer = Mr0kUtils.Decrypt(buffer, mr0k);
|
||||||
}
|
}
|
||||||
ms.Write(buffer);
|
ms.Write(buffer);
|
||||||
|
|
||||||
bundleSize += buffer.Length;
|
if (bundleSize == 0)
|
||||||
|
|
||||||
if (header == null)
|
|
||||||
{
|
{
|
||||||
using var blockReader = new EndianBinaryReader(new MemoryStream(buffer.ToArray()));
|
using var blockReader = new EndianBinaryReader(new MemoryStream(buffer.ToArray()));
|
||||||
header = new Header()
|
var header = new Header()
|
||||||
{
|
{
|
||||||
signature = blockReader.ReadStringToNull(),
|
signature = blockReader.ReadStringToNull(),
|
||||||
version = blockReader.ReadUInt32(),
|
version = blockReader.ReadUInt32(),
|
||||||
@@ -146,18 +141,20 @@ namespace AssetStudio
|
|||||||
unityRevision = blockReader.ReadStringToNull(),
|
unityRevision = blockReader.ReadStringToNull(),
|
||||||
size = blockReader.ReadInt64()
|
size = blockReader.ReadInt64()
|
||||||
};
|
};
|
||||||
|
bundleSize = header.size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bundleSize % (PackSize - 0x80) == 0)
|
readSize += buffer.Length;
|
||||||
|
|
||||||
|
if (readSize % (PackSize - 0x80) == 0)
|
||||||
{
|
{
|
||||||
reader.Position += PackSize - 9 - pack.BlockSize;
|
reader.Position += PackSize - 9 - blockSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bundleSize == header.size)
|
if (readSize == bundleSize)
|
||||||
{
|
{
|
||||||
|
readSize = 0;
|
||||||
bundleSize = 0;
|
bundleSize = 0;
|
||||||
header = null;
|
|
||||||
pack = new { IsMr0k = false, BlockSize = -1 };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
@@ -167,7 +164,7 @@ namespace AssetStudio
|
|||||||
signature = reader.ReadStringToNull();
|
signature = reader.ReadStringToNull();
|
||||||
if (signature == UnityFSSignature)
|
if (signature == UnityFSSignature)
|
||||||
{
|
{
|
||||||
header = new Header()
|
var header = new Header()
|
||||||
{
|
{
|
||||||
signature = reader.ReadStringToNull(),
|
signature = reader.ReadStringToNull(),
|
||||||
version = reader.ReadUInt32(),
|
version = reader.ReadUInt32(),
|
||||||
@@ -178,7 +175,6 @@ namespace AssetStudio
|
|||||||
|
|
||||||
reader.Position = pos;
|
reader.Position = pos;
|
||||||
reader.BaseStream.CopyTo(ms, header.size);
|
reader.BaseStream.CopyTo(ms, header.size);
|
||||||
header = null;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user