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(); }
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); } }