From 68be17de66719f804e2443fd79f850a56c9967df Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 27 Dec 2022 10:19:11 -0800 Subject: [PATCH] Fix SGA builder and wrapper --- BurnOutSharp.Builders/SGA.cs | 12 ++++++------ BurnOutSharp.Wrappers/SGA.cs | 35 +++++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/BurnOutSharp.Builders/SGA.cs b/BurnOutSharp.Builders/SGA.cs index 4d3457e4..3afa785b 100644 --- a/BurnOutSharp.Builders/SGA.cs +++ b/BurnOutSharp.Builders/SGA.cs @@ -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; } } diff --git a/BurnOutSharp.Wrappers/SGA.cs b/BurnOutSharp.Wrappers/SGA.cs index 0dc6d861..6165ba10 100644 --- a/BurnOutSharp.Wrappers/SGA.cs +++ b/BurnOutSharp.Wrappers/SGA.cs @@ -693,7 +693,7 @@ namespace BurnOutSharp.Wrappers // Loop through and get all parent directories var parentNames = new List { 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))