public void Read(Stream ins, String PackName) { if (ins.ReadByte() != (byte)'R') { return; } if (ins.ReadByte() != (byte)'B') { return; } if (ins.ReadByte() != (byte)'S') { return; } if (ins.ReadByte() != (byte)'P') { return; } int nSprites = ReadWord(ins); ReadDword(ins); ReadDword(ins); int firstSprite = Sprites.Count; // read header for (int i = 0; i < nSprites; i++) { Sprite sp = new Sprite(); sp.Width = ReadWord(ins); sp.Height = ReadWord(ins); sp.ClrFormat = (ColorFormat)ReadWord(ins); sp.Frame.x = ReadWord(ins); sp.Frame.y = ReadWord(ins); sp.Frame.w = ReadWord(ins); sp.Frame.h = ReadWord(ins); sp.Name = PackName + i; int bFiltered = ReadWord(ins); if (bFiltered == 1) { sp.Filtered = true; } else { sp.Filtered = false; } int nRects = ReadWord(ins); sp.PivotX = (short)ReadWord(ins); sp.PivotY = (short)ReadWord(ins); sp.ShiftX = (short)ReadWord(ins); sp.ShiftY = (short)ReadWord(ins); for (int j = 0; j < nRects; j++) { Frame rc = new Frame(); rc.x = ReadWord(ins); rc.y = ReadWord(ins); rc.w = ReadWord(ins); rc.h = rc.w; ReadWord(ins); sp.Partition.Rects.Add(rc); } Sprites.Add(sp); } // read pixels for (int i = firstSprite; i < Sprites.Count; i++) { Sprite sprite = (Sprite)Sprites[i]; int nBytes = sprite.GetNumBytes(); sprite.Bytes = new byte[nBytes]; ins.Read(sprite.Bytes, 0, nBytes); } }