World generator using simulation of plates, rain shadow, erosion, etc.
Lands has been recently merged with WorldSynth. We are now working on merging the code, taking the best of the two projects.
Last Lands version: 0.5.3, Last WorldSynth version: 0.12, First WorldEngine version will be 0.18
You can generate worlds data (heighmap, biome, etc.) and images for your own worlds.
# WorldEngine worldengine world -s 1 -n seed1 # Lands 0.5.1 or next lands world -s 1 -n seed1 # Lands 0.5.0 or previous python lands/generator.py world -s 1 -n seed1
Worlds are generated using plate simulations, erosion, rain shadows, Holdridge life zones model and plenty of other phenomenons.
Once a world it can be used for simulation civs evolution (see project civs).
For a generated world is also possible to generate additional maps, for example ancient looking map:
# WorldEngine worldengine ancient_map -w seed1.world # Lands 0.5.1 or next lands ancient_map -w seed1.world # Lands 0.5.0 or previous python lands/generator.py ancient_map -w seed1.world
An experimental (and limited!) GUI is available.
Note: it requires to install QT (available here http://qt-project.org/)
# Currently not yet released on pypi, you may want to still use Lands or WorldSynth # or alternatively download the source pip install worldengine
git clone or download the code # before using worldengine: if you plan to change the code python setup.py develop # before using worldengine: if you want just to install worldengine # on unix-ish system you could have to prepend sudo python setup.py install
If you want to install Worldengine on Windows you can read these instructions.
Executable file is also available under releases, but is currently out of date.
Note: you need also a copy of the worldengine src directory in the same folder as the exe.
The gui is based on QT, so you will need to install them
The program produces a binary format with all the data of the generated world and a set of images. For examples seed 1 produces.
worldengine [options] [world|plates|ancient_map|info]
Note that options were changed in version 0.5.3
|-o DIR||--output-dir=DIR||generate files in DIR default = '.'|
|-n STR||--worldname=STR||set world name to STR|
|-b||--protocol-buffer||save world using protocol buffer format (smaller file)|
|-s N||--seed=N||use SEED to initialize the pseudo-random generation|
|-t STR||--step=STR||use STEP to specify how far to proceed in the world generation process. Valid values are: plates precipitations full|
|-x N||--width=N||WIDTH of the world to be generated|
|-y N||--height=N||HEIGHT of the world to be generated|
|-q N||--number-of-plates=N||number of plates|
|--recursion-limit=N||you need that just if you encounter an error while generating very large maps|
|-v||--verbose||Enable verbose messages|
|--bw||--black-and-white||Draw maps in black and white|
|-r FILE||--rivers=FILE||produce a map of reivers, after the option it expects the name of the file where to generate the map|
|--gs=FILE||--grayscale-heightmap=FILE||produce a grayscale heightmap, after the option it expects the name of the file where to generate the heightmap|
|--ocean_level=N||elevation cut off for sea level (default = 1.0)|
|-w FILE||--worldfile=FILE||WORLD_FILE to be loaded|
|-g FILE||--generatedfile=FILE||name of the GENERATED_FILE|
|-f N||--resize-factor=N||resize factor|
For example these commands:
worldengine world -s 4 -n an_example -p 2048 -q 25 -x 2048 -y 2048
Produce this output
Worldengine - world generator ----------------------- seed : 4 name : seed3 width : 2048 height : 2048 plates resolution : 2048 number of plates : 25 operation : world generation step : full starting (it could take a few minutes) ... ...plates simulated ...elevation noise added ...elevation level calculated ...precipations calculated ...erosion calculated ...humidity calculated ...permeability level calculated Biome obtained: subtropical thorn woodland = 16353 tropical desert = 188 boreal rain forest = 69472 tropical thorn woodland = 19680 subpolar dry tundra = 6316 warm temperate wet forest = 17799 subpolar wet tundra = 24453 subpolar moist tundra = 15104 tropical wet forest = 18441 subpolar rain tundra = 79723 tropical rain forest = 5906 ice = 85254 tropical moist forest = 28871 subtropical rain forest = 14733 boreal moist forest = 24395 boreal wet forest = 35212 subtropical dry forest = 26259 subtropical desert scrub = 3256 subtropical moist forest = 25220 cool temperate desert scrub = 11162 cool temperate steppe = 25604 boreal dry scrub = 13403 tropical dry forest = 22415 tropical very dry forest = 27033 tropical desert scrub = 2473 warm temperate moist forest = 27704 warm temperate desert scrub = 4861 warm temperate rain forest = 10774 cool temperate moist forest = 42770 cool temperate wet forest = 52813 warm temperate dry forest = 29992 ocean = 3314282 cool temperate desert = 2950 subtropical desert = 287 warm temperate desert = 709 cool temperate rain forest = 46844 subtropical wet forest = 18280 boreal desert = 5445 warm temperate thorn scrub = 16175 polar desert = 1693 Producing ouput: * world data saved in './an_example.world' * ocean image generated in './an_example_ocean.png' * precipitation image generated in './an_example_precipitation.png' * temperature image generated in './an_example_temperature.png' * biome image generated in './an_example_biome.png' * elevation image generated in './an_example_elevation.png' ...done
This is the corresponding ancient map
worldengine ancient_map -w an_example.world
The world generation algorithm goes through different phases:
Using virtualenv you can install the dependencies in this way
virtualenv venv source venv/bin/activate pip install -r requirements2.txt
pyvenv venv3 source venv3/bin/activate pip3 install -r requirements3.txt
Please write to us! You can write at f dot tomassetti at gmail dot com Thank you, all the feedback is precious for us!
Libjpeg and libtiff are required by PIL
All contributions, questions, ideas are more than welcome! Feel free to open an issue or write in our google group.
We would like to thank you great people who helped us while working on WorldEngine and the projects from which it was derived:
Evan Sampson contributed the amazing implementation of the Holdridge life zones model and improved a lot the ancient-looking-map, biome, precipitation and temperature generators. Thanks a million!
Ryan contributed the Windows binary version and discussed Lands on Reddit bringing a lot of users. Thanks a million!
stefan-feltmann made Lands depends on pillow instead that on PIL (which is deprecated). This could also help when moving to Python 3. Thanks a million!
Russell Brinkmann helped saving the generation parameters in the generated world (so that we can use it to generate the same world again, for example), improved the command line options and added tracing information (useful for understanding the performance of the various generation steps)
WorldEngine is available under the MIT License. You should find the LICENSE in the root of the project.