L3DT documentation
Large 3D terrain generator

Mosaic master file

The L3DT mosaic master file (*.mmf) is an ASCII file that describes the size and number of map files within a mosaic map.

A typical MMF might look like this:

L3DT Mosaic master file
#MosaicName: Alpha1
#MosaicType: RGB
#FileExt: bmp
#nPxlsX: 4096
#nPxlsY: 2048
#nMapsX: 8
#nMapsY: 4
#SubMapSize: 512
#HorizScale: 1.00
#TileState: 0 OK
#TileState: 1 OK
#TileState: 2 OK
#TileState: 3 OK
#TileState: 4 OK
#TileState: 5 OK
#TileState: 6 OK
#TileState: 7 OK
#TileState: 8 OK
#TileState: 9 OK
#TileState: 10 OK
#TileState: 11 OK
#TileState: 12 OK
#TileState: 13 OK
#TileState: 14 OK
#TileState: 15 OK
#TileState: 16 OK
#TileState: 17 OK
#TileState: 18 OK
#TileState: 19 OK
#TileState: 20 OK
#TileState: 21 OK
#TileState: 22 OK
#TileState: 23 OK
#TileState: 24 OK
#TileState: 25 OK
#TileState: 26 OK
#TileState: 27 OK
#TileState: 28 OK
#TileState: 29 OK
#TileState: 30 OK
#TileState: 31 OK


For L3DT to load a mosaic map, it must know where to put it. Thus the MMF includes a member called MosaicName, which is a string that identifies the map into which the mosaic will be loaded. Below are listed the MosaicNames recognised by the L3DT mosaic-loader:

Name What is it?
“DM” The design map
“HF” The heightfield
“WM” The water map
“WS” The salinity map
“AM” The attributes map
“TN” The terrain normals map
“LM” The light map
“SH” The shadow map
“TX” The texture map
“Alpha_1/2/etc” The alpha maps

If the map is not intended to be used by L3DT's calculations, then the MosaicName can be anything you like.


The MosaicType member specifies how the data should be interpreted when loading. Valid types are listed below:

Type What is it?
“HF” A heightfield
“WM” A water map
“AM” An attributes map
“TN” A terrain normals map
“BYTE” An 8-bit map
“WORD” A 16-bit map
“RGB” A 24-bit image map
“RGBA” A 32-bit alpha-masked image map
“DWORD” A generic 32-bit map
“LM” A light map (legacy; now use “RGB”)
“TX” A texture map (legacy; now use “RGB”)
“24bit” A texture map (legacy; now use “RGB”)

Please not that while the MosaicType string is often the same value as the MosaicName string, this is not the case in general. For example, the heightfield has a name of “HF” and a type of “HF”, while the salinity map has a name of “WS” and a type of “HF” (the salinity map is actually stored as a heightfield within L3DT).


The following mosaic tile file extensions are supported:

FileExt What is it?
hff An L3DT heightfield file
hf2 / hfz / hf2.gz An L3DT compressed heightfield file
ter A Terragen terrain file
wmf An L3DT water map file
amf / amf.gz An L3DT attributes map file
bmp A bitmap image
jpg A JPEG image
png A PNG image
tga A TGA image
dds A DDS image
raw A raw binary file
x A DirectX mesh file (export only).
obj A Wavefront OBJ mesh file (export only).

Many more formats are supported by plugins.

#nPxlsX and #nPxlsY

The width of the map is given by nPxlsX, and the height by nPxlsY. Both are measured in pixels.

#nMapsX and #nMapsY

nMapsX and nMapsY state the number of mosaic tiles in the x and y axes, respectively. In the above example, the mosaic is an 8×4 grid of tiles, for a total of 32 tiles.


The SubMapSize value describes the side-length of the tiles in the mosaic, and is measured in pixels. A mosaic tile is always square.


The HorizScale member specifies the 'real-world' pixel-spacing of the map, and is measured in metres/pixel.


It is possible that some tiles in a mosaic will be missing. For example, the water map will not save tiles in which no water has been flooded. A list of TileStates are included in the MFF to specify whether tiles are present or absent. The syntax is:


Where TileIndex is the linear index of a tile, given by y × nMapsX + x, and TileState is a string that is either “OK” (the tile is present) or “FREE” (the tile is absent). Pixels in absent tiles are assumed to have a value of 0.

The ordering of tiles in a mosaic map is explained on the mosaic algorithms page.

l3dt/formats/specs/mmf.txt · Last modified: 2017/08/31 05:18 (external edit)
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki