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; }