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() {
// SpriteDefinition paletteSprite = new SpriteDefinition(0);
// paletteSprite.maxWidth = loadedSpriteMaxWidth;
// paletteSprite.maxHeight = loadedSpriteMaxHeight;
// paletteSprite.offsetX = loadedSpriteOffsetX[0];
// paletteSprite.offsetY = loadedSpriteOffsetY[0];
// paletteSprite.width = loadedSpriteWidth[0];
// paletteSprite.height = loadedSpriteHeight[0];
// paletteSprite.palette = loadedPalette;
// paletteSprite.pixels = loadedSpritePixels[0];
// resetLastPaletteValues();
// return paletteSprite;
// }
//
// public static void resetLastPaletteValues() {
// loadedSpriteOffsetX = null;
// loadedSpriteOffsetY = null;
// loadedSpriteWidth = null;
// loadedSpriteHeight = null;
// loadedPalette = null;
// loadedSpritePixels = null;
// }
//
// public static SpriteDefinition[] loadPaletteSpriteSet() {
// SpriteDefinition[] palettes = new SpriteDefinition[paletteChildCount];
// for (int paletteIndex = 0; paletteIndex < paletteChildCount; ++paletteIndex) {
// SpriteDefinition palette = palettes[paletteIndex] = new SpriteDefinition(0);
// 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;
// }
for (spriteIndex = 0; spriteIndex < paletteChildCount; ++spriteIndex)
{
SpriteDefinition def = sprites[spriteIndex];
int width = def.getWidth();
int height = def.getHeight();
int dimmension = width * height;
byte[] loadPixels = new byte[dimmension];
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 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)
{
RGBSprite sp = RGBSprite.fromSpriteDefinition(defs[i]);
// I don't know why this happens // I don't know why this happens
if (sp.spriteHeight <= 0 || sp.spriteWidth <= 0) if (sp.getSpriteHeight() <= 0 || sp.getSpriteWidth() <= 0)
continue; continue;
BufferedImage image = sp.getBufferedImage(); BufferedImage image = sp.getBufferedImage();
java.io.File targ = new java.io.File(base, "sprites/" + a.getArchiveId() + ".png"); java.io.File targ = new java.io.File(base, "sprites/" + a.getArchiveId() + "-" + i + ".png");
targ.mkdirs(); targ.mkdirs();
ImageIO.write(image, "png", targ); ImageIO.write(image, "png", targ);
//SpriteDefinition spr[] = SpriteDefinition.loadPaletteSpriteSet(); }
int i =5;
//break;
} }
} }
} }