Forests Grow is a pet project/mapping toy I have had going on for more than five years and the basic science is pretty much set. Basically, Forests Grow is a concept which creates geographical maps from alphabetic text using a set of geographical constants. I would love any feedback on it, as well as suggestions on how to expand what I already have. Ideas, as always, are appreciated!

(If you want to skip the concept, a general list of helpful comments is listed at the bottom)

Project Concept


The basic mechanics behind Forests Grow have remained unchanged since the time I drafted the first results. I would assign terrain types (forest, mountain, ocean, etc.) to the alphabet and use the cypher to create cryptographic maps. Over time, I have added more features, such as variable terrain types based on latitude. What really made it a viable project, however, was an introduction of geographical constants. They are:

* Oceans Erode
* Mountains Divide
* Rivers Flow
* Forests Grow

Each constant had a series of features which would affect the basic cryptographic map. The exact specifications are up to the designer, however i usually use a 10x10 pixel grid system to generate the cryptographic map. This allows for minor variations (1 pixel), intermediate variations (2 pixels) and large variations (3+ pixels).

To create a map using this concept, there are three basic steps.

1) Determine the size of the map.
This is done by creating a grid with its total squares equal to the total number of letters and spaces in the text you wish to convert. You can arrange this grid in a square or a circle. I usually use squares, but as most numbers have unworkable square roots, circles could allow for greater precision.
2) Lay out the text and cypher.
The most common way I lay out the text is left to right, top to bottom 1 letter per grid. After the text is placed in your square or circle, apply the cypher. I usually use different colors to designate terrain type. Spaces receive no set substitution, and are instead colored according to the largest adjacent terrain (i.e. if a three square group of forest is adjacent to an empty tile as well as a 6 square group of ocean, the square becomes ocean). This allows for larger terrain groups and geographic continuity.
3) Apply the constants
Apply each constant in the order given. Ocean, Mountain, River, Forest. This will affect the tiles according to their placement in proximity with other tiles.


I have also copied a portion of my actual project file and an example image, if you are inclined to try it for yourself. Unfortunately, current mapping is done by hand only. I am working on coding a program to do it automatically, but I believe that a human being can make decisions that would lie outside a computers ability.

An example made with the code below and the phrase 'This is a twentyfive test'
25Test.jpg

Code:
Forests Grow -- Using Geographical Constants to derive geography from variable data

In order to better understand geographical formation, this project will seek to
simulate it using four geographical 'constants' which respond to variable data,
specifically, alphabetical notation.  These four constants are:

 - > Oceans Erode
 - > Mountains Divide
 - > Rivers Flow
 - > Forests Grow

To display these four constants in an earth-like environment, the following 
terrain types will be used.  These types are listed in five main categories
which change according to temperature.

 - > Grassland
 - > Forest
 - > River
 - > Ocean
 - > Mountain

Each grassland terrain will absorb changes from neighboring terrains and will
consequently most often shrink in size.

Each forest terrain will grow into surrounding grassland and mountain terrain.
As a rule, expansion will be 1/5 into grassland terrain and 1/10 into mountain 
terrain.  In heated climates this trend reverses on grassland terrain, creating
an encroaching desert.

Each river terrain will flow to the nearest ocean terrain, utilizing other
nearby river terrains.  This includes diagonal growth.  Any surrounding terrain 
excluding ocean terrain will expand to its banks becoming a part of the river 
terrain.  If ocean terrain borders river terrain in at least one cardinal
direction (if river terrain does not empty into ocean terrain diagonally) the
river terrain becomes a delta.  If the river terrain is surrounded in all
four cardinal directions by ocean tiles it becomes an archipelago.

Each ocean terrain will wear any other terrain it surrounds on at least three
sides.  Additionally, if ocean terrain is adjacent diagonally to another ocean
terrain they will merge resulting in partial erosion of intermediate terrain.  
If any ocean terrain three or fewer tiles in size cannot be connected to a larger 
group, this ocean terrain becomes lake terrain and the erosion trend reverses 
(surrounding terrains encroach on ocean terrain according to regular rules)

Each mountain terrain will narrowly expand to the nearest unconnected mountain 
terrain if a) its current total size is less than three terrain tiles and 
b) the nearest mountain terrain is no further than three tiles distant.  


These processes will be carried out on a variably generated terrain tile map
in the order of their four constants.  The variables and their associated 
terrain types are listed below.



Alphabet Associations:		Regional Changes (use for large maps):							

FIRST - GEOGRAPHY
------------------

A - GRASSLAND				NORTH 1/5 of Grid - 
B - GRASSLAND					GRASSLAND - TUNDRA
C - FOREST					FOREST - PINES
D - RIVER					RIVER - GLACIER
E - OCEAN					OCEAN - ICE-CAP
F - RIVER					MOUNTAIN - UNCHANGED
G - MOUNTAIN	
H - GRASSLAND
I - RIVER				
J - GRASSLAND				NORTH-CENTER 1/5 of Grid - UNCHANGED
K - DESERT
L - OCEAN				
M - OCEAN				CENTER 1/5 Grid -
N - OCEAN					GRASSLAND - DESERT
O - MOUNTAIN					FOREST - JUNGLE
P - RIVER					RIVER - WIDEN
Q - OCEAN					OCEAN - UNCHANGED
R - MOUNTAIN					MOUNTAIN - UNCHANGED
S - FOREST					
T - FOREST
U - OCEAN				
V - GRASSLAND				SOUTH-CENTER 1/5 Grid - UNCHANGED
W - FOREST
X - GRASSLAND
Y - MOUNTAIN				SOUTH 1/5 Grid - See NORTH 1/5
Z - OCEAN


_____________________	
| | | | | | | | | | |
_____________________	} North 1/5
| | | | | | | | | | |
_____________________
| | | | | | | | | | |
_____________________	} North Center 1/5
| | | | | | | | | | |
_____________________
| | | | | | | | | | | 
_____________________   } Center 1/5
| | | | | | | | | | |
_____________________
| | | | | | | | | | |
_____________________   } South Center 1/5
| | | | | | | | | | |
_____________________
| | | | | | | | | | |
_____________________   } South 1/5
| | | | | | | | | | |

Expanding the Concept


For a long time, I have wanted this system to be able to tackle more than just geography. I want to eventually have the concept generate an entire geo-political map. To do this, I will divide the text according to the number of layers of depth I want to add. So far, I am only working on the second layer. This will create two separate, identically sized, maps. Fill the first according to the original concept, then fill the second with the appropriate letters. Over lay this second map over top of the first, and substitute each letter according to the type of terrain it overlaps. This will create a significant amount of complexity and will require some major work. This is a quick sketch of what I have so far:

Code:
SECOND
------------------

A - 
	IF GRASSLAND - build hamlet
	IF FOREST - build retreat
	IF RIVER - build town
	IF OCEAN - build port
	IF MOUNTAIN - build retreat
	IF DESERT - plant oasis
B - 
	IF GRASSLAND - build hamlet
	IF FOREST - build retreat
	IF RIVER - build town
	IF OCEAN - build trade route
	IF MOUNTAIN - build retreat
	IF DESERT - plant oasis
C - 
	IF GRASSLAND - populate with horses
	IF FOREST - populate with elk
	IF RIVER - populate with a variety of fish
	IF OCEAN - populate with whales
	IF MOUNTAIN - populate with goats
	IF DESERT - populate with camels
D - 
	IF GRASSLAND - build road
	IF FOREST _ build path
	IF RIVER - build bridge
	IF OCEAN - build trade route
	IF MOUTAIN - build pass
	IF DESERT - build trade route
E - 	
	IF GRASSLAND - infest with lions
	IF FOREST - infest with wolves
	IF RIVER - infest with sylphs
	IF OCEAN - infest with sharks
	IF MOUNTAIN - infest with giants
	IF DESERT - infest with scorpions
F - 
	IF GRASSLAND - build road
	IF FOREST _ build path
	IF RIVER - build bridge
	IF OCEAN - build trade route
	IF MOUTAIN - build pass
	IF DESERT - build trade route
G - 
	IF GRASSLAND - build fort
	IF FOREST - build outpost
	IF RIVER - build castle
	IF OCEAN - build colony
	IF MOUNTAIN - build outpost
	IF DESERT - build fort
H - 
	IF GRASSLAND - build hamlet
	IF FOREST - build retreat
	IF RIVER - build town
	IF OCEAN - build trade route
	IF MOUNTAIN - build retreat
	IF DESERT - plant oasis
I - 
	IF GRASSLAND - build road
	IF FOREST _ build path
	IF RIVER - build bridge
	IF OCEAN - build trade route
	IF MOUTAIN - build pass
	IF DESERT - build trade route
J - 
	IF GRASSLAND - build hamlet
	IF FOREST - build retreat
	IF RIVER - build town
	IF OCEAN - build trade route
	IF MOUNTAIN - build retreat
	IF DESERT - plant oasis
K - 
	
L -
	IF GRASSLAND - infest with lions
	IF FOREST - infest with wolves
	IF RIVER - infest with sylphs
	IF OCEAN - infest with sharks
	IF MOUNTAIN - infest with giants
	IF DESERT - infest with scorpions
M - 
	IF GRASSLAND - infest with lions
	IF FOREST - infest with wolves
	IF RIVER - infest with sylphs
	IF OCEAN - infest with sharks
	IF MOUNTAIN - infest with giants
	IF DESERT - infest with scorpions
N - 
	IF GRASSLAND - infest with lions
	IF FOREST - infest with wolves
	IF RIVER - infest with sylphs
	IF OCEAN - infest with sharks
	IF MOUNTAIN - infest with giants
	IF DESERT - infest with scorpions
O -
	IF GRASSLAND - build fort
	IF FOREST - build outpost
	IF RIVER - build castle
	IF OCEAN - build colony
	IF MOUNTAIN - build outpost
	IF DESERT - build fort
P -
	IF GRASSLAND - build road
	IF FOREST _ build path
	IF RIVER - build bridge
	IF OCEAN - build trade route
	IF MOUTAIN - build pass
	IF DESERT - build trade route
Q -
R -
	IF GRASSLAND - build fort
	IF FOREST - build outpost
	IF RIVER - build castle
	IF OCEAN - build colony
	IF MOUNTAIN - build outpost
	IF DESERT - build fort
S -
	IF GRASSLAND - populate with horses
	IF FOREST - populate with elk
	IF RIVER - populate with a variety of fish
	IF OCEAN - populate with whales
	IF MOUNTAIN - populate with goats
	IF DESERT - populate with camels
T -
	IF GRASSLAND - populate with horses
	IF FOREST - populate with elk
	IF RIVER - populate with a variety of fish
	IF OCEAN - populate with whales
	IF MOUNTAIN - populate with goats
	IF DESERT - populate with camels
U -
	IF GRASSLAND - infest with lions
	IF FOREST - infest with wolves
	IF RIVER - infest with sylphs
	IF OCEAN - infest with sharks
	IF MOUNTAIN - infest with giants
	IF DESERT - infest with scorpions
V -
	IF GRASSLAND - build hamlet
	IF FOREST - build retreat
	IF RIVER - build town
	IF OCEAN - build trade route
	IF MOUNTAIN - build retreat
	IF DESERT - plant oasis
W -
	IF GRASSLAND - populate with horses
	IF FOREST - populate with elk
	IF RIVER - populate with a variety of fish
	IF OCEAN - populate with whales
	IF MOUNTAIN - populate with goats
	IF DESERT - populate with camels
X -
	IF GRASSLAND - build hamlet
	IF FOREST - build retreat
	IF RIVER - build town
	IF OCEAN - build trade route
	IF MOUNTAIN - build retreat
	IF DESERT - plant oasis
Y -
	IF GRASSLAND - build fort
	IF FOREST - build outpost
	IF RIVER - build castle
	IF OCEAN - build colony
	IF MOUNTAIN - build outpost
	IF DESERT - build fort
Z -
As you can see, several letters will generate exactly the same results categories and some are blank. I have organized them into five basic categories: generate helpful creatures, generate harmful creatures, generate settlements (towns, cities, ports etc), generate military settlements (forts, barracks, castles/bases, etc.), and generate transportation routes. This last might be unnecessary and could be added according to the density and distribution of cities. However, a random transport network could announce the presence of mining, expansion, and battle locations where it branches in an unexpected direction.

In the third layer I plan to include pollution, science/tech, climate changes, and more.


Major Problems/Helpful Comments


There are several major problems with this concept, and several places where it needs diversification.

  1. Better organization of cypher according to letter frequency
    Traditionally, planets are about 75% water, with 33% of the remainder being forest, 25% mountain, 10% arable (grassland), and the final 32% a combination of desert, tundra, and wasteland. The cypher in this project should reflect this and should organize terrain by letter frequency. Also, I would like to be able to put terrains in letters commonly used together, like t and h, s and t etc. For more information, look up 'letter frequency' and 'bigrams' on wikipedia.
  2. Creature/Monster Diversity
    I need some creative geniuses here. What kinds of creatures and monsters inhabit different terrain types and how do they differ according to latitude. For example, a forest terrain might be infested with bears at an average latitude, with wolves in the extreme latitudes and snakes in the central forests of the lower latitudes. I need ocean creatures, river creatures, grassland creatures, swamp monsters, etc. Anything goes, from unicorns to Grolm.
  3. Civilization Constants
    Like the geographical constants of the first stage, I would like some civilization constants to go off of. What will always happen when, say, two settlements are adjacent? Or what will happen when a city is surrounded by monsters or the reverse is true?
  4. Prehistory Ideas
    Any additional ideas on how to generate the first settlements on my generated geography would be helpful. Besides monsters, helpful creatures, settlements, military outposts, and transportation networks, what is there?