My world generation projects have gone through a few iterations now.

First, I had "Realms", in which I did a ton of cool stuff like drawing forests and rivers, generating height maps from different effects (like island shapes and preset mountain ranges), creating regions with natural boundaries like rivers, mountains, and coasts, determining the best place for cities and towns to be located, and an extensive naming system that used word combinations in English and German to produce believable medieval place names. This was really exciting to put together but the technical debt became too great in the end and I was having a lot of trouble with wind simulation, continent generation, my code structure, and miserable performance. I put down the procedural experimenting for a while.

Realms with forests, cities, and connecting roads
Realms with forests, cities, and connecting roads

Then, I decided that realms weren't enough. I wanted to make "Worlds". Realms had never felt that big, really - the regions felt kind of small and the islands produced by the generator didn't look or act like real continents. I also had had a lot of trouble with rendering mountains and wanted to do something more '3D'. So I started with Worlds. It felt really good going back to the drawing board and beginning with an eye on performance: I used a quad-tree to keep track of the voronoi cell points so that finding points would be smooth. The different logic layers like wind and hydrology were separated reasonably into different areas of the code instead of being jumbled together. The logic occurred in one place and once it was done, the map was drawn in a single step. In general, Worlds was leaps and bounds ahead of Realms.

Worlds with "low-poly" style relief shading
Worlds with "low-poly" style relief shading

But even so, some of the new features I added felt cumbersome. Settings were organized pretty poorly and wind still didn't work well. I thought the 3D style initially looked really good but the longer I worked with it the more tiresome it grew. I really wanted to make a stylized 2D map and the low-poly shading just wasn't doing that for me. The tectonics system I introduced was good on the surface but only about 10% of the resulting maps looked "fun".

Here comes Worldmaker.

  1. No longer satisfied with purely procedural maps, I want to make an application that lets the user define different "keystone" decisions that are hard to generate.
  2. I want to release the app once it's functional to get feedback - and continue to release versions with improvements that enhance or replace the "keystone" decisions.
  3. To do this, I decided to make a launcher first. A launcher will let users install different versions of the app and create, load, and share their own world projects.

What are examples of "keystone" decisions? In Realms, only one keystone could be set: The map's seed, a number used to determine every random aspect of the map. Worlds introduced a number of settings to fine tune the map, but the map settings weren't stored with the map. Sea level, wind strength, and average temperature are all easily set keystones with a slider but something like tectonic plate design or island chains is not.

I want this to be a lot closer to what Azgaar does in his map generator, but more step-by-step and intuitive as far as UI goes.

I've spent several evenings designing and writing the code for the different UI components in the launcher, and the style will carry over into the application itself.

Related posts