If you are interested in adding the map icons/scenes before you release here is some useful information:
in object def opcode 107 is the ID of the worldmaptype (index 2 archive 36)
Here is the worldmaptype from 831:
Code:
package com.jagex.game.runetek5.config.worldmaptype;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.logging.Logger;
import net.openrs.util.ByteBufferUtils;
public class WorldMapType {
private static final Logger logger = Logger.getLogger(WorldMapType.class.getName());
int transVar;
public int anInt2274;
public int minimapSprite = -1;
public int worldmapSprite = -1;
public int anInt2277 = -1;
public int anInt2278;
public int anInt2279;
public int fontType = 0;
int anInt2281;
int anInt2282;
public int anInt2284;
public boolean aBool2286 = true;
public String[] aStringArray2288;
public String aString2289;
int anInt2290;
int anInt2291;
public int minimapScale;
public boolean aBool2294 = false;
int anInt2295;
int anInt2296;
int anInt2297;
int transVarBit;
public int[] transforms;
public int[] anIntArray2300;
public int anInt2301;
public int anInt2302;
public int anInt2303;
public int anInt2304;
public int anInt2305;
public int anInt2306;
public int textColour;
public int anInt2308;
public int anInt2311;
public int anInt2312;
public int[] anIntArray2313;
public byte[] aByteArray2314;
public String text;
public int anInt2316;
public boolean aBool2317;
HashMap<Integer, Object> params;
public int anInt2319;
public int unknownType2;
public int unknownType1;
protected void decode(ByteBuffer buffer) {
while (true) {
int opcode = buffer.get() & 0xFF;
if (opcode == 0)
return;
decode(buffer, opcode);
}
}
protected void decode(ByteBuffer buffer, int opcode) {
if (opcode == 1) {
minimapSprite = ByteBufferUtils.getSmartInt(buffer);
} else if (opcode == 2) {
worldmapSprite = ByteBufferUtils.getSmartInt(buffer);
} else if (opcode == 3) {
text = ByteBufferUtils.readString(buffer);
} else if (opcode == 4) {
textColour = ByteBufferUtils.getMedium(buffer);
} else if (opcode == 5) {
anInt2277 = ByteBufferUtils.getMedium(buffer);
} else if (opcode == 6) {
fontType = buffer.get() & 0xFF;
} else if (7 == opcode) {
int i_3_ = buffer.get() & 0xFF;
if ((i_3_ & 0x1) == 0) {
aBool2286 = false;
}
if (2 == (i_3_ & 0x2)) {
aBool2294 = true;
}
} else if (opcode == 8) {
buffer.get();
} else if (9 == opcode) {
transVarBit = buffer.getShort() & 0xFFFF;
if (transVarBit == 65535) {
transVarBit = -1;
}
transVar = buffer.getShort() & 0xFFFF;
if (transVar == 65535) {
transVar = -1;
}
anInt2291 = buffer.getInt();
anInt2281 = buffer.getInt();
} else if (opcode >= 10 && opcode <= 14) {
aStringArray2288[opcode - 10] = ByteBufferUtils.readString(buffer);
} else if (opcode == 15) {
int i_4_ = buffer.get() & 0xFF;
anIntArray2300 = new int[i_4_ * 2];
for (int i_5_ = 0; i_5_ < 2 * i_4_; i_5_++) {
anIntArray2300[i_5_] = buffer.getShort();
}
anInt2305 = buffer.getInt();
int i_6_ = buffer.get() & 0xFF;
anIntArray2313 = new int[i_6_];
for (int i_7_ = 0; i_7_ < anIntArray2313.length; i_7_++) {
anIntArray2313[i_7_] = buffer.getInt();
}
aByteArray2314 = new byte[i_4_];
for (int i_8_ = 0; i_8_ < i_4_; i_8_++) {
aByteArray2314[i_8_] = buffer.get();
}
} else if (16 == opcode) {
aBool2317 = false;
} else if (17 == opcode) {
aString2289 = ByteBufferUtils.readString(buffer);
} else if (18 == opcode) {
anInt2290 = ByteBufferUtils.getSmartInt(buffer);
} else if (19 == opcode) {
anInt2278 = buffer.getShort() & 0xFFFF;
} else if (20 == opcode) {
anInt2297 = buffer.getShort() & 0xFFFF;
if (anInt2297 == 65535) {
anInt2297 = -1;
}
anInt2282 = buffer.getShort() & 0xFFFF;
if (65535 == anInt2282) {
anInt2282 = -1;
}
anInt2295 = buffer.getInt();
anInt2296 = buffer.getInt();
} else if (21 == opcode) {
anInt2279 = buffer.getInt();
} else if (opcode == 22) {
anInt2316 = buffer.getInt();
} else if (23 == opcode) {
anInt2306 = buffer.get() & 0xFF;
anInt2311 = buffer.get() & 0xFF;
anInt2308 = buffer.get() & 0xFF;
} else if (24 == opcode) {
anInt2284 = buffer.getShort();
anInt2312 = buffer.getShort();
} else if (opcode == 25) {
anInt2319 = ByteBufferUtils.getSmartInt(buffer);
} else if (26 == opcode || opcode == 27) {
transVarBit = buffer.getShort() & 0xFFFF;
if (transVarBit == 65535) {
transVarBit = -1;
}
transVar = buffer.getShort() & 0xFFFF;
if (65535 == transVar) {
transVar = -1;
}
int i_9_ = -1;
if (27 == opcode) {
i_9_ = buffer.getShort() & 0xFFFF;
if (65535 == i_9_) {
i_9_ = -1;
}
}
int i_10_ = buffer.get() & 0xFF;
transforms = new int[i_10_ + 2];
for (int i_11_ = 0; i_11_ <= i_10_; i_11_++) {
transforms[i_11_] = buffer.getShort() & 0xFFFF;
if (transforms[i_11_] == 65535) {
transforms[i_11_] = -1;
}
}
transforms[i_10_ + 1] = i_9_;
} else if (opcode == 28) {
minimapScale = buffer.get() & 0xFF;
} else if (29 == opcode) {
unknownType1 = buffer.get() & 0xFF;
} else if (30 == opcode) {
unknownType2 = buffer.get() & 0xFF;
} else if (opcode == 249) {
int length = buffer.get() & 0xFF;
if (null == params) {
params = new HashMap<Integer, Object>(length);
}
for (int index = 0; index < length; index++) {
boolean stringInstance = (buffer.get() & 0xFF) == 1;
int key = ByteBufferUtils.getMedium(buffer);
Object val;
if (stringInstance) {
val = ByteBufferUtils.readString(buffer);
} else {
val = buffer.getInt();
}
params.put(key, val);
}
} else {
logger.info("Error unrecognised .worldmap config code: {" + opcode + "}");
}
}
protected void postDecode() {
if (anIntArray2300 != null) {
for (int i_16_ = 0; i_16_ < anIntArray2300.length; i_16_ += 2) {
if (anIntArray2300[i_16_] < anInt2301) {
anInt2301 = anIntArray2300[i_16_];
} else if (anIntArray2300[i_16_] > anInt2303) {
anInt2303 = anIntArray2300[i_16_];
}
if (anIntArray2300[1 + i_16_] < anInt2302) {
anInt2302 = anIntArray2300[1 + i_16_];
} else if (anIntArray2300[1 + i_16_] > anInt2304) {
anInt2304 = anIntArray2300[1 + i_16_];
}
}
}
}
WorldMapType(int i) {
aStringArray2288 = new String[5];
anInt2290 = -1;
anInt2291 = -1;
anInt2281 = -1;
transVarBit = -1;
transVar = -1;
anInt2297 = -1;
anInt2282 = -1;
transforms = null;
anInt2301 = 2147483647;
anInt2302 = 2147483647;
anInt2303 = -2147483648;
anInt2304 = -2147483648;
anInt2306 = -1;
anInt2311 = -1;
anInt2308 = -1;
minimapScale = -1;
aBool2317 = true;
anInt2278 = -1;
anInt2319 = -1;
anInt2274 = i;
}
}
opcode 1 is the archive ID in index 8 of the minimap icon
please note pre 800 was readUnsignedShort instead of getSmartInt for everything that uses getSmartInt
besides that the definitions should work on all versions
Now in object def opcode 102 is the mapscenetype id (index 2 archive 34)
Here is the mapscenetype from 831:
Code:
package com.jagex.game.runetek5.config.mapscenetype;
import java.nio.ByteBuffer;
import java.util.logging.Logger;
import net.openrs.util.ByteBufferUtils;
public class MapSceneType {
private static final Logger logger = Logger.getLogger(MapSceneType.class.getName());
public int spriteId;
public int color;
public boolean enlarge = false;
protected void decode(ByteBuffer buffer, int opcode) {
if (opcode == 1)
spriteId = ByteBufferUtils.getSmartInt(buffer);
else if (opcode == 2)
color = ByteBufferUtils.getMedium(buffer);
else if (opcode == 3)
enlarge = true;
else if (opcode == 4)
spriteId = -1;
else
logger.info("Error unrecognised .mapscene config code: {" + opcode + "}");
}
protected void decode(ByteBuffer buffer) {
while (true) {
int opcode = buffer.get() & 0xFF;
if (opcode == 0)
return;
decode(buffer, opcode);
}
}
}
opcode 1 is the archive id in index8 for the sprite
The same goes for the fact that pre800 used unsigned short instead of smartInt
some more info is that in objectdef, opcode 101 is the mapscene icons rotation and opcode 105 is whether it should be flipped vertically