From 386c86f04f980d7cd76b8a46305a12d9c0495b4d Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 14 Dec 2022 16:47:45 -0800 Subject: [PATCH] Add placeholders for parsing in MoPaQ --- BurnOutSharp.Builder/MoPaQ.cs | 106 ++++++++++++++++++++++++++++++---- 1 file changed, 95 insertions(+), 11 deletions(-) diff --git a/BurnOutSharp.Builder/MoPaQ.cs b/BurnOutSharp.Builder/MoPaQ.cs index 32abcb43..e6abfc04 100644 --- a/BurnOutSharp.Builder/MoPaQ.cs +++ b/BurnOutSharp.Builder/MoPaQ.cs @@ -269,11 +269,53 @@ namespace BurnOutSharp.Builder #endregion - // TODO: Read in Hash Table - // TODO: Read in Block Table - // TODO: Read in Hi-Block Table - // TODO: Read in BET Table - // TODO: Read in HET Table + #region Hash Table + + // If we have a hash table + ulong hashTableOffset = ((uint)archive.ArchiveHeader.HashTablePositionHi << 24) | archive.ArchiveHeader.HashTablePosition; + if (hashTableOffset != 0) + { + // TODO: Read in Hash Table + } + + #endregion + + #region Block Table + + ulong blockTableOffset = ((uint)archive.ArchiveHeader.BlockTablePositionHi << 24) | archive.ArchiveHeader.BlockTablePosition; + if (blockTableOffset != 0) + { + // TODO: Read in Block Table + } + + #endregion + + #region Hi-Block Table + + if (archive.ArchiveHeader.HiBlockTablePosition != 0) + { + // TODO: Read in Hi-Block Table + } + + #endregion + + #region BET Table + + if (archive.ArchiveHeader.BetTablePosition != 0) + { + // TODO: Read in BET Table + } + + #endregion + + #region HET Table + + if (archive.ArchiveHeader.HetTablePosition != 0) + { + // TODO: Read in HET Table + } + + #endregion return archive; } @@ -519,7 +561,7 @@ namespace BurnOutSharp.Builder /// /// Stream to parse /// Filled archive on success, null on error - public static Archive ParseCabinet(Stream data) + public static Archive ParseArchive(Stream data) { // If the data is invalid if (data == null) @@ -577,11 +619,53 @@ namespace BurnOutSharp.Builder #endregion - // TODO: Read in Hash Table - // TODO: Read in Block Table - // TODO: Read in Hi-Block Table - // TODO: Read in BET Table - // TODO: Read in HET Table + #region Hash Table + + // If we have a hash table + ulong hashTableOffset = ((uint)archive.ArchiveHeader.HashTablePositionHi << 24) | archive.ArchiveHeader.HashTablePosition; + if (hashTableOffset != 0) + { + // TODO: Read in Hash Table + } + + #endregion + + #region Block Table + + ulong blockTableOffset = ((uint)archive.ArchiveHeader.BlockTablePositionHi << 24) | archive.ArchiveHeader.BlockTablePosition; + if (blockTableOffset != 0) + { + // TODO: Read in Block Table + } + + #endregion + + #region Hi-Block Table + + if (archive.ArchiveHeader.HiBlockTablePosition != 0) + { + // TODO: Read in Hi-Block Table + } + + #endregion + + #region BET Table + + if (archive.ArchiveHeader.BetTablePosition != 0) + { + // TODO: Read in BET Table + } + + #endregion + + #region HET Table + + if (archive.ArchiveHeader.HetTablePosition != 0) + { + // TODO: Read in HET Table + } + + #endregion return archive; }