Beispiel #1
0
 public WZIMGFile(File wzfile, WZFileEntry file, boolean provideImages, boolean modernImg)
     throws IOException {
   RandomAccessFile raf = new RandomAccessFile(wzfile, "r");
   SeekableLittleEndianAccessor slea =
       new GenericSeekableLittleEndianAccessor(new RandomAccessByteStream(raf));
   slea.seek(file.getOffset());
   this.file = file;
   this.provideImages = provideImages;
   root = new WZIMGEntry(file.getParent());
   root.setName(file.getName());
   root.setType(MapleDataType.EXTENDED);
   this.modernImg = modernImg;
   parseExtended(root, slea, 0);
   root.finish();
   raf.close();
 }
Beispiel #2
0
 private void parse(WZIMGEntry entry, SeekableLittleEndianAccessor slea) {
   byte marker = slea.readByte();
   switch (marker) {
     case 0:
       {
         String name = WZTool.readDecodedString(slea);
         entry.setName(name);
         break;
       }
     case 1:
       {
         String name =
             WZTool.readDecodedStringAtOffsetAndReset(slea, file.getOffset() + slea.readInt());
         entry.setName(name);
         break;
       }
     default:
       System.out.println(
           "Unknown Image identifier: "
               + marker
               + " at offset "
               + (slea.getPosition() - file.getOffset()));
   }
   marker = slea.readByte();
   switch (marker) {
     case 0:
       entry.setType(MapleDataType.IMG_0x00);
       break;
     case 2:
     case 11: // ??? no idea, since 0.49
       entry.setType(MapleDataType.SHORT);
       entry.setData(Short.valueOf(slea.readShort()));
       break;
     case 3:
       entry.setType(MapleDataType.INT);
       entry.setData(Integer.valueOf(WZTool.readValue(slea)));
       break;
     case 4:
       entry.setType(MapleDataType.FLOAT);
       entry.setData(Float.valueOf(WZTool.readFloatValue(slea)));
       break;
     case 5:
       entry.setType(MapleDataType.DOUBLE);
       entry.setData(Double.valueOf(slea.readDouble()));
       break;
     case 8:
       entry.setType(MapleDataType.STRING);
       byte iMarker = slea.readByte();
       if (iMarker == 0) {
         entry.setData(WZTool.readDecodedString(slea));
       } else if (iMarker == 1) {
         entry.setData(
             WZTool.readDecodedStringAtOffsetAndReset(slea, slea.readInt() + file.getOffset()));
       } else {
         System.out.println("Unknown String type " + iMarker);
       }
       break;
     case 9:
       entry.setType(MapleDataType.EXTENDED);
       long endOfExtendedBlock = slea.readInt();
       endOfExtendedBlock += slea.getPosition();
       parseExtended(entry, slea, endOfExtendedBlock);
       break;
     default:
       System.out.println("Unknown Image type " + marker);
   }
 }