Ok so this is very strange, i loaded 525 NPCs and the client is working fine for me, and the players even have the exact same copy as i do… however they are getting this crazy bug
Exception in thread "Thread-9" java.lang.OutOfMemoryError: Java heap space
at red.Model.read525Model(Model.java:139)
at red.Model.read622Model(Model.java:396)
at red.Model.<init>(Model.java:353)
at red.Model.method462(Model.java:976)
at red.EntityDef.method164(EntityDef.java:292)
at red.NPC.method450(NPC.java:21)
at red.NPC.getRotatedModel(NPC.java:29)
at red.Animable.method443(Animable.java:10)
at red.WorldController.method314(WorldController.java:1535)
at red.WorldController.method313(WorldController.java:1115)
at red.Client.method146(Client.java:14241)
at red.Client.drawGameScreen(Client.java:9369)
at red.Client.processDrawing(Client.java:10124)
at red.RSApplet.run(RSApplet.java:127)
at red.Client.run(Client.java:5466)
at java.lang.Thread.run(Unknown Source)
Method causing the error for the players.
public void read525Model(byte abyte0[], int modelID) {
Stream nc1 = new Stream(abyte0);
Stream nc2 = new Stream(abyte0);
Stream nc3 = new Stream(abyte0);
Stream nc4 = new Stream(abyte0);
Stream nc5 = new Stream(abyte0);
Stream nc6 = new Stream(abyte0);
Stream nc7 = new Stream(abyte0);
nc1.bufferLocation = abyte0.length - 23;
int numVertices = nc1.readUnsignedWord();
int numTriangles = nc1.readUnsignedWord();
int numTexTriangles = nc1.readUnsignedByte();
Class21 ModelDef_1 = aClass21Array1661[modelID] = new Class21();
ModelDef_1.aByteArray368 = abyte0;
ModelDef_1.anInt369 = numVertices;
ModelDef_1.anInt370 = numTriangles;
ModelDef_1.anInt371 = numTexTriangles;
int l1 = nc1.readUnsignedByte();
boolean bool = (0x1 & l1 ^ 0xffffffff) == -2;
int i2 = nc1.readUnsignedByte();
int j2 = nc1.readUnsignedByte();
int k2 = nc1.readUnsignedByte();
int l2 = nc1.readUnsignedByte();
int i3 = nc1.readUnsignedByte();
int j3 = nc1.readUnsignedWord();
int k3 = nc1.readUnsignedWord();
int l3 = nc1.readUnsignedWord();
int i4 = nc1.readUnsignedWord();
int j4 = nc1.readUnsignedWord();
int k4 = 0;
int l4 = 0;
int i5 = 0;
byte[] x = null;
byte[] O = null;
byte[] J = null;
byte[] F = null;
byte[] cb = null;
byte[] gb = null;
byte[] lb = null;
int[] kb = null;
int[] y = null;
int[] N = null;
short[] D = null;
int[] triangleColours2 = new int[numTriangles];
if (numTexTriangles > 0) {
O = new byte[numTexTriangles];
nc1.bufferLocation = 0;
for (int j5 = 0; j5 < numTexTriangles; j5++) {
byte byte0 = O[j5] = nc1.readSignedByte();
if (byte0 == 0)
k4++;
if (byte0 >= 1 && byte0 <= 3)
l4++;
if (byte0 == 2)
i5++;
}
}
int k5 = numTexTriangles;
int l5 = k5;
k5 += numVertices;
int i6 = k5;
if (l1 == 1)
k5 += numTriangles;
int j6 = k5;
k5 += numTriangles;
int k6 = k5;
if (i2 == 255)
k5 += numTriangles;
int l6 = k5;
if (k2 == 1)
k5 += numTriangles;
int i7 = k5;
if (i3 == 1)
k5 += numVertices;
int j7 = k5;
if (j2 == 1)
k5 += numTriangles;
int k7 = k5;
k5 += i4;
int l7 = k5;
if (l2 == 1)
k5 += numTriangles * 2;
int i8 = k5;
k5 += j4;
int j8 = k5;
k5 += numTriangles * 2;
int k8 = k5;
k5 += j3;
int l8 = k5;
k5 += k3;
int i9 = k5;
k5 += l3;
int j9 = k5;
k5 += k4 * 6;
int k9 = k5;
k5 += l4 * 6;
int l9 = k5;
k5 += l4 * 6;
int i10 = k5;
k5 += l4;
int j10 = k5;
k5 += l4;
int k10 = k5;
k5 += l4 + i5 * 2;
int[] vertexX = new int[numVertices];
int[] vertexY = new int[numVertices];
int[] vertexZ = new int[numVertices];
int[] facePoint1 = new int[numTriangles];
int[] facePoint2 = new int[numTriangles];
int[] facePoint3 = new int[numTriangles];
anIntArray1655 = new int[numVertices];
anIntArray1637 = new int[numTriangles];
anIntArray1638 = new int[numTriangles];
anIntArray1639 = new int[numTriangles];
anIntArray1656 = new int[numTriangles];
if (i3 == 1)
anIntArray1655 = new int[numVertices];
if (bool)
anIntArray1637 = new int[numTriangles];
if (i2 == 255)
anIntArray1638 = new int[numTriangles];
else {
}
if (j2 == 1)
anIntArray1639 = new int[numTriangles];
if (k2 == 1)
anIntArray1656 = new int[numTriangles];
if (l2 == 1)
D = new short[numTriangles];
if (l2 == 1 && numTexTriangles > 0)
x = new byte[numTriangles];
triangleColours2 = new int[numTriangles];
int[] texTrianglesPoint1 = null;
int[] texTrianglesPoint2 = null;
int[] texTrianglesPoint3 = null;
if (numTexTriangles > 0) {
texTrianglesPoint1 = new int[numTexTriangles];
texTrianglesPoint2 = new int[numTexTriangles];
texTrianglesPoint3 = new int[numTexTriangles];
if (l4 > 0) {
kb = new int[l4];
N = new int[l4];
y = new int[l4];
gb = new byte[l4];
lb = new byte[l4];
F = new byte[l4];
}
if (i5 > 0) {
cb = new byte[i5];
J = new byte[i5];
}
}
nc1.bufferLocation = l5;
nc2.bufferLocation = k8;
nc3.bufferLocation = l8;
nc4.bufferLocation = i9;
nc5.bufferLocation = i7;
int l10 = 0;
int i11 = 0;
int j11 = 0;
for (int k11 = 0; k11 < numVertices; k11++) {
int l11 = nc1.readUnsignedByte();
int j12 = 0;
if ((l11 & 1) != 0)
j12 = nc2.method421();
int l12 = 0;
if ((l11 & 2) != 0)
l12 = nc3.method421();
int j13 = 0;
if ((l11 & 4) != 0)
j13 = nc4.method421();
vertexX[k11] = l10 + j12;
vertexY[k11] = i11 + l12;
vertexZ[k11] = j11 + j13;
l10 = vertexX[k11];
i11 = vertexY[k11];
j11 = vertexZ[k11];
if (anIntArray1655 != null)
anIntArray1655[k11] = nc5.readUnsignedByte();
}
nc1.bufferLocation = j8;
nc2.bufferLocation = i6;
nc3.bufferLocation = k6;
nc4.bufferLocation = j7;
nc5.bufferLocation = l6;
nc6.bufferLocation = l7;
nc7.bufferLocation = i8;
for (int i12 = 0; i12 < numTriangles; i12++) {
triangleColours2[i12] = nc1.readUnsignedWord();
if (l1 == 1) {
anIntArray1637[i12] = nc2.readSignedByte();
if (anIntArray1637[i12] == 2)
triangleColours2[i12] = 65535;
anIntArray1637[i12] = 0;
}
if (i2 == 255) {
anIntArray1638[i12] = nc3.readSignedByte();
}
if (j2 == 1) {
anIntArray1639[i12] = nc4.readSignedByte();
if (anIntArray1639[i12] < 0)
anIntArray1639[i12] = (256 + anIntArray1639[i12]);
}
if (k2 == 1)
anIntArray1656[i12] = nc5.readUnsignedByte();
if (l2 == 1)
D[i12] = (short) (nc6.readUnsignedWord() - 1);
if (x != null)
if (D[i12] != -1)
x[i12] = (byte) (nc7.readUnsignedByte() - 1);
else
x[i12] = -1;
}
nc1.bufferLocation = k7;
nc2.bufferLocation = j6;
int k12 = 0;
int i13 = 0;
int k13 = 0;
int l13 = 0;
for (int i14 = 0; i14 < numTriangles; i14++) {
int j14 = nc2.readUnsignedByte();
if (j14 == 1) {
k12 = nc1.method421() + l13;
l13 = k12;
i13 = nc1.method421() + l13;
l13 = i13;
k13 = nc1.method421() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 2) {
i13 = k13;
k13 = nc1.method421() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 3) {
k12 = k13;
k13 = nc1.method421() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 4) {
int l14 = k12;
k12 = i13;
i13 = l14;
k13 = nc1.method421() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
}
nc1.bufferLocation = j9;
nc2.bufferLocation = k9;
nc3.bufferLocation = l9;
nc4.bufferLocation = i10;
nc5.bufferLocation = j10;
nc6.bufferLocation = k10;
for (int k14 = 0; k14 < numTexTriangles; k14++) {
int i15 = O[k14] & 0xff;
if (i15 == 0) {
texTrianglesPoint1[k14] = nc1.readUnsignedWord();
texTrianglesPoint2[k14] = nc1.readUnsignedWord();
texTrianglesPoint3[k14] = nc1.readUnsignedWord();
}
if (i15 == 1) {
texTrianglesPoint1[k14] = nc2.readUnsignedWord();
texTrianglesPoint2[k14] = nc2.readUnsignedWord();
texTrianglesPoint3[k14] = nc2.readUnsignedWord();
kb[k14] = nc3.readUnsignedWord();
N[k14] = nc3.readUnsignedWord();
y[k14] = nc3.readUnsignedWord();
gb[k14] = nc4.readSignedByte();
lb[k14] = nc5.readSignedByte();
F[k14] = nc6.readSignedByte();
}
if (i15 == 2) {
texTrianglesPoint1[k14] = nc2.readUnsignedWord();
texTrianglesPoint2[k14] = nc2.readUnsignedWord();
texTrianglesPoint3[k14] = nc2.readUnsignedWord();
kb[k14] = nc3.readUnsignedWord();
N[k14] = nc3.readUnsignedWord();
y[k14] = nc3.readUnsignedWord();
gb[k14] = nc4.readSignedByte();
lb[k14] = nc5.readSignedByte();
F[k14] = nc6.readSignedByte();
cb[k14] = nc6.readSignedByte();
J[k14] = nc6.readSignedByte();
}
if (i15 == 3) {
texTrianglesPoint1[k14] = nc2.readUnsignedWord();
texTrianglesPoint2[k14] = nc2.readUnsignedWord();
texTrianglesPoint3[k14] = nc2.readUnsignedWord();
kb[k14] = nc3.readUnsignedWord();
N[k14] = nc3.readUnsignedWord();
y[k14] = nc3.readUnsignedWord();
gb[k14] = nc4.readSignedByte();
lb[k14] = nc5.readSignedByte();
F[k14] = nc6.readSignedByte();
}
}
if (i2 != 255) {
for (int i12 = 0; i12 < numTriangles; i12++)
anIntArray1638[i12] = i2;
}
anIntArray1640 = triangleColours2;
anInt1626 = numVertices;
anInt1630 = numTriangles;
anIntArray1627 = vertexX;
anIntArray1628 = vertexY;
anIntArray1629 = vertexZ;
anIntArray1631 = facePoint1;
anIntArray1632 = facePoint2;
anIntArray1633 = facePoint3;
}
I’ve checked model.java and theres no java error. Also, i don’t know where to look in this class for a fix what do i do here???