package net.scapeemulator.game.tools; import java.io.File; import javax.imageio.ImageIO; import net.scapeemulator.cache.Cache; import net.scapeemulator.cache.Container; import net.scapeemulator.cache.FileStore; import net.scapeemulator.cache.ReferenceTable; import net.scapeemulator.cache.def.Sprite; public class TextureDumper { public static void main(String[] args) throws Exception { Cache cache = new Cache(FileStore.open("data/game/cache")); int count = 0; Container tableContainer = Container.decode(cache.getStore().read(255, 8)); ReferenceTable table = ReferenceTable.decode(tableContainer.getData()); int files = table.capacity(); Sprite[] definitions = new Sprite[files]; for (int file = 0; file < files; file++) { ReferenceTable.Entry entry = table.getEntry(file); if (entry == null) { System.out.println("NULL ENTRY"); continue; } for (int member = 0; member < entry.capacity(); member++) { ReferenceTable.ChildEntry childEntry = entry.getEntry(member); if (childEntry == null) { continue; } if(member != 0) definitions[file] = Sprite.decode(cache.read(8, file, member, false)); count++; break; } } System.out.println("Loaded " + count + " sprites. Dumping..."); try { for (int i = 0; i < definitions.length; i++) { Sprite sprite = definitions[i]; if (sprite == null) { continue; } for (int idx = 0; idx < sprite.size(); idx++) { File outputFile = new File("data/game/dumps/sprites/gif/" + i + "_" + idx + ".gif"); ImageIO.write(sprite.getFrame(idx), "gif", outputFile); } } } catch (Exception e) { e.printStackTrace(); } cache.close(); System.out.println("Successfully dumped sprites."); } }