theres no class specifically for mapdata.. also your friend is an idiot. go into the packet handler method (in my 525 its Class30_Sub4.readNextFrame). look for a opcode-comparison if block with a simple one-liner statement with a boolean in it and nothing else. you should find:
Code:
if ((Class36.frameOpcode ^ 0xffffffff) == -126) {
ObjectDef.method1751(true, i ^ 0x16);
Class36.frameOpcode = -1;
return true;
}
visiting it we find:
Code:
public static void method1751(boolean bool, int i) {
Class30_Sub9_Sub7.aBoolean4259 = bool;
int i_0_ = -115 % ((i - -33) / 44);
anInt2268++;
if (Class30_Sub9_Sub7.aBoolean4259) {
int i_1_ = Class94.inputStream.method959(true);
int i_2_ = Class94.inputStream.method982(8);
int i_3_ = Class94.inputStream.method982(8);
int i_4_ = Class94.inputStream.method959(true);
int i_5_ = Class94.inputStream.method974(true);
Class94.inputStream.method1002(123);
for (int i_6_ = 0; i_6_ < 4; i_6_++) {
for (int i_7_ = 0; (i_7_ ^ 0xffffffff) > -14; i_7_++) {
for (int i_8_ = 0; (i_8_ ^ 0xffffffff) > -14; i_8_++) {
int i_9_ = Class94.inputStream
.method1005((byte) 124, 1);
if ((i_9_ ^ 0xffffffff) == -2)
Class61.anIntArrayArrayArray1102[i_6_][i_7_][i_8_]
= Class94.inputStream
.method1005((byte) 114, 26);
else
Class61.anIntArrayArrayArray1102[i_6_][i_7_][i_8_]
= -1;
}
}
}
Class94.inputStream.method1006((byte) 0);
int i_10_ = ((-Class94.inputStream.currentOffset
+ Class12.frameSize)
/ 16);
Canvas_Sub1.anIntArrayArray48 = new int[i_10_][4];
for (int i_11_ = 0; i_11_ < i_10_; i_11_++) {
for (int i_12_ = 0; i_12_ < 4; i_12_++)
Canvas_Sub1.anIntArrayArray48[i_11_][i_12_]
= Class94.inputStream.method967(-3608);
}
Class31.anIntArray568 = new int[i_10_];
Class30_Sub23.anIntArray3148 = new int[i_10_];
Class17.aByteArrayArray335 = new byte[i_10_][];
Item.aByteArrayArray3551 = new byte[i_10_][];
Class30_Sub18.anIntArray3052 = new int[i_10_];
Class30_Sub9_Sub28.anIntArray4604 = null;
Class30_Sub6_Sub3.anIntArray3853 = new int[i_10_];
GroundData.anIntArray184 = new int[i_10_];
i_10_ = 0;
Class43.aByteArrayArray743 = null;
for (int i_13_ = 0; (i_13_ ^ 0xffffffff) > -5; i_13_++) {
for (int i_14_ = 0; (i_14_ ^ 0xffffffff) > -14; i_14_++) {
for (int i_15_ = 0; i_15_ < 13; i_15_++) {
int i_16_ = (Class61.anIntArrayArrayArray1102[i_13_]
[i_14_][i_15_]);
if ((i_16_ ^ 0xffffffff) != 0) {
int i_17_ = 0x3ff & i_16_ >> -1102055858;
int i_18_ = (0x3ffa & i_16_) >> -1308328509;
int i_19_ = (i_17_ / 8 << -799481176) + i_18_ / 8;
for (int i_20_ = 0;
(i_20_ ^ 0xffffffff) > (i_10_ ^ 0xffffffff);
i_20_++) {
if ((Class30_Sub6_Sub3.anIntArray3853[i_20_]
^ 0xffffffff)
== (i_19_ ^ 0xffffffff)) {
i_19_ = -1;
break;
}
}
if (i_19_ != -1) {
Class30_Sub6_Sub3.anIntArray3853[i_10_]
= i_19_;
int i_21_ = (i_19_ & 0xff3e) >> -1925701112;
int i_22_ = i_19_ & 0xff;
Class30_Sub23.anIntArray3148[i_10_]
= (Class10_Sub1_Sub1.aClass63_3759
.method1190
((Class30_Sub9_Sub39.method777
((byte) 66,
(new RSString[]
{Player.aRSString_5013,
(NPC.method1469
(i_21_, (byte) -35)),
Class30_Sub9_Sub20.aRSString_4479,
(NPC.method1469
(i_22_, (byte) -35))}))),
117));
GroundData.anIntArray184[i_10_]
= (Class10_Sub1_Sub1.aClass63_3759
.method1190
((Class30_Sub9_Sub39.method777
((byte) -47,
(new RSString[]
{Class118.aRSString_2075,
(NPC.method1469
(i_21_, (byte) -35)),
Class30_Sub9_Sub20.aRSString_4479,
(NPC.method1469
(i_22_, (byte) -35))}))),
108));
Class30_Sub18.anIntArray3052[i_10_]
= (Class10_Sub1_Sub1.aClass63_3759
.method1190
((Class30_Sub9_Sub39.method777
((byte) -64,
(new RSString[]
{Class30_Sub4.aRSString_2835,
(NPC.method1469
(i_21_, (byte) -35)),
Class30_Sub9_Sub20.aRSString_4479,
(NPC.method1469
(i_22_, (byte) -35))}))),
118));
Class31.anIntArray568[i_10_]
= (Class10_Sub1_Sub1.aClass63_3759
.method1190
((Class30_Sub9_Sub39.method777
((byte) 63,
(new RSString[]
{Class30_Sub6_Sub9.aRSString_3960,
(NPC.method1469
(i_21_, (byte) -35)),
Class30_Sub9_Sub20.aRSString_4479,
(NPC.method1469
(i_22_, (byte) -35))}))),
126));
i_10_++;
}
}
}
}
}
Class54.method1141(false, false, i_4_, i_2_, i_1_, i_3_, i_5_);
} else {
int i_23_ = ((-Class94.inputStream.currentOffset
+ Class12.frameSize)
/ 16);
Canvas_Sub1.anIntArrayArray48 = new int[i_23_][4];
for (int i_24_ = 0; i_23_ > i_24_; i_24_++) {
for (int i_25_ = 0; i_25_ < 4; i_25_++)
Canvas_Sub1.anIntArrayArray48[i_24_][i_25_]
= Class94.inputStream
.readUInt((byte) 90);
}
int i_26_ = Class94.inputStream.method978(255);
int i_27_ = Class94.inputStream.method982(8);
int i_28_ = Class94.inputStream.method959(true);
int i_29_ = Class94.inputStream.readUByte(255);
int i_30_ = Class94.inputStream.readShort(false);
Class43.aByteArrayArray743 = null;
Class17.aByteArrayArray335 = new byte[i_23_][];
Class30_Sub6_Sub3.anIntArray3853 = new int[i_23_];
Class30_Sub18.anIntArray3052 = new int[i_23_];
Class30_Sub9_Sub28.anIntArray4604 = null;
Class30_Sub23.anIntArray3148 = new int[i_23_];
boolean bool_31_ = false;
if ((i_26_ / 8 == 48 || i_26_ / 8 == 49)
&& (i_27_ / 8 ^ 0xffffffff) == -49)
bool_31_ = true;
if ((i_26_ / 8 ^ 0xffffffff) == -49 && i_27_ / 8 == 148)
bool_31_ = true;
Class31.anIntArray568 = new int[i_23_];
Item.aByteArrayArray3551 = new byte[i_23_][];
GroundData.anIntArray184 = new int[i_23_];
i_23_ = 0;
for (int i_32_ = (-6 + i_26_) / 8;
(i_32_ ^ 0xffffffff) >= ((i_26_ - -6) / 8 ^ 0xffffffff);
i_32_++) {
for (int i_33_ = (i_27_ + -6) / 8;
((6 + i_27_) / 8 ^ 0xffffffff) <= (i_33_ ^ 0xffffffff);
i_33_++) {
int i_34_ = (i_32_ << 1613090024) + i_33_;
if (!bool_31_
|| (i_33_ != 49 && (i_33_ ^ 0xffffffff) != -150
&& i_33_ != 147 && i_32_ != 50
&& ((i_32_ ^ 0xffffffff) != -50 || i_33_ != 47))) {
Class30_Sub6_Sub3.anIntArray3853[i_23_] = i_34_;
Class30_Sub23.anIntArray3148[i_23_]
= (Class10_Sub1_Sub1.aClass63_3759.method1190
((Class30_Sub9_Sub39.method777
((byte) 103,
(new RSString[]
{Player.aRSString_5013,
NPC.method1469(i_32_,
(byte) -35),
Class30_Sub9_Sub20.aRSString_4479,
NPC
.method1469(i_33_, (byte) -35)}))),
123));
GroundData.anIntArray184[i_23_]
= (Class10_Sub1_Sub1.aClass63_3759.method1190
((Class30_Sub9_Sub39.method777
((byte) 37,
(new RSString[]
{Class118.aRSString_2075,
NPC.method1469(i_32_,
(byte) -35),
Class30_Sub9_Sub20.aRSString_4479,
NPC
.method1469(i_33_, (byte) -35)}))),
113));
Class30_Sub18.anIntArray3052[i_23_]
= (Class10_Sub1_Sub1.aClass63_3759.method1190
((Class30_Sub9_Sub39.method777
((byte) -109,
(new RSString[]
{Class30_Sub4.aRSString_2835,
NPC.method1469(i_32_,
(byte) -35),
Class30_Sub9_Sub20.aRSString_4479,
NPC
.method1469(i_33_, (byte) -35)}))),
106));
Class31.anIntArray568[i_23_]
= (Class10_Sub1_Sub1.aClass63_3759.method1190
((Class30_Sub9_Sub39.method777
((byte) -83,
(new RSString[]
{Class30_Sub6_Sub9.aRSString_3960,
NPC.method1469(i_32_,
(byte) -35),
Class30_Sub9_Sub20.aRSString_4479,
NPC
.method1469(i_33_, (byte) -35)}))),
113));
} else {
Class30_Sub6_Sub3.anIntArray3853[i_23_] = i_34_;
Class30_Sub23.anIntArray3148[i_23_] = -1;
GroundData.anIntArray184[i_23_] = -1;
Class30_Sub18.anIntArray3052[i_23_] = -1;
Class31.anIntArray568[i_23_] = -1;
}
i_23_++;
}
}
Class54.method1141(false, false, i_30_, i_27_, i_28_, i_26_,
i_29_);
}
}
looking through find a simple variable setting on an array with only a simple int as value:
Code:
Class30_Sub6_Sub3.anIntArray3853[i_10_]
= i_19_;
i_19_ is map region/area id.
look to more upward code for a two-dimensional array being set.
we find:
Code:
for (int i_11_ = 0; i_11_ < i_10_; i_11_++) {
for (int i_12_ = 0; i_12_ < 4; i_12_++)
Canvas_Sub1.anIntArrayArray48[i_11_][i_12_]
= Class94.inputStream.method967(-3608);
}
looking above we also find:
Code:
Canvas_Sub1.anIntArrayArray48 = new int[i_10_][4];
so this must be the 'map data' XTEA key array...
so what can we conclude?
Canvas_Sub1.anIntArrayArray48 = landscape XTEA key array
i_19_ is map region/area id
so? we add a simple line under the
Code:
Class30_Sub6_Sub3.anIntArray3853[i_10_]
= i_19_;
:
Code:
System.out.println("Area ID: " + i_19_ + " Data: " + java.util.Arrays.toString(Canvas_Sub1.anIntArrayArray48));