public byte[] decompress(byte[] data) throws IOException { return decompress(data, null); }
public void load() throws IOException { Storage storage = store.getStorage(); Index index = store.getIndex(IndexType.SPRITES); for (Archive a : index.getArchives()) { byte[] contents = a.decompress(storage.loadArchive(a)); SpriteLoader loader = new SpriteLoader(); SpriteDefinition[] defs = loader.load(a.getArchiveId(), contents); for (SpriteDefinition sprite : defs) { sprites.put(sprite.getId(), sprite); } } }
public ArchiveFiles getFiles(byte[] data, int[] keys) throws IOException { byte[] decompressedData = decompress(data, keys); ArchiveFiles files = new ArchiveFiles(); for (FileData fileEntry : fileData) { FSFile file = new FSFile(fileEntry.getId()); file.setNameHash(fileEntry.getNameHash()); files.addFile(file); } files.loadContents(decompressedData); return files; }
byte[] data = map.decompress(storage.loadArchive(map)); data = land.decompress(storage.loadArchive(land), keys); LocationsDefinition locDef = new LocationsLoader().load(x, y, data); region.loadLocations(locDef);
@Test public void extract() throws IOException { File base = StoreLocation.LOCATION, outFile = folder.newFolder(); try (Store store = new Store(base)) { store.load(); Storage storage = store.getStorage(); Index index = store.getIndex(IndexType.BINARY); Archive archive = index.findArchiveByName("title.jpg"); byte[] contents = archive.decompress(storage.loadArchive(archive)); Files.write(outFile.toPath(), contents); } logger.info("Dumped to {}", outFile); } }
private void loadSprites() throws IOException { Storage storage = store.getStorage(); Index index = store.getIndex(IndexType.SPRITES); final int mapsceneHash = Djb2.hash("mapscene"); for (Archive a : index.getArchives()) { byte[] contents = a.decompress(storage.loadArchive(a)); SpriteLoader loader = new SpriteLoader(); SpriteDefinition[] sprites = loader.load(a.getArchiveId(), contents); for (SpriteDefinition sprite : sprites) { if (sprite.getHeight() <= 0 || sprite.getWidth() <= 0) { continue; } if (a.getNameHash() == mapsceneHash) { BufferedImage spriteImage = new BufferedImage(sprite.getWidth(), sprite.getHeight(), BufferedImage.TYPE_INT_ARGB); spriteImage.setRGB(0, 0, sprite.getWidth(), sprite.getHeight(), sprite.getPixels(), 0, sprite.getWidth()); // scale image down so it fits Image scaledImage = spriteImage.getScaledInstance(MAPICON_MAX_WIDTH, MAPICON_MAX_HEIGHT, 0); assert scaledMapIcons.containsKey(sprite.getFrame()) == false; scaledMapIcons.put(sprite.getFrame(), scaledImage); } } } }
@Test public void test() throws IOException { File dumpDir = folder.newFolder(); int count = 0; try (Store store = new Store(StoreLocation.LOCATION)) { store.load(); Storage storage = store.getStorage(); Index index = store.getIndex(IndexType.SOUNDEFFECTS); for (Archive archive : index.getArchives()) { byte[] contents = archive.decompress(storage.loadArchive(archive)); SoundEffectLoader soundEffectLoader = new SoundEffectLoader(); SoundEffectDefinition soundEffect = soundEffectLoader.load(contents); Files.write(gson.toJson(soundEffect), new File(dumpDir, archive.getArchiveId() + ".json"), Charset.defaultCharset()); ++count; } } logger.info("Dumped {} sound effects to {}", count, dumpDir); } }
byte[] contents = archive.decompress(archiveData);
private void dumpTrackArchive(File dumpDir, Storage storage, Archive archive) throws IOException { byte[] contents = archive.decompress(storage.loadArchive(archive)); if (contents == null) { return; } TrackLoader loader = new TrackLoader(); TrackDefinition def = loader.load(contents); String name; if (archive.getNameHash() != 0) { name = djb2.getName(archive.getNameHash()); if (name == null) { name = "name-" + archive.getNameHash(); } } else { name = "archive-" + archive.getArchiveId(); } File dest = new File(dumpDir, name + ".midi"); assert !dest.exists(); Files.write(def.midi, dest); }
byte[] data = map.decompress(storage.loadArchive(map)); data = land.decompress(storage.loadArchive(land), keys);
@Override public ModelDefinition provide(int modelId) throws IOException { Index models = store.getIndex(IndexType.MODELS); Archive archive = models.getArchive(modelId); byte[] data = archive.decompress(store.getStorage().loadArchive(archive)); ModelDefinition inventoryModel = new ModelLoader().load(modelId, data); return inventoryModel; } };
@Test public void test() throws IOException { File modelDir = folder.newFolder("models"); int count = 0; try (Store store = new Store(StoreLocation.LOCATION)) { store.load(); Storage storage = store.getStorage(); Index index = store.getIndex(IndexType.MODELS); for (Archive archive : index.getArchives()) { byte[] contents = archive.decompress(storage.loadArchive(archive)); ModelLoader loader = new ModelLoader(); loader.load(archive.getArchiveId(), contents); Files.write(contents, new File(modelDir, archive.getArchiveId() + ".model")); ++count; } } logger.info("Dumped {} models to {}", count, modelDir); } }
byte[] contents = archive.decompress(storage.loadArchive(archive));
byte[] data = map.decompress(storage.loadArchive(map)); MapDefinition mapDef = new MapLoader().load(x, y, data); LocationsDefinition locDef = null; data = land.decompress(storage.loadArchive(land), keys);
byte[] framemapContents = framemapArchive.decompress(archiveData);
byte[] data = archive2_1.decompress(comprsesedData); assertArrayEquals("test".getBytes(), data); assertEquals(archive.getCrc(), archive2_1.getCrc()); data = archive2_2.decompress(comprsesedData); assertArrayEquals("test".getBytes(), data); assertEquals(archive2.getCrc(), archive2_2.getCrc());
byte[] data = archive2_1.decompress(comprsesedData); assertArrayEquals("test".getBytes(), data); assertEquals(archive.getCrc(), archive2_1.getCrc()); data = archive2_2.decompress(comprsesedData); assertArrayEquals("test".getBytes(), data); assertEquals(archive2.getCrc(), archive2_2.getCrc());