diff --git a/BurnOutSharp.Builders/BFPK.cs b/BurnOutSharp.Builders/BFPK.cs index a221a0dd..10e7b5f0 100644 --- a/BurnOutSharp.Builders/BFPK.cs +++ b/BurnOutSharp.Builders/BFPK.cs @@ -1,7 +1,9 @@ using System.IO; using System.Linq; +using System.Text; using BurnOutSharp.Models.BFPK; using BurnOutSharp.Utilities; +using static BurnOutSharp.Models.BFPK.Constants; namespace BurnOutSharp.Builders { @@ -10,7 +12,7 @@ namespace BurnOutSharp.Builders #region Byte Data /// - /// Parse a byte array into a MoPaQ archive + /// Parse a byte array into a BFPK archive /// /// Byte array to parse /// Offset into the byte array @@ -35,7 +37,7 @@ namespace BurnOutSharp.Builders #region Stream Data /// - /// Parse a Stream into a MoPaQ archive + /// Parse a Stream into a BFPK archive /// /// Stream to parse /// Filled archive on success, null on error @@ -103,8 +105,9 @@ namespace BurnOutSharp.Builders // TODO: Use marshalling here instead of building Header header = new Header(); - header.Magic = data.ReadUInt32(); - if (header.Magic != 0x4b504642) + byte[] magic = data.ReadBytes(4); + header.Magic = Encoding.ASCII.GetString(magic); + if (header.Magic != SignatureString) return null; header.Version = data.ReadInt32(); @@ -125,7 +128,10 @@ namespace BurnOutSharp.Builders fileEntry.NameSize = data.ReadInt32(); if (fileEntry.NameSize > 0) - fileEntry.Name = new string(data.ReadBytes(fileEntry.NameSize).Select(b => (char)b).ToArray()); + { + byte[] name = data.ReadBytes(fileEntry.NameSize); + fileEntry.Name = Encoding.ASCII.GetString(name); + } fileEntry.UncompressedSize = data.ReadInt32(); fileEntry.Offset = data.ReadInt32(); diff --git a/BurnOutSharp.Models/BFPK/Constants.cs b/BurnOutSharp.Models/BFPK/Constants.cs new file mode 100644 index 00000000..372b26c3 --- /dev/null +++ b/BurnOutSharp.Models/BFPK/Constants.cs @@ -0,0 +1,11 @@ +namespace BurnOutSharp.Models.BFPK +{ + public static class Constants + { + public const uint SignatureUInt32 = 0x4b504642; + + public static readonly byte[] SignatureBytes = new byte[] { 0x42, 0x46, 0x50, 0x4b }; + + public const string SignatureString = "BFPK"; + } +} \ No newline at end of file diff --git a/BurnOutSharp.Models/BFPK/Header.cs b/BurnOutSharp.Models/BFPK/Header.cs index 6ec70538..8054928c 100644 --- a/BurnOutSharp.Models/BFPK/Header.cs +++ b/BurnOutSharp.Models/BFPK/Header.cs @@ -12,7 +12,7 @@ namespace BurnOutSharp.Models.BFPK /// /// "BFPK" /// - public uint Magic; + public string Magic; /// /// Version diff --git a/BurnOutSharp.Wrappers/BFPK.cs b/BurnOutSharp.Wrappers/BFPK.cs index db4a00b4..19e8df4d 100644 --- a/BurnOutSharp.Wrappers/BFPK.cs +++ b/BurnOutSharp.Wrappers/BFPK.cs @@ -12,7 +12,7 @@ namespace BurnOutSharp.Wrappers #region Header /// - public uint Magic => _archive.Header.Magic; + public string Magic => _archive.Header.Magic; /// public int Version => _archive.Header.Version;