br.printf("named=%b\n", idx.getCompression()); idx.getArchives().sort(Comparator.comparing(Archive::getArchiveId)); for (Archive archive : idx.getArchives())
public void load() throws IOException { InterfaceLoader loader = new InterfaceLoader(); Storage storage = store.getStorage(); Index index = store.getIndex(IndexType.INTERFACES); int max = index.getArchives().stream().mapToInt(a -> a.getArchiveId()).max().getAsInt(); interfaces = new InterfaceDefinition[max + 1][]; for (Archive archive : index.getArchives()) { int archiveId = archive.getArchiveId(); byte[] archiveData = storage.loadArchive(archive); ArchiveFiles files = archive.getFiles(archiveData); InterfaceDefinition[] ifaces = interfaces[archiveId]; if (ifaces == null) { ifaces = interfaces[archiveId] = new InterfaceDefinition[archive.getFileData().length]; } for (FSFile file : files.getFiles()) { int fileId = file.getFileId(); int widgetId = (archiveId << 16) + fileId; InterfaceDefinition iface = loader.load(widgetId, file.getContents()); ifaces[fileId] = iface; } } }
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); } } }
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); } }
Index index = store.getIndex(IndexType.FRAMEMAPS); for (Archive archive : index.getArchives())
@Test public void test() throws IOException { File dumpDir1 = folder.newFolder(), dumpDir2 = folder.newFolder(); int idx1 = 0, idx2 = 0; djb2.load(); try (Store store = new Store(StoreLocation.LOCATION)) { store.load(); Storage storage = store.getStorage(); Index index = store.getIndex(IndexType.TRACK1); Index index2 = store.getIndex(IndexType.TRACK2); for (Archive archive : index.getArchives()) { dumpTrackArchive(dumpDir1, storage, archive); ++idx1; } for (Archive archive : index2.getArchives()) { dumpTrackArchive(dumpDir2, storage, archive); ++idx2; } } logger.info("Dumped {} sound tracks ({} idx1, {} idx2) to {} and {}", idx1 + idx2, idx1, idx2, dumpDir1, dumpDir2); }
Index framemapIndex = store.getIndex(IndexType.FRAMEMAPS); for (Archive archive : frameIndex.getArchives()) Archive framemapArchive = framemapIndex.getArchives().get(framemapArchiveId); archiveData = storage.loadArchive(framemapArchive); byte[] framemapContents = framemapArchive.decompress(archiveData);
@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); } }
ScriptLoader loader = new ScriptLoader(); for (Archive archive : index.getArchives())
@Override public void save(Store store) throws IOException { for (Index index : store.getIndexes()) { IndexEntry entry = cacheDao.createIndex(con, cacheEntry, index.getId(), index.getCrc(), index.getRevision()); for (Archive archive : index.getArchives()) { ArchiveEntry archiveEntry = cacheDao.findArchive(con, entry, archive.getArchiveId(), archive.getNameHash(), archive.getCrc(), archive.getRevision()); if (archiveEntry == null) { byte[] hash = archive.getHash(); archiveEntry = cacheDao.createArchive(con, entry, archive.getArchiveId(), archive.getNameHash(), archive.getCrc(), archive.getRevision(), hash); for (FileData file : archive.getFileData()) { cacheDao.associateFileToArchive(con, archiveEntry, file.getId(), file.getNameHash()); } } cacheDao.associateArchiveToIndex(con, archiveEntry, entry); } } }