tibia-maps-script icon indicating copy to clipboard operation
tibia-maps-script copied to clipboard

Marker format is different for certain markers

Open mathiasbynens opened this issue 5 years ago • 1 comments

There’s something about the minimapmarkers.bin format I don’t quite understand yet. For the most part (99.99%), it seems to follow the format described in our guide.

However, some (not all!) very specific markers that are automatically added by quest NPCs seem to follow a different format.

For example, in the attached file, this marker is fine:

$ hexdump -s 0xEC6C -n 78 -C minimap/minimapmarkers.bin
0000ec6c  0a 24 0a 0a 08 a5 86 02  10 f1 f3 01 18 03 10 03  |.$..............|
0000ec7c  1a 12 49 6e 73 65 63 74  6f 69 64 20 6d 6f 6e 6f  |..Insectoid mono|
0000ec8c  6c 69 74 68 20 00 0a 12  0a 0a 08 a6 86 02 10 89  |lith ...........|
0000ec9c  f4 01 18 0e 10 04 1a 00  20 00 0a 12 0a 0a 08 a6  |........ .......|
0000ecac  86 02 10 8d f4 01 18 0e  10 04 1a 00 20 00        |............ .|
0000ecba

But the next one (a marker added by talking to NPC Sholley during the Dark Trails Quest), isn’t:

$ hexdump -s 0xECBA -n 65 -C minimap/minimapmarkers.bin
0000ecba  0a 24 0a 0a 08 a6 86 02  10 d1 f9 01 18 07 10 02  |.$..............|
0000ecca  1a 0d 51 75 61 6e 64 6f  6e 73 20 48 6f 6d 65 20  |..Quandons Home |
0000ecda  ce 95 ea be f6 2d 0a 19  0a 0a 08 a7 86 02 10 a0  |.....-..........|
0000ecea  f4 01 18 07 10 03 1a 07  41 6e 74 65 6e 6e 61 20  |........Antenna |
0000ecfa  00                                                |.|
0000ecfb

(Note: the above example shows the bytes for the marker following it as well.)

Unlike other markers, this particular marker doesn’t end with 20 00 — instead, it ends with 20 ce 95 ea be f6 2d. Why is that? What does it mean?

To allow importing this marker, we can patch tibia-maps-script as follows. Replace these lines: https://github.com/tibiamaps/tibia-maps-script/blob/master/src/from-minimap.js#L92-L94

// The byte sequence 0x20 0x00 marks the end of the marker.
console.assert(buffer[index++] === 0x20);
console.assert(buffer[index++] === 0x00);

…with…

while (buffer[index] !== undefined && buffer[index] !== 0x0A) {
  index++;
}

mathiasbynens avatar Jan 10 '20 04:01 mathiasbynens