Last active
January 11, 2024 21:56
-
-
Save downthecrop/e6e14cd9e8fc9a0fc932fe695e105fe5 to your computer and use it in GitHub Desktop.
Abstract Sprite dumper Runescape 530 Cache
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.runite.client; | |
import org.rs09.client.Node; | |
import org.rs09.client.rendering.Toolkit; | |
import javax.imageio.ImageIO; | |
import java.awt.*; | |
import java.awt.image.BufferedImage; | |
import java.io.File; | |
import java.io.IOException; | |
import java.util.Objects; | |
public abstract class AbstractSprite extends Node { | |
public int height; | |
int anInt3697; | |
int anInt3698; | |
public static int anInt3699 = 0; | |
int anInt3701; | |
static int anInt3704; | |
int anInt3706; | |
public int width; | |
static RSInterface aClass11_3708 = null; | |
public static AbstractSprite constructItemSprite(int shadows, boolean useHDSprite, int itemID, boolean displayCount, int outlineType, int itemCount, boolean shrinkInSprite) { | |
try { | |
ItemDefinition item = ItemDefinition.getItemDefinition(itemID); | |
if (itemCount > 1 && item.anIntArray804 != null) { | |
int displayItemCount = -1; | |
for (int var10 = 0; var10 < 10; ++var10) { | |
if (item.anIntArray766[var10] <= itemCount && item.anIntArray766[var10] != 0) { | |
displayItemCount = item.anIntArray804[var10]; | |
} | |
} | |
if (displayItemCount != -1) { | |
item = ItemDefinition.getItemDefinition(displayItemCount); | |
} | |
} | |
Class140_Sub1_Sub2 model = item.method1120(); | |
if (null == model) { | |
return null; | |
} else { | |
SoftwareSprite ourSprite = null; | |
if (item.noteable == -1) { | |
System.out.println("Not Notable item "+ item.noteID); | |
System.out.println("DEBUG: "+item.anInt795); | |
if (item.anInt762 != -1) { | |
ourSprite = (SoftwareSprite) constructItemSprite(shadows, true, item.anInt795, false, outlineType, itemCount, false); | |
if (null == ourSprite) { | |
return null; | |
} | |
} | |
} else { | |
if(item.noteID == itemID) | |
ourSprite = (SoftwareSprite) constructItemSprite(0, true, item.noteID, false, 1, 10, true); | |
if (null == ourSprite) { | |
return null; | |
} | |
} | |
int[] var11 = Toolkit.JAVA_TOOLKIT.getBuffer(); | |
int var12 = Toolkit.JAVA_TOOLKIT.width; | |
int var13 = Toolkit.JAVA_TOOLKIT.height; | |
int[] var14 = new int[4]; | |
Class74.method1325(var14); | |
SoftwareSprite softwareSpite = new SoftwareSprite(36, 32); | |
Class74.setBuffer(softwareSpite.anIntArray4081, 36, 32); | |
Class51.method1134(); | |
Class51.method1145(16, 16); | |
int var16 = item.anInt810; | |
Class51.aBoolean843 = false; | |
if (shrinkInSprite) { | |
var16 = (int) ((double) var16 * 1.5D); | |
} else if (outlineType == 2) { | |
var16 = (int) (1.04D * (double) var16); | |
} | |
int var18 = Class51.anIntArray851[item.anInt786] * var16 >> 16; | |
int var17 = Class51.anIntArray840[item.anInt786] * var16 >> 16; | |
model.method1893(item.anInt799, item.anInt768, item.anInt786, item.anInt792, var17 - (model.method1871() / 2 + -item.anInt754), item.anInt754 + var18); | |
if (outlineType >= 1) { | |
softwareSpite.method657(1); | |
if (outlineType >= 2) { | |
softwareSpite.method657(16777215); | |
} | |
Class74.setBuffer(softwareSpite.anIntArray4081, 36, 32); | |
} | |
if (shadows != 0) { | |
softwareSpite.method668(shadows); | |
} | |
if (item.noteable != -1) { | |
Objects.requireNonNull(ourSprite).drawAt(0, 0); | |
} else if (-1 != item.anInt762) { | |
Class74.setBuffer(Objects.requireNonNull(ourSprite).anIntArray4081, 36, 32); | |
softwareSpite.drawAt(0, 0); | |
softwareSpite = ourSprite; | |
} | |
if (displayCount && (item.stackingType == 1 || itemCount != 1) && itemCount != -1) { | |
TextureOperation10.aClass3_Sub28_Sub17_Sub1_3440.method681(Class3_Sub7.itemStackColor(1000, itemCount), 0, 9, 16776960, 1); | |
} | |
// write sprite to file | |
try { | |
BufferedImage bufferedImage = new BufferedImage(32, 36, BufferedImage.TYPE_INT_ARGB); | |
int k = softwareSpite.anIntArray4081.length-1; | |
for (int x = 0; x < bufferedImage.getWidth(); x++) { | |
for (int y = 0; y < bufferedImage.getHeight(); y++) { | |
// Do we have a color set for this pixel? If not just make it transparent. | |
if(softwareSpite.anIntArray4081[k] > 0) { | |
int red = new Color(softwareSpite.anIntArray4081[k]).getRed(); | |
int blue = new Color(softwareSpite.anIntArray4081[k]).getBlue(); | |
int green = new Color(softwareSpite.anIntArray4081[k]).getGreen(); | |
bufferedImage.setRGB(x, y, new Color(red, green, blue, 255).getRGB()); | |
} else { | |
bufferedImage.setRGB(x, y, new Color(0, 0, 0, 0).getRGB()); | |
} | |
k--; | |
} | |
} | |
// Flip horizontal | |
for (int i=0;i<bufferedImage.getWidth();i++){ | |
for (int j=0;j<bufferedImage.getHeight()/2;j++) | |
{ | |
int tmp = bufferedImage.getRGB(i, j); | |
bufferedImage.setRGB(i, j, bufferedImage.getRGB(i, bufferedImage.getHeight()-j-1)); | |
bufferedImage.setRGB(i, bufferedImage.getHeight()-j-1, tmp); | |
} | |
} | |
bufferedImage = rotateClockwise90(bufferedImage); | |
ImageIO.write(bufferedImage, "png", new File("C:\\Users\\Anon\\Desktop\\outputs\\"+itemID+".png")); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
Class74.setBuffer(var11, var12, var13); | |
Class74.setClipping(var14); | |
Class51.method1134(); | |
Class51.aBoolean843 = true; | |
return HDToolKit.highDetail && !useHDSprite ? new HDSprite(softwareSpite) : softwareSpite; | |
} | |
} catch (RuntimeException var20) { | |
throw ClientErrorException.clientError(var20, "na.WA(" + shadows + ',' + useHDSprite + ',' + itemID + ',' + displayCount + ',' + outlineType + ',' + itemCount + ',' + shrinkInSprite + ')'); | |
} | |
} | |
abstract void method635(int var1, int var2); | |
abstract void method636(int var1, int var2, int var3, int var4, int var5, int var6); | |
abstract void method637(int var1, int var2, int var3); | |
public static RSInterface method638(int var1, int var2) { | |
try { | |
RSInterface var3 = Unsorted.getRSInterface(var1); | |
return var2 == -1 ?var3: var3 != null && var3.aClass11Array262 != null && var2 < var3.aClass11Array262.length ?var3.aClass11Array262[var2]:null; | |
} catch (RuntimeException var4) { | |
throw ClientErrorException.clientError(var4, "qf.P(" + (byte) -19 + ',' + var1 + ',' + var2 + ')'); | |
} | |
} | |
public static BufferedImage rotateClockwise90(BufferedImage src) { | |
int w = src.getWidth(); | |
int h = src.getHeight(); | |
BufferedImage dest = new BufferedImage(h, w, src.getType()); | |
for (int y = 0; y < h; y++) | |
for (int x = 0; x < w; x++) | |
dest.setRGB(y, w - x - 1, src.getRGB(x, y)); | |
return dest; | |
} | |
public abstract void method639(int var1, int var2, int var3, int var4); | |
public final void drawScaledOrRotated(int x, int y, int angle, int scale) { | |
try { | |
int var6 = this.anInt3697 << 3; | |
int var7 = this.anInt3706 << 3; | |
scale = (scale << 4) + (var6 & 15); | |
x = (x << 4) + (15 & var7); | |
this.method636(var6, var7, scale, x, y, angle); | |
} catch (RuntimeException var8) { | |
throw ClientErrorException.clientError(var8, "qf.F(" + x + ',' + y + ',' + angle + ',' + scale + ',' + -1470985020 + ')'); | |
} | |
} | |
abstract void method641(int var1, int var2); | |
abstract void method642(int var1, int var2, int var3, int var4, int var5); | |
public abstract void drawAt(int var1, int var2); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment