public static NSMBView read(ArrayReader inp, ArrayReader cam)
    {
        NSMBView v = new NSMBView();

        v.X = inp.readShort();
        v.Y = inp.readShort();
        v.Width = inp.readShort();
        v.Height = inp.readShort();
        v.Number = inp.readByte();
        int camID = inp.readByte();
        v.Music = inp.readByte();
        v.Unknown1 = inp.readByte();
        v.Unknown2 = inp.readByte();
        v.Unknown3 = inp.readByte();
        v.Lighting = inp.readByte();
        v.FlagpoleID = inp.readByte();

        cam.seek(0);
        int camCount = (int) cam.available() / 24;
//            Console.Out.WriteLine("CamCount: " + camCount);
        int goodCam = -1;
        for (int i = 0; i < camCount; i++)
        {
            cam.seek(i * 24 + 16);
            int thisCam = cam.readShort();
//                Console.Out.WriteLine("Cam ID: " + thisCam);
            if (thisCam == camID)
            {
                goodCam = i;
                break;
            }
        }

        if (goodCam != -1)
        {
            cam.seek(goodCam * 24);
            v.CameraTop = cam.readInt();
            v.CameraBottom = cam.readInt();
            v.CameraTopSpin = cam.readInt();
            v.CameraBottomSpin = cam.readInt();
            cam.skip(2);
            v.CameraBottomStick = cam.readShort();
        }
        return v;
    }