Update!! I've reviewed another map generator, this one for generating Medieval Cities!
No series about world-building is complete without a discussion of map-making. Open just about any fantasy novel and you’ll find a map, large or small, illustrating the book’s setting in loving detail. Similarly, maps form a key part of the Game Master’s repertoire of tools and props for lovers of homebrew table-top fantasy games.
Not being an artist, there’s not a lot I can add to this subject, at least not in the traditional sense of writing a tutorial on how to create a map. No, there are many talented people much better qualified who’ve done this already for free on YouTube or via sites like the Cartographer’s Guide or Fantastic Maps.
What I can do, however, is give my thoughts and opinions on three unique open-source projects I’ve stumbled across that can generate a map for you — no artistic ability or Photoshop skills needed!
At least that’s the hope…
Fantasy Map Generator by Azgaar
The first project is the slickest and most user friendly, but it’s very much a work-in-progress and still under active development.
On the map itself, you can easily change the country and city labels by clicking on them. You can change the text and the appearance, including changes to font and colour.
The menu is divided into a number of tabs that configure the Layout, Style, Options and so on.
The Layout menu allows you change map-presets (Political, Cultural, Heightmap and Pure landmass) which are pre-defined views that toggle various map layers.
The Style menu gives you control over the appearance of your map elements. You can select everything from the Ocean to Rulers using the drop-down menu and then change colour, opacity and even add a basic filter, such as blur or a shadow.
The Style menu also allows you to apply a global filter, with a choice between Greyscale, Sepia (shown above), Dingy and Tint.
The Options menu allows you to set parameters for new maps. You can set the size, heightmap template along with number of settlements (Burgs) and states the generator will produce. You can also define environmental parameters such as precipitation and swampiness.
The Options menu also lets you set the the generator’s output settings for zoom level and PNG resolution.
The Customize1 menu allows you to edit the currently generated map. You can tweak the heightmap (used to model the terrain) — but I only gave it a cursory look.
The real beauty is the Countries editor, which lets you change the name (and the capital’s name), the number of Burgs, the area and the population.
The app allows you to control your scale using the scale editor (shown below). Scale is an important but often overlooked aspect of world-building and fantasy map-making. When I design a world, not only do I need to understand distances (for example, travel times) but also area (for designing realistic economies).
Saving, loading and exporting maps
Just because this app runs in a browser doesn’t mean you can’t get data in and out of it. The menu gives you the option to Save and Load your map. You can save to the app’s internal file format (.map, which is basically SVG), SVG and PNG. Saving as a .map file allows you to load the file back into the app at a later time.
PNG export is good for dumping you map to a file format you can easily share or import into another program such as Scrivener, Word or Photoshop.
However, SVG has much great potential, allowing to edit the map as a Vector file in a program such as Adobe Illustrator or Inkscape. In this way, there’s no limit to what you can do with your map to customise it.
Performance and closing thoughts
On Safari, the performance wasn’t great, especially after using the app for a while. Operations such as scaling and moving would often become sluggish with noticeable delay.
Performance was a little better on Chrome, but I still found it a little too laggy for comfort. I wasn’t sure if that was due to my laptop (i5 with 8GB of Ram) or if it’s because web apps, well, let’s be honest… universally terrible!
In all though, I was very impressed with the application. It’s got a lot of spit ’n’ polish and it’s under active development. The maps it produces are pleasing to look at and SVG export opens it to considerable customisation in a Vector graphics editor.
The next project, with the rather cool name of Nortantis, is a java app that began life as the developer’s academic project. It uses tectonic plate simulation to generate continents giving them a nice, organic look. It also adds map elements like rivers, trees and so on, and even generates names based on reference files (books) you give it.
As a java app, it takes a little more effort to run than the web app above. You have to have Java 8 installed — which isn’t default on macOS, Windows or Linux. I didn’t have it installed, so off I went to Oracle to grab the macOS binary.
Once Java was installed (and I jumped through Apple’s security hoops), I was able to launch Nortantis right from Finder.
Nortantis provides a simple configuration window to set the generator’s parameters
Press Preview without touching the settings and you’ll get something like this.
When you want to make changes, you step through the pages like a Wizard of yesteryear.
The Terrain page allows you to set the Seed (a big number to kick of the random process), World Size and land postition probability values (i.e. centred in the map or near the edge).
In the Background Tab, you can customise the look of the generated map.
You can generate the background from Fractal noise2, a texture file or you can supply your own file for the land and ocean.
If you choose Fractal noise, you have the option to overlay different colours over the background for the ocean and/or the land.
The Regions menu allows you to specify if you want to draw political regions. If you do, you can further customise the colour by fiddling with the Hue, Saturation and Brightness.
The Effects page lets you customise the appearance of various elements. You can blur land and do the same to the ocean, or add a wave effect.
You can also colour elements such as your coastlines, rivers and so on.
The Borders page allows you to configure how borders are drawn or you can disable them.
The Text page allows to custom how text (for labels) is displayed in terms of the Font, colour (text and background), weight and size.
It also allows you to specify the dictionary file from which the random names are created — you can add your own text files too by dropping them in the app’s assets/books directory, which is a nice feature.
Speaking of nice feature, you can replace a lot of the textures and icons used in the assets folder with your own — the defaults aren’t as aesthetic as say, the brush sets you can find on Deviant Art or the Cartographer’s Guide website I mentioned above.
If you don’t want text labels then you can choose not to draw them. You’ll want to do this if you plan on using your own names are you prefer to control the look of typography in ways that’s not possible in the app.
The resulting file came out at 4140x 2348 (I’ve reduced the one below), which is the default size. It generated in a few seconds on my laptop. The result aren’t bad at all.
With the map above I didn’t change the default settings. There’s a lot of scope in its suite of options and the ability to change textures and icons, is something I’m very keen to explore.
One reason why I like this program is it creates a style of map commonly employed with Photoshop technique that take quite a bit of time and skill to create manually.
The app’s weakness is that you can’t change the layout but it’s easy to keep creating a random preview (by changing the seed number in the Terrain tab) until you like the layout and then render it as required with the setting to match your particular needs and tastes.
Fantasy Map Generator by Ryan Guy
Finally, the last project is the easily the nerdiest and least user friendly. It’s not so much a product, as an exercise to develop a C++ implementation of the map-making methods first described by Martin O’Leary.
Guy’s implementation requires that you build the app from source, and once you do, it works from the command line — I did say it was the least user friendly.
I first tried it on Linux, where it was trivial to compile and install. For the purpose of this review however, I’m going to see how easy it is to install on macOS High Sierra (10.13.4), which is my daily driver3.
Firstly I need to clone the repository from GitHub into a temporary directory.
$ mkdir ~/tmp && cd ~/tmp $ git clone https://github.com/rlguy/FantasyMapGenerator.git
Reading the installation instructions, shows I need to install some dependencies that aren’t installed by default on macOS, namely cmake and the cairo graphics library along with cairo’s Python bindings. For this I’ll use the wonderful Homebrew package manager.
Lets start with cmake.
$ brew install cmake
Next I I installed cairo and its Python bindings. The app uses Cairo (via Python) to do the actual drawing of the map, while I assume the raw data crunching is done in C++ for speed.
$ brew install cairo --use-clang
The command tells brew to compile and install cairo using Apple’s clang compiler. I then tried to install the Python cairo library using brew (
brew install py2cario) but things started to go pear shaped. The system Python installation that ships with macOS wouldn’t register the module. To fix it, I installed a Python virtual environment and added an appropriate symlink to the location where Homebrew installed the library.
$ echo "/usr/local/Cellar/py2cairo/1.17.0/lib/python2.7/site-packages" > ENV/lib/python2.7/site-packages/cairo.pth
Finally, with my dependencies installed (and my Python virtual environment active) I was able compile the project as per the instructions.
$ mkdir build && cd build $ cmake .. $ make
After all that, I get a newly created program, map_generation in my build directory.
Let’s see if it’s worth it!
The GitHub page provides the full instructions for creating a map and I won’t repeat them here. First thing I tried was to run it without any options and this is what it produced.
It’s not bad! Quite attractive in an old-school fantasy paperback kind of way (which is a stated goal of Martin O’Leary’s original project). The options allow you to tweak the output using command line arguments.
You can, for example, show or hide borders, rivers, slopes, contours, cities, tows etc. You can also set the number of towns and cities and adjust the map’s size and level of detail.
In the above example, I changed the output to 2000x2000 pixels and removed labels. By removing labels, you can easily import the map into your image editor of choice and add your place names, or even colour the map.
Lastly a word on performance. It’s very fast, as you’d expect from an app compiled from C++ — even if it is using Python to do the actual drawing. At 1920x1080 and 2000x2000 it generated the map in a matter of seconds.
So, let’s go wild and build something bigger!
I decided to build a map at 12,000 x 6,000 pixels, which it generated in 12 seconds on my MacBook Air with its Broadwell i5 powered CPU. The resulting file was 6mb, which I won’t bother uploading to save your bandwidth and mine.
So, is it worth it? The compilation process on macOS is a pain in the rear but once installed, it does what it sets out to do quite well.
With it is was able to generate a credible looking map, complete with terrain very quickly. I customised its output, by hiding/showing what you want and you can easily make further modifications yourself in an image editor like Photoshop.
Still, it’s quite limited and is only suited to creating regional maps. What it produces has a certain aesthetic that I like, but really I would need something you can customise much more.
Let’s face it, not all of us are artists — and that’s okay, we don’t have to be. Still, if you’re a writer (of books, games etc) and you need to build worlds, you’re going to need a map.
Generators can get you part, or maybe all of the way if your needs are modest. Would I use any of these programs to create a published map in a book? No, I wouldn’t. But to quickly create a working/reference map for world-building I absolutely would. I’d also have no issue turning over a generated map to artist and have them produce something.