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