More cleanup. Also dump more than one image if more than one exists.

This commit is contained in:
Adam
2015-11-13 16:55:28 -05:00
parent abb7d699b7
commit e30b69d190
3 changed files with 182 additions and 1582 deletions

View File

@@ -1,141 +1,102 @@
package net.runelite.cache.definitions.loaders; package net.runelite.cache.definitions.loaders;
import java.util.HashSet;
import java.util.List;
import net.runelite.cache.definitions.SpriteDefinition; import net.runelite.cache.definitions.SpriteDefinition;
import net.runelite.cache.io.InputStream; import net.runelite.cache.io.InputStream;
public class SpriteLoader public class SpriteLoader
{ {
private SpriteDefinition[] sprites; private SpriteDefinition[] sprites;
//private List<SpriteDefinition> sprites = new HashSet<>();
// public int paletteChildCount;
// public int[] loadedSpriteOffsetX;
// public int[] loadedSpriteOffsetY;
// public int[] loadedSpriteWidth;
// public int[] loadedSpriteHeight;
// public byte[][] loadedSpritePixels;
public int[] loadedPalette;
public int loadedSpriteMaxWidth;
public int loadedSpriteMaxHeight;
//@Override private int[] loadedPalette;
public void decode(InputStream stream) private int loadedSpriteMaxWidth;
{ private int loadedSpriteMaxHeight;
stream.setOffset(stream.getLength() - 2);
int paletteChildCount = stream.readUnsignedShort();
sprites = new SpriteDefinition[paletteChildCount];
for (int i = 0; i < paletteChildCount; ++i)
sprites[i] = new SpriteDefinition(this);
//loadedSpriteOffsetX = new int[paletteChildCount ];
//loadedSpriteOffsetY = new int[paletteChildCount];
//loadedSpriteWidth = new int[paletteChildCount];
//loadedSpriteHeight = new int[paletteChildCount];
//loadedSpritePixels = new byte[paletteChildCount][];
stream.setOffset(stream.getLength() - 7 - paletteChildCount * 8);
loadedSpriteMaxWidth = stream.readUnsignedShort();
loadedSpriteMaxHeight = stream.readUnsignedShort();
int var3 = (stream.readUnsignedByte() & 255) + 1;
int spriteIndex; public void decode(InputStream stream)
for(spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex) { {
sprites[spriteIndex].setOffsetX(stream.readUnsignedShort()); stream.setOffset(stream.getLength() - 2);
} int paletteChildCount = stream.readUnsignedShort();
sprites = new SpriteDefinition[paletteChildCount];
for (int i = 0; i < paletteChildCount; ++i)
{
sprites[i] = new SpriteDefinition(this);
}
stream.setOffset(stream.getLength() - 7 - paletteChildCount * 8);
loadedSpriteMaxWidth = stream.readUnsignedShort();
loadedSpriteMaxHeight = stream.readUnsignedShort();
int var3 = (stream.readUnsignedByte() & 255) + 1;
for(spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex) { int spriteIndex;
sprites[spriteIndex].setOffsetY(stream.readUnsignedShort()); for (spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex)
} {
sprites[spriteIndex].setOffsetX(stream.readUnsignedShort());
}
for(spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex) { for (spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex)
sprites[spriteIndex].setWidth(stream.readUnsignedShort()); {
} sprites[spriteIndex].setOffsetY(stream.readUnsignedShort());
}
for(spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex) { for (spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex)
sprites[spriteIndex].setHeight(stream.readUnsignedShort()); {
} sprites[spriteIndex].setWidth(stream.readUnsignedShort());
}
stream.setOffset(stream.getLength() - 7 - paletteChildCount * 8 - (var3 - 1) * 3); for (spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex)
loadedPalette = new int[var3]; {
sprites[spriteIndex].setHeight(stream.readUnsignedShort());
}
for(spriteIndex = 1; spriteIndex < var3; ++spriteIndex) { stream.setOffset(stream.getLength() - 7 - paletteChildCount * 8 - (var3 - 1) * 3);
loadedPalette[spriteIndex] = stream.read24BitInt(); loadedPalette = new int[var3];
if(0 == loadedPalette[spriteIndex]) {
loadedPalette[spriteIndex] = 1;
}
}
stream.setOffset(0); for (spriteIndex = 1; spriteIndex < var3; ++spriteIndex)
{
loadedPalette[spriteIndex] = stream.read24BitInt();
if (0 == loadedPalette[spriteIndex])
{
loadedPalette[spriteIndex] = 1;
}
}
for(spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex) { stream.setOffset(0);
SpriteDefinition def = sprites[spriteIndex];
int width = def.getWidth();
int height = def.getHeight();
int dimmension = width * height;
byte[] loadPixels = new byte[dimmension];
//loadedSpritePixels[spriteIndex] = loadPixels;
int var4 = stream.readUnsignedByte();
int var5;
if(var4 == 0) {
for(var5 = 0; var5 < dimmension; ++var5) {
loadPixels[var5] = (byte)stream.readByte();
}
} else if(1 == var4) {
for(var5 = 0; var5 < width; ++var5) {
for(int var8 = 0; var8 < height; ++var8) {
loadPixels[width * var8 + var5] = (byte)stream.readByte();
}
}
}
def.setPixels(loadPixels);
}
}
// public static SpriteDefinition getLastLoadedPaletteSprite() { for (spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex)
// SpriteDefinition paletteSprite = new SpriteDefinition(0); {
// paletteSprite.maxWidth = loadedSpriteMaxWidth; SpriteDefinition def = sprites[spriteIndex];
// paletteSprite.maxHeight = loadedSpriteMaxHeight; int width = def.getWidth();
// paletteSprite.offsetX = loadedSpriteOffsetX[0]; int height = def.getHeight();
// paletteSprite.offsetY = loadedSpriteOffsetY[0]; int dimmension = width * height;
// paletteSprite.width = loadedSpriteWidth[0]; byte[] loadPixels = new byte[dimmension];
// paletteSprite.height = loadedSpriteHeight[0]; int var4 = stream.readUnsignedByte();
// paletteSprite.palette = loadedPalette; int var5;
// paletteSprite.pixels = loadedSpritePixels[0]; if (var4 == 0)
// resetLastPaletteValues(); {
// return paletteSprite; for (var5 = 0; var5 < dimmension; ++var5)
// } {
// loadPixels[var5] = (byte) stream.readByte();
// public static void resetLastPaletteValues() { }
// loadedSpriteOffsetX = null; }
// loadedSpriteOffsetY = null; else if (1 == var4)
// loadedSpriteWidth = null; {
// loadedSpriteHeight = null; for (var5 = 0; var5 < width; ++var5)
// loadedPalette = null; {
// loadedSpritePixels = null; for (int var8 = 0; var8 < height; ++var8)
// } {
// loadPixels[width * var8 + var5] = (byte) stream.readByte();
// public static SpriteDefinition[] loadPaletteSpriteSet() { }
// SpriteDefinition[] palettes = new SpriteDefinition[paletteChildCount]; }
// for (int paletteIndex = 0; paletteIndex < paletteChildCount; ++paletteIndex) { }
// SpriteDefinition palette = palettes[paletteIndex] = new SpriteDefinition(0); def.setPixels(loadPixels);
// palette.maxWidth = loadedSpriteMaxWidth; }
// palette.maxHeight = loadedSpriteMaxHeight; }
// palette.offsetX = loadedSpriteOffsetX[paletteIndex];
// palette.offsetY = loadedSpriteOffsetY[paletteIndex];
// palette.width = loadedSpriteWidth[paletteIndex];
// palette.height = loadedSpriteHeight[paletteIndex];
// palette.palette = loadedPalette;
// palette.pixels = loadedSpritePixels[paletteIndex];
// }
//
// resetLastPaletteValues();
// return palettes;
// }
public SpriteDefinition[] getSprites() public SpriteDefinition[] getSprites()
{ {
return sprites; return sprites;
} }
public int[] getLoadedPalette()
{
return loadedPalette;
}
} }

File diff suppressed because it is too large Load Diff

View File

@@ -42,23 +42,20 @@ public class SpriteLoaderTest
loader.decode(new InputStream(contents)); loader.decode(new InputStream(contents));
SpriteDefinition[] defs = loader.getSprites(); SpriteDefinition[] defs = loader.getSprites();
// Assert.assertEquals(1, defs.length);
//SpriteDefinition def = new SpriteDefinition(42);
//def.decode(new InputStream(contents));
RGBSprite sp = RGBSprite.fromSpriteDefinition(defs[0]); for (int i = 0; i < defs.length; ++i)
{
// I don't know why this happens RGBSprite sp = RGBSprite.fromSpriteDefinition(defs[i]);
if (sp.spriteHeight <= 0 || sp.spriteWidth <= 0)
continue; // I don't know why this happens
if (sp.getSpriteHeight() <= 0 || sp.getSpriteWidth() <= 0)
BufferedImage image = sp.getBufferedImage(); continue;
java.io.File targ = new java.io.File(base, "sprites/" + a.getArchiveId() + ".png");
targ.mkdirs(); BufferedImage image = sp.getBufferedImage();
ImageIO.write(image, "png", targ); java.io.File targ = new java.io.File(base, "sprites/" + a.getArchiveId() + "-" + i + ".png");
//SpriteDefinition spr[] = SpriteDefinition.loadPaletteSpriteSet(); targ.mkdirs();
int i =5; ImageIO.write(image, "png", targ);
//break; }
} }
} }
} }