/* * public class QFont * { * public uint Width; * public uint Height; * public uint RowCount; * public uint RowHeight; * public CharInfo[] FontInfo; //Size = 256 * public byte[] data; //Size = 4 * }*/ /// <summary> /// Load and read WAD3 file. /// </summary> /// <param name="inputFile">Input file.</param> /// <exception cref="HLToolsUnsupportedFile"></exception> public void LoadFile(string inputFile) { Filename = inputFile; //Reset previous loaded data LumpsInfo.Clear(); Close(); fs = new FileStream(inputFile, FileMode.Open, FileAccess.ReadWrite, FileShare.Read); binReader = new BinaryReader(fs); //First try get header ID header = new WADHeader { Id = binReader.ReadChars(4) }; string magic = new string(header.Id); if (magic != System.Text.Encoding.ASCII.GetString(WadHeaderId)) //if invalid WAD file { Close(); throw new HLToolsUnsupportedFile("Invalid or unsupported WAD File!"); } header.LumpCount = binReader.ReadUInt32(); header.LumpOffset = binReader.ReadUInt32(); //Load all lumps info LoadLumpsInfo(); }
/// <summary> /// Load basic lumps data. /// </summary> private void LoadLumpsInfo() { //Seek to first lump binReader.BaseStream.Seek(header.LumpOffset, SeekOrigin.Begin); //Iterate all lumps, insert every lump to array for (int i = 0; i < header.LumpCount; i++) { WADLump lump = new WADLump(); lump.Offset = binReader.ReadUInt32(); lump.CompressedLength = binReader.ReadUInt32(); lump.FullLength = binReader.ReadUInt32(); lump.Type = binReader.ReadByte(); lump.Compression = binReader.ReadByte(); //Padding, 2-bytes binReader.BaseStream.Seek(2, SeekOrigin.Current); lump.Name = GetNullTerminatedString(binReader.ReadChars(MaxNameLength)); LumpsInfo.Add(lump); } }