2016-04-20 How To Get Started With Text Mapper

Here’s how to get started with a random map:

  1. Visit
  2. Click the Random button
  3. Click the Submit button
  4. Use the Back button to make changes

(If you click the Random link then you won’t be able to get back to the text that generated it all – you’ll have to look at the page source and at the very end you’ll find the text that generated the map in a comment, just in case.)

To get a feel for the icons available, do the following in another tab:

  1. Visit
  2. Click Help
  3. Scroll down to the Gnomeyland section
  4. Compare example data and result

Campaign Wiki Bonus: If you can find a way to store your text describing the map online, then your map will be live – you can change the text and reload your map, and it will have changed as well. For one of my campaigns, for example, I keep the text on on a page, and I use the link to the raw text of that page to generate the actual map.


Add Comment

2016-03-02 Gridmapper with vi Keys

I’m an Emacs person, so it pains me to admit that I added vi keys to Gridmapper:

h l


Add Comment

2016-03-01 Gridmapper Review

Martin Ralya wrote about Gridmapper on his blog:

“Gridmpapper is a fantastic mapping tool, easy enough to use that I get my ideas down as fast as possible, but not so simple that it lacks options. […] The learning curve is shallow. Fiddle around for 10 minutes, and you’ll be set.”

Yay! :)


Add Comment

2015-08-27 Settlements for Random Maps

I’ve been looking for map symbols and have added them to my favorite Text Mapper library, the Gnomeylands. These icons are based on the icons by Gregory B. MacKenzie.

New settlement icons: thorp, village, town, large-town, city. And some religious buildings: shrine, law, chaos.

Text Mapper also includes a random wilderness generator using Erin D. Smale’s algorithm (Part 1 for the terrain, Part 2 for the encounters). Currently I’m only supporting major encounters 1 to 3: settlements, fortresses and religious orders. Please note that these will be rare. Not every random map will contain one of these.

I also added agriculture. If a settlement is built on a plains hex, that hex is colored like soil or light soil. If the settlement is not built on a plains hex, or if it is a large town or a city, then a neighboring plains hex will be changed to soil or light soil colored fields.

Also note the black & white random map option…

À propos random maps: A few days ago I added this random maps feature. It allows you to keep reloading the page until you like what you see. You can always save the result as a .svg file and keep editing it using Inkscape. If you want to tweak it online, however, you need the actual map data. It’s available from the page source. At the end of the SVG, you will find the map data in a comment like this one:

<!-- Source
0101 light-grey grass
0102 light-grey grass
0103 green forest
2318 green forest


You can copy and paste the map data (without the <!-- and -->) into the Text Mapper text area, submit, go back and make change to it until you’re happy with the result.


Add Comment

2015-08-24 Russian Maps

Oh my god the rabbit hole of old Russian maps… I was looking at the Gnomeyland icons by Gregory B. MacKenzie – as one does! – thinking of adding a few icons. So then I start looking for old Russian map symbols. I’m looking at an old article on trees and forests. But how to find more examples? I’m not interested in just trees and forests! So, next stop is Old Maps Online and searching for Leningrad. After all, wouldn’t the rich old Russians be mostly interested in maps of the areas they already knew? That’s the 1% for you… OK, found something! So, who’s this Matthäus Seutter dude? Sounds German. And he has a Wikipedia page. I love the Internet. Look at all those extra links! I love the sound of “Digitalisierte Ausgabe”. So now I’m clicking on one: Transylvaniae, Moldaviae, Walachiae, Bulgariae nova et accurata Delineatio, Magnam Partem Hodierni Theatri Bellici ob oculos ponens / opera et fumtibus Matthaei Seutteri, ... Who doesn’t want old maps of Transylvania!? Too bad the resolution isn’t too good. But wait! I also love the sound of View item at National Library of France! This is awesome because you can really zoom in!

OK. Now I just have to create those damn icons. Or fix myself some lunch.

What I want to do is implement Erin D. Smale’s Hex-based Campaign Design (Part 2): encounters. The first step will be to add more settlements to my Gnomeyland library for Text Mapper. Click that Random map link to get a random terrain using his process described in Part 1.

The map Historia Imperii Romano-Germanici has little pictures galore, including little camps instead of towns.


Comments on 2015-08-24 Russian Maps

Meanwhile in Russia they are just about to ban Wikipedia. Maybe once they ban the whole Internet, these old maps will become useful…

– AlexDaniel 2015-08-24 14:30 UTC

Hell is other people. Ugh!

– Alex Schroeder 2015-08-24 16:00 UTC

So, Wikipedia was blocked for a few hours in Russia. Then they changed their mind, Wikipedia is not blacklisted anymore.

But here is an interesting note. The difference between commercial and non-commercial organizations has never been as obvious. GitHub bent over and stopped displaying some of its content to Russian IPs. Reddit bent over as well, same thing, some content is not displayed for Russian IPs.

And Wikipedia? Well, their answer can be summarized by this picture:

Анус себе заблокируй, Роскомнадзор.
Block your own anus, Roskomnadzor.

Way to go.

– AlexDaniel 2015-08-25 14:05 UTC

The situation in Russia, in the Ukraine, and all the other former Republics of the Soviet Union make me dread the coming years. I’m just hoping that nobody does something really stupid. For now, we’ll just note that the US wants to send F22 fighters to Europe. [1]

– Alex Schroeder 2015-08-25 19:26 UTC

Add Comment

2014-01-11 mkhexgrid

My Old School Hex Map Tutorial tells people to use mkhexgrid, if they can. It’s what I’ve been doing for years, now.

On my wife’s laptop we now run Mac 10.9 (“Maverick”) and it no longer builds. As I’ve switched to using Homebrew, I recided to write my own Formula.

If you want to try it, save it as /usr/local/Library/Formula/mkhexgrid.rb and run brew install mkhexgrid. The only tricky thing is that it requires the GD library to be built with FreeType, apparently. If you don’t have GD installed, great. This Formula will do the right thing. If not, you might have to brew uninstall gd before proceeding.

require 'formula'

class Mkhexgrid < Formula
  homepage ''
  url ''
  sha1 '3b8e0be3636f90a3217a5e3556bdaf7bb0c49116'

  depends_on 'gd' => %w{with-freetype}

  def install
    inreplace 'Makefile' do |s|
      s.change_make_var! "DESTDIR", prefix
      s.change_make_var! "CC",
      s.gsub! /install (.*) -o 0 -g 0/, 'install \1'
    inreplace 'mkhexgrid.cpp' do |s|
      s.sub! 'catch (exception &e)', 'catch (std::exception &e)'
    system "make" # needs to be separate
    system "make", "install"

  test do
    # test the example from the man page (but without inches)
    system "mkhexgrid", "--output=ps", "--image-width=2448",
    "--image-height=1584", "--hex-side=36", "--coord-bearing=0",
    "--coord-dist=22", "--coord-size=8", "--grid-thickness=1",
    "--coord-font=Helvetica", "--grid-grain=h", "--grid-start=o",
    "--coord-tilt=-90", "--centered", "-o", ""


Comments on 2014-01-11 mkhexgrid

These days, it’s part of Homebrew:

alex@Megabombus:~$ brew search mkhexgrid
homebrew/games/mkhexgrid ✔
alex@Megabombus:~$ brew install mkhexgrid
Warning: homebrew/games/mkhexgrid-0.1.1 already installed
alex@Megabombus:~$ brew reinstall mkhexgrid
==> Reinstalling homebrew/games/mkhexgrid
==> Downloading
######################################################################## 100,0%
==> make
==> make install
🍺  /usr/local/Cellar/mkhexgrid/0.1.1: 14 files, 214.9K, built in 28 seconds

– Alex Schroeder 2016-04-13 05:41 UTC

Add Comment

2013-07-16 Inkscape Mapping and mkhexgrid

Today I needed to add the island of Tirnanog to my campaign map using Inkscape. In order to do that, I needed to add more hexes in the background—I needed to “grow the ocean”. I looked at my Old School Hex Map Tutorial and figured I must have used the Inkscape Boardgames Extension. When I checked, however, I was unable to find the menu. Perhaps Inkscape has changed and it needs to be reinstalled? I decided to give mkhexgrid another try. Fiddling with the spec file for a bit, I determined that these were the correct settings:

# start with an odd number!

By now the map is so big, redoing it for Hexographer or Text Mapper seems like a lot of work. When I see the efforts required to update this map in a sluggish Inkscape on a 1024×768 monitor, however, it seems like a lot of work as well.

Update: I actually wanted to see how much time it took to get a decent result using Text Mapper and compare it with my old style, based on the Old School Hex Map Tutorial I wrote.

I don’t know. I like the colors of the Gnomeyland icons. Check out Map Symbols: Trees & Forests on Old Russian Maps by John Krygier for some source material. But really – is it much better? Is it much faster? I don’t think so.

Original, from the Wilderlands of High Fantasy box:

My “old school hex map” style:

Text Mapper, using the Gnomeyland icons by Gregory B. !MacKenzie (CC BY SA):

For the curious, here is the source for Text Mapper:

3901 water
3902 water
3903 water
3904 water
3905 water island
3906 water
3907 water
3908 water
4001 water
4002 water
4003 water
4004 water
4005 water
4006 water
4007 water island
4008 water
4101 water
4102 water
4103 water
4104 water
4105 water
4106 water
4107 water island "Andaman Isles"
4108 water
4201 water
4202 water
4203 water
4204 soil tower "Marechal"
4205 dark-green forest
4206 water islands
4207 water islands
4208 water
4301 water
4302 water
4303 water
4304 light-grey hill
4305 light-grey mountain
4306 light-grey
4307 water
4308 water
4401 water
4402 water
4403 light-grey hill
4404 grey mountain "Needles Peak"
4405 light-grey hill
4406 water
4407 water
4408 water
4501 water
4502 dark-green forest
4503 light-grey hill
4504 green forest-hill
4505 soil tower "Lanka"
4506 water
4507 water
4508 water
4601 water
4602 soil tower "Calfat"
4603 soil lake keep "Kailasa"
4604 light-grey hill
4605 water
4606 water
4607 water
4608 water
4701 water
4702 light-grey
4703 light-grey hill
4704 soil tower "Heratus"
4705 dark-green forest
4706 water
4707 water
4708 water
4801 water "Windward Peninsula"
4802 soil keep "Dalmaric"
4803 soil keep "Talimanor"
4804 dark-green forest "Pardolock Jungle"
4805 water
4806 water
4807 water
4808 water
4901 water
4902 water island
4903 water
4904 water
4905 water island
4906 water
4907 water
4908 water
5001 water
5002 water
5003 water
5004 water
5005 water
5006 water
5007 water
5008 water
lake xml <circle cx="0" cy="0" r="50" fill="#6ebae7" stroke="black" stroke-width="3"/>
island xml <circle cx="10" cy="10" r="25" fill="#dcddbe" stroke="black" stroke-width="3"/>
islands xml <circle cx="-20" cy="20" r="20" fill="#dcddbe" stroke="black" stroke-width="3"/><circle cx="20" cy="-20" r="15" fill="#dcddbe" stroke="black" stroke-width="3"/>

4603-4903 fjord
4602-4902 fjord
fjord path attributes stroke="#6ebae7" stroke-width="20" fill-opacity="0" stroke-linecap="round"

other <text stroke="white" stroke-width="10px" font-size="50pt" x="6300" y="550" transform="rotate(330 6300,550)">Tirnanog Isle</text><text font-size="50pt" x="6300" y="550" transform="rotate(330 6300,550)">Tirnanog Isle</text>


Add Comment

2013-06-27 Text Mapper for Traveller

A few years ago I was working on Traveller Subsector Mapper. As I was thinking about the new Text Mapper, I wondered how feasible it would be to generate a Traveller subsector using Text Mapper. I know, it’s a stupid waste of time because I already have the Traveller Subsector Mapper. But I couldn’t resist the lure of showing off how flexible Text Mapper could be. And it works!

Subsector created using Traveller Subsector Mapper:

Subsector created using Text Mapper:

In order to reproduce it, use the following input:


The example file traveller-example.txt uses the library traveller.txt defining everything it requires.


Comments on 2013-06-27 Text Mapper for Traveller

Nice curved routes! I like it.

BeRKA 2013-06-27 21:38 UTC

Looks gorgeous, actually.

noisms 2013-06-27 21:49 UTC


AlexSchroeder 2013-06-28 07:18 UTC

I like the new version better (-:

– Harald Wagener 2013-07-01 12:08 UTC

I love your random generators (the idea behind TextMapper is fantastic), but as I know next to nothing about programming, I can’t do one thing I’d like: change your Traveller map to generate a larger subsector. The reason is I’d like to use it with your “wilderness” generator. Let me explain. The “travel” and “communication” routes on your Traveller generator could be used to trace important locales in a point-crawl / node-crawl / path-crawl. Expanding those to cover a larger map (let’s say 30x40 hexes) would be a great way to indicate the point of interests in a given region. I hope it’s not too confusing to understand what I’m trying to say.

Marcelo Paschoalin 2015-10-09 14:46 UTC

Yeah, the problem is that the UWP Generator doesn’t produce the output format necessary for Text Mapper. You need to create the Text Mapper input manually. The easiest solution would be to just print out multiple subsectors and connect them manually. For my own Fantasy mapping needs, I often find that placing roads and rivers between settlements is a manual process (example, data with trails and streams at the end).

– AlexSchroeder 2015-10-09 15:09 UTC

Add Comment

2013-06-05 Gnomeyland and Text Mapper

When I wrote my Old School Hex Map Tutorial, I noticed the Gnomeyland Map Icons and the Making Hex Maps With Inkscape tutorial by Gregory B. !MacKenzie.

After a futile attempt to write a tool that would extract those icons automatically and make them usable for Text Mapper, I did the work by hand. Look at the example below… Beautiful! And since this is SVG, you can quickly generate your first map and later you can keep working on it using Inkscape.

To regenerate the map above, visit Text Mapper and use the following “map”:


This loads the Gnomeyland example map which uses the Gnomeyland library.

The Gnomeyland example map uses the tiles from the library. Here’s what you would need to generate just the lower part of the map:

0005-0806 trail
0105 dark-green fir-forest "to the caves"
0106 dark-green fir-forest
0205 green fir-forest
0206 green fir-forest
0305 green firs
0306 soil keep "The Keep"
0405 light-soil
0406 light-soil
0505 light-grey mountains
0506 light-green forest-hill
0605 grey grass
0606 grey marsh
0706 dark-grey swamp
0806 dark-grey castle "Dolorous Garde"

Just paste it into Text Mapper. :)


Comments on 2013-06-05 Gnomeyland and Text Mapper

I wonder if it wouldn’t look a bit better if the trail were drawn below the icons.

Andreas Gohr 2013-06-05 14:06 UTC

Hm… I remember moving it behind the text labels, but you’re right, it would make sense to draw hex backgrounds first, then trails, then trails, then things within the hex and finally the text labels…

AlexSchroeder 2013-06-05 14:50 UTC

Add Comment

2013-06-05 Another Gnomeyland Example

I wanted to test the recently added Gnomeyland icons for Text Mapper and looked at the following map:

This is the text description I came up with:

0101 water
0102 water
0103 water
0104 water
0105 water
0106 water
0201 water
0202 dark-grey marsh
0203 dark-grey marsh
0204 water
0205 water
0206 water
0301 water
cave xml <line x1="30" y1="45" x2="130" y2="45" stroke="#6ebae7" stroke-width="20" stroke-linecap="round"/><path d="M 30,45 c 0,-20 -20,-20 -20,0 c 2,0 3,0 20,0 z" stroke="black" stroke-width="2"/>
0303 dark-grey tower cave "Portal"
0304 grey grass
0305 grey mountain
0306 water
0401 water
0402 grey trees
0403 water
0404 water
0405 water
0406 water
0501 water
0502 light-green tree "Silberbäume"
0503 soil
0504 water
0505 dark-grey forest-hill
0506 water
0601 water
0602 green forest
0603 green forest "Faule Wald"
0604 green forest
0605 dark-grey trees
0606 water
0701 water
0702 water
0703 dark-grey forest-mountains "Einhorn"
0704 dark-grey forest-mountains
0705 water
0706 water
0801 water
0802 water
0803 water
0804 water
0805 water
0806 water
lake xml <circle cx="45" cy="75" r="30" fill="#6ebae7" stroke="black" stroke-width="3"/>
0302 dark-grey forest  lake "See"

Note some tricks:

  1. the “cave” is defined right then and there, not in a library, and it includes a little water connection to the central bay
  2. hex 0302 with the lake comes at the end such that the neighboring hexes don’t overwrite the overflow


I could work on this some more, or I could just take it, import it into Inkscape, and keep working on it.

The big question is: how much easier is it to work with a text description of a map compared to fiddling with Inkscape directly? As I create new maps, I’m no longer sure this map generator is all that useful, to be honest.


Comments on 2013-06-05 Another Gnomeyland Example

I think it could useful as a kind of intermediate language (like MSIL). For instance, you could make a front-end (GUI or website) that lets you tweak some basic things easily (number of roads, cities, amount of water, etc.), and with a push on “Generate”, the front-end then spits out Text Mapper “source code” and feeds it to the back-end, producing the final SVG.

Jensan 2013-06-05 17:31 UTC

Hm, good point. Perhaps somebody could write a random map generator without having to implement the map drawing aspect.

AlexSchroeder 2013-06-05 20:24 UTC

I like the text mapper. I would rather write the textual description than trying to do this in inkscape. At your level of artistic talent, maybe it’s not that useful …

Harald 2013-06-05 20:33 UTC

Well, even for people not into the artistic aspect of it could get by reasonably, I assume, by opening the Gnomeyland template, for example, and using copy and paste. I haven’t tried it, however. Something to consider.

AlexSchroeder 2013-06-05 21:09 UTC

I agree with Jensan, a GUI Editor of some sort would be really helpful I guess.

Andreas Gohr 2013-06-06 08:54 UTC

Add Comment