Example #1
0
 public WadImageStream(WadEntry entry, Stream stream)
 {
     _entry = entry;
     using (var br = new BinaryReader(stream))
     {
         PrepareData(br);
     }
 }
Example #2
0
 public WadImageStream(WadEntry entry, WadPackage package)
 {
     _entry = entry;
     using (var br = new BinaryReader(package.OpenFile(package.PackageFile)))
     {
         br.BaseStream.Position = entry.Offset;
         PrepareData(br);
     }
 }
Example #3
0
        private void SetEntryData(WadEntry e, BinaryReader br)
        {
            uint width, height, paletteSize;
            long textureDataOffset, paletteDataOffset;

            switch (e.Type)
            {
            case WadEntryType.Image:
                width                   = br.ReadUInt32();
                height                  = br.ReadUInt32();
                textureDataOffset       = br.BaseStream.Position;
                br.BaseStream.Position += width * height;     // Skip texture data
                paletteSize             = br.ReadUInt16();
                paletteDataOffset       = br.BaseStream.Position;
                break;

            case WadEntryType.Texture:
                br.BaseStream.Position += 16;     // Skip name
                width             = br.ReadUInt32();
                height            = br.ReadUInt32();
                textureDataOffset = br.BaseStream.Position + 16;
                var num         = (int)(width * height);
                var skipMapData = (num / 4) + (num / 16) + (num / 64);
                br.BaseStream.Position += 16 + num + skipMapData;     // Skip mipmap offsets, texture data, mipmap texture data
                paletteSize             = br.ReadUInt16();
                paletteDataOffset       = br.BaseStream.Position;
                break;

            /*
             * case WadEntryType.Font:
             * width = br.ReadUInt32();
             * height = br.ReadUInt32();
             * textureDataOffset = br.BaseStream.Position + 8 + (256 * 4);
             * br.BaseStream.Position += 8 + (256 * 4) + (width * height); // Skip font data, texture data
             * paletteSize = br.ReadUInt16();
             * paletteDataOffset = br.BaseStream.Position;
             * break;*/
            default:
                throw new ArgumentOutOfRangeException();
            }
            e.Width             = width;
            e.Height            = height;
            e.PaletteSize       = paletteSize;
            e.TextureDataOffset = textureDataOffset;
            e.PaletteDataOffset = paletteDataOffset;
        }