Originally Posted by
Suic
i can probably help u fix it, msg me on discord.
Thanks Its solved already thanks for the offer mate!
For those with issues the proper model readers: (Ruse are incorrect)
Code:
public void read622Model(byte data[], int modelID) {
Buffer first = new Buffer(data);
Buffer second = new Buffer(data);
Buffer third = new Buffer(data);
Buffer fourth = new Buffer(data);
Buffer fifth = new Buffer(data);
Buffer sixth = new Buffer(data);
Buffer seventh = new Buffer(data);
first.pos = data.length - 23;
int numVertices = first.readUShort();
int numTriangles = first.readUShort();
int numTexTriangles = first.readUByte();
ModelHeader def = header[modelID] = new ModelHeader();
def.data = data;
def.vertices = numVertices;
def.faces = numTriangles;
def.texture_faces = numTexTriangles;
int l1 = first.readUByte();
boolean bool = (0x1 & l1 ^ 0xffffffff) == -2;
boolean bool_26_ = (0x8 & l1) == 8;
if (!bool_26_) {
read525Model(data, modelID);
return;
}
int newformat = 0;
if (bool_26_) {
first.pos -= 7;
newformat = first.readUByte();
first.pos += 6;
}
if (newformat == 15)
newmodel[modelID] = true;
int i2 = first.readUByte();
int j2 = first.readUByte();
int k2 = first.readUByte();
int l2 = first.readUByte();
int i3 = first.readUByte();
int j3 = first.readUShort();
int k3 = first.readUShort();
int l3 = first.readUShort();
int i4 = first.readUShort();
int j4 = first.readUShort();
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;
short[] triangleColours2 = new short[numTriangles];
if (numTexTriangles > 0) {
O = new byte[numTexTriangles];
first.pos = 0;
for (int j5 = 0; j5 < numTexTriangles; j5++) {
byte byte0 = O[j5] = first.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 (bool)
k5 += numTriangles;
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 i_59_ = 6;
if (newformat != 14) {
if (newformat >= 15)
i_59_ = 9;
} else
i_59_ = 7;
int l9 = k5;
k5 += i_59_ * l4;
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];
bone_skin = new int[numVertices];
render_type = new int[numTriangles];
render_priorities = new byte[numTriangles];
face_alpha = new int[numTriangles];
muscle_skin = new int[numTriangles];
if (i3 == 1)
bone_skin = new int[numVertices];
if (bool)
render_type = new int[numTriangles];
if (i2 == 255)
render_priorities = new byte[numTriangles];
else {
}
if (j2 == 1)
face_alpha = new int[numTriangles];
if (k2 == 1)
muscle_skin = new int[numTriangles];
if (l2 == 1)
D = new short[numTriangles];
if (l2 == 1 && numTexTriangles > 0)
x = new byte[numTriangles];
triangleColours2 = new short[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];
}
}
first.pos = l5;
second.pos = k8;
third.pos = l8;
fourth.pos = i9;
fifth.pos = i7;
int l10 = 0;
int i11 = 0;
int j11 = 0;
for (int k11 = 0; k11 < numVertices; k11++) {
int l11 = first.readUByte();
int j12 = 0;
if ((l11 & 1) != 0)
j12 = second.readSignedSmart();
int l12 = 0;
if ((l11 & 2) != 0)
l12 = third.readSignedSmart();
int j13 = 0;
if ((l11 & 4) != 0)
j13 = fourth.readSignedSmart();
vertexX[k11] = l10 + j12;
vertexY[k11] = i11 + l12;
vertexZ[k11] = j11 + j13;
l10 = vertexX[k11];
i11 = vertexY[k11];
j11 = vertexZ[k11];
if (bone_skin != null)
bone_skin[k11] = fifth.readUByte();
}
first.pos = j8;
second.pos = i6;
third.pos = k6;
fourth.pos = j7;
fifth.pos = l6;
sixth.pos = l7;
seventh.pos = i8;
for (int i12 = 0; i12 < numTriangles; i12++) {
triangleColours2[i12] = (short) first.readUShort();
if (l1 == 1) {
render_type[i12] = second.readSignedByte();
if (render_type[i12] == 2)
triangleColours2[i12] = (short) 65535;
render_type[i12] = 0;
}
if (i2 == 255) {
render_priorities[i12] = third.readSignedByte();
}
if (j2 == 1) {
face_alpha[i12] = fourth.readSignedByte();
if (face_alpha[i12] < 0)
face_alpha[i12] = (256 + face_alpha[i12]);
}
if (k2 == 1)
muscle_skin[i12] = fifth.readUByte();
if (l2 == 1)
D[i12] = (short) (sixth.readUShort() - 1);
if (x != null)
if (D[i12] != -1)
x[i12] = (byte) (seventh.readUByte() - 1);
else
x[i12] = -1;
}
first.pos = k7;
second.pos = j6;
int k12 = 0;
int i13 = 0;
int k13 = 0;
int l13 = 0;
for (int i14 = 0; i14 < numTriangles; i14++) {
int j14 = second.readUByte();
if (j14 == 1) {
k12 = first.readSignedSmart() + l13;
l13 = k12;
i13 = first.readSignedSmart() + l13;
l13 = i13;
k13 = first.readSignedSmart() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 2) {
i13 = k13;
k13 = first.readSignedSmart() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 3) {
k12 = k13;
k13 = first.readSignedSmart() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 4) {
int l14 = k12;
k12 = i13;
i13 = l14;
k13 = first.readSignedSmart() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
}
first.pos = j9;
second.pos = k9;
third.pos = l9;
fourth.pos = i10;
fifth.pos = j10;
sixth.pos = k10;
for (int k14 = 0; k14 < numTexTriangles; k14++) {
int i15 = O[k14] & 0xff;
if (i15 == 0) {
texTrianglesPoint1[k14] = first.readUShort();
texTrianglesPoint2[k14] = first.readUShort();
texTrianglesPoint3[k14] = first.readUShort();
}
if (i15 == 1) {
texTrianglesPoint1[k14] = second.readUShort();
texTrianglesPoint2[k14] = second.readUShort();
texTrianglesPoint3[k14] = second.readUShort();
if (newformat < 15) {
kb[k14] = third.readUShort();
if (newformat >= 14)
N[k14] = third.readUTriByte(-1);
else
N[k14] = third.readUShort();
y[k14] = third.readUShort();
} else {
kb[k14] = third.readUTriByte(-1);
N[k14] = third.readUTriByte(-1);
y[k14] = third.readUTriByte(-1);
}
gb[k14] = fourth.readSignedByte();
lb[k14] = fifth.readSignedByte();
F[k14] = sixth.readSignedByte();
}
if (i15 == 2) {
texTrianglesPoint1[k14] = second.readUShort();
texTrianglesPoint2[k14] = second.readUShort();
texTrianglesPoint3[k14] = second.readUShort();
if (newformat >= 15) {
kb[k14] = third.readUTriByte(-1);
N[k14] = third.readUTriByte(-1);
y[k14] = third.readUTriByte(-1);
} else {
kb[k14] = third.readUShort();
if (newformat < 14)
N[k14] = third.readUShort();
else
N[k14] = third.readUTriByte(-1);
y[k14] = third.readUShort();
}
gb[k14] = fourth.readSignedByte();
lb[k14] = fifth.readSignedByte();
F[k14] = sixth.readSignedByte();
cb[k14] = sixth.readSignedByte();
J[k14] = sixth.readSignedByte();
}
if (i15 == 3) {
texTrianglesPoint1[k14] = second.readUShort();
texTrianglesPoint2[k14] = second.readUShort();
texTrianglesPoint3[k14] = second.readUShort();
if (newformat < 15) {
kb[k14] = third.readUShort();
if (newformat < 14)
N[k14] = third.readUShort();
else
N[k14] = third.readUTriByte(-1);
y[k14] = third.readUShort();
} else {
kb[k14] = third.readUTriByte(-1);
N[k14] = third.readUTriByte(-1);
y[k14] = third.readUTriByte(-1);
}
gb[k14] = fourth.readSignedByte();
lb[k14] = fifth.readSignedByte();
F[k14] = sixth.readSignedByte();
}
}
if (i2 != 255) {
for (int i12 = 0; i12 < numTriangles; i12++)
render_priorities[i12] = (byte) i2;
}
face_color = triangleColours2;
vertices = numVertices;
faces = numTriangles;
vertex_x = vertexX;
vertex_y = vertexY;
vertex_z = vertexZ;
triangle_edge_a = facePoint1;
triangle_edge_b = facePoint2;
triangle_edge_c = facePoint3;
scale2(4);
}
Code:
public void read525Model(byte abyte0[], int modelID) {
Buffer nc1 = new Buffer(abyte0);
Buffer nc2 = new Buffer(abyte0);
Buffer nc3 = new Buffer(abyte0);
Buffer nc4 = new Buffer(abyte0);
Buffer nc5 = new Buffer(abyte0);
Buffer nc6 = new Buffer(abyte0);
Buffer nc7 = new Buffer(abyte0);
nc1.pos = abyte0.length - 23;
int numVertices = nc1.readUShort();
int numTriangles = nc1.readUShort();
int numTexTriangles = nc1.readUByte();
ModelHeader ModelDef_1 = header[modelID] = new ModelHeader();
ModelDef_1.data = abyte0;
ModelDef_1.vertices = numVertices;
ModelDef_1.faces = numTriangles;
ModelDef_1.texture_faces = numTexTriangles;
int l1 = nc1.readUByte();
boolean bool = (0x1 & l1 ^ 0xffffffff) == -2;
int i2 = nc1.readUByte();
int j2 = nc1.readUByte();
int k2 = nc1.readUByte();
int l2 = nc1.readUByte();
int i3 = nc1.readUByte();
int j3 = nc1.readUShort();
int k3 = nc1.readUShort();
int l3 = nc1.readUShort();
int i4 = nc1.readUShort();
int j4 = nc1.readUShort();
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;
short[] triangleColours2 = new short[numTriangles];
if (numTexTriangles > 0) {
O = new byte[numTexTriangles];
nc1.pos = 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];
bone_skin = new int[numVertices];
render_type = new int[numTriangles];
render_priorities = new byte[numTriangles];
face_alpha = new int[numTriangles];
muscle_skin = new int[numTriangles];
if (i3 == 1)
bone_skin = new int[numVertices];
if (bool)
render_type = new int[numTriangles];
if (i2 == 255)
render_priorities = new byte[numTriangles];
else {
}
if (j2 == 1)
face_alpha = new int[numTriangles];
if (k2 == 1)
muscle_skin = new int[numTriangles];
if (l2 == 1)
D = new short[numTriangles];
if (l2 == 1 && numTexTriangles > 0)
x = new byte[numTriangles];
triangleColours2 = new short[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.pos = l5;
nc2.pos = k8;
nc3.pos = l8;
nc4.pos = i9;
nc5.pos = i7;
int l10 = 0;
int i11 = 0;
int j11 = 0;
for (int k11 = 0; k11 < numVertices; k11++) {
int l11 = nc1.readUByte();
int j12 = 0;
if ((l11 & 1) != 0)
j12 = nc2.readSignedSmart();
int l12 = 0;
if ((l11 & 2) != 0)
l12 = nc3.readSignedSmart();
int j13 = 0;
if ((l11 & 4) != 0)
j13 = nc4.readSignedSmart();
vertexX[k11] = l10 + j12;
vertexY[k11] = i11 + l12;
vertexZ[k11] = j11 + j13;
l10 = vertexX[k11];
i11 = vertexY[k11];
j11 = vertexZ[k11];
if (bone_skin != null)
bone_skin[k11] = nc5.readUByte();
}
nc1.pos = j8;
nc2.pos = i6;
nc3.pos = k6;
nc4.pos = j7;
nc5.pos = l6;
nc6.pos = l7;
nc7.pos = i8;
for (int i12 = 0; i12 < numTriangles; i12++) {
triangleColours2[i12] = (short) nc1.readUShort();
if (l1 == 1) {
render_type[i12] = nc2.readSignedByte();
if (render_type[i12] == 2)
triangleColours2[i12] = (short) 65535;
render_type[i12] = 0;
}
if (i2 == 255) {
render_priorities[i12] = nc3.readSignedByte();
}
if (j2 == 1) {
face_alpha[i12] = nc4.readSignedByte();
if (face_alpha[i12] < 0)
face_alpha[i12] = (256 + face_alpha[i12]);
}
if (k2 == 1)
muscle_skin[i12] = nc5.readUByte();
if (l2 == 1)
D[i12] = (short) (nc6.readUShort() - 1);
if (x != null)
if (D[i12] != -1)
x[i12] = (byte) (nc7.readUByte() - 1);
else
x[i12] = -1;
}
nc1.pos = k7;
nc2.pos = j6;
int k12 = 0;
int i13 = 0;
int k13 = 0;
int l13 = 0;
for (int i14 = 0; i14 < numTriangles; i14++) {
int j14 = nc2.readUByte();
if (j14 == 1) {
k12 = nc1.readSignedSmart() + l13;
l13 = k12;
i13 = nc1.readSignedSmart() + l13;
l13 = i13;
k13 = nc1.readSignedSmart() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 2) {
i13 = k13;
k13 = nc1.readSignedSmart() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 3) {
k12 = k13;
k13 = nc1.readSignedSmart() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
if (j14 == 4) {
int l14 = k12;
k12 = i13;
i13 = l14;
k13 = nc1.readSignedSmart() + l13;
l13 = k13;
facePoint1[i14] = k12;
facePoint2[i14] = i13;
facePoint3[i14] = k13;
}
}
nc1.pos = j9;
nc2.pos = k9;
nc3.pos = l9;
nc4.pos = i10;
nc5.pos = j10;
nc6.pos = k10;
for (int k14 = 0; k14 < numTexTriangles; k14++) {
int i15 = O[k14] & 0xff;
if (i15 == 0) {
texTrianglesPoint1[k14] = nc1.readUShort();
texTrianglesPoint2[k14] = nc1.readUShort();
texTrianglesPoint3[k14] = nc1.readUShort();
}
if (i15 == 1) {
texTrianglesPoint1[k14] = nc2.readUShort();
texTrianglesPoint2[k14] = nc2.readUShort();
texTrianglesPoint3[k14] = nc2.readUShort();
kb[k14] = nc3.readUShort();
N[k14] = nc3.readUShort();
y[k14] = nc3.readUShort();
gb[k14] = nc4.readSignedByte();
lb[k14] = nc5.readSignedByte();
F[k14] = nc6.readSignedByte();
}
if (i15 == 2) {
texTrianglesPoint1[k14] = nc2.readUShort();
texTrianglesPoint2[k14] = nc2.readUShort();
texTrianglesPoint3[k14] = nc2.readUShort();
kb[k14] = nc3.readUShort();
N[k14] = nc3.readUShort();
y[k14] = nc3.readUShort();
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.readUShort();
texTrianglesPoint2[k14] = nc2.readUShort();
texTrianglesPoint3[k14] = nc2.readUShort();
kb[k14] = nc3.readUShort();
N[k14] = nc3.readUShort();
y[k14] = nc3.readUShort();
gb[k14] = nc4.readSignedByte();
lb[k14] = nc5.readSignedByte();
F[k14] = nc6.readSignedByte();
}
}
if (i2 != 255) {
for (int i12 = 0; i12 < numTriangles; i12++)
render_priorities[i12] = (byte) i2;
}
face_color = triangleColours2;
vertices = numVertices;
faces = numTriangles;
vertex_x = vertexX;
vertex_y = vertexY;
vertex_z = vertexZ;
triangle_edge_a = facePoint1;
triangle_edge_b = facePoint2;
triangle_edge_c = facePoint3;
}