Maps are designed by entering words which name "components" (aka "tiles") available in the MapMatic component library. For instance, to fill a square with grey, the word "fill" is used. To place a segment of wall, use the word "wall". The first line of the definition file is the name of the dungeon, while additional lines of text, up to the first blank line, are presently ignored. Such lines may eventually be used to contain options of some sort.
Here's an example definition:
The definition above creates this map:
Here's the same map, with the title turned off and cell-numbering turned on:
The cell numbers exactly match the line numbers in the definition file, to make it easy to find the correct line of the definition when making changes.
Each non-blank line of text (after the title block), consisting of one or more words, defines a cell. Each blank line signals the start of a new map row (except for any trailing blank lines, which are ignored).
Let's take a look at the source definition. The first row defined isn't very interesting... just grey fill. The second row (beginning on the 11th row of the source) is as follows:
wall.r door.m pit
wall.m wall.r ctrapdoor
The first line above defines the contents of the square numbered 11 on the map above. There are two words on the line: wall.r and bigddoor. The first word, wall.r, inserts the tile called "wall" after rotating it 90 degrees clockwise. The second word draws the "big double door" tile... note that this tile actually draws only half the double door.
As you can see, we can rotate a tile 90 degrees by adding ".r" to the end of the word. In fact, there are three transformations available: Rotate (r), Mirror Left to Right (m), and Flip Top to Bottom (f). These three transformations can be combined to reorient a tile in any of the eight possible orientations. As a convention, wall and door tiles are positioned by default to the left of the square, so wall.r places a wall on top of the tile, wall.m places one on the right side of the square, and wall.rf (or wall.mr) places a wall along the bottom of the square.
You can place a wall on the right of a cell with wall.m, or you can wait until the next cell and place a wall on the left with wall. Either way will generally produce the same effect, except along the right side of the map where an extra cell column will be inserted in the latter case.
Multiple tiles can be layered in many combinations; most tiles are partially transparent where appropriate to enable this. Note that, when layering tiles, the last tile named is on top and the first is on the bottom. In other words, tiles are drawn from left to right, with each new tile drawn on top of all previous tiles.
Line 12 and line 15 contain words beginning with a pound sign (#). Any word so marked is interpreted a text to be inserted into the center of the cell; normally, this would be used to put room numbers into the map, but any text may be so inserted. However, the text to be inserted must fit within the cell; any overlap will be cropped. A space can be inserted by using an underscore character.
Skipping down to line 24, you will discover the complexity of making a pool:
|pooloutcorner pooloutcorner.m poolside poolside.m wall.m|
pooloutcorner defines an "outside corner" of a pool; it takes two such to create the upper end of the pool, where the second is mirrored. Next comes poolside, which defines one side of a pool square (the left half), and again it takes two of these, one mirrored, to make this square's part of the pool. Finally, we place the wall on the right side with wall.m. Pool components include the white floor and grey gridline, so you must draw the wall last.