## Forests Grow - Cryptography, Cartography, and Mapping Text

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'

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
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 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 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 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 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.