private void Read(FileReader reader) { if (reader.ReadString(4) != "SAHT") { throw new Exception("Wrong magic"); } uint FileSize = reader.ReadUInt32(); uint Offset = reader.ReadUInt32(); if (Offset != 0x10) //EFE uses big endian. WT uses little. { Offset = 0x10; reader.SetByteOrder(true); } uint EntryCount = reader.ReadUInt32(); Console.WriteLine($"FileSize {FileSize} Offset {Offset} EntryCount {EntryCount}"); reader.SeekBegin(Offset); for (int i = 0; i < EntryCount; i++) { HashEntry entry = new HashEntry(); entry.Read(reader); reader.Align(16); if (EntryCount == 4) { Console.WriteLine($"{entry.Name} {entry.Hash} {EntryCount}"); } HashEntries.Add(entry.Hash, entry.Name); } }
private void Read(FileReader reader) { reader.ReadSignature(4, "SAHT"); uint FileSize = reader.ReadUInt32(); uint Offset = reader.ReadUInt32(); uint EntryCount = reader.ReadUInt32(); reader.Seek(Offset, System.IO.SeekOrigin.Begin); for (int i = 0; i < EntryCount; i++) { HashEntry entry = new HashEntry(); entry.Read(reader); reader.Align(16); HashEntries.Add(entry); } ToTextFile(); }