public Resource Read()
{
using (this.reader = new BinaryReader(stream))
{
LSBHeader header;
header.signature = reader.ReadUInt32();
if (header.signature != LSBHeader.Signature)
throw new InvalidFormatException(String.Format("Illegal signature in header; expected {0}, got {1}", LSBHeader.Signature, header.signature));
header.totalSize = reader.ReadUInt32();
if (stream.Length != header.totalSize)
throw new InvalidFormatException(String.Format("Invalid LSB file size; expected {0}, got {1}", header.totalSize, stream.Length));
header.bigEndian = reader.ReadUInt32();
// The game only uses little-endian files on all platforms currently and big-endian support isn't worth the hassle
if (header.bigEndian != 0)
throw new InvalidFormatException("Big-endian LSB files are not supported");
header.unknown = reader.ReadUInt32();
header.metadata.timestamp = reader.ReadUInt64();
header.metadata.majorVersion = reader.ReadUInt32();
header.metadata.minorVersion = reader.ReadUInt32();
header.metadata.revision = reader.ReadUInt32();
header.metadata.buildNumber = reader.ReadUInt32();
ReadStaticStrings();
Resource rsrc = new Resource();
rsrc.Metadata = header.metadata;
ReadRegions(rsrc);
return rsrc;
}
}