Skip to content

Commit

Permalink
Add support for package version V16
Browse files Browse the repository at this point in the history
  • Loading branch information
Norbyte committed Feb 27, 2021
1 parent 2e17209 commit 5db750a
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 20 deletions.
2 changes: 1 addition & 1 deletion ConverterApp/OsirisPane.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ private void SaveSavegameDatabase()
// Save globals.lsf
var rewrittenStream = new MemoryStream();
FileVersion version;
if (OriginalSavePakVersion == PackageVersion.V15)
if (OriginalSavePakVersion >= PackageVersion.V15)
{
version = FileVersion.VerBG3;
}
Expand Down
24 changes: 13 additions & 11 deletions ConverterApp/PackagePane.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public PackagePane(ISettingsDataSource settingsDataSource)
{
InitializeComponent();

packageVersion.SelectedIndex = 1;
packageVersion.SelectedIndex = 2;
compressionMethod.SelectedIndex = 3;

extractPackagePath.DataBindings.Add("Text", settingsDataSource, "Settings.PAK.ExtractInputPath", true, DataSourceUpdateMode.OnPropertyChanged);
Expand Down Expand Up @@ -97,11 +97,12 @@ private PackageVersion SelectedPackageVersion()
{
switch (packageVersion.SelectedIndex)
{
case 0: return PackageVersion.V15;
case 1: return PackageVersion.V13;
case 2: return PackageVersion.V10;
case 3: return PackageVersion.V9;
case 4: return PackageVersion.V7;
case 0: return PackageVersion.V16;
case 1: return PackageVersion.V15;
case 2: return PackageVersion.V13;
case 3: return PackageVersion.V10;
case 4: return PackageVersion.V9;
case 5: return PackageVersion.V7;
default: throw new InvalidDataException();
}
}
Expand Down Expand Up @@ -238,23 +239,24 @@ public void SetGame(Game game)
switch (game)
{
case Game.DivinityOriginalSin:
packageVersion.SelectedIndex = 4;
packageVersion.SelectedIndex = 5;
break;

case Game.DivinityOriginalSinEE:
packageVersion.SelectedIndex = 3;
packageVersion.SelectedIndex = 4;
break;

case Game.DivinityOriginalSin2:
packageVersion.SelectedIndex = 2;
packageVersion.SelectedIndex = 3;
break;

case Game.DivinityOriginalSin2DE:
packageVersion.SelectedIndex = 1;
packageVersion.SelectedIndex = 2;
break;

case Game.BaldursGate3:
packageVersion.SelectedIndex = 0;
// Use V15 for now, for compatibility reasons
packageVersion.SelectedIndex = 1;
break;
}
}
Expand Down
1 change: 1 addition & 0 deletions Divine/CLI/CommandLineActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ private static void SetUpAndValidate(CommandLineArguments args)
PackageVersion = PackageVersion.V13;
break;
case Game.BaldursGate3:
// Use V15 for now, for compatibility reasons
PackageVersion = PackageVersion.V15;
break;
default:
Expand Down
3 changes: 2 additions & 1 deletion LSLib/LS/Enums/PackageVersion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ public enum PackageVersion
V9 = 9, // D:OS 1 EE
V10 = 10, // D:OS 2
V13 = 13, // D:OS 2 DE
V15 = 15 // BG3
V15 = 15, // BG3 EA
V16 = 16 // BG3 EA Patch4
};
}
2 changes: 1 addition & 1 deletion LSLib/LS/PackageCommon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@ public static string MakePartFilename(string path, int part)

public class PackageCreationOptions
{
public PackageVersion Version = PackageVersion.V13;
public PackageVersion Version = PackageVersion.V15;
public CompressionMethod Compression = CompressionMethod.None;
public bool FastCompression = true;
public PackageFlags Flags = 0;
Expand Down
8 changes: 4 additions & 4 deletions LSLib/LS/PackageReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -222,15 +222,15 @@ private Package ReadPackageV15(FileStream mainStream, BinaryReader reader)
var package = new Package();
var header = BinUtils.ReadStruct<LSPKHeader15>(reader);

if (header.Version != (ulong)PackageVersion.V15)
if (header.Version != (ulong)PackageVersion.V15 && header.Version != (ulong)PackageVersion.V16)
{
string msg = $"Unsupported package version {header.Version}; this layout is only supported for {PackageVersion.V15}";
string msg = $"Unsupported package version {header.Version}; this layout is only supported for V15 and V16";
throw new InvalidDataException(msg);
}

package.Metadata.Flags = (PackageFlags)header.Flags;
package.Metadata.Priority = header.Priority;
package.Version = PackageVersion.V15;
package.Version = (header.Version == 15) ? PackageVersion.V15 : PackageVersion.V16;

if (_metadataOnly) return package;

Expand Down Expand Up @@ -290,7 +290,7 @@ public Package Read()
{
return ReadPackageV10(mainStream, reader);
}
else if (version == 15)
else if (version == 15 || version == 16)
{
mainStream.Seek(4, SeekOrigin.Begin);
return ReadPackageV15(mainStream, reader);
Expand Down
7 changes: 5 additions & 2 deletions LSLib/LS/PackageWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ public class PackageWriter : IDisposable
{
public delegate void WriteProgressDelegate(AbstractFileInfo abstractFile, long numerator, long denominator);

private const long MaxPackageSize = 0x40000000;
private const long MaxPackageSizeDOS = 0x40000000;
private const long MaxPackageSizeBG3 = 0x100000000;
public CompressionMethod Compression = CompressionMethod.None;
public CompressionLevel CompressionLevel = CompressionLevel.DefaultCompression;

Expand Down Expand Up @@ -47,7 +48,8 @@ public PackagedFileInfo WriteFile(AbstractFileInfo info)
{
// Assume that all files are written uncompressed (worst-case) when calculating package sizes
long size = (long)info.Size();
if (Version < PackageVersion.V15 && _streams.Last().Position + size > MaxPackageSize)
if ((Version < PackageVersion.V15 && _streams.Last().Position + size > MaxPackageSizeDOS)
|| (Version >= PackageVersion.V16 && _streams.Last().Position + size > MaxPackageSizeBG3))
{
// Start a new package file if the current one is full.
string partPath = Package.MakePartFilename(_path, _streams.Count);
Expand Down Expand Up @@ -365,6 +367,7 @@ public void Write()
switch (Version)
{
case PackageVersion.V15:
case PackageVersion.V16:
{
WriteV15(mainStream);
break;
Expand Down

0 comments on commit 5db750a

Please sign in to comment.