Analysis of the binary Tibia 10 map file format
File name format
Tibia client versions up to 10 store their map files in the Automap
directory:
- on Windows systems:
%APPDATA%\Tibia\Automap
- on Linux systems:
~/.tibia/Automap
Each file within that folder contains the map data for a tile of 256×256 pixels. Each *.map
file has a name of the form xxxyyyzz.map
, where…
xxx
is the zero-paddedX
coordinate of the tile. At the moment, this value ranges from124
to132
, but this range could be extended in the future if CipSoft decides to add new areas outside the current boundaries of the map. Theoretically it can go from000
to255
.yyy
is the zero-paddedY
coordinate of the tile. It currently goes from121
to128
, but it could theoretically go all the way from000
to255
.zz
is the zero-padded floor ID of the tile.00
is the highest floor;07
is the ground floor;15
is the deepest underground.
Example map file
I’ll be using 12612507.map
as an example throughout this guide. This file contains the data for an area near Thais. To follow along, use your own map file, or quickly download a copy:
$ wget https://tibiamaps.github.io/archive/Automap-with-markers/12612507.map
File structure
A *.map
file consists of three main parts:
- The first
0x10000
(= 65536 = 256×256) bytes contain visual map data. - The following
0x10000
bytes contain pathfinding data. - The remaining bytes contain map marker data.
Visual map data
The first 0x10000
(256×256) bytes of the map file form the graphical portion of the map. Each byte represents a single visible map pixel. The map data first contains the 256 pixels in the first column, then the 256 pixels in the second column, etc. — the pixels go from top to bottom, rather than from left to right.
$ hexdump -v -C -n 65536 12612507.map
00000000 33 33 33 33 33 33 33 33 33 33 33 33 33 ba 33 33 |3333333333333.33|
00000010 33 33 33 33 18 18 18 18 0c 0c 18 18 18 18 18 18 |3333............|
00000020 18 18 18 18 ba ba ba ba ba ba ba ba ba ba ba ba |................|
00000030 0c ba ba ba ba ba ba 81 81 81 ba 18 18 18 18 18 |................|
00000040 ba 18 18 18 18 18 0c 18 18 18 18 18 18 18 18 18 |................|
00000050 0c 18 0c 18 18 18 18 18 18 18 18 18 18 18 18 33 |...............3|
00000060 33 33 33 18 18 18 18 18 18 33 33 33 18 18 18 18 |333......333....|
00000070 18 18 18 18 33 33 33 33 33 33 33 33 33 33 33 33 |....333333333333|
00000080 33 33 33 33 33 33 33 33 33 18 18 18 56 56 18 18 |333333333...VV..|
00000090 18 56 56 18 18 18 18 33 33 33 33 33 33 33 33 33 |.VV....333333333|
000000a0 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 |3333333333333333|
000000b0 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 |3333333333333333|
000000c0 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 |3333333333333333|
000000d0 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 |3333333333333333|
000000e0 33 33 33 33 33 33 33 18 18 ba 81 81 81 81 81 ba |3333333.........|
[…]
0000ff20 18 18 18 18 18 18 18 18 18 18 56 18 18 18 18 56 |..........V....V|
0000ff30 56 56 56 56 56 56 56 56 56 56 56 56 81 81 56 56 |VVVVVVVVVVVV..VV|
0000ff40 56 56 56 c0 c0 56 56 56 56 56 81 81 56 56 56 56 |VVV..VVVVV..VVVV|
0000ff50 56 56 56 56 56 56 18 18 18 18 18 18 81 81 18 18 |VVVVVV..........|
0000ff60 18 18 18 0c 0c 0c 18 18 18 0c 18 18 0c 0c 18 18 |................|
0000ff70 18 18 18 18 18 18 18 56 56 56 18 18 18 18 18 18 |.......VVV......|
0000ff80 18 18 0c 18 18 18 18 18 0c 0c 18 18 0c 0c 18 18 |................|
0000ff90 18 18 18 18 18 33 33 33 33 18 18 0c 18 0c 0c 0c |.....3333.......|
0000ffa0 0c 18 0c 18 18 18 18 18 33 33 33 33 33 33 33 33 |........33333333|
0000ffb0 33 18 0c 18 18 18 18 18 33 33 33 33 33 33 33 33 |3.......33333333|
0000ffc0 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 |3333333333333333|
0000ffd0 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 |3333333333333333|
0000ffe0 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 |3333333333333333|
0000fff0 56 81 81 0c 81 81 81 18 18 18 56 56 18 18 81 81 |V.........VV....|
00010000
The official Tibia servers only use a handful of color IDs:
Byte value / color ID | Meaning | Color |
---|---|---|
0x00 |
empty or unexplored area | black |
0x0C |
tree | dark green |
0x18 |
grass | light green |
0x33 |
water | blue |
0x56 |
rock/mountain | dark gray |
0x72 |
earth/stalagmite | dark brown |
0x79 |
earth | brown |
0x81 |
stone tile/cobbled pavement | gray |
0x8C |
light spot in grassy area | light green |
0xB3 |
ice | light blue |
0xBA |
wall | red |
0xC0 |
lava | orange |
0xCF |
sand | beige |
0xD2 |
ladder/stairs/hole/… | yellow |
0xD7 |
snow | white |
However, the Tibia client recognizes any byte value — even those that aren’t used on the official servers — and assigns a different color to each value. This means it’s possible to create fake map files that contain colors that aren’t used anywhere in the real game map.
Pathfinding data
The next 0x10000
bytes form the map that is used for pathfinding. Each of these 256×256 bytes represents the walking speed friction on a specific tile. In general, the lower the friction value, the higher your movement speed on that tile. There are two known constants:
0xFA
= unexplored/unknown0xFF
= non-walkable
$ hexdump -v -s 0x10000 -n 65536 -C 12612507.map
00010000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00010010 ff ff ff ff 96 96 96 96 ff ff 96 96 96 96 96 96 |................|
00010020 96 96 96 96 ff ff ff ff ff ff ff ff ff ff ff ff |................|
00010030 ff ff ff ff ff ff ff 6e 6e 6e ff 96 96 96 96 ff |.......nnn......|
00010040 ff 96 96 96 96 96 ff 96 96 96 96 96 96 96 96 96 |................|
00010050 ff 96 ff 96 96 96 96 96 96 96 96 78 78 78 96 ff |...........xxx..|
00010060 ff ff ff 96 96 96 96 96 96 ff ff ff 96 96 78 78 |..............xx|
00010070 78 96 96 96 ff ff ff ff ff ff ff ff ff ff ff ff |x...............|
00010080 ff ff ff ff ff ff ff ff ff 96 96 96 ff ff 78 ff |..............x.|
00010090 78 ff ff 78 96 96 96 ff ff ff ff ff ff ff ff ff |x..x............|
000100a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
000100b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
000100c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
000100d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
000100e0 ff ff ff ff ff ff ff 96 96 ff ff 64 64 64 ff ff |...........ddd..|
[…]
0001ff20 96 96 78 78 78 78 78 78 78 78 ff 96 96 96 96 ff |..xxxxxxxx......|
0001ff30 ff ff ff ff ff ff ff ff ff ff ff ff 96 96 ff ff |................|
0001ff40 ff ff ff ff ff ff ff ff ff ff 96 96 ff ff ff ff |................|
0001ff50 ff ff ff ff ff ff 96 96 96 96 96 96 6e 6e 96 96 |............nn..|
0001ff60 96 96 96 ff ff ff 96 96 96 ff 96 96 ff ff 96 96 |................|
0001ff70 96 96 96 96 96 96 96 ff ff ff 96 96 96 96 96 96 |................|
0001ff80 96 96 ff 96 96 96 96 96 ff ff 96 96 ff ff 96 96 |................|
0001ff90 96 96 96 96 96 ff ff ff ff 96 96 ff 96 ff ff ff |................|
0001ffa0 ff ff ff 96 96 96 96 96 ff ff ff ff ff ff ff ff |................|
0001ffb0 ff 96 ff 96 96 96 96 96 ff ff ff ff ff ff ff ff |................|
0001ffc0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0001ffd0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0001ffe0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0001fff0 ff a0 a0 ff a0 a0 a0 96 96 96 ff ff 96 96 6e 6e |..............nn|
00020000
Map marker data
The remaining bytes contain the map marker data.
$ hexdump -s 0x20000 -n 65536 -C 12612507.map
00020000 07 00 00 00 0e 7e 00 00 ab 7d 00 00 02 00 00 00 |.....~...}......|
00020010 18 00 46 75 72 79 20 47 61 74 65 20 28 77 6f 72 |..Fury Gate (wor|
00020020 6c 64 20 63 68 61 6e 67 65 29 41 7e 00 00 d3 7d |ld change)A~...}|
00020030 00 00 09 00 00 00 07 00 48 61 72 62 6f 75 72 5b |........Harbour[|
00020040 7e 00 00 e2 7d 00 00 0a 00 00 00 0c 00 44 65 70 |~...}........Dep|
00020050 6f 74 20 26 20 62 61 6e 6b 5e 7e 00 00 ee 7d 00 |ot & bank^~...}.|
00020060 00 08 00 00 00 1b 00 4f 66 66 6c 69 6e 65 20 74 |.......Offline t|
00020070 72 61 69 6e 69 6e 67 20 28 64 69 73 74 61 6e 63 |raining (distanc|
00020080 65 29 61 7e 00 00 de 7d 00 00 0c 00 00 00 09 00 |e)a~...}........|
00020090 50 76 50 20 61 72 65 6e 61 71 7e 00 00 ef 7d 00 |PvP arenaq~...}.|
000200a0 00 05 00 00 00 06 00 54 65 6d 70 6c 65 8f 7e 00 |.......Temple.~.|
000200b0 00 dc 7d 00 00 03 00 00 00 0b 00 4d 61 67 69 63 |..}........Magic|
000200c0 20 73 74 6f 72 65 | store|
000200c6
The first 4 bytes indicate the number of markers on the map as a uint
in little-endian byte order. If the file contains no markers, this byte sequence is 00 00 00 00
after which the file ends.
The structure of a single marker is as follows:
- The first byte is
xOffset
, i.e. thex
position offset of the marker within this 256×256px tile, as auint8
. - The second byte is
xTile
, i.e. the map tile the marker is in on thex
axis, as auint8
. (This is the same value as thexxx
component of the*.map
file name.) - The next two bytes are blank, i.e.
00 00
. - The next byte is
yOffset
, i.e. they
position offset of the marker within this 256×256px tile, as auint8
. - The next byte is
yTile
, i.e. the map tile the marker is in on they
axis, as auint8
. (This is the same value as theyyy
component of the*.map
file name.) - The next two bytes are blank, i.e.
00 00
. - The next 4 bytes represent the image ID of the marker icon, as a
uint
in little-endian byte order. - The next 2 bytes indicate the size of the string that follows, as a
uint
in little-endian byte order. - The next bytes represent the marker description as a windows-1252-encoded string. As a result, only the 128 symbols that can be represented in the windows-1252 encoding can be used in marker descriptions. Each marker description is limited to 99 such symbols — when viewed in the client, markers with descriptions exceeding 99 bytes are truncated, and the map file is updated with the truncated marker description.
This structure is repeated for every marker in the file, after which the file ends.
The following marker icon IDs are available:
Byte value / marker ID | Short name | Meaning |
---|---|---|
0x00 |
checkmark |
green checkmark ✔ |
0x01 |
? |
blue question mark ❓ |
0x02 |
! |
red exclamation mark ❗ |
0x03 |
star |
orange star 🟊 |
0x04 |
crossmark |
bright red crossmark ❌ |
0x05 |
cross |
dark red cross 🕇 |
0x06 |
mouth |
mouth with red lips 👄 |
0x07 |
spear |
spear 🏹 |
0x08 |
sword |
sword ⚔ |
0x09 |
flag |
blue flag ⚑ |
0x0A |
lock |
golden lock 🔒 |
0x0B |
bag |
brown bag 👛 |
0x0C |
skull |
skull 💀 |
0x0D |
$ |
green dollar sign 💰💲 |
0x0E |
red up |
red arrow up ⬆️🔺 |
0x0F |
red down |
red arrow down ⬇🔻 |
0x10 |
red right |
red arrow right ➡️ |
0x11 |
red left |
red arrow left ⬅️ |
0x12 |
up |
green arrow up ⬆ |
0x13 |
down |
green arrow down ⬇ |
Here’s what the marker icons look like in the Tibia client: