Skip to content

Commit

Permalink
Append empty entry header to pak files
Browse files Browse the repository at this point in the history
  • Loading branch information
AnimatedSwine37 committed Apr 20, 2024
1 parent 17e8700 commit 521b5c7
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions Emulator/PAK.Stream.Emulator/Pak/PakBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,17 @@ private unsafe MultiStream BuildV1(IEntry[] entries, IntPtr handle, string filep
// Merge the slices and add.
foreach (var merged in FileSliceStreamExtensions.MergeStreams(mergeAbleStreams))
pairs.Add(merged);

// Add an extra empty entry header (the game might try to read it)
MemoryStream dummyHeader = new MemoryStream(sizeof(V1FileEntry));
byte[] dummyBuffer = new byte[sizeof(V1FileEntry)];
for (int f = 0; i < dummyBuffer.Length; i++)
{
dummyBuffer[f] = 0x00;
}
dummyHeader.Write(dummyBuffer, 0, dummyBuffer.Length);
pairs.Add(new(dummyHeader, OffsetRange.FromStartAndLength(currentOffset, sizeof(V1FileEntry))));

// Return MultiStream
return new MultiStream(pairs, logger);
}
Expand Down Expand Up @@ -366,6 +377,17 @@ private unsafe MultiStream BuildV2(IEntry[] entries, IntPtr handle, string filep
// Merge the slices and add.
foreach (var merged in FileSliceStreamExtensions.MergeStreams(mergeAbleStreams))
pairs.Add(merged);

// Add an extra empty entry header (the game might try to read it)
MemoryStream dummyHeader = new MemoryStream(sizeof(V2FileEntry));
byte[] dummyBuffer = new byte[sizeof(V2FileEntry)];
for (int f = 0; i < dummyBuffer.Length; i++)
{
dummyBuffer[f] = 0x00;
}
dummyHeader.Write(dummyBuffer, 0, dummyBuffer.Length);
pairs.Add(new(dummyHeader, OffsetRange.FromStartAndLength(currentOffset, sizeof(V2FileEntry))));

// Return MultiStream
return new MultiStream(pairs, logger);
}
Expand Down Expand Up @@ -518,6 +540,17 @@ private unsafe MultiStream BuildV3(IEntry[] entries, IntPtr handle, string filep
// Merge the slices and add.
foreach (var merged in FileSliceStreamExtensions.MergeStreams(mergeAbleStreams))
pairs.Add(merged);

// Add an extra empty entry header (the game might try to read it)
MemoryStream dummyHeader = new MemoryStream(sizeof(V3FileEntry));
byte[] dummyBuffer = new byte[sizeof(V3FileEntry)];
for (int f = 0; i < dummyBuffer.Length; i++)
{
dummyBuffer[f] = 0x00;
}
dummyHeader.Write(dummyBuffer, 0, dummyBuffer.Length);
pairs.Add(new(dummyHeader, OffsetRange.FromStartAndLength(currentOffset, sizeof(V3FileEntry))));

// Return MultiStream
return new MultiStream(pairs, logger);
}
Expand Down

0 comments on commit 521b5c7

Please sign in to comment.