This is the last step for this first phase of the project. By using the elevation, temperature and rainfall maps the biome map can be generated. This is a really simple process as it just involves matching ranges to specific biomes. The first step is to split the input maps into discrete levels:


  • Ocean
  • Continental Shelf
  • Lakes
  • Flat Lands
  • Hills (“Non-Rocky” rises)
  • Low Mountains (“Rocky”, Peaks below tree line)
  • Medium Mountains (“Rocky”, Peaks above tree line)
  • High Mountains (“Rocky”, Peaks far above tree line)


  • Cool
  • Moderate
  • Warm


  • Arid
  • Semi-Arid
  • Moderate
  • Semi-Wet
  • Wet

Once the maps have been split up into discrete components it is simply a matter of matching them to the biomes based on a set of rules. In the gallery the first image is temperature, then rain/humidity and then the resulting biome.


Notes: In the original temperature generator I used the elevation to reduce the temperature. This proved to be unnecessary as it is just easier to prefix the biome with mountain or hill to specialize it to the elevation. Elevation is not taken directly into account to generate these biome maps. Hill and Mountain are used as modifiers to the biome map.


  1. jice says:

    Hey great reading ! Seems inspired by my posts (which were inspired by someone else too…). I’ll probably backport some of your ideas in my world generator ;)
    Is there some source code available somewhere ?

  2. Slashie says:

    Very interesting to see all the steps which took you here! (I guess the road continues). Looks like my own efforts some years ago, only with much better results :P (Because of all your knowledge on PCG). Will the library be available somewhen, I am interested on using it :)

  3. md says:

    I had bits and pieces of the code lying around since sometime last year when I got stuck and sort of abandoned it. Seeing your posts from a few months ago for The Cave inspired me to get started again. Regarding source code I hope to provide this as a library and cut an initial release in a couple months. The plan is to clean-up and document the code, then create a GUI to play with all the settings before the first release.

  4. Zuglar says:

    I very much like what you’re doing with this, and I have a suggestion. If you graph out the biomes by the temperature and dryness, the boundaries all run along the lines of a small (3×5) grid, since you measure the two variables with so few degrees. Though it probably simplifies things a lot, it seems to leave two or three coordinates where four different biomes meet, which show up on the map – e.g. tundra/taiga/steppe/dry steppe. Have you considered splitting the map up into a few more degrees of temperature and/or dryness, to avoid the strange four-way intersections?

  5. md says:

    I see the effect you describe but I do not think adding more degrees of temperature or dryness will help as there will always be points where a line separating temperature zones intersects a line separating dryness zones, anytime this happens it will create the four way intersection. One thing to keep in mind is that the image is just a way to visualize the data. The actual data at an intersection point might be something that would result in 26% Tundra, 24% Taiga, 25% Steppe, and 25% Dry Steppe. In that case tundra is just chosen for the visualization at this scale. So I think the solution might be to use the continuous data instead of slotting it all into such rigid classifications.

Leave a Reply