Fix SGA builder and wrapper

This commit is contained in:
Matt Nadareski
2022-12-27 10:19:11 -08:00
parent 18cdf9d7ed
commit 68be17de66
2 changed files with 29 additions and 18 deletions

View File

@@ -472,9 +472,9 @@ namespace BurnOutSharp.Builders
switch (majorVersion)
{
case 4: (directory as Directory4).Folders[i].Name = strings[(directory as Directory4).Folders[i].NameOffset]; break;
case 5: (directory as Directory4).Folders[i].Name = strings[(directory as Directory4).Folders[i].NameOffset]; break;
case 6: (directory as Directory4).Folders[i].Name = strings[(directory as Directory4).Folders[i].NameOffset]; break;
case 7: (directory as Directory4).Folders[i].Name = strings[(directory as Directory4).Folders[i].NameOffset]; break;
case 5: (directory as Directory5).Folders[i].Name = strings[(directory as Directory5).Folders[i].NameOffset]; break;
case 6: (directory as Directory6).Folders[i].Name = strings[(directory as Directory6).Folders[i].NameOffset]; break;
case 7: (directory as Directory7).Folders[i].Name = strings[(directory as Directory7).Folders[i].NameOffset]; break;
default: return null;
}
}
@@ -485,9 +485,9 @@ namespace BurnOutSharp.Builders
switch (majorVersion)
{
case 4: (directory as Directory4).Files[i].Name = strings[(directory as Directory4).Files[i].NameOffset]; break;
case 5: (directory as Directory4).Files[i].Name = strings[(directory as Directory4).Files[i].NameOffset]; break;
case 6: (directory as Directory4).Files[i].Name = strings[(directory as Directory4).Files[i].NameOffset]; break;
case 7: (directory as Directory4).Files[i].Name = strings[(directory as Directory4).Files[i].NameOffset]; break;
case 5: (directory as Directory5).Files[i].Name = strings[(directory as Directory5).Files[i].NameOffset]; break;
case 6: (directory as Directory6).Files[i].Name = strings[(directory as Directory6).Files[i].NameOffset]; break;
case 7: (directory as Directory7).Files[i].Name = strings[(directory as Directory7).Files[i].NameOffset]; break;
default: return null;
}
}

View File

@@ -693,7 +693,7 @@ namespace BurnOutSharp.Wrappers
// Loop through and get all parent directories
var parentNames = new List<string> { filename };
// Get the immediate parent directory
// Get the parent directory
object folder;
switch (MajorVersion)
{
@@ -717,6 +717,8 @@ namespace BurnOutSharp.Wrappers
}
}
// TODO: Should the section name/alias be used in the path as well?
// Reverse and assemble the filename
parentNames.Reverse();
filename = Path.Combine(parentNames.ToArray());
@@ -760,18 +762,27 @@ namespace BurnOutSharp.Wrappers
if (compressedData == null)
return false;
// Decompress the data
byte[] data = new byte[outputFileSize];
ZStream zst = new ZStream
// If the compressed and uncompressed sizes match
byte[] data;
if (fileSize == outputFileSize)
{
next_in = compressedData,
avail_in = compressedData.Length,
next_out = data,
avail_out = data.Length,
};
zst.inflateInit();
zst.inflate(zlibConst.Z_FULL_FLUSH);
zst.inflateEnd();
data = compressedData;
}
else
{
// Decompress the data
data = new byte[outputFileSize];
ZStream zst = new ZStream
{
next_in = compressedData,
avail_in = compressedData.Length,
next_out = data,
avail_out = data.Length,
};
zst.inflateInit();
zst.inflate(zlibConst.Z_FULL_FLUSH);
zst.inflateEnd();
}
// If we have an invalid output directory
if (string.IsNullOrWhiteSpace(outputDirectory))