I don't know how people got to index 5, but maybe it's me, I haven't really done research to this yet.
In index 2, archive 36 (the so called worldmap information archive), are the properties of the minimap icons defined:
Code:
public void decode(byte arg0, Stream arg1, int arg2) {
try {
anInt1238++;
if (arg0 <= 29) {
method861(-124);
}
if (arg2 != 1) {
if (arg2 == 2) {
hoverSpriteId = arg1.readUnsignedShort(8104);
} else if ((arg2 ^ 0xffffffff) == -4) {
mapLabel = arg1.readString(false);
} else if (arg2 != 4) {
if (arg2 != 5) {
if (arg2 != 6) {
if (arg2 == 7) {
int i = arg1.readUnsignedByte(-52);
if ((i & 0x2 ^ 0xffffffff) == -3) {
isVisible = true;
}
if ((0x1 & i) == 0) {
aBoolean1244 = false;
}
} else if (arg2 != 8) {
if (arg2 == 9) {
bitConfigId = arg1.readUnsignedShort(8104);
if ((bitConfigId ^ 0xffffffff) == -65536) {
bitConfigId = -1;
}
configId = arg1.readUnsignedShort(8104);
if ((configId ^ 0xffffffff) == -65536) {
configId = -1;
}
anInt1249 = arg1.readUnsignedInt(-2);
anInt1264 = arg1.readUnsignedInt(-2);
} else if (arg2 >= 10 && (arg2 ^ 0xffffffff) >= -15) {
clickOptions[arg2 - 10] = arg1.readString(false);
} else if (arg2 == 15) {
int i = arg1.readUnsignedByte(-22);
anIntArray1269 = new int[i * 2];
for (int i_1_ = 0; ((i * 2 ^ 0xffffffff) < (i_1_ ^ 0xffffffff)); i_1_++) {
anIntArray1269[i_1_] = arg1.readSignedShort(1625554944);
}
anInt1263 = arg1.readUnsignedInt(-2);
anInt1247 = arg1.readUnsignedInt(-2);
} else if (arg2 != 16) {
if (arg2 != 17) {
if ((arg2 ^ 0xffffffff) == -19) {
anotherSpriteId = arg1.readUnsignedShort(8104);
} else if (arg2 == 19) {
anInt1262 = arg1.readUnsignedShort(8104);
} else if ((arg2 ^ 0xffffffff) == -21) {
anotherBitConfigThingy = arg1.readUnsignedShort(8104);
if (anotherBitConfigThingy == 65535) {
anotherBitConfigThingy = -1;
}
basicConfigId = arg1.readUnsignedShort(8104);
if ((basicConfigId ^ 0xffffffff) == -65536) {
basicConfigId = -1;
}
anInt1234 = arg1.readUnsignedInt(-2);
anInt1265 = arg1.readUnsignedInt(-2);
} else if (arg2 != 21) {
if ((arg2 ^ 0xffffffff) == -23) {
anInt1254 = arg1.readUnsignedInt(-2);
}
} else {
anInt1257 = arg1.readUnsignedInt(-2);
}
} else {
optionEnd = arg1.readString(false);
}
} else {
aBoolean1239 = false;
}
} else {
aBoolean1250 = (arg1.readUnsignedByte(-98) ^ 0xffffffff) == -2;
}
} else {
anInt1256 = arg1.readUnsignedByte(-64);
}
} else {
anInt1268 = arg1.read3Bytes(false);
}
} else {
labelColor = arg1.read3Bytes(false);
}
} else {
mapIconSpriteId = arg1.readUnsignedShort(8104);
}
} catch (RuntimeException runtimeexception) {
throw Node_Sub2_Sub6.method1495(runtimeexception, ("kb.D(" + arg0 + ',' + (arg1 != null ? "{...}" : "null") + ',' + arg2 + ')'));
}
}
Now, the world map definition class has two methods which create a sprite:
Code:
public Sprite method855(int arg0, boolean arg1, GraphicsToolkit toolkit) {
try {
anInt1255++;
int i = !arg1 ? mapIconSpriteId : hoverSpriteId;
int i_0_ = i | toolkit.anInt1781 << -2105317123;
Sprite class152 = ((Sprite) Node_Sub2.aClass214_4098.get(122, i_0_));
if (arg0 != -4379) {
return null;
}
if (class152 != null) {
return class152;
}
if (!Class214.aClass158_3131.method2343(arg0 + 4269, i)) {
return null;
}
SpriteDefinition class124 = SpriteDefinition.getFirstSpriteDefinition(Class214.aClass158_3131, i, 0);
if (class124 != null) {
class152 = toolkit.createSprite(class124, true);
Node_Sub2.aClass214_4098.method2773(true, class152, i_0_);
}
return class152;
} catch (RuntimeException runtimeexception) {
throw Node_Sub2_Sub6.method1495(runtimeexception, ("kb.B(" + arg0 + ',' + arg1 + ',' + (toolkit != null ? "{...}" : "null") + ')'));
}
}
Code:
public Sprite method862(GraphicsToolkit arg0, int arg1) {
try {
anInt1270++;
Sprite class152 = ((Sprite) (Node_Sub2.aClass214_4098.get(arg1 + 127, 0x20000 | anotherSpriteId | arg0.anInt1781 << 508290877)));
if (arg1 != -1) {
anInt1257 = 6;
}
if (class152 != null) {
return class152;
}
Class214.aClass158_3131.method2343(-119, anotherSpriteId);
SpriteDefinition class124 = SpriteDefinition.getFirstSpriteDefinition(Class214.aClass158_3131, anotherSpriteId, 0);
if (class124 != null) {
class152 = arg0.createSprite(class124, true);
Node_Sub2.aClass214_4098.method2773(true, class152, arg0.anInt1781 << 1946935645 | (anotherSpriteId | 0x20000));
}
return class152;
} catch (RuntimeException runtimeexception) {
throw Node_Sub2_Sub6.method1495(runtimeexception, ("kb.G(" + (arg0 != null ? "{...}" : "null") + ',' + arg1 + ')'));
}
}
Here are the drawing methods for both, this is the draw method for the first one:
Code:
public static void createWorldMapSprite(int arg0, int arg1, int regionId, GraphicsToolkit toolkit, int arg4, Class183 arg5, int arg6, int arg7, WidgetComponentDefinition componentDefinition) {
do {
try {
anInt1766++;
if (arg4 == 2) {
WorldMapDefinition worldMapDefinition = Node_Sub2_Sub32.getWorldMapDefinition(regionId, (byte) 1);
if (worldMapDefinition == null || !worldMapDefinition.isVisible || !worldMapDefinition.method861(arg4 + -3)) {
break;
}
if (worldMapDefinition.anIntArray1269 != null) {
int[] is = new int[worldMapDefinition.anIntArray1269.length];
for (int i = 0; (i ^ 0xffffffff) > (is.length / 2 ^ 0xffffffff); i++) {
int i_134_;
if ((Node_Sub2_Sub34.anInt6035 ^ 0xffffffff) != -5) {
i_134_ = (Class148.anInt1982 + (int) Class120.aFloat1578) & 0x3fff;
} else {
i_134_ = (int) Class120.aFloat1578 & 0x3fff;
}
int i_135_ = Class31.SINES[i_134_];
int i_136_ = Class31.COSINES[i_134_];
if (Node_Sub2_Sub34.anInt6035 != 4) {
i_135_ = 256 * i_135_ / (256 + Class1_Sub7.anInt3590);
i_136_ = i_136_ * 256 / (256 + Class1_Sub7.anInt3590);
}
is[2 * i] = ((((i_136_ * (arg1 + worldMapDefinition.anIntArray1269[i * 2] * 4)) + (worldMapDefinition.anIntArray1269[1 + i * 2] * 4 + arg6) * i_135_) >> -642431153) + (componentDefinition.renderWidth / 2 + arg7));
is[1 + 2 * i] = -(((4 * worldMapDefinition.anIntArray1269[i * 2 + 1] + arg6) * i_136_ - (4 * worldMapDefinition.anIntArray1269[i * 2] + arg1) * i_135_) >> 2000279151) + arg0 + componentDefinition.renderHeight / 2;
}
Class123.method1070(toolkit, is, worldMapDefinition.anInt1247, componentDefinition.anIntArray2478, componentDefinition.anIntArray2310);
for (int i = 0; -1 + is.length / 2 > i; i++) {
toolkit.method1226(is[2 * i], is[2 * i - -1], is[(1 + i) * 2], is[1 + (i * 2 + 2)], worldMapDefinition.anInt1263, 1, arg5, arg7, arg0);
}
toolkit.method1226(is[is.length - 2], is[is.length - 1], is[0], is[1], worldMapDefinition.anInt1263, 1, arg5, arg7, arg0);
}
Sprite class152 = null;
if ((worldMapDefinition.mapIconSpriteId ^ 0xffffffff) != 0) {
class152 = worldMapDefinition.method855(-4379, false, toolkit);
if (class152 != null) {
Node_Sub2_Sub3.method1487(arg7, arg6, arg5, 2, class152, arg0, componentDefinition, arg1);
}
}
if (worldMapDefinition.mapLabel == null) {
break;
}
int i = 0;
if (class152 != null) {
i = class152.method2204();
}
Font class44 = Class204.aClass44_2982;
FontMetricsDefinition class55 = Class169.aClass55_2269;
if ((worldMapDefinition.anInt1256 ^ 0xffffffff) == -2) {
class55 = IntegerNode.aClass55_4469;
class44 = Class184.aClass44_2633;
}
if ((worldMapDefinition.anInt1256 ^ 0xffffffff) == -3) {
class55 = Class89.aClass55_3259;
class44 = Class93.aClass44_1222;
}
Node_Sub2_Sub1.method1472(componentDefinition, arg1, class55, class44, arg5, i, worldMapDefinition.mapLabel, arg7, arg6, (byte) 45, arg0, worldMapDefinition.labelColor);
}
} catch (RuntimeException runtimeexception) {
throw Node_Sub2_Sub6.method1495(runtimeexception, ("nr.PG(" + arg0 + ',' + arg1 + ',' + regionId + ',' + (toolkit != null ? "{...}" : "null") + ',' + arg4 + ',' + (arg5 != null ? "{...}" : "null") + ',' + arg6 + ',' + arg7 + ',' + (componentDefinition != null ? "{...}" : "null") + ')'));
}
break;
} while (false);
}
As you can see, an interface component is being used, however, in second drawing method, there is no component used:
Code:
public static void method1106(GraphicsToolkit toolkit, int arg1, WorldMapDefinition worldMapDefinition, Node_Sub20 arg3) {
try {
anInt1695++;
Sprite class152 = worldMapDefinition.method862(toolkit, -1);
if (class152 != null) {
int i = class152.method2206();
if (class152.method2204() > i) {
i = class152.method2204();
}
int i_0_ = 10;
int i_1_ = arg3.anInt4428;
int i_2_ = arg3.anInt4429;
int i_3_ = 0;
int i_4_ = 0;
int i_5_ = 0;
if (worldMapDefinition.mapLabel != null) {
i_3_ = Class169.aClass55_2269.method620(null, 108, worldMapDefinition.mapLabel, (Class1_Sub2.aStringArray3509), null);
for (int i_6_ = 0; i_6_ < i_3_; i_6_++) {
String string = Class1_Sub2.aStringArray3509[i_6_];
if (i_6_ < -1 + i_3_) {
string = string.substring(0, -4 + string.length());
}
int i_7_ = Class67.aClass140_912.method2131(string);
if (i_4_ < i_7_) {
i_4_ = i_7_;
}
}
i_5_ = (Class67.aClass140_912.method2127() * i_3_ - -(Class67.aClass140_912.method2132() / 2));
}
int i_8_ = arg3.anInt4428 + i / 2;
int i_9_ = arg3.anInt4429;
if (i_1_ >= Class127.anInt1737 - -i) {
if (i_1_ > Class127.anInt1718 + -i) {
i_1_ = Class127.anInt1718 - i;
i_8_ = -5 + (-(i_4_ / 2) + Class127.anInt1718 + -(i / 2) + -i_0_);
}
} else {
i_1_ = Class127.anInt1737;
i_8_ = 5 + i_4_ / 2 + (i_0_ + (i / 2 + Class127.anInt1737));
}
if ((i + Class127.anInt1722 ^ 0xffffffff) >= (i_2_ ^ 0xffffffff)) {
if (i_2_ > -i + Class127.anInt1719) {
i_2_ = Class127.anInt1719 + -i;
i_9_ = -i_5_ + (Class127.anInt1719 + (-(i / 2) - i_0_));
}
} else {
i_9_ = i / 2 + (i_0_ + Class127.anInt1722);
i_2_ = Class127.anInt1722;
}
int i_10_ = (0xffff & (int) (32767.0 * (Math.atan2(-arg3.anInt4428 + i_1_, i_2_ + -arg3.anInt4429) / 3.141592653589793)));
class152.method2209(i_1_ + i / 2.0F, i_2_ + i / 2.0F, 4096, i_10_);
int i_11_ = -2;
int i_12_ = -2;
int i_13_ = -2;
int i_14_ = -2;
if (worldMapDefinition.mapLabel != null) {
i_11_ = -5 + (-(i_4_ / 2) + i_8_);
i_12_ = i_9_;
i_13_ = i_11_ + (i_4_ - -10);
i_14_ = 3 + (Class67.aClass140_912.method2127() * i_3_ + i_12_);
if ((worldMapDefinition.anInt1254 ^ 0xffffffff) != -1) {
toolkit.drawFilledPixels(i_13_ + -i_11_, i_14_ + -i_12_, i_11_, i_12_, worldMapDefinition.anInt1254, -92);
}
if ((worldMapDefinition.anInt1257 ^ 0xffffffff) != -1) {
toolkit.method1262(-i_12_ + i_14_, i_11_, -i_11_ + i_13_, false, i_12_, worldMapDefinition.anInt1257);
}
for (int i_15_ = 0; (i_3_ ^ 0xffffffff) < (i_15_ ^ 0xffffffff); i_15_++) {
String string = Class1_Sub2.aStringArray3509[i_15_];
if ((-1 + i_3_ ^ 0xffffffff) < (i_15_ ^ 0xffffffff)) {
string = string.substring(0, -4 + string.length());
}
Class67.aClass140_912.method2133(toolkit, string, i_8_, i_9_, worldMapDefinition.labelColor, true);
i_9_ += Class67.aClass140_912.method2127();
}
}
if (arg1 != worldMapDefinition.mapIconSpriteId || worldMapDefinition.mapLabel != null) {
i >>= 1;
Node_Sub42 class131_sub42 = new Node_Sub42(arg3);
class131_sub42.anInt4681 = i_2_ + -i;
class131_sub42.anInt4684 = -i + i_1_;
class131_sub42.anInt4687 = i_1_ + i;
class131_sub42.anInt4682 = i_13_;
class131_sub42.anInt4680 = i_14_;
class131_sub42.anInt4679 = i_12_;
class131_sub42.anInt4678 = i_11_;
class131_sub42.anInt4690 = i_2_ - -i;
Class74.aClass119_1011.method1018((byte) -128, class131_sub42);
}
}
} catch (RuntimeException runtimeexception) {
throw Node_Sub2_Sub6.method1495(runtimeexception, ("nc.B(" + (toolkit != null ? "{...}" : "null") + ',' + arg1 + ',' + (worldMapDefinition != null ? "{...}" : "null") + ',' + (arg3 != null ? "{...}" : "null") + ')'));
}
}
All this code is from a 562 client.