File format |
The binary map file format is very compact. It is block based so you can quickly and easily load the file. The header and table are fixed parts. Following them, are the object datas. Some objects may also have subdata appended to them. The file length should be divisible by 4.

Info: 'Object' represents a layer, image, geom. object or tileset. Tilesets are always at the beginning of a map file. The background-object follows the tileset-objects. All other objects follow the background object.
|
Header |
The header contains the main information of a map file. The header is not encrypted. The CRC32-checksum is calculated from offset [8]. SHA1-fingerprint contains the password-hashvalue.
Offset | Bytes | Description |
0 | 3 | 'UMF' signature (Universal Map File) |
3 | 1 | bit 0-5 = version 1=Version 1.0-1.1 2=Version 1.2-1.3 3=Version 1.4+
bit 6 = created with PROversion (0=no, 1=yes) bit 7 = encrypted (0=no, 1=yes)
|
4 | 4 | CRC32-checksum |
8 | 20 | SHA1-fingerprint (only PROversion) |
28 | 2 | block count |
30 | 2 | layer count |
32 | 2 | image count |
34 | 2 | geom. objects |
36 | 2 | tileset count |
38 | 2 | animation count |
40 | 2 | basedata count |
42 | 2 | datalayer count |
44 | 2 | metadata count |
46 | 2 | variables count (v1.4+) |
48 | 2 | default values count (v1.4+) |
50 | 14 | *reserved* |
|
| block size 64 bytes |
|
Table |
The map file contains blocks. A block can store either objectdata, basedata, metadata, datalayer, etc. Every block can have a different size. The table contains the size information for each block.
Offset | Bytes | Description |
0 | 4 | size block 1 |
4 | 4 | size block 2 |
... | 4 | size block n |
|
Tileset |
Tileset-definitions follow the table-block. The tileset can only contain animation as subdata.
Offset | Bytes | Description |
0 | 1 | constant 100 |
1 | 1 | mask color R |
2 | 1 | mask color G |
3 | 1 | mask color B |
4 | 2 | frame width |
6 | 2 | frame height |
8 | 2 | Y-factor |
10 | 2 | animation count |
12 | 2 | frame count |
14 | 12 | image file |
|
| block size 26 bytes |
|
Animation |
The animation block follows the tileset-definitions.
Offset | Bytes | Description |
0 | 1 | constant 101 |
1 | 2 | frame count (1...) |
3 | 2 | start frame (1...) |
5 | 1 | mode (1=paused, 2=forward, 3=backward) |
6 | 1 | default tile value (v1.2+) |
7 | 4 | *reserved* (msecs time in program) |
11 | 2 | *reserved* (current frame in program) |
... | 2 | animation frame |
... | 2 | animation time |
... |
|
|
|
| block size 13+x bytes |
|
Default data values (v1.2+) |
This table contain default values from each tile of one tileset. This block follow tileset-definitions.
Offset | Byte | Description |
0 | 1 | constant 105 |
1 | 2 | frame count |
3 | 1 | *reserved* |
4 | x | standard value 1 byte pro frame |
|
| block size 4+x bytes |
|
Background |
Each map has a background object. It is always stored after the tileset-definitions. It can have metadata as subdata.
Offset | Bytes | Description |
0 | 1 | constant 0 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | image file |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 4 | map width |
28 | 4 | map height |
32 | 1 | fill mode (0=without, 1=color, 2=image, 3=masked image) |
33 | 1 | fill color R |
34 | 1 | fill color G |
35 | 1 | fill color B |
|
| block size 36 bytes |
|
Layer (rectangular) |
This layer can contain basedata, metadata or the datalayer as subdata.
Offset | Bytes | Description |
0 | 1 | constant 1 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 4 | layer width |
28 | 4 | layer height |
32 | 2 | tileset number |
34 | 1 | masked (0=no, 1=yes) |
35 | 1 | endless layer repeat (0=no, 1=yes) v1.4+ |
|
| block size 35 bytes block size 36 bytes (v1.4+) |
|
Layer (isometric 1) |
This layer can contain basedata, metadata or the datalayer as subdata.
Offset | Bytes | Description |
0 | 1 | constant 2 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 4 | layer width |
28 | 4 | layer height |
32 | 2 | tileset number |
|
| block size 34 bytes |
|
Layer (isometric 2) |
This layer can contain basedata, metadata or the datalayer as subdata.
Offset | Bytes | Description |
0 | 1 | constant 3 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 4 | layer width |
28 | 4 | layer height |
32 | 2 | tileset number |
34 | 1 | tile shift (0=no, 1=yes) |
|
| block size 35 bytes |
|
Layer (hexagonal 1) |
This layer can contain basedata, metadata or the datalayer as subdata.
Offset | Bytes | Description |
0 | 1 | constant 4 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 4 | layer width |
28 | 4 | layer height |
32 | 2 | tileset number |
34 | 1 | tile shift (0=no, 1=yes) |
|
| block size 35 bytes |
|
Layer (hexagonal 2) |
This layer can contain basedata, metadata or the datalayer as subdata.
Offset | Bytes | Description |
0 | 1 | constant 5 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 4 | layer width |
28 | 4 | layer height |
32 | 2 | tileset number |
34 | 1 | tile shift (0=no, 1=yes) |
|
| block size 35 bytes |
|
Layer (clone) |
This layer does not contain basedata or the datalayer. It can only contain metadada as subdata. Each layer has its own layer number. The first layer is number 1.
Offset | Bytes | Description |
0 | 1 | constant 6 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 2 | layer number |
|
| block size 26 bytes |
|
Basedata |
This data contain main tile-informations from a layer. I use this data to draw a layer. Basedata can only follow layer-objects (but not clone). You can find the data format here.
Offset | Bytes | Description |
0 | 1 | constant 102 |
1 | 1 | depth (4, 8, 12 or 16) |
2 | 4 | data length in bytes |
6 | 2 | *reserved* |
8 | x | data... |
... |
|
|
|
| block size 8+x bytes |
|
Datalayer |
This data contain invisible tile-informations from a layer. The datalayer can only follow layer-objects (but not clone). You can find the data format here.
Offset | Bytes | Description |
0 | 1 | constant 103 |
1 | 1 | depth (1, 2, 4 or 8) |
2 | 4 | data length in bytes |
6 | 2 | *reserved* |
8 | x | data... |
... |
|
|
|
| block size 8+x bytes |
|
Metadata |
This data contain invisible informations from a object. Metadata can follow all objects (except tileset).
Offset | Bytes | Description |
0 | 1 | constant 104 |
1 | 1 | data format (0=binary, 1=ascii) |
2 | 4 | data length in bytes |
6 | 2 | *reserved* |
8 | x | data... |
... |
|
|
|
| block size 8+x bytes |
|
Variables (v1.4+) |
This data contain invisible informations from a object. Variables can follow all objects (except tileset).
Offset | Byte | Description |
0 | 1 | constant 106 |
1 | 1 | *reserved* |
2 | 2 | variables in this block |
4 | 4 | data length in byte |
8 | x | data (description): 1) string length A for name (1 byte) 2) string length B for value (1 byte) 3) string name with size A 4) string value with size B |
... |
|
|
|
| block size 8+x bytes |
|
Object (image) |
This object does not contain basedata or the datalayer. It can only contain metadada as subdata.
Offset | Bytes | Description |
0 | 1 | constant 7 |
1 | 1 | visible (0=nein, 1=ja) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 2 | tileset number |
26 | 2 | animation number/tile number |
28 | 2 | animation start frame |
30 | 1 | animation mode (0=default, 1=paused, 2=forward, 3=backward) |
31 | 1 | masked (0=no, 1=yes) |
|
| block size 32 bytes |
|
Object (block) |
This object does not contain basedata or the datalayer. It can only contain metadada as subdata. Each layer has its own layer number. The first layer is number 1.
Offset | Bytes | Description |
0 | 1 | constant 8 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | adjustment x |
15 | 1 | adjustment y |
16 | 4 | tile position x |
20 | 4 | tile position y |
24 | 2 | tileset number |
26 | 2 | animation number/tile number |
28 | 2 | animation start frame |
30 | 1 | animation mode (0=default, 1=paused, 2=forward, 3=backward) |
31 | 1 | masked (0=no, 1=yes) |
32 | 2 | layer number |
|
| block size 34 bytes |
|
Object (point) |
This object does not contain basedata or the datalayer. It can only contain metadada as subdata.
Offset | Bytes | Description |
0 | 1 | constant 9 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
|
| block size 24 bytes |
|
Object (line) |
This object does not contain basedata or the datalayer. It can only contain metadada as subdata.
Offset | Bytes | Description |
0 | 1 | constant 10 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax X |
15 | 1 | parallax Y |
16 | 4 | start position x |
20 | 4 | start position y |
24 | 4 | end position x |
28 | 4 | end position y |
|
| block size 32 bytes |
|
Object (rect) |
This object does not contain basedata or the datalayer. It can only contain metadada as subdata.
Offset | Bytes | Description |
0 | 1 | constant 11 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 4 | width |
28 | 4 | height |
|
| block size 32 bytes |
|
Object (oval) |
This object does not contain basedata or the datalayer. It can only contain metadada as subdata.
Offset | Bytes | Description |
0 | 1 | constant 12 |
1 | 1 | visible (0=no, 1=yes) |
2 | 12 | name |
14 | 1 | parallax x |
15 | 1 | parallax y |
16 | 4 | position x |
20 | 4 | position y |
24 | 4 | radius x |
28 | 4 | radius y |
|
| block size 32 bytes |
|