public virtual void Load(Stream stream) { var reader = new DataReader(stream); reader.Position = 0; // read the header var ident = reader.ReadUInt32(); var flags = reader.ReadUInt32(); uint virtualPageFlags = reader.ReadUInt32(); uint physicalPageFlags = reader.ReadUInt32(); ResourceFileHeader = new DatResourceFileHeader(ident, flags, virtualPageFlags, physicalPageFlags); Version = (int)ResourceFileHeader.Flags & 0xFF; var virtualSize = ((ResourceChunkFlags)virtualPageFlags).Size; var physicalSize = ((ResourceChunkFlags)physicalPageFlags).Size; VirtualData = new byte[virtualSize]; PhysicalData = new byte[physicalSize]; var deflateStream = new DeflateStream(stream, CompressionMode.Decompress, true); deflateStream.Read(VirtualData, 0, (int)virtualSize); deflateStream.Read(PhysicalData, 0, (int)physicalSize); deflateStream.Close(); }
public virtual void Load(Stream stream) { var reader = new DataReader(stream); reader.Position = 0; // read the header var ident = reader.ReadUInt32(); var flags = reader.ReadUInt32(); uint virtualPageFlags = reader.ReadUInt32(); uint physicalPageFlags = reader.ReadUInt32(); ResourceFileHeader = new DatResourceFileHeader() { Id = ident, Flags = flags, ResourceInfo = new DatResourceInfo() { VirtualFlags = virtualPageFlags, PhysicalFlags = physicalPageFlags }, }; Version = (int)ResourceFileHeader.Flags & 0xFF; if (((ResourceFileHeader.Flags >> 24) & 1) != 1 || ((ResourceFileHeader.Flags >> 8 & 0xF)) != 0) { throw new Exception("oodle compression isn't supported!"); } var virtualSize = virtualPageFlags & 0x7FFFFFF0; var physicalSize = physicalPageFlags & 0x7FFFFFF0; VirtualData = new byte[virtualSize]; PhysicalData = new byte[physicalSize]; var deflateStream = new DeflateStream(stream, CompressionMode.Decompress, true); deflateStream.Read(VirtualData, 0, (int)virtualSize); deflateStream.Read(PhysicalData, 0, (int)physicalSize); deflateStream.Close(); }